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.

Reply via email to