<div>Evan & llvmdev,</div><div><br></div><div>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.</div>
<div><br></div><div>But here's what I'm seeing in the debug output:</div><div><br></div><div># Before ARMLoadStoreOptimizer:</div><div>BB#21: derived from LLVM BB %cond.end</div><div><div>    Live Ins: %LR %R0 %R1 %R7 %R10 %R11</div>
<div>    Predecessors according to CFG: BB#14 BB#18</div><div>        STRi12 %R7<kill>, %R1, 0, pred:14, pred:%noreg; mem:ST4[%first257](tbaa=!"int")</div><div>        %R1<def> = ADDri %R1<kill>, 4, pred:14, pred:%noreg, opt:%CPSR<def></div>
<div>        Bcc <BB#23>, pred:0, pred:%CPSR<kill></div><div>        B <BB#22></div><div>    Successors according to CFG: BB#23 BB#22</div></div><div><br></div><div># After ARMLoadStoreOptimizer:</div><div>
BB#21: derived from LLVM BB %cond.end</div><div><div>    Live Ins: %LR %R0 %R1 %R7 %R10 %R11</div><div>    Predecessors according to CFG: BB#14 BB#18</div><div>        %R1<def> = STR_POST_IMM %R7<kill>, %R1, %noreg, 4, pred:14, pred:%noreg</div>
<div>        Bcc <BB#23>, pred:0, pred:%CPSR<kill></div><div>        B <BB#22></div><div>    Successors according to CFG: BB#23 BB#22</div></div><div><br></div><div>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.</div>
<div><br></div><div>- pdox</div>