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.