diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2023-01-02 08:25:26 -0500 |
---|---|---|
committer | Matt Arsenault <arsenm2@gmail.com> | 2023-01-03 11:02:34 -0500 |
commit | 47e44c0c2ebdbdef9046edbe8422a3dd1bea63da (patch) | |
tree | af75be0be05a53eaf9844af2a841d70e0d3bc8e1 /llvm/tools/llvm-reduce | |
parent | 49caf7012170422afa84868598063818f9344228 (diff) | |
download | llvm-47e44c0c2ebdbdef9046edbe8422a3dd1bea63da.zip llvm-47e44c0c2ebdbdef9046edbe8422a3dd1bea63da.tar.gz llvm-47e44c0c2ebdbdef9046edbe8422a3dd1bea63da.tar.bz2 |
llvm-reduce: Add reduction for function personalities
Fixes second piece of #58815
Diffstat (limited to 'llvm/tools/llvm-reduce')
-rw-r--r-- | llvm/tools/llvm-reduce/DeltaManager.cpp | 1 | ||||
-rw-r--r-- | llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.cpp | 24 | ||||
-rw-r--r-- | llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.h | 1 |
3 files changed, 26 insertions, 0 deletions
diff --git a/llvm/tools/llvm-reduce/DeltaManager.cpp b/llvm/tools/llvm-reduce/DeltaManager.cpp index 537a097..7927de5 100644 --- a/llvm/tools/llvm-reduce/DeltaManager.cpp +++ b/llvm/tools/llvm-reduce/DeltaManager.cpp @@ -79,6 +79,7 @@ static cl::list<std::string> DELTA_PASS("unreachable-basic-blocks", reduceUnreachableBasicBlocksDeltaPass) \ DELTA_PASS("basic-blocks", reduceBasicBlocksDeltaPass) \ DELTA_PASS("simplify-cfg", reduceUsingSimplifyCFGDeltaPass) \ + DELTA_PASS("function-data", reduceFunctionDataDeltaPass) \ DELTA_PASS("global-values", reduceGlobalValuesDeltaPass) \ DELTA_PASS("global-objects", reduceGlobalObjectsDeltaPass) \ DELTA_PASS("global-initializers", reduceGlobalsInitializersDeltaPass) \ diff --git a/llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.cpp b/llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.cpp index 19cda6d..89dcbf4 100644 --- a/llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.cpp +++ b/llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.cpp @@ -15,6 +15,7 @@ #include "Delta.h" #include "Utils.h" #include "llvm/IR/GlobalValue.h" +#include "llvm/IR/Instructions.h" using namespace llvm; @@ -34,3 +35,26 @@ void llvm::reduceFunctionBodiesDeltaPass(TestRunner &Test) { runDeltaPass(Test, extractFunctionBodiesFromModule, "Reducing Function Bodies"); } + +static void reduceFunctionData(Oracle &O, Module &M) { + for (Function &F : M) { + if (F.isDeclaration()) + continue; + + if (F.hasPersonalityFn()) { + if (none_of(F, + [](const BasicBlock &BB) { + return BB.isEHPad() || isa<ResumeInst>(BB.getTerminator()); + }) && + !O.shouldKeep()) { + F.setPersonalityFn(nullptr); + } + } + + // TODO: Handle prefix data and prologue data + } +} + +void llvm::reduceFunctionDataDeltaPass(TestRunner &Test) { + runDeltaPass(Test, reduceFunctionData, "Reducing Function Data"); +} diff --git a/llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.h b/llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.h index 1713dfcf0..ae738fb 100644 --- a/llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.h +++ b/llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.h @@ -18,6 +18,7 @@ namespace llvm { void reduceFunctionBodiesDeltaPass(TestRunner &Test); +void reduceFunctionDataDeltaPass(TestRunner &Test); } // namespace llvm #endif |