[Bug tree-optimization/68576] scev failed for loop auto parallelize
amker.cheng at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Nov 29 14:09:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68576
--- Comment #5 from bin.cheng <amker.cheng at gmail dot com> ---
The type conversion comses from lim, below code:
/* In case this is a stmt that is not unconditionally executed
when the target loop header is executed and the stmt may
invoke undefined integer or pointer overflow rewrite it to
unsigned arithmetic. */
if (is_gimple_assign (stmt)
&& INTEGRAL_TYPE_P (TREE_TYPE (gimple_assign_lhs (stmt)))
&& TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (gimple_assign_lhs (stmt)))
&& arith_code_with_undefined_signed_overflow
(gimple_assign_rhs_code (stmt))
&& (!ALWAYS_EXECUTED_IN (bb)
|| !(ALWAYS_EXECUTED_IN (bb) == level
|| flow_loop_nested_p (ALWAYS_EXECUTED_IN (bb), level))))
gsi_insert_seq_on_edge (e, rewrite_to_defined_overflow (stmt));
Once it's introduced, SCEV can't resolve it but assume possible overflow.
By mannually disabling lim pass, SCEV works as expected and now outer loop can
be parallelized.
More information about the Gcc-bugs
mailing list