This patch fixes PR59586. The segfault is caused by NULL arguments passed to compute_deps by loop_level_carries_dependences. This causes an assignment of NULL values to the no_source parameters of compute_deps. They are passed to subtract_commutative_associative_deps and dereferenced.
However, this NULL arguments are appropriate for the algorithm used in loop_level_carries_dependences. It uses compute_deps for finding RAW, WAR and WAW dependences of all basic blocks in the body of the given loop. Subsequently, it tries to determine presence of these dependences at the given level. Therefore it maps the relation of the dependences to the relation of the corresponding time-stamps and intersects the result with the relation in which all the inputs before the DEPTH occur at the same time as the output, and the input at the DEPTH occurs before output. If the intersection is not empty, some dependences are carried by the DEPTH we currently check and the loop is consequently not parallel. This patch tries to avoid the problem by adding NULL checking of the no_source statements to subtract_commutative_associative_deps. Tested x86_64-unknown-linux-gnu, applying to 4.8.3 and trunk.
ChangeLog_entry
Description: Binary data
patch
Description: Binary data