summaryrefslogtreecommitdiff
path: root/test/Transforms/SimplifyCFG
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2011-01-28 02:19:21 +0000
committerEvan Cheng <evan.cheng@apple.com>2011-01-28 02:19:21 +0000
commit40f64cb0de40802ddd2f928b62e9564e1e721ff3 (patch)
treee94f9f5d77d86efd85ac2d6f0ad8a3ced55ca5ee /test/Transforms/SimplifyCFG
parentc3a20bab7571ff95525252c379198e67b65d0f1d (diff)
downloadllvm-40f64cb0de40802ddd2f928b62e9564e1e721ff3.tar.gz
llvm-40f64cb0de40802ddd2f928b62e9564e1e721ff3.tar.bz2
llvm-40f64cb0de40802ddd2f928b62e9564e1e721ff3.tar.xz
- Stop simplifycfg from duplicating "ret" instructions into unconditional
branches. PR8575, rdar://5134905, rdar://8911460. - Allow codegen tail duplication to dup small return blocks after register allocation is done. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124462 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/SimplifyCFG')
-rw-r--r--test/Transforms/SimplifyCFG/MagicPointer.ll1
-rw-r--r--test/Transforms/SimplifyCFG/basictest.ll10
-rw-r--r--test/Transforms/SimplifyCFG/switch_create.ll28
-rw-r--r--test/Transforms/SimplifyCFG/switch_formation.dbg.ll14
4 files changed, 38 insertions, 15 deletions
diff --git a/test/Transforms/SimplifyCFG/MagicPointer.ll b/test/Transforms/SimplifyCFG/MagicPointer.ll
index 54e5b14880..93b9a276ea 100644
--- a/test/Transforms/SimplifyCFG/MagicPointer.ll
+++ b/test/Transforms/SimplifyCFG/MagicPointer.ll
@@ -8,7 +8,6 @@
; CHECK: i64 2, label
; CHECK: i64 3, label
; CHECK: i64 4, label
-; CHECK-NOT: br
; CHECK: }
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
diff --git a/test/Transforms/SimplifyCFG/basictest.ll b/test/Transforms/SimplifyCFG/basictest.ll
index b485f6ab05..052e10667d 100644
--- a/test/Transforms/SimplifyCFG/basictest.ll
+++ b/test/Transforms/SimplifyCFG/basictest.ll
@@ -25,16 +25,6 @@ define void @test3(i1 %T) {
}
-define void @test4() {
- br label %return
-return:
- ret void
-; CHECK: @test4
-; CHECK-NEXT: ret void
-}
-@test4g = global i8* blockaddress(@test4, %return)
-
-
; PR5795
define void @test5(i32 %A) {
switch i32 %A, label %return [
diff --git a/test/Transforms/SimplifyCFG/switch_create.ll b/test/Transforms/SimplifyCFG/switch_create.ll
index da7f65a6ca..4e199bc859 100644
--- a/test/Transforms/SimplifyCFG/switch_create.ll
+++ b/test/Transforms/SimplifyCFG/switch_create.ll
@@ -147,7 +147,7 @@ UnifiedReturnBlock: ; preds = %shortcirc_done.4, %shortcirc_next.4
; CHECK: i32 16, label %UnifiedReturnBlock
; CHECK: i32 17, label %UnifiedReturnBlock
; CHECK: i32 18, label %UnifiedReturnBlock
-; CHECK: i32 19, label %switch.edge
+; CHECK: i32 19, label %UnifiedReturnBlock
; CHECK: ]
}
@@ -441,3 +441,29 @@ if.end:
; CHECK-NOT: switch
; CHECK: ret void
}
+
+; PR8675
+; rdar://5134905
+define zeroext i1 @test16(i32 %x) nounwind {
+entry:
+; CHECK: @test16
+; CHECK: switch i32 %x, label %lor.rhs [
+; CHECK: i32 1, label %lor.end
+; CHECK: i32 2, label %lor.end
+; CHECK: i32 3, label %lor.end
+; CHECK: ]
+ %cmp.i = icmp eq i32 %x, 1
+ br i1 %cmp.i, label %lor.end, label %lor.lhs.false
+
+lor.lhs.false:
+ %cmp.i2 = icmp eq i32 %x, 2
+ br i1 %cmp.i2, label %lor.end, label %lor.rhs
+
+lor.rhs:
+ %cmp.i1 = icmp eq i32 %x, 3
+ br label %lor.end
+
+lor.end:
+ %0 = phi i1 [ true, %lor.lhs.false ], [ true, %entry ], [ %cmp.i1, %lor.rhs ]
+ ret i1 %0
+}
diff --git a/test/Transforms/SimplifyCFG/switch_formation.dbg.ll b/test/Transforms/SimplifyCFG/switch_formation.dbg.ll
index f1c820ec43..357ffb60e1 100644
--- a/test/Transforms/SimplifyCFG/switch_formation.dbg.ll
+++ b/test/Transforms/SimplifyCFG/switch_formation.dbg.ll
@@ -1,5 +1,4 @@
-; RUN: opt < %s -simplifycfg -S | not grep br
-
+; RUN: opt < %s -simplifycfg -S | FileCheck %s
%llvm.dbg.anchor.type = type { i32, i32 }
%llvm.dbg.compile_unit.type = type { i32, { }*, i32, i8*, i8*, i8*, i1, i1, i8* }
@@ -13,7 +12,16 @@
declare void @llvm.dbg.stoppoint(i32, i32, { }*) nounwind
-define i1 @_ZN4llvm11SetCondInst7classofEPKNS_11InstructionE({ i32, i32 }* %I) {
+define i1 @t({ i32, i32 }* %I) {
+; CHECK: t
+; CHECK: switch i32 %tmp.2.i, label %shortcirc_next.4 [
+; CHECK: i32 14, label %UnifiedReturnBlock
+; CHECK: i32 15, label %UnifiedReturnBlock
+; CHECK: i32 16, label %UnifiedReturnBlock
+; CHECK: i32 17, label %UnifiedReturnBlock
+; CHECK: i32 18, label %UnifiedReturnBlock
+; CHECK: i32 19, label %UnifiedReturnBlock
+; CHECK: ]
entry:
%tmp.1.i = getelementptr { i32, i32 }* %I, i64 0, i32 1 ; <i32*> [#uses=1]
%tmp.2.i = load i32* %tmp.1.i ; <i32> [#uses=6]