[LLVMdev] ARMLoadStoreOptimizer bug

David Meyer pdox at google.com
Sat Feb 4 09:46:05 PST 2012


Evan & llvmdev,

I'm seeing a case where ARM Load/Store optimizer is breaking code. I have
not had any luck trying to come up with a minimal example; it is breaking
in our stage 2 LLVM build.

But here's what I'm seeing in the debug output:

# Before ARMLoadStoreOptimizer:
BB#21: derived from LLVM BB %cond.end
    Live Ins: %LR %R0 %R1 %R7 %R10 %R11
    Predecessors according to CFG: BB#14 BB#18
        STRi12 %R7<kill>, %R1, 0, pred:14, pred:%noreg;
mem:ST4[%first257](tbaa=!"int")
        %R1<def> = ADDri %R1<kill>, 4, pred:14, pred:%noreg, opt:%CPSR<def>
        Bcc <BB#23>, pred:0, pred:%CPSR<kill>
        B <BB#22>
    Successors according to CFG: BB#23 BB#22

# After ARMLoadStoreOptimizer:
BB#21: derived from LLVM BB %cond.end
    Live Ins: %LR %R0 %R1 %R7 %R10 %R11
    Predecessors according to CFG: BB#14 BB#18
        %R1<def> = STR_POST_IMM %R7<kill>, %R1, %noreg, 4, pred:14,
pred:%noreg
        Bcc <BB#23>, pred:0, pred:%CPSR<kill>
        B <BB#22>
    Successors according to CFG: BB#23 BB#22

It appears that the ARM Load/Store optimizer has rolled the ADDri and
STRi12 into the STR_POST_IMM, but has ignored the fact that ADDri sets CPSR
(which is used by the following Bcc), whereas STR_POST_IMM does not set
CPSR.

- pdox
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120204/bf5fc3e7/attachment.html>


More information about the llvm-dev mailing list