https://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Known to work| |10.3.1, 12.0 Resolution|--- |FIXED --- Comment #15 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #14) > So the testcase in comment #5 I think the problem is we can't figure out > _messages[err] == ((void *) 0 is false. I think we do fold it, I see <bb 4> [local count: 440234144]: _2 = _messages[err_6(D)]; if (_2 == 0B) goto <bb 3>; [30.00%] else goto <bb 5>; [70.00%] <bb 5> [local count: 1073741824]: # err_5 = PHI <err_6(D)(4), 1(3)> # prephitmp_11 = PHI <_2(4), "unknown error"(3)> _4 = (long int) prephitmp_11; _8 = (int) _4; return _8; and [changed] ANTIC_IN[5] := { err_5 (0005), {array_ref<err_5,0,1>,mem_ref<0B>,addr_expr<&_messages>}@.MEM_7(D) (0003), {nop_expr,_3} (0004), {nop_expr,_4} (0008) } S[5] := { } Created SSA_NAME representative pretmp_9 for expression:{nop_expr,"unknown error"} (0009) ANTIC_OUT[4] := { {nop_expr,"unknown error"} (0009), {nop_expr,pretmp_9} (0010) } so it's folded during antic compute already. Works with GCC 10 as well.