Re-apply 72756 with fixes. One of those was introduced by we changed MachineInstrBuil...
authorEvan Cheng <evan.cheng@apple.com>
Thu, 4 Jun 2009 01:15:28 +0000 (01:15 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 4 Jun 2009 01:15:28 +0000 (01:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72826 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMLoadStoreOptimizer.cpp
test/CodeGen/ARM/str_pre-2.ll

index 09b8ce07d2227d31aa846f0e32e149d7d0c728ad..9b3b65a026cc10b959ada1f889a0ba28c5bcecd1 100644 (file)
@@ -530,7 +530,7 @@ static bool mergeBaseUpdateLoadStore(MachineBasicBlock &MBB,
     if (isAM2)
       // STR_PRE, STR_POST;
       BuildMI(MBB, MBBI, dl, TII->get(NewOpc), Base)
-        .addReg(MO.getReg(), getKillRegState(BaseKill))
+        .addReg(MO.getReg(), getKillRegState(MO.isKill()))
         .addReg(Base).addReg(0).addImm(Offset).addImm(Pred).addReg(PredReg);
     else
       // FSTMS, FSTMD
@@ -709,6 +709,13 @@ bool ARMLoadStoreOpt::LoadStoreMultipleOpti(MachineBasicBlock &MBB) {
 
         // RS may be pointing to an instruction that's deleted. 
         RS->skipTo(prior(MBBI));
+      } else if (NumMemOps == 1) {
+        // Try folding preceeding/trailing base inc/dec into the single
+        // load/store.
+        if (mergeBaseUpdateLoadStore(MBB, MemOps[0].MBBI, TII, Advance, MBBI)) {
+          ++NumMerges;
+          RS->forward(prior(MBBI));
+        }
       }
 
       CurrBase = 0;
index 247465f33201850eea3cec005c67f10cdc997f88..e9f194574e43eb222c7102196dafb4ac489dd7ef 100644 (file)
@@ -1,6 +1,5 @@
 ; RUN: llvm-as < %s | llc -mtriple=arm-linux-gnu | grep {str.*\\!}
 ; RUN: llvm-as < %s | llc -mtriple=arm-linux-gnu | grep {ldr.*\\\[.*\], #+4}
-; XFAIL: *
 
 @b = external global i64*