You might be able to rewrite a loop to eliminate data dependencies, making it parallelizable. However, extensive restructuring could be needed.
Some general rules are:
A loop is data independent only if all iterations write to distinct memory locations.
Iterations may read from the same locations as long as no one iteration writes to them.
These are general conditions for parallelization. The compilers’ automatic parallelization analysis considers additional criteria when deciding whether to parallelize a loop. However, you can use directives to explicitly force loops to be parallelized, even loops that contain inhibitors and produce incorrect results.