[Bug tree-optimization/113119] ICE: verify_ssa failed: definition in block 18 does not dominate use in block 4 at -O1 with _BitInt
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Dec 22 21:04:03 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113119
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Without the second redundant __builtin_add_overflow, we get
a.0_1 = a;
_7 = .ADD_OVERFLOW (a.0_1, 0);
_2 = REALPART_EXPR <_7>;
_3 = IMAGPART_EXPR <_7>;
_4 = (_Bool) _3;
c = _4;
_5 = (_BitInt(8)) _2;
b = _5;
before bitint lowering and lower it well, but the redundant call results in
a.0_1 = a;
_7 = .ADD_OVERFLOW (a.0_1, 0);
_2 = IMAGPART_EXPR <_7>;
_3 = (_Bool) _2;
c = _3;
_4 = REALPART_EXPR <_7>;
_5 = (_BitInt(8)) _4;
b = _5;
and optimizable_arith_overflow doesn't flag that as non-optimizable, so
the bitint lowering of .ADD_OVERFLOW happens in that case on the REALPART_EXPR
stmt.
optimizable_arith_overflow checks if both REALPART_EXPR and IMAGPART_EXPR
appear in the same bb (and that there are no other uses), but doesn't check
that REALPART_EXPR is first. Either it should check that or perhaps allow it
first but require that it is not used in statements before the REALPART_EXPR.
More information about the Gcc-bugs
mailing list