summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorEmmett Neyman <eneyman@google.com>2018-08-09 00:58:23 +0000
committerEmmett Neyman <eneyman@google.com>2018-08-09 00:58:23 +0000
commita60d168d2253a060753ae208f77203601735a925 (patch)
treedbc981ffa40b160b76358284ae1087677094a32b /clang
parent4965949fa48e4f37f68c4a3966270365aa67844d (diff)
downloadbcm5719-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.cpp20
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 &LTM = 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);
OpenPOWER on IntegriCloud