diff --git a/llvm/lib/Target/ARM/ARMBlockPlacement.cpp b/llvm/lib/Target/ARM/ARMBlockPlacement.cpp --- a/llvm/lib/Target/ARM/ARMBlockPlacement.cpp +++ b/llvm/lib/Target/ARM/ARMBlockPlacement.cpp @@ -58,6 +58,8 @@ false) bool ARMBlockPlacement::runOnMachineFunction(MachineFunction &MF) { + if (skipFunction(MF.getFunction())) + return false; const ARMSubtarget &ST = static_cast(MF.getSubtarget()); if (!ST.hasLOB()) return false; diff --git a/llvm/lib/Target/ARM/ARMTargetMachine.cpp b/llvm/lib/Target/ARM/ARMTargetMachine.cpp --- a/llvm/lib/Target/ARM/ARMTargetMachine.cpp +++ b/llvm/lib/Target/ARM/ARMTargetMachine.cpp @@ -553,11 +553,11 @@ return MF.getSubtarget().isThumb2(); })); - addPass(createARMBlockPlacementPass()); - - // Don't optimize barriers at -O0. - if (getOptLevel() != CodeGenOpt::None) + // Don't optimize barriers or block placement at -O0. + if (getOptLevel() != CodeGenOpt::None) { + addPass(createARMBlockPlacementPass()); addPass(createARMOptimizeBarriersPass()); + } } void ARMPassConfig::addPreEmitPass2() {