| Index: lib/Target/ARM/ARMTargetMachine.cpp
|
| diff --git a/lib/Target/ARM/ARMTargetMachine.cpp b/lib/Target/ARM/ARMTargetMachine.cpp
|
| index 88d6c5e7fb9024c6f49ca60a83b07f8b29598283..cd5e1a3786ead10a7e8df827dcd4ba21f09289d8 100644
|
| --- a/lib/Target/ARM/ARMTargetMachine.cpp
|
| +++ b/lib/Target/ARM/ARMTargetMachine.cpp
|
| @@ -22,6 +22,9 @@
|
| #include "llvm/Support/FormattedStream.h"
|
| #include "llvm/Support/TargetRegistry.h"
|
| #include "llvm/Target/TargetOptions.h"
|
| +// @LOCALMOD-START
|
| +#include "llvm/Transforms/NaCl.h"
|
| +// @LOCALMOD-END
|
| #include "llvm/Transforms/Scalar.h"
|
| using namespace llvm;
|
|
|
| @@ -208,6 +211,11 @@ TargetPassConfig *ARMBaseTargetMachine::createPassConfig(PassManagerBase &PM) {
|
| }
|
|
|
| void ARMPassConfig::addIRPasses() {
|
| + // @LOCALMOD-START
|
| + if (getARMSubtarget().isTargetNaCl())
|
| + addPass(createInsertDivideCheckPass());
|
| + // @LOCALMOD-END
|
| +
|
| if (TM->Options.ThreadModel == ThreadModel::Single)
|
| addPass(createLowerAtomicPass());
|
| else
|
| @@ -225,7 +233,17 @@ void ARMPassConfig::addIRPasses() {
|
| }
|
|
|
| bool ARMPassConfig::addPreISel() {
|
| - if (TM->getOptLevel() != CodeGenOpt::None)
|
| + // @LOCALMOD-START
|
| + // We disable the GlobalMerge pass for PNaCl because it causes the
|
| + // PNaCl ABI checker to reject the program when the PNaCl translator
|
| + // is run in streaming mode. This is because GlobalMerge replaces
|
| + // functions' GlobalVariable references with ConstantExprs which the
|
| + // ABI verifier rejects.
|
| + // TODO(mseaborn): Make the ABI checks coexist with GlobalMerge to
|
| + // get back the performance benefits of GlobalMerge.
|
| + if (!getARMSubtarget().isTargetNaCl() &&
|
| + TM->getOptLevel() != CodeGenOpt::None)
|
| + // @LOCALMOD-END
|
| addPass(createGlobalMergePass(TM));
|
|
|
| return false;
|
| @@ -293,7 +311,18 @@ bool ARMPassConfig::addPreEmitPass() {
|
| }
|
|
|
| addPass(createARMOptimizeBarriersPass());
|
| - addPass(createARMConstantIslandPass());
|
| +
|
| + // @LOCALMOD-START
|
| + if (getARMSubtarget().useConstIslands())
|
| + addPass(createARMConstantIslandPass());
|
| + // @LOCALMOD-END
|
| +
|
| + // @LOCALMOD-START
|
| + // This pass does all the heavy sfi lifting.
|
| + if (getARMSubtarget().isTargetNaCl()) {
|
| + addPass(createARMNaClRewritePass());
|
| + }
|
| + // @LOCALMOD-END
|
|
|
| return true;
|
| }
|
|
|