Index: COFF/LTO.cpp =================================================================== --- COFF/LTO.cpp +++ COFF/LTO.cpp @@ -60,6 +60,28 @@ C.DisableVerify = true; C.DiagHandler = diagnosticHandler; C.OptLevel = Config->LTOO; + + // Set CGOptLevel + switch (C.OptLevel) { + default: + break; + case 0: + C.CGOptLevel = CodeGenOpt::None; + break; + case 1: + C.CGOptLevel = CodeGenOpt::Less; + break; + case 2: + C.CGOptLevel = CodeGenOpt::Default; + break; + case 3: + C.CGOptLevel = CodeGenOpt::Aggressive; + break; + } + + // Add -mattr options + C.MAttrs = GetMAttrs(); + if (Config->SaveTemps) checkError(C.addSaveTemps(std::string(Config->OutputFile) + ".", /*UseInputModulePath*/ true)); Index: Common/TargetOptionsCommandFlags.cpp =================================================================== --- Common/TargetOptionsCommandFlags.cpp +++ Common/TargetOptionsCommandFlags.cpp @@ -32,3 +32,11 @@ } std::string lld::GetCPUStr() { return ::getCPUStr(); } + +std::vector lld::GetMAttrs(){ + std::vector Attrs; + for (std::string &Attr : MAttrs) + Attrs.push_back(Attr); + return Attrs; +} + Index: ELF/LTO.cpp =================================================================== --- ELF/LTO.cpp +++ ELF/LTO.cpp @@ -89,6 +89,27 @@ C.OptLevel = Config->LTOO; C.CPU = GetCPUStr(); + // Set CGOptLevel + switch (C.OptLevel) { + default: + break; + case 0: + C.CGOptLevel = CodeGenOpt::None; + break; + case 1: + C.CGOptLevel = CodeGenOpt::Less; + break; + case 2: + C.CGOptLevel = CodeGenOpt::Default; + break; + case 3: + C.CGOptLevel = CodeGenOpt::Aggressive; + break; + } + + // Add -mattr options + C.MAttrs = GetMAttrs(); + // Set up a custom pipeline if we've been asked to. C.OptPipeline = Config->LTONewPmPasses; C.AAPipeline = Config->LTOAAPipeline; Index: include/lld/Common/TargetOptionsCommandFlags.h =================================================================== --- include/lld/Common/TargetOptionsCommandFlags.h +++ include/lld/Common/TargetOptionsCommandFlags.h @@ -19,4 +19,5 @@ llvm::TargetOptions InitTargetOptionsFromCodeGenFlags(); llvm::Optional GetCodeModelFromCMModel(); std::string GetCPUStr(); +std::vector GetMAttrs(); } Index: wasm/LTO.cpp =================================================================== --- wasm/LTO.cpp +++ wasm/LTO.cpp @@ -56,6 +56,27 @@ C.DiagHandler = diagnosticHandler; C.OptLevel = Config->LTOO; + // Set CGOptLevel + switch (C.OptLevel) { + default: + break; + case 0: + C.CGOptLevel = CodeGenOpt::None; + break; + case 1: + C.CGOptLevel = CodeGenOpt::Less; + break; + case 2: + C.CGOptLevel = CodeGenOpt::Default; + break; + case 3: + C.CGOptLevel = CodeGenOpt::Aggressive; + break; + } + + // Add -mattr options + C.MAttrs = GetMAttrs(); + if (Config->SaveTemps) checkError(C.addSaveTemps(Config->OutputFile.str() + ".", /*UseInputModulePath*/ true));