OLD | NEW |
1 //===-- ARMTargetMachine.cpp - Define TargetMachine for ARM ---------------===// | 1 //===-- ARMTargetMachine.cpp - Define TargetMachine for ARM ---------------===// |
2 // | 2 // |
3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // | 10 // |
11 //===----------------------------------------------------------------------===// | 11 //===----------------------------------------------------------------------===// |
12 | 12 |
13 #include "ARMTargetMachine.h" | 13 #include "ARMTargetMachine.h" |
14 #include "ARM.h" | 14 #include "ARM.h" |
15 #include "ARMFrameLowering.h" | 15 #include "ARMFrameLowering.h" |
16 #include "llvm/CodeGen/Passes.h" | 16 #include "llvm/CodeGen/Passes.h" |
17 #include "llvm/MC/MCAsmInfo.h" | 17 #include "llvm/MC/MCAsmInfo.h" |
18 #include "llvm/PassManager.h" | 18 #include "llvm/PassManager.h" |
19 #include "llvm/Support/CommandLine.h" | 19 #include "llvm/Support/CommandLine.h" |
20 #include "llvm/Support/FormattedStream.h" | 20 #include "llvm/Support/FormattedStream.h" |
21 #include "llvm/Support/TargetRegistry.h" | 21 #include "llvm/Support/TargetRegistry.h" |
22 #include "llvm/Target/TargetOptions.h" | 22 #include "llvm/Target/TargetOptions.h" |
| 23 // @LOCALMOD-START |
| 24 #include "llvm/Transforms/NaCl.h" |
| 25 // @LOCALMOD-END |
23 #include "llvm/Transforms/Scalar.h" | 26 #include "llvm/Transforms/Scalar.h" |
24 using namespace llvm; | 27 using namespace llvm; |
25 | 28 |
26 static cl::opt<bool> | 29 static cl::opt<bool> |
27 EnableGlobalMerge("global-merge", cl::Hidden, | 30 EnableGlobalMerge("global-merge", cl::Hidden, |
28 cl::desc("Enable global merge pass"), | 31 cl::desc("Enable global merge pass"), |
29 cl::init(true)); | 32 cl::init(true)); |
30 | 33 |
31 // @LOCALMOD-START | 34 // @LOCALMOD-START |
32 namespace llvm { | 35 namespace llvm { |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 | 137 |
135 const ARMSubtarget &getARMSubtarget() const { | 138 const ARMSubtarget &getARMSubtarget() const { |
136 return *getARMTargetMachine().getSubtargetImpl(); | 139 return *getARMTargetMachine().getSubtargetImpl(); |
137 } | 140 } |
138 | 141 |
139 virtual bool addPreISel(); | 142 virtual bool addPreISel(); |
140 virtual bool addInstSelector(); | 143 virtual bool addInstSelector(); |
141 virtual bool addPreRegAlloc(); | 144 virtual bool addPreRegAlloc(); |
142 virtual bool addPreSched2(); | 145 virtual bool addPreSched2(); |
143 virtual bool addPreEmitPass(); | 146 virtual bool addPreEmitPass(); |
| 147 // @LOCALMOD-START |
| 148 virtual void addIRPasses(); |
| 149 // @LOCALMOD-END |
144 }; | 150 }; |
145 } // namespace | 151 } // namespace |
146 | 152 |
147 TargetPassConfig *ARMBaseTargetMachine::createPassConfig(PassManagerBase &PM) { | 153 TargetPassConfig *ARMBaseTargetMachine::createPassConfig(PassManagerBase &PM) { |
148 return new ARMPassConfig(this, PM); | 154 return new ARMPassConfig(this, PM); |
149 } | 155 } |
150 | 156 |
151 bool ARMPassConfig::addPreISel() { | 157 bool ARMPassConfig::addPreISel() { |
152 if (TM->getOptLevel() != CodeGenOpt::None && EnableGlobalMerge) | 158 if (TM->getOptLevel() != CodeGenOpt::None && EnableGlobalMerge) |
153 addPass(createGlobalMergePass(TM->getTargetLowering())); | 159 addPass(createGlobalMergePass(TM->getTargetLowering())); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 // @LOCALMOD-START | 228 // @LOCALMOD-START |
223 // This pass does all the heavy sfi lifting. | 229 // This pass does all the heavy sfi lifting. |
224 if (getARMSubtarget().isTargetNaCl()) { | 230 if (getARMSubtarget().isTargetNaCl()) { |
225 addPass(createARMNaClRewritePass()); | 231 addPass(createARMNaClRewritePass()); |
226 } | 232 } |
227 // @LOCALMOD-END | 233 // @LOCALMOD-END |
228 | 234 |
229 return true; | 235 return true; |
230 } | 236 } |
231 | 237 |
| 238 // @LOCALMOD-START |
| 239 void ARMPassConfig::addIRPasses() { |
| 240 if (getARMSubtarget().isTargetNaCl()) { |
| 241 addPass(createInsertDivideCheckPass()); |
| 242 } |
| 243 TargetPassConfig::addIRPasses(); |
| 244 } |
| 245 // @LOCALMOD-END |
| 246 |
232 bool ARMBaseTargetMachine::addCodeEmitter(PassManagerBase &PM, | 247 bool ARMBaseTargetMachine::addCodeEmitter(PassManagerBase &PM, |
233 JITCodeEmitter &JCE) { | 248 JITCodeEmitter &JCE) { |
234 // Machine code emitter pass for ARM. | 249 // Machine code emitter pass for ARM. |
235 PM.add(createARMJITCodeEmitterPass(*this, JCE)); | 250 PM.add(createARMJITCodeEmitterPass(*this, JCE)); |
236 return false; | 251 return false; |
237 } | 252 } |
OLD | NEW |