Enable the Load/Store optimization pass for Thumb1 but make it return immediately...
authorJames Molloy <james.molloy@arm.com>
Fri, 16 May 2014 14:11:38 +0000 (14:11 +0000)
committerJames Molloy <james.molloy@arm.com>
Fri, 16 May 2014 14:11:38 +0000 (14:11 +0000)
Patch by Moritz Roth!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208991 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMLoadStoreOptimizer.cpp
lib/Target/ARM/ARMTargetMachine.cpp

index e642aa61d57425645a4eaafdce41ba4ab864aef2..5b678bd2799753f0f77b9f42041ff989ee1be3fa 100644 (file)
@@ -68,7 +68,7 @@ namespace {
     const ARMSubtarget *STI;
     ARMFunctionInfo *AFI;
     RegScavenger *RS;
-    bool isThumb2;
+    bool isThumb1, isThumb2;
 
     bool runOnMachineFunction(MachineFunction &Fn) override;
 
@@ -1520,6 +1520,10 @@ bool ARMLoadStoreOpt::runOnMachineFunction(MachineFunction &Fn) {
   STI = &TM.getSubtarget<ARMSubtarget>();
   RS = new RegScavenger();
   isThumb2 = AFI->isThumb2Function();
+  isThumb1 = AFI->isThumbFunction() && !isThumb2;
+
+  // Don't do anything in this pass with Thumb1 for now.
+  if (isThumb1) return false;
 
   bool Modified = false;
   for (MachineFunction::iterator MFI = Fn.begin(), E = Fn.end(); MFI != E;
@@ -1581,6 +1585,11 @@ bool ARMPreAllocLoadStoreOpt::runOnMachineFunction(MachineFunction &Fn) {
   MRI = &Fn.getRegInfo();
   MF  = &Fn;
 
+  ARMFunctionInfo *AFI = Fn.getInfo<ARMFunctionInfo>();
+  bool isThumb1 = AFI->isThumbFunction() && !AFI->isThumb2Function();
+  // Don't do anything in this pass with Thumb1 for now.
+  if (isThumb1) return false;
+
   bool Modified = false;
   for (MachineFunction::iterator MFI = Fn.begin(), E = Fn.end(); MFI != E;
        ++MFI)
index 91e22dc16fc70257b7bb9bc43ee9a59f6beedc94..887622705ed2606a1a2a5ac207ea60f43e5a4b13 100644 (file)
@@ -247,8 +247,7 @@ bool ARMPassConfig::addInstSelector() {
 }
 
 bool ARMPassConfig::addPreRegAlloc() {
-  // FIXME: temporarily disabling load / store optimization pass for Thumb1.
-  if (getOptLevel() != CodeGenOpt::None && !getARMSubtarget().isThumb1Only())
+  if (getOptLevel() != CodeGenOpt::None)
     addPass(createARMLoadStoreOptimizationPass(true));
   if (getOptLevel() != CodeGenOpt::None && getARMSubtarget().isCortexA9())
     addPass(createMLxExpansionPass());
@@ -262,12 +261,10 @@ bool ARMPassConfig::addPreRegAlloc() {
 }
 
 bool ARMPassConfig::addPreSched2() {
-  // FIXME: temporarily disabling load / store optimization pass for Thumb1.
   if (getOptLevel() != CodeGenOpt::None) {
-    if (!getARMSubtarget().isThumb1Only()) {
-      addPass(createARMLoadStoreOptimizationPass());
-      printAndVerify("After ARM load / store optimizer");
-    }
+    addPass(createARMLoadStoreOptimizationPass());
+    printAndVerify("After ARM load / store optimizer");
+
     if (getARMSubtarget().hasNEON())
       addPass(createExecutionDependencyFixPass(&ARM::DPRRegClass));
   }