diff options
| author | Emmett Neyman <eneyman@google.com> | 2018-08-09 00:58:23 +0000 |
|---|---|---|
| committer | Emmett Neyman <eneyman@google.com> | 2018-08-09 00:58:23 +0000 |
| commit | a60d168d2253a060753ae208f77203601735a925 (patch) | |
| tree | dbc981ffa40b160b76358284ae1087677094a32b /clang | |
| parent | 4965949fa48e4f37f68c4a3966270365aa67844d (diff) | |
| download | bcm5719-llvm-a60d168d2253a060753ae208f77203601735a925.tar.gz bcm5719-llvm-a60d168d2253a060753ae208f77203601735a925.zip | |
Added another optimization pass to make vectorizing possible
Summary: I noticed that my code wasn't going deep into the loop vectorizer code so added another pass that makes it go further.
Reviewers: morehouse, kcc
Reviewed By: morehouse
Subscribers: cfe-commits, llvm-commits
Differential Revision: https://reviews.llvm.org/D50482
llvm-svn: 339305
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp b/clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp index ff775c1a762..86df06ab8b4 100644 --- a/clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp +++ b/clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp @@ -100,17 +100,29 @@ static std::string OptLLVM(const std::string &IR, CodeGenOpt::Level OLvl) { if (!M || verifyModule(*M, &errs())) ErrorAndExit("Could not parse IR"); + Triple ModuleTriple(M->getTargetTriple()); + const TargetOptions Options = InitTargetOptionsFromCodeGenFlags(); + std::string E; + const Target *TheTarget = TargetRegistry::lookupTarget(MArch, ModuleTriple, E); + TargetMachine *Machine = + TheTarget->createTargetMachine(M->getTargetTriple(), getCPUStr(), + getFeaturesStr(), Options, getRelocModel(), + getCodeModel(), OLvl); + std::unique_ptr<TargetMachine> TM(Machine); setFunctionAttributes(getCPUStr(), getFeaturesStr(), *M); - + legacy::PassManager Passes; - Triple ModuleTriple(M->getTargetTriple()); Passes.add(new TargetLibraryInfoWrapperPass(ModuleTriple)); - Passes.add(createTargetTransformInfoWrapperPass(TargetIRAnalysis())); + Passes.add(createTargetTransformInfoWrapperPass(TM->getTargetIRAnalysis())); + + LLVMTargetMachine <M = static_cast<LLVMTargetMachine &>(*TM); + Passes.add(LTM.createPassConfig(Passes)); + Passes.add(createVerifierPass()); AddOptimizationPasses(Passes, OLvl, 0); - + // Add a pass that writes the optimized IR to an output stream std::string outString; raw_string_ostream OS(outString); |

