[llvm] r216523 - InstCombine: Optimize GEP's involving ptrtointbetter

Renato Golin renato.golin at linaro.org
Thu Aug 28 15:44:00 PDT 2014

So, the problem is indeed the transformation, as it changes:

   0x0002d6c8 <+276>: mov r4, r7
   0x0002d6cc <+280>: ldr r0, [r4, #4]
   0x0002d6d0 <+284>: ldr r1, [r8]
   0x0002d6d4 <+288>: rsb r0, r0, #0
   0x0002d6d8 <+292>: asr r0, r0, r6
   0x0002d6dc <+296>: ldr r0, [r1, r0, lsl #2]
   0x0002d6e0 <+300>: ldr r1, [r5]
   0x0002d6e4 <+304>: ldr r0, [r0]


   0x0002d61c <+264>: mov r4, r5
   0x0002d620 <+268>: ldr r0, [r4, #4]
   0x0002d624 <+272>: ldr r1, [r8]
   0x0002d628 <+276>: ldr r0, [r1, -r0]
   0x0002d62c <+280>: ldr r1, [r7]
   0x0002d630 <+284>: ldr r0, [r0]

Note the -r0 versus (^r0>>r6)<<2, only that r0 is already negative
when it gets to the load with offset. That's from the line:

  fputs(S->name, stdout)

with r0 as S->name, and r0 being 0x0 at the final load.

Given that this transformation has also broken MIPS bots, I think we
should revert it for now until better investigations are done.


More information about the llvm-commits mailing list