Added Delta IR Reduction Tool
Summary: Tool parses input IR file, and runs the delta debugging algorithm to reduce the functions inside the input file.
Reviewers: alexshap, chandlerc
Subscribers: mgorny, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D63672
> llvm-svn: 368071
llvm-svn: 368358
diff --git a/llvm/test/Reduce/Inputs/remove-funcs.py b/llvm/test/Reduce/Inputs/remove-funcs.py
new file mode 100755
index 0000000..dc0203c
--- /dev/null
+++ b/llvm/test/Reduce/Inputs/remove-funcs.py
@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+
+import sys
+
+input = open(sys.argv[1], "r")
+for line in input:
+ if "@interesting" in line:
+ sys.exit(0)
+
+sys.exit(1) # IR isn't interesting
diff --git a/llvm/test/Reduce/remove-funcs.ll b/llvm/test/Reduce/remove-funcs.ll
new file mode 100644
index 0000000..7d6fba8
--- /dev/null
+++ b/llvm/test/Reduce/remove-funcs.ll
@@ -0,0 +1,34 @@
+; Test that llvm-reduce can remove uninteresting functions as well as
+; their InstCalls.
+;
+; RUN: llvm-reduce --test %p/Inputs/remove-funcs.py %s
+; RUN: cat reduced.ll | FileCheck %s
+; REQUIRES: plugins, shell
+
+; CHECK-NOT: uninteresting1()
+define i32 @uninteresting1() {
+entry:
+ ret i32 0
+}
+
+; CHECK: interesting()
+define i32 @interesting() {
+entry:
+ ; CHECK: call i32 @interesting()
+ %call2 = call i32 @interesting()
+ ; CHECK-NOT: call i32 @uninteresting1()
+ %call = call i32 @uninteresting1()
+ ret i32 5
+}
+
+; CHECK-NOT: uninteresting2()
+define i32 @uninteresting2() {
+entry:
+ ret i32 0
+}
+
+; CHECK-NOT: uninteresting3()
+define i32 @uninteresting3() {
+entry:
+ ret i32 10
+}