[ARM] ARMLoadStoreOpt::UpdateBaseRegUses should stop on def
authorJohn Brawn <john.brawn@arm.com>
Tue, 23 Jun 2015 16:02:11 +0000 (16:02 +0000)
committerJohn Brawn <john.brawn@arm.com>
Tue, 23 Jun 2015 16:02:11 +0000 (16:02 +0000)
When UpdateBaseRegUses sees an instruction that defines the base
register it must stop, as the base register value it is updating is no
longer live. Ideally we would already have seen the register be killed
(which is already checked for), but the kill flags may be inaccurate
and we have to account for this.

Differential Revision: http://reviews.llvm.org/D10566

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

lib/Target/ARM/ARMLoadStoreOptimizer.cpp

index 46ff326ba630c807c8f6ef6caf3b05bd2a981956..5a0d7bfb77f6b993754d75ec814838c9dac088f6 100644 (file)
@@ -444,7 +444,7 @@ ARMLoadStoreOpt::UpdateBaseRegUses(MachineBasicBlock &MBB,
       return;
     }
 
-    if (MBBI->killsRegister(Base))
+    if (MBBI->killsRegister(Base) || MBBI->definesRegister(Base))
       // Register got killed. Stop updating.
       return;
   }