https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99648
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to seurer from comment #4) > Which RTL do you want to see? So with a cross .expand shows we expand from MEM <unsigned long long> [(char * {ref-all})&d] = 4702111234474983680; MEM <unsigned char[8]> [(char * {ref-all})&s] = MEM <unsigned char[8]> [(char * {ref-all})&d]; _1 = __builtin_strcmp (&s, "AAAAAAA"); if (_1 != 0) doing ;; MEM <unsigned long long> [(char * {ref-all})&d] = 4702111234474983680; (insn 5 4 6 (set (reg:SI 121) (high:SI (symbol_ref:SI ("*.LANCHOR0") [flags 0x182]))) "pr71522.c":20:3 -1 (nil)) (insn 6 5 7 (set (reg/f:SI 120) (lo_sum:SI (reg:SI 121) (symbol_ref:SI ("*.LANCHOR0") [flags 0x182]))) "pr71522.c":20:3 -1 (expr_list:REG_EQUAL (symbol_ref:SI ("*.LANCHOR0") [flags 0x182]) (nil))) (insn 7 6 0 (set (reg/v:DF 118 [ d ]) (mem/u/c:DF (reg/f:SI 120) [0 S8 A64])) "pr71522.c":20:3 -1 (expr_list:REG_EQUAL (const_double:DF 2.26163450980389118194580078125e+6 [0x0.8a0a0a0a0a08p+22]) (nil))) ;; MEM <unsigned char[8]> [(char * {ref-all})&s] = MEM <unsigned char[8]> [(char * {ref-all})&d]; (insn 8 7 0 (set (mem/c:DI (reg/f:SI 112 virtual-stack-vars) [0 MEM <unsigned char[8]> [(char * {ref-all})&s]+0 S8 A64]) (subreg:DI (reg/v:DF 118 [ d ]) 0)) "pr71522.c":21:3 -1 (nil)) that looks OK, but then the assembly I get is main: .LFB0: stwu 1,-32(1) .LCFI0: mflr 0 stw 0,36(1) .LCFI1: lis 9,.LANCHOR0@ha la 4,.LANCHOR0@l(9) lwz 10,0(4) lwz 11,4(4) stw 10,8(1) stw 11,12(1) addi 4,4,8 addi 3,1,8 bl strcmp so no signs of 'lfd'. How do you configure? What subtarget do you use? Problematic in the above IL might be the reg-equal note.