[clang] d75bd5e - Revert "[clang-fuzzer] Use new pass manager for optimizing IR"
Arthur Eubanks via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 24 08:57:30 PST 2022
Author: Arthur Eubanks
Date: 2022-11-24T08:57:19-08:00
New Revision: d75bd5e8bb62eddaccc256eef4e10130d6018ec8
URL: https://github.com/llvm/llvm-project/commit/d75bd5e8bb62eddaccc256eef4e10130d6018ec8
DIFF: https://github.com/llvm/llvm-project/commit/d75bd5e8bb62eddaccc256eef4e10130d6018ec8.diff
LOG: Revert "[clang-fuzzer] Use new pass manager for optimizing IR"
This reverts commit a46a746cfa08a72f9e9188451ed5cac2f77d5237.
Breaks bots, e.g. https://lab.llvm.org/buildbot#builders/121/builds/25511.
Added:
Modified:
clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp
Removed:
################################################################################
diff --git a/clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp b/clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp
index 5c9066c148d61..aa38b5e4aa26e 100644
--- a/clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp
+++ b/clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp
@@ -30,28 +30,34 @@
#include "llvm/ExecutionEngine/SectionMemoryManager.h"
#include "llvm/IR/IRPrintingPasses.h"
#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/LegacyPassManager.h"
+#include "llvm/IR/LegacyPassNameParser.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Verifier.h"
-#include "llvm/IRPrinter/IRPrintingPasses.h"
#include "llvm/IRReader/IRReader.h"
#include "llvm/MC/TargetRegistry.h"
-#include "llvm/Passes/OptimizationLevel.h"
-#include "llvm/Passes/PassBuilder.h"
+#include "llvm/Pass.h"
+#include "llvm/PassRegistry.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Target/TargetMachine.h"
+#include "llvm/Transforms/IPO.h"
+#include "llvm/Transforms/IPO/PassManagerBuilder.h"
+#include "llvm/Transforms/Vectorize.h"
using namespace llvm;
+static codegen::RegisterCodeGenFlags CGF;
+
// Define a type for the functions that are compiled and executed
typedef void (*LLVMFunc)(int*, int*, int*, int);
// Helper function to parse command line args and find the optimization level
-static CodeGenOpt::Level
-getOptLevel(const std::vector<const char *> &ExtraArgs) {
+static void getOptLevel(const std::vector<const char *> &ExtraArgs,
+ CodeGenOpt::Level &OLvl) {
// Find the optimization level from the command line args
- CodeGenOpt::Level OLvl = CodeGenOpt::Default;
+ OLvl = CodeGenOpt::Default;
for (auto &A : ExtraArgs) {
if (A[0] == '-' && A[1] == 'O') {
switch(A[2]) {
@@ -65,7 +71,6 @@ getOptLevel(const std::vector<const char *> &ExtraArgs) {
}
}
}
- return OLvl;
}
static void ErrorAndExit(std::string message) {
@@ -75,45 +80,16 @@ static void ErrorAndExit(std::string message) {
// Helper function to add optimization passes to the TargetMachine at the
// specified optimization level, OptLevel
-static void RunOptimizationPasses(raw_ostream &OS, Module &M,
- CodeGenOpt::Level OptLevel) {
- llvm::OptimizationLevel OL;
- switch (OptLevel) {
- case CodeGenOpt::None:
- OL = OptimizationLevel::O0;
- break;
- case CodeGenOpt::Less:
- OL = OptimizationLevel::O1;
- break;
- case CodeGenOpt::Default:
- OL = OptimizationLevel::O2;
- break;
- case CodeGenOpt::Aggressive:
- OL = OptimizationLevel::O3;
- break;
- }
-
- LoopAnalysisManager LAM;
- FunctionAnalysisManager FAM;
- CGSCCAnalysisManager CGAM;
- ModuleAnalysisManager MAM;
-
- PassBuilder PB;
-
- PB.registerModuleAnalyses(MAM);
- PB.registerCGSCCAnalyses(CGAM);
- PB.registerFunctionAnalyses(FAM);
- PB.registerLoopAnalyses(LAM);
- PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);
-
- ModulePassManager MPM;
- if (OL == OptimizationLevel::O0)
- MPM = PB.buildO0DefaultPipeline(OL);
- else
- MPM = PB.buildPerModuleDefaultPipeline(OL);
- MPM.addPass(PrintModulePass(OS));
-
- MPM.run(M, MAM);
+static void AddOptimizationPasses(legacy::PassManagerBase &MPM,
+ CodeGenOpt::Level OptLevel,
+ unsigned SizeLevel) {
+ // Create and initialize a PassManagerBuilder
+ PassManagerBuilder Builder;
+ Builder.OptLevel = OptLevel;
+ Builder.SizeLevel = SizeLevel;
+ Builder.Inliner = createFunctionInliningPass(OptLevel, SizeLevel, false);
+ Builder.LoopVectorize = true;
+ Builder.populateModulePassManager(MPM);
}
// Mimics the opt tool to run an optimization pass over the provided IR
@@ -144,10 +120,24 @@ static std::string OptLLVM(const std::string &IR, CodeGenOpt::Level OLvl) {
codegen::setFunctionAttributes(codegen::getCPUStr(),
codegen::getFeaturesStr(), *M);
+ legacy::PassManager Passes;
+
+ Passes.add(new TargetLibraryInfoWrapperPass(ModuleTriple));
+ 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);
- RunOptimizationPasses(OS, *M, OLvl);
+ Passes.add(createPrintModulePass(OS, "", false));
+
+ Passes.run(*M);
return outString;
}
@@ -226,7 +216,8 @@ void clang_fuzzer::HandleLLVM(const std::string &IR,
memcpy(UnoptArrays, InputArrays, kTotalSize);
// Parse ExtraArgs to set the optimization level
- CodeGenOpt::Level OLvl = getOptLevel(ExtraArgs);
+ CodeGenOpt::Level OLvl;
+ getOptLevel(ExtraArgs, OLvl);
// First we optimize the IR by running a loop vectorizer pass
std::string OptIR = OptLLVM(IR, OLvl);
More information about the cfe-commits
mailing list