aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/ARM/A15SDOptimizer.cpp
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2015-03-05 00:23:40 +0000
committerEric Christopher <echristo@gmail.com>2015-03-05 00:23:40 +0000
commit63b44882ef8704f531c97a56e6895a400c85474c (patch)
tree3db2fbc7992a981beecbecbb4abb6b405969ee2d /llvm/lib/Target/ARM/A15SDOptimizer.cpp
parent49e38965dc3424859429ee1ae043dab44cd849f5 (diff)
downloadllvm-63b44882ef8704f531c97a56e6895a400c85474c.zip
llvm-63b44882ef8704f531c97a56e6895a400c85474c.tar.gz
llvm-63b44882ef8704f531c97a56e6895a400c85474c.tar.bz2
Cleanup and remove a chunk of getARMSubtarget calls in the
ARM TargetMachine pass pipeline construction by pushing them down into the appropriate pass. llvm-svn: 231323
Diffstat (limited to 'llvm/lib/Target/ARM/A15SDOptimizer.cpp')
-rw-r--r--llvm/lib/Target/ARM/A15SDOptimizer.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Target/ARM/A15SDOptimizer.cpp b/llvm/lib/Target/ARM/A15SDOptimizer.cpp
index 387f1f6..6afd573 100644
--- a/llvm/lib/Target/ARM/A15SDOptimizer.cpp
+++ b/llvm/lib/Target/ARM/A15SDOptimizer.cpp
@@ -27,7 +27,9 @@
#include "ARM.h"
#include "ARMBaseInstrInfo.h"
#include "ARMBaseRegisterInfo.h"
+#include "ARMSubtarget.h"
#include "llvm/ADT/Statistic.h"
+#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
@@ -678,8 +680,13 @@ bool A15SDOptimizer::runOnInstruction(MachineInstr *MI) {
}
bool A15SDOptimizer::runOnMachineFunction(MachineFunction &Fn) {
- TII = static_cast<const ARMBaseInstrInfo *>(Fn.getSubtarget().getInstrInfo());
- TRI = Fn.getSubtarget().getRegisterInfo();
+ const ARMSubtarget &STI = Fn.getSubtarget<ARMSubtarget>();
+ // Since the A15SDOptimizer pass can insert VDUP instructions, it can only be
+ // enabled when NEON is available.
+ if (!(STI.isCortexA15() && STI.hasNEON()))
+ return false;
+ TII = STI.getInstrInfo();
+ TRI = STI.getRegisterInfo();
MRI = &Fn.getRegInfo();
bool Modified = false;