diff options
Diffstat (limited to 'contrib/llvm-project/llvm/tools/llc/llc.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/tools/llc/llc.cpp | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/contrib/llvm-project/llvm/tools/llc/llc.cpp b/contrib/llvm-project/llvm/tools/llc/llc.cpp index 574b15b399c3..b35f8e853c30 100644 --- a/contrib/llvm-project/llvm/tools/llc/llc.cpp +++ b/contrib/llvm-project/llvm/tools/llc/llc.cpp @@ -34,6 +34,7 @@ #include "llvm/IR/RemarkStreamer.h" #include "llvm/IR/Verifier.h" #include "llvm/IRReader/IRReader.h" +#include "llvm/InitializePasses.h" #include "llvm/MC/SubtargetFeature.h" #include "llvm/Pass.h" #include "llvm/Support/CommandLine.h" @@ -202,7 +203,7 @@ static std::unique_ptr<ToolOutputFile> GetOutputStream(const char *TargetName, OutputFilename = IFN; switch (FileType) { - case TargetMachine::CGFT_AssemblyFile: + case CGFT_AssemblyFile: if (TargetName[0] == 'c') { if (TargetName[1] == 0) OutputFilename += ".cbe.c"; @@ -213,13 +214,13 @@ static std::unique_ptr<ToolOutputFile> GetOutputStream(const char *TargetName, } else OutputFilename += ".s"; break; - case TargetMachine::CGFT_ObjectFile: + case CGFT_ObjectFile: if (OS == Triple::Win32) OutputFilename += ".obj"; else OutputFilename += ".o"; break; - case TargetMachine::CGFT_Null: + case CGFT_Null: OutputFilename += ".null"; break; } @@ -229,10 +230,10 @@ static std::unique_ptr<ToolOutputFile> GetOutputStream(const char *TargetName, // Decide if we need "binary" output. bool Binary = false; switch (FileType) { - case TargetMachine::CGFT_AssemblyFile: + case CGFT_AssemblyFile: break; - case TargetMachine::CGFT_ObjectFile: - case TargetMachine::CGFT_Null: + case CGFT_ObjectFile: + case CGFT_Null: Binary = true; break; } @@ -394,6 +395,12 @@ static int compileModule(char **argv, LLVMContext &Context) { std::unique_ptr<Module> M; std::unique_ptr<MIRParser> MIR; Triple TheTriple; + std::string CPUStr = getCPUStr(), FeaturesStr = getFeaturesStr(); + + // Set attributes on functions as loaded from MIR from command line arguments. + auto setMIRFunctionAttributes = [&CPUStr, &FeaturesStr](Function &F) { + setFunctionAttributes(CPUStr, FeaturesStr, F); + }; bool SkipModule = MCPU == "help" || (!MAttrs.empty() && MAttrs.front() == "help"); @@ -402,7 +409,8 @@ static int compileModule(char **argv, LLVMContext &Context) { if (!SkipModule) { if (InputLanguage == "mir" || (InputLanguage == "" && StringRef(InputFilename).endswith(".mir"))) { - MIR = createMIRParserFromFile(InputFilename, Err, Context); + MIR = createMIRParserFromFile(InputFilename, Err, Context, + setMIRFunctionAttributes); if (MIR) M = MIR->parseIRModule(); } else @@ -432,8 +440,6 @@ static int compileModule(char **argv, LLVMContext &Context) { return 1; } - std::string CPUStr = getCPUStr(), FeaturesStr = getFeaturesStr(); - CodeGenOpt::Level OLvl = CodeGenOpt::Default; switch (OptLevel) { default: @@ -519,7 +525,7 @@ static int compileModule(char **argv, LLVMContext &Context) { setFunctionAttributes(CPUStr, FeaturesStr, *M); if (RelaxAll.getNumOccurrences() > 0 && - FileType != TargetMachine::CGFT_ObjectFile) + FileType != CGFT_ObjectFile) WithColor::warning(errs(), argv[0]) << ": warning: ignoring -mc-relax-all because filetype != obj"; @@ -530,7 +536,7 @@ static int compileModule(char **argv, LLVMContext &Context) { // so we can memcmp the contents in CompileTwice mode SmallVector<char, 0> Buffer; std::unique_ptr<raw_svector_ostream> BOS; - if ((FileType != TargetMachine::CGFT_AssemblyFile && + if ((FileType != CGFT_AssemblyFile && !Out->os().supportsSeeking()) || CompileTwice) { BOS = std::make_unique<raw_svector_ostream>(Buffer); |