diff options
Diffstat (limited to 'llvm/tools')
-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 |