summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/CallSiteSplitting
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/CallSiteSplitting')
-rw-r--r--llvm/test/Transforms/CallSiteSplitting/callsite-instructions-before-call.ll253
-rw-r--r--llvm/test/Transforms/CallSiteSplitting/callsite-no-or-structure.ll139
-rw-r--r--llvm/test/Transforms/CallSiteSplitting/callsite-no-splitting.ll42
-rw-r--r--llvm/test/Transforms/CallSiteSplitting/callsite-split-debug.ll56
-rw-r--r--llvm/test/Transforms/CallSiteSplitting/callsite-split-or-phi.ll588
-rw-r--r--llvm/test/Transforms/CallSiteSplitting/callsite-split-preserve-debug.ll85
-rw-r--r--llvm/test/Transforms/CallSiteSplitting/callsite-split.ll119
-rw-r--r--llvm/test/Transforms/CallSiteSplitting/lpad.ll40
-rw-r--r--llvm/test/Transforms/CallSiteSplitting/musttail.ll104
-rw-r--r--llvm/test/Transforms/CallSiteSplitting/split-loop.ll90
10 files changed, 0 insertions, 1516 deletions
diff --git a/llvm/test/Transforms/CallSiteSplitting/callsite-instructions-before-call.ll b/llvm/test/Transforms/CallSiteSplitting/callsite-instructions-before-call.ll
deleted file mode 100644
index 067022cd38a..00000000000
--- a/llvm/test/Transforms/CallSiteSplitting/callsite-instructions-before-call.ll
+++ /dev/null
@@ -1,253 +0,0 @@
-; RUN: opt -S -callsite-splitting < %s | FileCheck --check-prefix=CHECK %s
-; RUN: opt -S -callsite-splitting -callsite-splitting-duplication-threshold=0 < %s | FileCheck --check-prefix=NODUP %s
-
-; Instructions before a call that will be pushed to its predecessors
-; with uses after the callsite, must be patched up as PHI nodes in
-; the join block.
-define i32* @test_split_branch_phi(i32* %ptrarg, i32 %i) {
-Header:
- %tobool = icmp ne i32* %ptrarg, null
- br i1 %tobool, label %TBB, label %CallSite
-
-TBB: ; preds = %Header
- %arrayidx = getelementptr inbounds i32, i32* %ptrarg, i64 42
- %0 = load i32, i32* %arrayidx, align 4
- %tobool1 = icmp ne i32 %0, 0
- br i1 %tobool1, label %CallSite, label %End
-
-CallSite: ; preds = %TBB, %Header
- %somepointer = getelementptr i32, i32* %ptrarg, i64 18
- call void @bar(i32* %ptrarg, i32 %i)
- br label %End
-
-End: ; preds = %CallSite, %TBB
- %somepointerphi = phi i32* [ %somepointer, %CallSite ], [ null, %TBB ]
- ret i32* %somepointerphi
-}
-; NODUP-LABEL: test_split_branch_phi
-; NODUP-NOT: split
-; CHECK-LABEL: Header.split
-; CHECK: %[[V1:somepointer[0-9]+]] = getelementptr i32, i32* %ptrarg, i64 18
-; CHECK: call void @bar(i32* null, i32 %i)
-; CHECK: br label %CallSite
-; CHECK-LABEL: TBB.split:
-; CHECK: %[[V2:somepointer[0-9]+]] = getelementptr i32, i32* %ptrarg, i64 18
-; CHECK: call void @bar(i32* nonnull %ptrarg, i32 %i)
-; CHECK: br label %CallSite
-; CHECK: CallSite:
-; CHECK: phi i32* [ %[[V1]], %Header.split ], [ %[[V2]], %TBB.split ]
-
-
-define void @split_branch_no_extra_phi(i32* %ptrarg, i32 %i) {
-Header:
- %tobool = icmp ne i32* %ptrarg, null
- br i1 %tobool, label %TBB, label %CallSite
-
-TBB: ; preds = %Header
- %arrayidx = getelementptr inbounds i32, i32* %ptrarg, i64 42
- %0 = load i32, i32* %arrayidx, align 4
- %tobool1 = icmp ne i32 %0, 0
- br i1 %tobool1, label %CallSite, label %End
-
-CallSite: ; preds = %TBB, %Header
- %i.add = add i32 %i, 99
- call void @bar(i32* %ptrarg, i32 %i.add)
- br label %End
-
-End: ; preds = %CallSite, %TBB
- ret void
-}
-; NODUP-LABEL: split_branch_no_extra_phi
-; NODUP-NOT: split
-; CHECK-LABEL: split_branch_no_extra_phi
-; CHECK-LABEL: Header.split
-; CHECK: %[[V1:.+]] = add i32 %i, 99
-; CHECK: call void @bar(i32* null, i32 %[[V1]])
-; CHECK: br label %CallSite
-; CHECK-LABEL: TBB.split:
-; CHECK: %[[V2:.+]] = add i32 %i, 99
-; CHECK: call void @bar(i32* nonnull %ptrarg, i32 %[[V2]])
-; CHECK: br label %CallSite
-; CHECK: CallSite:
-; CHECK-NOT: phi
-
-
-; In this test case, the codesize cost of the instructions before the call to
-; bar() is equal to the default DuplicationThreshold of 5, because calls are
-; more expensive.
-define void @test_no_split_threshold(i32* %ptrarg, i32 %i) {
-Header:
- %tobool = icmp ne i32* %ptrarg, null
- br i1 %tobool, label %TBB, label %CallSite
-
-TBB: ; preds = %Header
- %arrayidx = getelementptr inbounds i32, i32* %ptrarg, i64 42
- %0 = load i32, i32* %arrayidx, align 4
- %tobool1 = icmp ne i32 %0, 0
- br i1 %tobool1, label %CallSite, label %End
-
-CallSite: ; preds = %TBB, %Header
- %i2 = add i32 %i, 10
- call void @bari(i32 %i2)
- call void @bari(i32 %i2)
- call void @bar(i32* %ptrarg, i32 %i2)
- br label %End
-
-End: ; preds = %CallSite, %TBB
- ret void
-}
-; NODUP-LABEL: test_no_split_threshold
-; NODUP-NOT: split
-; CHECK-LABEL: test_no_split_threshold
-; CHECK-NOT: split
-; CHECK-LABEL: CallSite:
-; CHECK: call void @bar(i32* %ptrarg, i32 %i2)
-
-; In this test case, the phi node %l in CallSite should be removed, as after
-; moving the call to the split blocks we can use the values directly.
-define void @test_remove_unused_phi(i32* %ptrarg, i32 %i) {
-Header:
- %l1 = load i32, i32* undef, align 16
- %tobool = icmp ne i32* %ptrarg, null
- br i1 %tobool, label %TBB, label %CallSite
-
-TBB: ; preds = %Header
- %arrayidx = getelementptr inbounds i32, i32* %ptrarg, i64 42
- %0 = load i32, i32* %arrayidx, align 4
- %l2 = load i32, i32* undef, align 16
- %tobool1 = icmp ne i32 %0, 0
- br i1 %tobool1, label %CallSite, label %End
-
-CallSite: ; preds = %TBB, %Header
- %l = phi i32 [ %l1, %Header ], [ %l2, %TBB ]
- call void @bar(i32* %ptrarg, i32 %l)
- br label %End
-
-End: ; preds = %CallSite, %TBB
- ret void
-}
-; NODUP-LABEL: test_remove_unused_phi
-; NODUP-NOT: split
-; CHECK-LABEL: test_remove_unused_phi
-; CHECK-LABEL: Header.split
-; CHECK: call void @bar(i32* null, i32 %l1)
-; CHECK: br label %CallSite
-; CHECK-LABEL: TBB.split:
-; CHECK: call void @bar(i32* nonnull %ptrarg, i32 %l2)
-; CHECK: br label %CallSite
-; CHECK-LABEL: CallSite:
-; CHECK-NOT: phi
-
-; In this test case, we need to insert a new PHI node in TailBB to combine
-; the loads we moved to the predecessors.
-define void @test_add_new_phi(i32* %ptrarg, i32 %i) {
-Header:
- %tobool = icmp ne i32* %ptrarg, null
- br i1 %tobool, label %TBB, label %CallSite
-
-TBB:
- br i1 undef, label %CallSite, label %End
-
-CallSite:
- %arrayidx112 = getelementptr inbounds i32, i32* undef, i64 1
- %0 = load i32, i32* %arrayidx112, align 4
- call void @bar(i32* %ptrarg, i32 %i)
- %sub = sub nsw i32 %0, undef
- br label %End
-
-End: ; preds = %CallSite, %TBB
- ret void
-}
-; NODUP-LABEL: test_add_new_phi
-; NODUP-NOT: split
-; CHECK-LABEL: test_add_new_phi
-; CHECK-LABEL: Header.split
-; CHECK: %[[V1:.+]] = load i32, i32*
-; CHECK: call void @bar(i32* null, i32 %i)
-; CHECK: br label %CallSite
-; CHECK-LABEL: TBB.split:
-; CHECK: %[[V2:.+]] = load i32, i32*
-; CHECK: call void @bar(i32* nonnull %ptrarg, i32 %i)
-; CHECK: br label %CallSite
-; CHECK-LABEL: CallSite:
-; CHECK-NEXT: %[[V3:.+]] = phi i32 [ %[[V1]], %Header.split ], [ %[[V2]], %TBB.split ]
-; CHECK: %sub = sub nsw i32 %[[V3]], undef
-
-define i32 @test_firstnophi(i32* %a, i32 %v) {
-Header:
- %tobool1 = icmp eq i32* %a, null
- br i1 %tobool1, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp eq i32 %v, 1
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %p = phi i32[1,%Header], [2, %TBB]
- store i32 %v, i32* %a
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-; NODUP-LABEL: @test_firstnophi
-; NODUP-NOT: split:
-; CHECK-LABEL: @test_firstnophi
-; CHECK-LABEL: Header.split:
-; CHECK-NEXT: store i32 %v, i32* %a
-; CHECK-NEXT: %[[CALL1:.*]] = call i32 @callee(i32* null, i32 %v, i32 1)
-; CHECK-NEXT: br label %Tail
-; CHECK-LABEL: TBB.split:
-; CHECK-NEXT: store i32 %v, i32* %a
-; CHECK-NEXT: %[[CALL2:.*]] = call i32 @callee(i32* nonnull %a, i32 1, i32 2)
-; CHECK-NEXT br label %Tail
-; CHECK-LABEL: Tail:
-; CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]
-; CHECK: ret i32 %[[MERGED]]
-define i32 @callee(i32* %a, i32 %v, i32 %p) {
- ret i32 0
-}
-
-define void @test_no_remove_used_phi(i32* %ptrarg, i32 %i) {
-Header:
- %l1 = load i32, i32* undef, align 16
- %tobool = icmp ne i32* %ptrarg, null
- br i1 %tobool, label %TBB, label %CallSite
-
-TBB: ; preds = %Header
- %arrayidx = getelementptr inbounds i32, i32* %ptrarg, i64 42
- %0 = load i32, i32* %arrayidx, align 4
- %l2 = load i32, i32* undef, align 16
- %tobool1 = icmp ne i32 %0, 0
- br i1 %tobool1, label %CallSite, label %End
-
-CallSite: ; preds = %TBB, %Header
- %l = phi i32 [ %l1, %Header ], [ %l2, %TBB ]
- call void @bar(i32* %ptrarg, i32 %l)
- call void @bari(i32 %l)
- br label %End
-
-End: ; preds = %CallSite, %TBB
- ret void
-}
-; NODUP-LABEL: @test_no_remove_used_phi
-; NODUP-NOT: split
-; CHECK-LABEL: @test_no_remove_used_phi
-; CHECK-LABEL: Header.split:
-; CHECK: call void @bar(i32* null, i32 %l1)
-; CHECK-NEXT: br label %CallSite
-; CHECK-LABEL: TBB.split:
-; CHECK: call void @bar(i32* nonnull %ptrarg, i32 %l2)
-; CHECK-NEXT br label %CallSite
-; CHECK-LABEL: CallSite:
-; CHECK-NEXT: %l = phi i32 [ %l1, %Header.split ], [ %l2, %TBB.split ]
-; CHECK: call void @bari(i32 %l)
-
-define void @bar(i32*, i32) {
- ret void
-}
-
-define void @bari(i32) {
- ret void
-}
diff --git a/llvm/test/Transforms/CallSiteSplitting/callsite-no-or-structure.ll b/llvm/test/Transforms/CallSiteSplitting/callsite-no-or-structure.ll
deleted file mode 100644
index e84687f71cb..00000000000
--- a/llvm/test/Transforms/CallSiteSplitting/callsite-no-or-structure.ll
+++ /dev/null
@@ -1,139 +0,0 @@
-; RUN: opt < %s -callsite-splitting -S | FileCheck %s
-; RUN: opt < %s -passes='function(callsite-splitting)' -S | FileCheck %s
-
-; CHECK-LABEL: @test_simple
-; CHECK-LABEL: Header:
-; CHECK-NEXT: br i1 undef, label %Header.split
-; CHECK-LABEL: Header.split:
-; CHECK: %[[CALL1:.*]] = call i32 @callee(i32* %a, i32 %v, i32 %p)
-; CHECK-LABEL: TBB:
-; CHECK: br i1 %cmp, label %TBB.split
-; CHECK-LABEL: TBB.split:
-; CHECK: %[[CALL2:.*]] = call i32 @callee(i32* null, i32 %v, i32 %p)
-; CHECK-LABEL: Tail
-; CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]
-; CHECK: ret i32 %[[MERGED]]
-define i32 @test_simple(i32* %a, i32 %v, i32 %p) {
-Header:
- br i1 undef, label %Tail, label %End
-
-TBB:
- %cmp = icmp eq i32* %a, null
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-; CHECK-LABEL: @test_eq_eq_eq_untaken
-; CHECK-LABEL: Header:
-; CHECK: br i1 %tobool1, label %TBB1, label %Header.split
-; CHECK-LABEL: Header.split:
-; CHECK: %[[CALL1:.*]] = call i32 @callee(i32* nonnull %a, i32 %v, i32 %p)
-; CHECK-LABEL: TBB2:
-; CHECK: br i1 %cmp2, label %TBB2.split, label %End
-; CHECK-LABEL: TBB2.split:
-; CHECK: %[[CALL2:.*]] = call i32 @callee(i32* null, i32 1, i32 99)
-; CHECK-LABEL: Tail
-; CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB2.split ]
-; CHECK: ret i32 %[[MERGED]]
-define i32 @test_eq_eq_eq_untaken2(i32* %a, i32 %v, i32 %p) {
-Header:
- %tobool1 = icmp eq i32* %a, null
- br i1 %tobool1, label %TBB1, label %Tail
-
-TBB1:
- %cmp1 = icmp eq i32 %v, 1
- br i1 %cmp1, label %TBB2, label %End
-
-TBB2:
- %cmp2 = icmp eq i32 %p, 99
- br i1 %cmp2, label %Tail, label %End
-
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-; CHECK-LABEL: @test_eq_ne_eq_untaken
-; CHECK-LABEL: Header:
-; CHECK: br i1 %tobool1, label %TBB1, label %Header.split
-; CHECK-LABEL: Header.split:
-; CHECK: %[[CALL1:.*]] = call i32 @callee(i32* nonnull %a, i32 %v, i32 %p)
-; CHECK-LABEL: TBB2:
-; CHECK: br i1 %cmp2, label %TBB2.split, label %End
-; CHECK-LABEL: TBB2.split:
-; CHECK: %[[CALL2:.*]] = call i32 @callee(i32* null, i32 %v, i32 99)
-; CHECK-LABEL: Tail
-; CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB2.split ]
-; CHECK: ret i32 %[[MERGED]]
-define i32 @test_eq_ne_eq_untaken(i32* %a, i32 %v, i32 %p) {
-Header:
- %tobool1 = icmp eq i32* %a, null
- br i1 %tobool1, label %TBB1, label %Tail
-
-TBB1:
- %cmp1 = icmp ne i32 %v, 1
- br i1 %cmp1, label %TBB2, label %End
-
-TBB2:
- %cmp2 = icmp eq i32 %p, 99
- br i1 %cmp2, label %Tail, label %End
-
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-; CHECK-LABEL: @test_header_header2_tbb
-; CHECK: Header2:
-; CHECK:br i1 %tobool2, label %Header2.split, label %TBB1
-; CHECK-LABEL: Header2.split:
-; CHECK: %[[CALL1:.*]] = call i32 @callee(i32* nonnull %a, i32 %v, i32 10)
-; CHECK-LABEL: TBB2:
-; CHECK: br i1 %cmp2, label %TBB2.split, label %End
-; CHECK-LABEL: TBB2.split:
-; NOTE: CallSiteSplitting cannot infer that %a is null here, as it currently
-; only supports recording conditions along a single predecessor path.
-; CHECK: %[[CALL2:.*]] = call i32 @callee(i32* %a, i32 1, i32 99)
-; CHECK-LABEL: Tail
-; CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB2.split ]
-; CHECK: ret i32 %[[MERGED]]
-define i32 @test_header_header2_tbb(i32* %a, i32 %v, i32 %p) {
-Header:
- %tobool1 = icmp eq i32* %a, null
- br i1 %tobool1, label %TBB1, label %Header2
-
-Header2:
- %tobool2 = icmp eq i32 %p, 10
- br i1 %tobool2, label %Tail, label %TBB1
-
-TBB1:
- %cmp1 = icmp eq i32 %v, 1
- br i1 %cmp1, label %TBB2, label %End
-
-TBB2:
- %cmp2 = icmp eq i32 %p, 99
- br i1 %cmp2, label %Tail, label %End
-
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-define i32 @callee(i32* %a, i32 %v, i32 %p) {
- ret i32 10
-}
diff --git a/llvm/test/Transforms/CallSiteSplitting/callsite-no-splitting.ll b/llvm/test/Transforms/CallSiteSplitting/callsite-no-splitting.ll
deleted file mode 100644
index 25b4cb23be6..00000000000
--- a/llvm/test/Transforms/CallSiteSplitting/callsite-no-splitting.ll
+++ /dev/null
@@ -1,42 +0,0 @@
-; RUN: opt < %s -callsite-splitting -S | FileCheck %s
-; RUN: opt < %s -passes='function(callsite-splitting)' -S | FileCheck %s
-
-define i32 @callee(i32*, i32, i32) {
- ret i32 10
-}
-
-; CHECK-LABEL: @test_preds_equal
-; CHECK-NOT: split
-; CHECK: br i1 %cmp, label %Tail, label %Tail
-define i32 @test_preds_equal(i32* %a, i32 %v, i32 %p) {
-TBB:
- %cmp = icmp eq i32* %a, null
- br i1 %cmp, label %Tail, label %Tail
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-}
-
-define void @fn1(i16 %p1) {
-entry:
- ret void
-}
-
-define void @fn2() {
- ret void
-
-; Unreachable code below
-
-for.inc: ; preds = %for.inc
- br i1 undef, label %for.end6, label %for.inc
-
-for.end6: ; preds = %for.inc
- br i1 undef, label %lor.rhs, label %lor.end
-
-lor.rhs: ; preds = %for.end6
- br label %lor.end
-
-lor.end: ; preds = %for.end6, %lor.rhs
- call void @fn1(i16 0)
- ret void
-}
diff --git a/llvm/test/Transforms/CallSiteSplitting/callsite-split-debug.ll b/llvm/test/Transforms/CallSiteSplitting/callsite-split-debug.ll
deleted file mode 100644
index 21cfed34e8f..00000000000
--- a/llvm/test/Transforms/CallSiteSplitting/callsite-split-debug.ll
+++ /dev/null
@@ -1,56 +0,0 @@
-; RUN: opt -S -callsite-splitting -o - < %s | FileCheck %s
-; RUN: opt -S -strip-debug -callsite-splitting -o - < %s | FileCheck %s
-
-define internal i16 @bar(i16 %p1, i16 %p2) {
- %_tmp3 = mul i16 %p2, %p1
- ret i16 %_tmp3
-}
-
-define i16 @foo(i16 %in) {
-bb0:
- br label %bb1
-
-bb1:
- %0 = icmp ne i16 %in, 0
- br i1 %0, label %bb2, label %CallsiteBB
-
-bb2:
- br label %CallsiteBB
-
-CallsiteBB:
- %1 = phi i16 [ 0, %bb1 ], [ 1, %bb2 ]
- %c = phi i16 [ 2, %bb1 ], [ 3, %bb2 ]
- call void @llvm.dbg.value(metadata i16 %c, metadata !7, metadata !DIExpression()), !dbg !8
- %2 = call i16 @bar(i16 %1, i16 5)
- ret i16 %2
-}
-
-; Function Attrs: nounwind readnone speculatable
-declare void @llvm.dbg.value(metadata, metadata, metadata) #0
-
-attributes #0 = { nounwind readnone speculatable }
-
-!llvm.dbg.cu = !{!0}
-!llvm.module.flags = !{!2, !3}
-!llvm.ident = !{!4}
-
-!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "My Compiler")
-!1 = !DIFile(filename: "foo.c", directory: "/bar")
-!2 = !{i32 2, !"Dwarf Version", i32 4}
-!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = !{!"My Compiler"}
-!5 = !DIBasicType(name: "int", size: 16, encoding: DW_ATE_signed)
-!6 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 4, unit: !0)
-!7 = !DILocalVariable(name: "c", scope: !6, line: 5, type: !5)
-!8 = !DILocation(line: 5, column: 7, scope: !6)
-
-; The optimization should trigger even in the presence of the dbg.value in
-; CallSiteBB.
-
-; CHECK-LABEL: @foo
-; CHECK-LABEL: bb1.split:
-; CHECK: [[TMP1:%[0-9]+]] = call i16 @bar(i16 0, i16 5)
-; CHECK-LABEL: bb2.split:
-; CHECK: [[TMP2:%[0-9]+]] = call i16 @bar(i16 1, i16 5)
-; CHECK-LABEL: CallsiteBB
-; CHECK: %phi.call = phi i16 [ [[TMP2]], %bb2.split ], [ [[TMP1]], %bb1.split
diff --git a/llvm/test/Transforms/CallSiteSplitting/callsite-split-or-phi.ll b/llvm/test/Transforms/CallSiteSplitting/callsite-split-or-phi.ll
deleted file mode 100644
index cd2edb1e335..00000000000
--- a/llvm/test/Transforms/CallSiteSplitting/callsite-split-or-phi.ll
+++ /dev/null
@@ -1,588 +0,0 @@
-; RUN: opt < %s -callsite-splitting -S | FileCheck %s
-; RUN: opt < %s -passes='function(callsite-splitting)' -S | FileCheck %s
-
-target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
-target triple = "aarch64-linaro-linux-gnueabi"
-
-;CHECK-LABEL: @test_eq_eq
-
-;CHECK-LABEL: Header:
-;CHECK: br i1 %tobool1, label %Header.split, label %TBB
-;CHECK-LABEL: Header.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* null, i32 %v, i32 1)
-;CHECK-LABEL: TBB:
-;CHECK: br i1 %cmp, label %TBB.split, label %End
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* nonnull %a, i32 1, i32 2)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_eq_eq(i32* %a, i32 %v) {
-Header:
- %tobool1 = icmp eq i32* %a, null
- br i1 %tobool1, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp eq i32 %v, 1
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %p = phi i32[1,%Header], [2, %TBB]
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_eq_eq_eq
-;CHECK-LABEL: Header2.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* %a, i32 %v, i32 10)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* %a, i32 1, i32 %p)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_eq_eq_eq(i32* %a, i32 %v, i32 %p) {
-Header:
- %tobool1 = icmp eq i32* %a, null
- br i1 %tobool1, label %Header2, label %End
-
-Header2:
- %tobool2 = icmp eq i32 %p, 10
- br i1 %tobool2, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp eq i32 %v, 1
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_eq_eq_eq_constrain_same_i32_arg
-;CHECK-LABEL: Header2.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* %a, i32 222, i32 %p)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* %a, i32 333, i32 %p)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_eq_eq_eq_constrain_same_i32_arg(i32* %a, i32 %v, i32 %p) {
-Header:
- %tobool1 = icmp eq i32 %v, 111
- br i1 %tobool1, label %Header2, label %End
-
-Header2:
- %tobool2 = icmp eq i32 %v, 222
- br i1 %tobool2, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp eq i32 %v, 333
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_ne_eq
-;CHECK-LABEL: Header.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* nonnull %a, i32 %v, i32 1)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* null, i32 1, i32 2)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_ne_eq(i32* %a, i32 %v) {
-Header:
- %tobool1 = icmp ne i32* %a, null
- br i1 %tobool1, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp eq i32 %v, 1
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %p = phi i32[1,%Header], [2, %TBB]
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_ne_eq_ne
-;CHECK-LABEL: Header2.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* nonnull %a, i32 %v, i32 10)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* %a, i32 %v, i32 %p)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_ne_eq_ne(i32* %a, i32 %v, i32 %p) {
-Header:
- %tobool1 = icmp ne i32* %a, null
- br i1 %tobool1, label %Header2, label %TBB
-
-Header2:
- %tobool2 = icmp eq i32 %p, 10
- br i1 %tobool2, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp ne i32 %v, 1
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_ne_ne
-;CHECK-LABEL: Header.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* nonnull %a, i32 %v, i32 1)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* null, i32 %v, i32 2)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_ne_ne(i32* %a, i32 %v) {
-Header:
- %tobool1 = icmp ne i32* %a, null
- br i1 %tobool1, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp ne i32 %v, 1
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %p = phi i32[1,%Header], [2, %TBB]
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_ne_ne_ne_constrain_same_pointer_arg
-;CHECK-LABEL: Header2.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* nonnull %a, i32 %v, i32 %p)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* %a, i32 %v, i32 %p)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_ne_ne_ne_constrain_same_pointer_arg(i32* %a, i32 %v, i32 %p, i32* %a2, i32* %a3) {
-Header:
- %tobool1 = icmp ne i32* %a, null
- br i1 %tobool1, label %Header2, label %TBB
-
-Header2:
- %tobool2 = icmp ne i32* %a, %a2
- br i1 %tobool2, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp ne i32* %a, %a3
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-
-
-;CHECK-LABEL: @test_eq_eq_untaken
-;CHECK-LABEL: Header.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* nonnull %a, i32 %v, i32 1)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* null, i32 1, i32 2)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_eq_eq_untaken(i32* %a, i32 %v) {
-Header:
- %tobool1 = icmp eq i32* %a, null
- br i1 %tobool1, label %TBB, label %Tail
-
-TBB:
- %cmp = icmp eq i32 %v, 1
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %p = phi i32[1,%Header], [2, %TBB]
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_eq_eq_eq_untaken
-;CHECK-LABEL: Header2.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* nonnull %a, i32 %v, i32 10)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* %a, i32 1, i32 %p)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_eq_eq_eq_untaken(i32* %a, i32 %v, i32 %p) {
-Header:
- %tobool1 = icmp eq i32* %a, null
- br i1 %tobool1, label %TBB, label %Header2
-
-Header2:
- %tobool2 = icmp eq i32 %p, 10
- br i1 %tobool2, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp eq i32 %v, 1
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_ne_eq_untaken
-;CHECK-LABEL: Header.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* null, i32 %v, i32 1)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* nonnull %a, i32 1, i32 2)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_ne_eq_untaken(i32* %a, i32 %v) {
-Header:
- %tobool1 = icmp ne i32* %a, null
- br i1 %tobool1, label %TBB, label %Tail
-
-TBB:
- %cmp = icmp eq i32 %v, 1
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %p = phi i32[1,%Header], [2, %TBB]
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_ne_eq_ne_untaken
-;CHECK-LABEL: Header2.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* null, i32 %v, i32 10)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* %a, i32 %v, i32 %p)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_ne_eq_ne_untaken(i32* %a, i32 %v, i32 %p) {
-Header:
- %tobool1 = icmp ne i32* %a, null
- br i1 %tobool1, label %TBB, label %Header2
-
-Header2:
- %tobool2 = icmp eq i32 %p, 10
- br i1 %tobool2, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp ne i32 %v, 1
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_ne_ne_untaken
-;CHECK-LABEL: Header.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* null, i32 %v, i32 1)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* nonnull %a, i32 1, i32 2)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_ne_ne_untaken(i32* %a, i32 %v) {
-Header:
- %tobool1 = icmp ne i32* %a, null
- br i1 %tobool1, label %TBB, label %Tail
-
-TBB:
- %cmp = icmp ne i32 %v, 1
- br i1 %cmp, label %End, label %Tail
-
-Tail:
- %p = phi i32[1,%Header], [2, %TBB]
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_nonconst_const_phi
-;CHECK-LABEL: Header.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* %a, i32 %v, i32 1)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* %a, i32 1, i32 2)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_nonconst_const_phi(i32* %a, i32* %b, i32 %v) {
-Header:
- %tobool1 = icmp eq i32* %a, %b
- br i1 %tobool1, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp eq i32 %v, 1
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %p = phi i32[1,%Header], [2, %TBB]
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_nonconst_nonconst_phi
-;CHECK-LABEL: Header.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* %a, i32 %v, i32 1)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* %a, i32 %v, i32 2)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL2]], %TBB.split ], [ %[[CALL1]], %Header.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_nonconst_nonconst_phi(i32* %a, i32* %b, i32 %v, i32 %v2) {
-Header:
- %tobool1 = icmp eq i32* %a, %b
- br i1 %tobool1, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp eq i32 %v, %v2
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %p = phi i32[1,%Header], [2, %TBB]
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_cfg_no_or_phi
-;CHECK-LABEL: TBB0.split
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* %a, i32 %v, i32 1)
-;CHECK-LABEL: TBB1.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* %a, i32 %v, i32 2)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL2]], %TBB1.split ], [ %[[CALL1]], %TBB0.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_cfg_no_or_phi(i32* %a, i32 %v) {
-entry:
- br i1 undef, label %TBB0, label %TBB1
-TBB0:
- br i1 undef, label %Tail, label %End
-TBB1:
- br i1 undef, label %Tail, label %End
-Tail:
- %p = phi i32[1,%TBB0], [2, %TBB1]
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_nonconst_nonconst_phi_noncost
-;CHECK-NOT: Header.split:
-;CHECK-NOT: TBB.split:
-;CHECK-LABEL: Tail:
-;CHECK: %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
-;CHECK: ret i32 %r
-define i32 @test_nonconst_nonconst_phi_noncost(i32* %a, i32* %b, i32 %v, i32 %v2) {
-Header:
- %tobool1 = icmp eq i32* %a, %b
- br i1 %tobool1, label %Tail, label %TBB
-
-TBB:
- %cmp = icmp eq i32 %v, %v2
- br i1 %cmp, label %Tail, label %End
-
-Tail:
- %p = phi i32[%v,%Header], [%v2, %TBB]
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_3preds_constphi
-;CHECK-NOT: Header.split:
-;CHECK-NOT: TBB.split:
-;CHECK-LABEL: Tail:
-;CHECK: %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
-;CHECK: ret i32 %r
-define i32 @test_3preds_constphi(i32* %a, i32 %v, i1 %c1, i1 %c2, i1 %c3) {
-Header:
- br i1 %c1, label %Tail, label %TBB1
-
-TBB1:
- br i1 %c2, label %Tail, label %TBB2
-
-TBB2:
- br i1 %c3, label %Tail, label %End
-
-Tail:
- %p = phi i32[1,%Header], [2, %TBB1], [3, %TBB2]
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_indirectbr_phi
-;CHECK-NOT: Header.split:
-;CHECK-NOT: TBB.split:
-;CHECK-LABEL: Tail:
-;CHECK: %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
-;CHECK: ret i32 %r
-define i32 @test_indirectbr_phi(i8* %address, i32* %a, i32* %b, i32 %v) {
-Header:
- %indirect.goto.dest = select i1 undef, i8* blockaddress(@test_indirectbr_phi, %End), i8* %address
- indirectbr i8* %indirect.goto.dest, [label %TBB, label %Tail]
-
-TBB:
- %indirect.goto.dest2 = select i1 undef, i8* blockaddress(@test_indirectbr_phi, %End), i8* %address
- indirectbr i8* %indirect.goto.dest2, [label %Tail, label %End]
-
-Tail:
- %p = phi i32[1,%Header], [2, %TBB]
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_cond_no_effect
-;CHECK-NOT: Header.split:
-;CHECK-NOT: TBB.split:
-;CHECK-LABEL: Tail:
-;CHECK: %r = call i32 @callee(i32* %a, i32 %v, i32 0)
-;CHECK: ret i32 %r
-define i32 @test_cond_no_effect(i32* %a, i32 %v) {
-Entry:
- %tobool1 = icmp eq i32* %a, null
- br i1 %tobool1, label %Header, label %End
-
-Header:
- br i1 undef, label %Tail, label %TBB
-
-TBB:
- br i1 undef, label %Tail, label %End
-
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 0)
- ret i32 %r
-
-End:
- ret i32 %v
-}
-
-;CHECK-LABEL: @test_unreachable
-;CHECK-LABEL: Header.split:
-;CHECK: %[[CALL1:.*]] = call i32 @callee(i32* %a, i32 %v, i32 10)
-;CHECK-LABEL: TBB.split:
-;CHECK: %[[CALL2:.*]] = call i32 @callee(i32* %a, i32 1, i32 %p)
-;CHECK-LABEL: Tail
-;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]
-;CHECK: ret i32 %[[MERGED]]
-define i32 @test_unreachable(i32* %a, i32 %v, i32 %p) {
-Entry:
- br label %End
-Header:
- %tobool2 = icmp eq i32 %p, 10
- br i1 %tobool2, label %Tail, label %TBB
-TBB:
- %cmp = icmp eq i32 %v, 1
- br i1 %cmp, label %Tail, label %Header
-Tail:
- %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
- ret i32 %r
-End:
- ret i32 %v
-}
-
-define i32 @callee(i32* %a, i32 %v, i32 %p) {
-entry:
- %c = icmp ne i32* %a, null
- br i1 %c, label %BB1, label %BB2
-
-BB1:
- call void @dummy(i32* %a, i32 %p)
- br label %End
-
-BB2:
- call void @dummy2(i32 %v, i32 %p)
- br label %End
-
-End:
- ret i32 %p
-}
-
-declare void @dummy(i32*, i32)
-declare void @dummy2(i32, i32)
-
-; Make sure we remove the non-nullness on constant paramater.
-;
-;CHECK-LABEL: @caller2
-;CHECK-LABEL: Top1.split:
-;CHECK: call i32 @callee(i32* inttoptr (i64 4643 to i32*)
-define void @caller2(i32 %c, i32* %a_elt, i32* %b_elt) {
-entry:
- br label %Top0
-
-Top0:
- %tobool1 = icmp eq i32* %a_elt, inttoptr (i64 4643 to i32*)
- br i1 %tobool1, label %Top1, label %NextCond
-
-Top1:
- %tobool2 = icmp ne i32* %a_elt, null
- br i1 %tobool2, label %CallSiteBB, label %NextCond
-
-NextCond:
- %cmp = icmp ne i32* %b_elt, null
- br i1 %cmp, label %CallSiteBB, label %End
-
-CallSiteBB:
- call i32 @callee(i32* %a_elt, i32 %c, i32 %c)
- br label %End
-
-End:
- ret void
-}
diff --git a/llvm/test/Transforms/CallSiteSplitting/callsite-split-preserve-debug.ll b/llvm/test/Transforms/CallSiteSplitting/callsite-split-preserve-debug.ll
deleted file mode 100644
index fd1d94c647f..00000000000
--- a/llvm/test/Transforms/CallSiteSplitting/callsite-split-preserve-debug.ll
+++ /dev/null
@@ -1,85 +0,0 @@
-; RUN: opt -callsite-splitting -S < %s | FileCheck %s
-
-; CHECK-LABEL: @test1
-; CHECK: [[R1:%.+]] = call i32 @callee(i32 0, i32 %dd), !dbg [[DBG1:!.*]]
-; CHECK: [[R2:%.+]] = call i32 @callee(i32 1, i32 %dd), !dbg [[DBG1]]
-; CHECK-LABEL: CallSite:
-; CHECK-NEXT: phi i32 [ [[R2]], %land.rhs.split ], [ [[R1]], %entry.split ], !dbg [[DBG1]]
-
-define i32 @test1(i32* dereferenceable(4) %cc, i32 %dd) !dbg !6 {
-entry:
- br i1 undef, label %CallSite, label %land.rhs
-
-land.rhs: ; preds = %entry
- br label %CallSite
-
-CallSite: ; preds = %land.rhs, %entry
- %pv = phi i32 [ 0, %entry ], [ 1, %land.rhs ]
- %call = call i32 @callee(i32 %pv, i32 %dd), !dbg !18
- ret i32 %call
-}
-
-; CHECK-LABEL: @test2
-; CHECK: [[LV1:%.*]] = load i32, i32* %ptr, align 4, !dbg [[DBG_LV:!.*]]
-; CHECK-NEXT: [[R1:%.+]] = call i32 @callee(i32 0, i32 10), !dbg [[DBG_CALL:!.*]]
-; CHECK: [[LV2:%.*]] = load i32, i32* %ptr, align 4, !dbg [[DBG_LV]]
-; CHECK-NEXT: [[R2:%.+]] = call i32 @callee(i32 0, i32 %i), !dbg [[DBG_CALL]]
-; CHECK-LABEL: CallSite:
-; CHECK-NEXT: phi i32 [ [[LV1]], %Header.split ], [ [[LV2]], %TBB.split ], !dbg [[DBG_LV]]
-; CHECK-NEXT: phi i32 [ [[R1]], %Header.split ], [ [[R2]], %TBB.split ], !dbg [[DBG_CALL]]
-
-define void @test2(i32* %ptr, i32 %i) !dbg !19 {
-Header:
- %tobool = icmp ne i32 %i, 10
- br i1 %tobool, label %TBB, label %CallSite
-
-TBB: ; preds = %Header
- br i1 undef, label %CallSite, label %End
-
-CallSite: ; preds = %TBB, %Header
- %lv = load i32, i32* %ptr, align 4, !dbg !25
- %cv = call i32 @callee(i32 0, i32 %i), !dbg !26
- %sub = sub nsw i32 %lv, %cv
- br label %End
-
-End: ; preds = %CallSite, %TBB
- ret void
-}
-
-define i32 @callee(i32 %aa, i32 %bb) {
-entry:
- %add = add nsw i32 %aa, %bb
- ret i32 %add
-}
-
-!llvm.dbg.cu = !{!0}
-!llvm.debugify = !{!3, !4}
-!llvm.module.flags = !{!5}
-
-!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
-!1 = !DIFile(filename: "<stdin>", directory: "/")
-!2 = !{}
-!3 = !{i32 23}
-!4 = !{i32 11}
-!5 = !{i32 2, !"Debug Info Version", i32 3}
-!6 = distinct !DISubprogram(name: "test", linkageName: "test", scope: null, file: !1, line: 3, type: !7, isLocal: false, isDefinition: true, scopeLine: 3, isOptimized: true, unit: !0, retainedNodes: !8)
-!7 = !DISubroutineType(types: !2)
-!8 = !{!9, !11, !13, !15, !16, !17}
-!9 = !DILocalVariable(name: "2", scope: !6, file: !1, line: 3, type: !10)
-!10 = !DIBasicType(name: "ty64", size: 64, encoding: DW_ATE_unsigned)
-!11 = !DILocalVariable(name: "3", scope: !6, file: !1, line: 5, type: !12)
-!12 = !DIBasicType(name: "ty32", size: 32, encoding: DW_ATE_unsigned)
-!13 = !DILocalVariable(name: "4", scope: !6, file: !1, line: 6, type: !14)
-!14 = !DIBasicType(name: "ty8", size: 8, encoding: DW_ATE_unsigned)
-!15 = !DILocalVariable(name: "5", scope: !6, file: !1, line: 9, type: !12)
-!16 = !DILocalVariable(name: "6", scope: !6, file: !1, line: 10, type: !12)
-!17 = !DILocalVariable(name: "7", scope: !6, file: !1, line: 11, type: !10)
-!18 = !DILocation(line: 10, column: 1, scope: !6)
-!19 = distinct !DISubprogram(name: "test_add_new_phi", linkageName: "test_add_new_phi", scope: null, file: !1, line: 14, type: !7, isLocal: false, isDefinition: true, scopeLine: 14, isOptimized: true, unit: !0, retainedNodes: !20)
-!20 = !{!21, !22, !23, !24}
-!21 = !DILocalVariable(name: "8", scope: !19, file: !1, line: 14, type: !14)
-!22 = !DILocalVariable(name: "9", scope: !19, file: !1, line: 17, type: !10)
-!23 = !DILocalVariable(name: "10", scope: !19, file: !1, line: 18, type: !12)
-!24 = !DILocalVariable(name: "11", scope: !19, file: !1, line: 20, type: !12)
-!25 = !DILocation(line: 18, column: 1, scope: !19)
-!26 = !DILocation(line: 19, column: 1, scope: !19)
diff --git a/llvm/test/Transforms/CallSiteSplitting/callsite-split.ll b/llvm/test/Transforms/CallSiteSplitting/callsite-split.ll
deleted file mode 100644
index 117464904ce..00000000000
--- a/llvm/test/Transforms/CallSiteSplitting/callsite-split.ll
+++ /dev/null
@@ -1,119 +0,0 @@
-; RUN: opt < %s -callsite-splitting -inline -instcombine -jump-threading -S | FileCheck %s
-; RUN: opt < %s -passes='function(callsite-splitting),cgscc(inline),function(instcombine,jump-threading)' -S | FileCheck %s
-
-target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
-target triple = "aarch64-linaro-linux-gnueabi"
-
-%struct.bitmap = type { i32, %struct.bitmap* }
-
-;CHECK-LABEL: @caller
-;CHECK-LABEL: Top.split:
-;CHECK: call void @callee(%struct.bitmap* null, %struct.bitmap* null, %struct.bitmap* %b_elt, i1 false)
-;CHECK-LABEL: NextCond:
-;CHECK: br {{.*}} label %callee.exit
-;CHECK-LABEL: callee.exit:
-;CHECK: call void @dummy2(%struct.bitmap* %a_elt)
-
-define void @caller(i1 %c, %struct.bitmap* %a_elt, %struct.bitmap* %b_elt) {
-entry:
- br label %Top
-
-Top:
- %tobool1 = icmp eq %struct.bitmap* %a_elt, null
- br i1 %tobool1, label %CallSiteBB, label %NextCond
-
-NextCond:
- %cmp = icmp ne %struct.bitmap* %b_elt, null
- br i1 %cmp, label %CallSiteBB, label %End
-
-CallSiteBB:
- %p = phi i1 [0, %Top], [%c, %NextCond]
- call void @callee(%struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %b_elt, i1 %p)
- br label %End
-
-End:
- ret void
-}
-
-define void @callee(%struct.bitmap* %dst_elt, %struct.bitmap* %a_elt, %struct.bitmap* %b_elt, i1 %c) {
-entry:
- %tobool = icmp ne %struct.bitmap* %a_elt, null
- %tobool1 = icmp ne %struct.bitmap* %b_elt, null
- %or.cond = and i1 %tobool, %tobool1
- br i1 %or.cond, label %Cond, label %Big
-
-Cond:
- %cmp = icmp eq %struct.bitmap* %dst_elt, %a_elt
- br i1 %cmp, label %Small, label %Big
-
-Small:
- call void @dummy2(%struct.bitmap* %a_elt)
- br label %End
-
-Big:
- call void @dummy1(%struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt)
- call void @dummy1(%struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt)
- call void @dummy1(%struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt)
- call void @dummy1(%struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt)
- call void @dummy1(%struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt)
- call void @dummy1(%struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt)
- call void @dummy1(%struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt, %struct.bitmap* %a_elt)
- br label %End
-
-End:
- ret void
-}
-
-declare void @dummy2(%struct.bitmap*)
-declare void @dummy1(%struct.bitmap*, %struct.bitmap*, %struct.bitmap*, %struct.bitmap*, %struct.bitmap*, %struct.bitmap*)
-
-
-;CHECK-LABEL: @caller2
-;CHECK-LABEL: Top.split:
-;CHECK: call void @dummy4()
-;CHECK-LABEL: NextCond.split:
-;CHECK: call void @dummy3()
-;CheCK-LABEL: CallSiteBB:
-;CHECK: %phi.call = phi i1 [ true, %NextCond.split ], [ false, %Top.split ]
-;CHECK: call void @foo(i1 %phi.call)
-define void @caller2(i1 %c, %struct.bitmap* %a_elt, %struct.bitmap* %b_elt, %struct.bitmap* %c_elt) {
-entry:
- br label %Top
-
-Top:
- %tobool1 = icmp eq %struct.bitmap* %a_elt, %b_elt
- br i1 %tobool1, label %CallSiteBB, label %NextCond
-
-NextCond:
- %cmp = icmp ne %struct.bitmap* %b_elt, %c_elt
- br i1 %cmp, label %CallSiteBB, label %End
-
-CallSiteBB:
- %phi = phi i1 [0, %Top],[1, %NextCond]
- %u = call i1 @callee2(i1 %phi)
- call void @foo(i1 %u)
- br label %End
-
-End:
- ret void
-}
-
-define i1 @callee2(i1 %b) {
-entry:
- br i1 %b, label %BB1, label %BB2
-
-BB1:
- call void @dummy3()
- br label %End
-
-BB2:
- call void @dummy4()
- br label %End
-
-End:
- ret i1 %b
-}
-
-declare void @dummy3()
-declare void @dummy4()
-declare void @foo(i1)
diff --git a/llvm/test/Transforms/CallSiteSplitting/lpad.ll b/llvm/test/Transforms/CallSiteSplitting/lpad.ll
deleted file mode 100644
index fc72ec13aab..00000000000
--- a/llvm/test/Transforms/CallSiteSplitting/lpad.ll
+++ /dev/null
@@ -1,40 +0,0 @@
-; RUN: opt -S -callsite-splitting < %s | FileCheck %s
-;
-; Make sure that the callsite is not splitted by checking that there's only one
-; call to @callee.
-
-; CHECK-LABEL: @caller
-; CHECK-LABEL: lpad
-; CHECK: call void @callee
-; CHECK-NOT: call void @callee
-
-declare void @foo(i1* %p);
-declare void @bar(i1* %p);
-declare dso_local i32 @__gxx_personality_v0(...)
-
-define void @caller(i1* %p) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
-entry:
- %0 = icmp eq i1* %p, null
- br i1 %0, label %bb1, label %bb2
-
-bb1:
- invoke void @foo(i1* %p) to label %end1 unwind label %lpad
-
-bb2:
- invoke void @bar(i1* %p) to label %end2 unwind label %lpad
-
-lpad:
- %1 = landingpad { i8*, i32 } cleanup
- call void @callee(i1* %p)
- resume { i8*, i32 } %1
-
-end1:
- ret void
-
-end2:
- ret void
-}
-
-define internal void @callee(i1* %p) {
- ret void
-}
diff --git a/llvm/test/Transforms/CallSiteSplitting/musttail.ll b/llvm/test/Transforms/CallSiteSplitting/musttail.ll
deleted file mode 100644
index d8f76aed3dc..00000000000
--- a/llvm/test/Transforms/CallSiteSplitting/musttail.ll
+++ /dev/null
@@ -1,104 +0,0 @@
-; RUN: opt < %s -callsite-splitting -verify-dom-info -S | FileCheck %s
-
-;CHECK-LABEL: @caller
-;CHECK-LABEL: Top.split:
-;CHECK: %ca1 = musttail call i8* @callee(i8* null, i8* %b)
-;CHECK: %cb2 = bitcast i8* %ca1 to i8*
-;CHECK: ret i8* %cb2
-;CHECK-LABEL: TBB.split
-;CHECK: %ca3 = musttail call i8* @callee(i8* nonnull %a, i8* null)
-;CHECK: %cb4 = bitcast i8* %ca3 to i8*
-;CHECK: ret i8* %cb4
-define i8* @caller(i8* %a, i8* %b) {
-Top:
- %c = icmp eq i8* %a, null
- br i1 %c, label %Tail, label %TBB
-TBB:
- %c2 = icmp eq i8* %b, null
- br i1 %c2, label %Tail, label %End
-Tail:
- %ca = musttail call i8* @callee(i8* %a, i8* %b)
- %cb = bitcast i8* %ca to i8*
- ret i8* %cb
-End:
- ret i8* null
-}
-
-define i8* @callee(i8* %a, i8* %b) noinline {
- ret i8* %a
-}
-
-;CHECK-LABEL: @no_cast_caller
-;CHECK-LABEL: Top.split:
-;CHECK: %ca1 = musttail call i8* @callee(i8* null, i8* %b)
-;CHECK: ret i8* %ca1
-;CHECK-LABEL: TBB.split
-;CHECK: %ca2 = musttail call i8* @callee(i8* nonnull %a, i8* null)
-;CHECK: ret i8* %ca2
-define i8* @no_cast_caller(i8* %a, i8* %b) {
-Top:
- %c = icmp eq i8* %a, null
- br i1 %c, label %Tail, label %TBB
-TBB:
- %c2 = icmp eq i8* %b, null
- br i1 %c2, label %Tail, label %End
-Tail:
- %ca = musttail call i8* @callee(i8* %a, i8* %b)
- ret i8* %ca
-End:
- ret i8* null
-}
-
-;CHECK-LABEL: @void_caller
-;CHECK-LABEL: Top.split:
-;CHECK: musttail call void @void_callee(i8* null, i8* %b)
-;CHECK: ret void
-;CHECK-LABEL: TBB.split
-;CHECK: musttail call void @void_callee(i8* nonnull %a, i8* null)
-;CHECK: ret void
-define void @void_caller(i8* %a, i8* %b) {
-Top:
- %c = icmp eq i8* %a, null
- br i1 %c, label %Tail, label %TBB
-TBB:
- %c2 = icmp eq i8* %b, null
- br i1 %c2, label %Tail, label %End
-Tail:
- musttail call void @void_callee(i8* %a, i8* %b)
- ret void
-End:
- ret void
-}
-
-define void @void_callee(i8* %a, i8* %b) noinline {
- ret void
-}
-
-; Include a test with a larger CFG that exercises the DomTreeUpdater
-; machinery a bit more.
-;CHECK-LABEL: @larger_cfg_caller
-;CHECK-LABEL: Top.split:
-;CHECK: %r1 = musttail call i8* @callee(i8* null, i8* %b)
-;CHECK: ret i8* %r1
-;CHECK-LABEL: TBB.split
-;CHECK: %r2 = musttail call i8* @callee(i8* nonnull %a, i8* null)
-;CHECK: ret i8* %r2
-define i8* @larger_cfg_caller(i8* %a, i8* %b) {
-Top:
- %cond1 = icmp eq i8* %a, null
- br i1 %cond1, label %Tail, label %ExtraTest
-ExtraTest:
- %a0 = load i8, i8* %a
- %cond2 = icmp eq i8 %a0, 0
- br i1 %cond2, label %TBB_pred, label %End
-TBB_pred:
- br label %TBB
-TBB:
- %cond3 = icmp eq i8* %b, null
- br i1 %cond3, label %Tail, label %End
-Tail:
- %r = musttail call i8* @callee(i8* %a, i8* %b)
- ret i8* %r
-End:
- ret i8* null
-}
diff --git a/llvm/test/Transforms/CallSiteSplitting/split-loop.ll b/llvm/test/Transforms/CallSiteSplitting/split-loop.ll
deleted file mode 100644
index 3e49a73627f..00000000000
--- a/llvm/test/Transforms/CallSiteSplitting/split-loop.ll
+++ /dev/null
@@ -1,90 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt -S -callsite-splitting -simplifycfg < %s | FileCheck %s
-
-define i16 @test1() {
-; CHECK-LABEL: @test1(
-; CHECK-NEXT: entry:
-; CHECK-NEXT: [[SPEC_SELECT:%.*]] = select i1 undef, i16 1, i16 0
-; CHECK-NEXT: call void @callee(i16 0)
-; CHECK-NEXT: br label [[FOR_COND12:%.*]]
-; CHECK: for.cond12:
-; CHECK-NEXT: call void @callee(i16 [[SPEC_SELECT]])
-; CHECK-NEXT: br label [[FOR_COND12]]
-;
-entry:
- %spec.select = select i1 undef, i16 1, i16 0
- %tobool18 = icmp ne i16 %spec.select, 0
- br i1 %tobool18, label %for.cond12.us, label %for.cond12
-
-for.cond12.us:
- unreachable
-
-for.cond12:
- call void @callee(i16 %spec.select)
- br label %for.cond12
-}
-
-define i16 @test2() {
-; CHECK-LABEL: @test2(
-; CHECK-NEXT: entry:
-; CHECK-NEXT: [[S:%.*]] = select i1 undef, i16 1, i16 0
-; CHECK-NEXT: call void @callee(i16 0)
-; CHECK-NEXT: br label [[FOR_COND12:%.*]]
-; CHECK: for.cond12:
-; CHECK-NEXT: [[ADD:%.*]] = add i16 [[S]], 10
-; CHECK-NEXT: [[ADD2:%.*]] = add i16 [[S]], 10
-; CHECK-NEXT: call void @callee(i16 [[S]])
-; CHECK-NEXT: br label [[FOR_COND12]]
-;
-entry:
- %s= select i1 undef, i16 1, i16 0
- %tobool18 = icmp ne i16 %s, 0
- br i1 %tobool18, label %for.cond12.us, label %for.cond12
-
-for.cond12.us:
- unreachable
-
-for.cond12:
- call void @callee(i16 %s)
- %add = add i16 %s, 10
- %add2 = add i16 %s, 10
- br label %for.cond12
-}
-
-define i16 @test3() {
-; CHECK-LABEL: @test3(
-; CHECK-NEXT: entry:
-; CHECK-NEXT: [[S:%.*]] = select i1 undef, i16 1, i16 0
-; CHECK-NEXT: call void @callee(i16 0)
-; CHECK-NEXT: br label [[FOR_COND12:%.*]]
-; CHECK: for.cond12:
-; CHECK-NEXT: [[ADD:%.*]] = add i16 [[S]], 10
-; CHECK-NEXT: [[ADD2:%.*]] = add i16 [[ADD]], 10
-; CHECK-NEXT: br i1 undef, label [[FOR_COND12_SPLIT:%.*]], label [[EXIT:%.*]]
-; CHECK: for.cond12.split:
-; CHECK-NEXT: call void @callee(i16 [[S]])
-; CHECK-NEXT: br label [[FOR_COND12]]
-; CHECK: exit:
-; CHECK-NEXT: ret i16 [[ADD2]]
-;
-entry:
- %s= select i1 undef, i16 1, i16 0
- %tobool18 = icmp ne i16 %s, 0
- br i1 %tobool18, label %for.cond12.us, label %for.cond12
-
-for.cond12.us:
- unreachable
-
-for.cond12:
- call void @callee(i16 %s)
- %add = add i16 %s, 10
- %add2 = add i16 %add, 10
- br i1 undef, label %for.cond12, label %exit
-
-exit:
- ret i16 %add2
-}
-
-define internal void @callee(i16 %flag) {
- ret void
-}
OpenPOWER on IntegriCloud