https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103135
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2021-11-09
Ever confirmed|0 |1
CC| |aoliva at gcc dot gnu.org
Target| |x86_64-*-*
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
The issue is likely that we have combined the bit test and the compare:
(note 77 86 78 2 t4.c:4 NOTE_INSN_INLINE_ENTRY)
(note 78 77 87 2 t4.c:6 NOTE_INSN_BEGIN_STMT)
(note 87 78 56 2 (var_location i (nil) [uninit]) NOTE_INSN_VAR_LOCATION)
(insn:TI 56 87 24 2 (set (reg:CCZ 17 flags)
(compare:CCZ (and:QI (reg:QI 4 si [orig:83 val.1_2 ] [83])
(const_int 1 [0x1]))
(const_int 0 [0]))) "t4.c":13:5 502 {*testqi_1_maybe_si}
(nil))
(jump_insn 24 56 25 2 (set (pc)
(if_then_else (eq (reg:CCZ 17 flags)
(const_int 0 [0]))
(label_ref 33)
(pc))) "t4.c":13:5 855 {*jcc}
(expr_list:REG_DEAD (reg:CCZ 17 flags)
(int_list:REG_BR_PROB 536870916 (nil)))
and thus no instruction remains in the inlined instance. For reference, at
GIMPLE we still have
[t4.c:4:12] # DEBUG INLINE_ENTRY isodd
[t4.c:6:2] # DEBUG BEGIN_STMT
[t4.c:6:11] _6 = val.1_2 & 1;
[t4.c:13:6] # DEBUG i => NULL
[t4.c:13:5] if (_6 != 0)
and the assembly is
testb $1, %sil
je .L2
so it's basically "unfortunate" combination of the CC set with the
bit test location. Alex, is there a "feature" we have to capture
this somehow?