diff options
Diffstat (limited to 'test/Transforms/MergeFunc')
-rw-r--r-- | test/Transforms/MergeFunc/dg.exp | 3 | ||||
-rw-r--r-- | test/Transforms/MergeFunc/fold-weak.ll | 13 | ||||
-rw-r--r-- | test/Transforms/MergeFunc/phi-speculation1.ll | 29 | ||||
-rw-r--r-- | test/Transforms/MergeFunc/phi-speculation2.ll | 29 |
4 files changed, 74 insertions, 0 deletions
diff --git a/test/Transforms/MergeFunc/dg.exp b/test/Transforms/MergeFunc/dg.exp new file mode 100644 index 0000000..f200589 --- /dev/null +++ b/test/Transforms/MergeFunc/dg.exp @@ -0,0 +1,3 @@ +load_lib llvm.exp + +RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] diff --git a/test/Transforms/MergeFunc/fold-weak.ll b/test/Transforms/MergeFunc/fold-weak.ll new file mode 100644 index 0000000..e124731 --- /dev/null +++ b/test/Transforms/MergeFunc/fold-weak.ll @@ -0,0 +1,13 @@ +; RUN: opt < %s -mergefunc -S > %t +; RUN: grep {define weak} %t | count 2 +; RUN: grep {call} %t | count 2 + +define weak i32 @sum(i32 %x, i32 %y) { + %sum = add i32 %x, %y + ret i32 %sum +} + +define weak i32 @add(i32 %x, i32 %y) { + %sum = add i32 %x, %y + ret i32 %sum +} diff --git a/test/Transforms/MergeFunc/phi-speculation1.ll b/test/Transforms/MergeFunc/phi-speculation1.ll new file mode 100644 index 0000000..7b2a2fe --- /dev/null +++ b/test/Transforms/MergeFunc/phi-speculation1.ll @@ -0,0 +1,29 @@ +; RUN: opt < %s -mergefunc -stats -disable-output |& not grep {functions merged} + +define i32 @foo1(i32 %x) { +entry: + %A = add i32 %x, 1 + %B = call i32 @foo1(i32 %A) + br label %loop +loop: + %C = phi i32 [%B, %entry], [%D, %loop] + %D = add i32 %x, 2 + %E = icmp ugt i32 %D, 10000 + br i1 %E, label %loopexit, label %loop +loopexit: + ret i32 %D +} + +define i32 @foo2(i32 %x) { +entry: + %0 = add i32 %x, 1 + %1 = call i32 @foo2(i32 %0) + br label %loop +loop: + %2 = phi i32 [%1, %entry], [%3, %loop] + %3 = add i32 %2, 2 + %4 = icmp ugt i32 %3, 10000 + br i1 %4, label %loopexit, label %loop +loopexit: + ret i32 %3 +} diff --git a/test/Transforms/MergeFunc/phi-speculation2.ll b/test/Transforms/MergeFunc/phi-speculation2.ll new file mode 100644 index 0000000..f080191 --- /dev/null +++ b/test/Transforms/MergeFunc/phi-speculation2.ll @@ -0,0 +1,29 @@ +; RUN: opt < %s -mergefunc -stats -disable-output |& grep {functions merged} + +define i32 @foo1(i32 %x) { +entry: + %A = add i32 %x, 1 + %B = call i32 @foo1(i32 %A) + br label %loop +loop: + %C = phi i32 [%B, %entry], [%D, %loop] + %D = add i32 %C, 2 + %E = icmp ugt i32 %D, 10000 + br i1 %E, label %loopexit, label %loop +loopexit: + ret i32 %D +} + +define i32 @foo2(i32 %x) { +entry: + %0 = add i32 %x, 1 + %1 = call i32 @foo2(i32 %0) + br label %loop +loop: + %2 = phi i32 [%1, %entry], [%3, %loop] + %3 = add i32 %2, 2 + %4 = icmp ugt i32 %3, 10000 + br i1 %4, label %loopexit, label %loop +loopexit: + ret i32 %3 +} |