diff --git a/driver/cl_options.cpp b/driver/cl_options.cpp index 643b901c..023be21f 100644 --- a/driver/cl_options.cpp +++ b/driver/cl_options.cpp @@ -325,6 +325,10 @@ cl::opt mFloatABI("float-abi", clEnumValN(FloatABI::Hard, "hard", "Hardware floating-point ABI and instructions"), clEnumValEnd)); +cl::opt disableFpElim("disable-fp-elim", + cl::desc("Disable frame pointer elimination optimization"), + cl::init(false)); + static cl::opt asserts("asserts", cl::desc("(*) Enable assertions"), cl::value_desc("bool"), diff --git a/driver/cl_options.h b/driver/cl_options.h index 4cc67c68..d0b84043 100644 --- a/driver/cl_options.h +++ b/driver/cl_options.h @@ -61,6 +61,7 @@ namespace opts { extern cl::opt mTargetTriple; extern cl::opt mRelocModel; extern cl::opt mCodeModel; + extern cl::opt disableFpElim; extern cl::opt mFloatABI; extern cl::opt singleObj; extern cl::opt linkonceTemplates; diff --git a/driver/main.cpp b/driver/main.cpp index ee3d8b12..a240a9e3 100644 --- a/driver/main.cpp +++ b/driver/main.cpp @@ -634,7 +634,7 @@ int main(int argc, char **argv) gTargetMachine = createTargetMachine(mTargetTriple, mArch, mCPU, mAttrs, bitness, mFloatABI, mRelocModel, mCodeModel, codeGenOptLevel(), - global.params.symdebug); + global.params.symdebug || disableFpElim); { llvm::Triple triple = llvm::Triple(gTargetMachine->getTargetTriple()); diff --git a/driver/targetmachine.cpp b/driver/targetmachine.cpp index 4be79b08..650c5558 100644 --- a/driver/targetmachine.cpp +++ b/driver/targetmachine.cpp @@ -262,7 +262,7 @@ llvm::TargetMachine* createTargetMachine( llvm::Reloc::Model relocModel, llvm::CodeModel::Model codeModel, llvm::CodeGenOpt::Level codeGenOptLevel, - bool genDebugInfo) + bool noFramePointerElim) { // Determine target triple. If the user didn't explicitly specify one, use // the one set at LLVM configure time. @@ -362,7 +362,7 @@ llvm::TargetMachine* createTargetMachine( } llvm::TargetOptions targetOptions; - targetOptions.NoFramePointerElim = genDebugInfo; + targetOptions.NoFramePointerElim = noFramePointerElim; switch (floatABI) { diff --git a/driver/targetmachine.h b/driver/targetmachine.h index 83106bb3..e0236d08 100644 --- a/driver/targetmachine.h +++ b/driver/targetmachine.h @@ -54,6 +54,6 @@ llvm::TargetMachine* createTargetMachine( llvm::Reloc::Model relocModel, llvm::CodeModel::Model codeModel, llvm::CodeGenOpt::Level codeGenOptLevel, - bool genDebugInfo); + bool noFramePointerElim); #endif // LDC_DRIVER_TARGET_H diff --git a/tests/d2/dmd-testsuite b/tests/d2/dmd-testsuite index e996666c..ab51931e 160000 --- a/tests/d2/dmd-testsuite +++ b/tests/d2/dmd-testsuite @@ -1 +1 @@ -Subproject commit e996666c8511b473a80a736d2e504259f19041d8 +Subproject commit ab51931e8ded2854717bcde45b3829432de44b72