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.