aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-reduce
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2023-01-02 08:25:26 -0500
committerMatt Arsenault <arsenm2@gmail.com>2023-01-03 11:02:34 -0500
commit47e44c0c2ebdbdef9046edbe8422a3dd1bea63da (patch)
treeaf75be0be05a53eaf9844af2a841d70e0d3bc8e1 /llvm/tools/llvm-reduce
parent49caf7012170422afa84868598063818f9344228 (diff)
downloadllvm-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.cpp1
-rw-r--r--llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.cpp24
-rw-r--r--llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.h1
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