https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118623
--- Comment #11 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
283(insn 8 7 9 2 (set (reg:SI 107)
284 (const_int 1 [0x1])) "test.c":3:7 -1
285 (nil))
286(insn 9 8 10 2 (parallel [
287 (set (reg:SI 106 [ e_7 ])
288 (ashift:SI (reg:SI 107)
289 (subreg:QI (reg:SI 105 [ _1 ]) 0)))
290 (clobber (reg:CC 17 flags))
291 ]) "test.c":3:7 -1
292 (nil))
293(insn 10 9 11 2 (parallel [
294 (set (reg:SI 108 [ _9 ])
295 (and:SI (reg:SI 106 [ e_7 ])
296 (reg/v:SI 104 [ g ])))
297 (clobber (reg:CC 17 flags))
298 ]) "test.c":4:9 -1
299 (nil))
300(insn 11 10 12 2 (set (reg:CCZ 17 flags)
301 (compare:CCZ (reg:SI 108 [ _9 ])
302 (const_int 0 [0]))) "test.c":4:6 -1
303 (nil))
304(jump_insn 12 11 13 2 (set (pc)
305 (if_then_else (ne (reg:CCZ 17 flags)
306 (const_int 0 [0]))
307 (label_ref:DI 31)
308 (pc))) "test.c":4:6 1458 {*jcc}
309 (int_list:REG_BR_PROB 524952380 (nil))
310 -> 31)
311;; succ: 5 [48.9% (guessed)] count:524952376 (estimated locally,
freq 0.4889)
312;; 4 [51.1% (guessed)] count:548789448 (estimated locally,
freq 0.5111) (FALLTHRU)
313
314;; basic block 4, loop depth 0, count 548789448 (estimated locally, freq
0.5111), maybe hot
315;; prev block 2, next block 5, flags: (NEW, REACHABLE, RTL, MODIFIED,
VISITED)
316;; pred: 2 [51.1% (guessed)] count:548789448 (estimated locally,
freq 0.5111) (FALLTHRU)
317(note 13 12 14 4 [bb 4] NOTE_INSN_BASIC_BLOCK)
318(insn 14 13 28 4 (parallel [
319 (set (reg:SI 103 [ _14 ])
320 (plus:SI (reg/v:SI 104 [ g ])
321 (const_int 5 [0x5])))
322 (clobber (reg:CC 17 flags))
323 ]) "test.c":12:22 discrim 1 -1
324 (nil))
325(jump_insn 28 14 29 4 (set (pc)
326 (label_ref 15)) -1
327 (nil)
328 -> 15)
329;; succ: 6 [always] count:548789448 (estimated locally, freq 0.5111)
330
331(barrier 29 28 31)
332;; basic block 5, loop depth 0, count 524952376 (estimated locally, freq
0.4889), maybe hot
333;; prev block 4, next block 6, flags: (NEW, REACHABLE, RTL, MODIFIED)
334;; pred: 2 [48.9% (guessed)] count:524952376 (estimated locally,
freq 0.4889)
335(code_label 31 29 30 5 4 (nil) [1 uses])
336(note 30 31 4 5 [bb 5] NOTE_INSN_BASIC_BLOCK)
337(insn 4 30 15 5 (set (reg:SI 103 [ _14 ])
338 (reg/v:SI 104 [ g ])) -1
339 (nil))
340;; succ: 6 [always] count:524952376 (estimated locally, freq 0.4889)
(FALLTHRU)
341
342;; basic block 6, loop depth 0, count 1073741824 (estimated locally, freq
1.0000), maybe hot
343;; prev block 5, next block 7, flags: (NEW, REACHABLE, RTL, MODIFIED,
VISITED)
344;; pred: 5 [always] count:524952376 (estimated locally, freq 0.4889)
(FALLTHRU)
345;; 4 [always] count:548789448 (estimated locally, freq 0.5111)
346(code_label 15 4 16 6 2 (nil) [1 uses])
347(note 16 15 17 6 [bb 6] NOTE_INSN_BASIC_BLOCK)
348(insn 17 16 18 6 (parallel [
It looks it's already incorrect in the expand, if g & e != 0, it jumps to bb 4,
which is from return 0, but when it's equals to 0, it fallthru to return 5
case.