diff options
author | Eric Christopher <echristo@gmail.com> | 2019-04-17 02:12:23 +0000 |
---|---|---|
committer | Eric Christopher <echristo@gmail.com> | 2019-04-17 02:12:23 +0000 |
commit | a86343512845c9c1fdbac865fea88aa5fce7142a (patch) | |
tree | 666fc6353de19ad8b00e56b67edd33f24104e4a7 /llvm/test/Transforms/Util | |
parent | 7f8ca6e3679b3af951cb7a4b1377edfaa3244b93 (diff) | |
download | bcm5719-llvm-a86343512845c9c1fdbac865fea88aa5fce7142a.tar.gz bcm5719-llvm-a86343512845c9c1fdbac865fea88aa5fce7142a.zip |
Temporarily Revert "Add basic loop fusion pass."
As it's causing some bot failures (and per request from kbarton).
This reverts commit r358543/ab70da07286e618016e78247e4a24fcb84077fda.
llvm-svn: 358546
Diffstat (limited to 'llvm/test/Transforms/Util')
30 files changed, 0 insertions, 3144 deletions
diff --git a/llvm/test/Transforms/Util/PR37334-break-crit-edges-require-dt.ll b/llvm/test/Transforms/Util/PR37334-break-crit-edges-require-dt.ll deleted file mode 100644 index 866ff93be7e..00000000000 --- a/llvm/test/Transforms/Util/PR37334-break-crit-edges-require-dt.ll +++ /dev/null @@ -1,44 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt < %s -loop-sink -break-crit-edges -branch-prob -S | FileCheck %s -; RUN: opt < %s -loop-sink -break-crit-edges -lazy-block-freq -S | FileCheck %s -; RUN: opt < %s -loop-sink -break-crit-edges -lazy-branch-prob -S | FileCheck %s - -; BreakCriticalEdges tries to update LI and DT if they are present. However, -; updating LI actually needs a DT, so we now require DT in -; BranchProbabilityInfo/LazyBlockFrequencyInfo/LazyBranchProbabilityInfo so it -; is indeed available when LI is. - -target triple = "x86_64-unknown-linux-gnu" - -define void @f1() { -; CHECK-LABEL: @f1( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[FOR_COND:%.*]] -; CHECK: for.cond: -; CHECK-NEXT: br i1 false, label [[FOR_BODY:%.*]], label [[FOR_COND_FOR_END_CRIT_EDGE:%.*]] -; CHECK: for.cond.for.end_crit_edge: -; CHECK-NEXT: br label [[FOR_END:%.*]] -; CHECK: for.body: -; CHECK-NEXT: br i1 true, label [[FOR_ENDSPLIT:%.*]], label [[FOR_INC:%.*]] -; CHECK: for.inc: -; CHECK-NEXT: br label [[FOR_COND]] -; CHECK: for.endsplit: -; CHECK-NEXT: br label [[FOR_END]] -; CHECK: for.end: -; CHECK-NEXT: ret void -; -entry: - br label %for.cond - -for.cond: ; preds = %for.inc, %entry - br i1 undef, label %for.body, label %for.end - -for.body: ; preds = %for.cond - br i1 undef, label %for.end, label %for.inc - -for.inc: ; preds = %for.body - br label %for.cond - -for.end: ; preds = %for.body, %for.cond - ret void -} diff --git a/llvm/test/Transforms/Util/PredicateInfo/condprop.ll b/llvm/test/Transforms/Util/PredicateInfo/condprop.ll deleted file mode 100644 index 0cd6ef34e1a..00000000000 --- a/llvm/test/Transforms/Util/PredicateInfo/condprop.ll +++ /dev/null @@ -1,471 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -print-predicateinfo -analyze < %s 2>&1 | FileCheck %s - -@a = external global i32 ; <i32*> [#uses=7] - -define i32 @test1() nounwind { -; CHECK-LABEL: @test1( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4 -; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[TMP0]], 4 -; CHECK-NEXT: br i1 [[TMP1]], label [[BB:%.*]], label [[BB1:%.*]] -; CHECK: bb: -; CHECK-NEXT: br label [[BB8:%.*]] -; CHECK: bb1: -; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* @a, align 4 -; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 5 -; CHECK-NEXT: br i1 [[TMP3]], label [[BB2:%.*]], label [[BB3:%.*]] -; CHECK: bb2: -; CHECK-NEXT: br label [[BB8]] -; CHECK: bb3: -; CHECK-NEXT: [[TMP4:%.*]] = load i32, i32* @a, align 4 -; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP4]], 4 -; CHECK-NEXT: br i1 [[TMP5]], label [[BB4:%.*]], label [[BB5:%.*]] -; CHECK: bb4: -; CHECK-NEXT: [[TMP6:%.*]] = load i32, i32* @a, align 4 -; CHECK-NEXT: [[TMP7:%.*]] = add i32 [[TMP6]], 5 -; CHECK-NEXT: br label [[BB8]] -; CHECK: bb5: -; CHECK-NEXT: [[TMP8:%.*]] = load i32, i32* @a, align 4 -; CHECK-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], 5 -; CHECK-NEXT: br i1 [[TMP9]], label [[BB6:%.*]], label [[BB7:%.*]] -; CHECK: bb6: -; CHECK-NEXT: [[TMP10:%.*]] = load i32, i32* @a, align 4 -; CHECK-NEXT: [[TMP11:%.*]] = add i32 [[TMP10]], 4 -; CHECK-NEXT: br label [[BB8]] -; CHECK: bb7: -; CHECK-NEXT: [[TMP12:%.*]] = load i32, i32* @a, align 4 -; CHECK-NEXT: br label [[BB8]] -; CHECK: bb8: -; CHECK-NEXT: [[DOT0:%.*]] = phi i32 [ [[TMP12]], [[BB7]] ], [ [[TMP11]], [[BB6]] ], [ [[TMP7]], [[BB4]] ], [ 4, [[BB2]] ], [ 5, [[BB]] ] -; CHECK-NEXT: br label [[RETURN:%.*]] -; CHECK: return: -; CHECK-NEXT: ret i32 [[DOT0]] -; -entry: - %0 = load i32, i32* @a, align 4 - %1 = icmp eq i32 %0, 4 - br i1 %1, label %bb, label %bb1 - -bb: ; preds = %entry - br label %bb8 - -bb1: ; preds = %entry - %2 = load i32, i32* @a, align 4 - %3 = icmp eq i32 %2, 5 - br i1 %3, label %bb2, label %bb3 - -bb2: ; preds = %bb1 - br label %bb8 - -bb3: ; preds = %bb1 - %4 = load i32, i32* @a, align 4 - %5 = icmp eq i32 %4, 4 - br i1 %5, label %bb4, label %bb5 - -bb4: ; preds = %bb3 - %6 = load i32, i32* @a, align 4 - %7 = add i32 %6, 5 - br label %bb8 - -bb5: ; preds = %bb3 - %8 = load i32, i32* @a, align 4 - %9 = icmp eq i32 %8, 5 - br i1 %9, label %bb6, label %bb7 - -bb6: ; preds = %bb5 - %10 = load i32, i32* @a, align 4 - %11 = add i32 %10, 4 - br label %bb8 - -bb7: ; preds = %bb5 - %12 = load i32, i32* @a, align 4 - br label %bb8 - -bb8: ; preds = %bb7, %bb6, %bb4, %bb2, %bb - %.0 = phi i32 [ %12, %bb7 ], [ %11, %bb6 ], [ %7, %bb4 ], [ 4, %bb2 ], [ 5, %bb ] - br label %return - -return: ; preds = %bb8 - ret i32 %.0 -} - -declare void @foo(i1) -declare void @bar(i32) - -define void @test3(i32 %x, i32 %y) { -; CHECK-LABEL: @test3( -; CHECK-NEXT: [[XZ:%.*]] = icmp eq i32 [[X:%.*]], 0 -; CHECK-NEXT: [[YZ:%.*]] = icmp eq i32 [[Y:%.*]], 0 -; CHECK-NEXT: [[Z:%.*]] = and i1 [[XZ]], [[YZ]] -; CHECK: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK: [[Y_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[Y]]) -; CHECK: [[XZ_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[XZ]]) -; CHECK: [[YZ_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[YZ]]) -; CHECK: [[Z_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[Z]]) -; CHECK-NEXT: br i1 [[Z]], label [[BOTH_ZERO:%.*]], label [[NOPE:%.*]] -; CHECK: both_zero: -; CHECK-NEXT: call void @foo(i1 [[XZ_0]]) -; CHECK-NEXT: call void @foo(i1 [[YZ_0]]) -; CHECK-NEXT: call void @bar(i32 [[X_0]]) -; CHECK-NEXT: call void @bar(i32 [[Y_0]]) -; CHECK-NEXT: ret void -; CHECK: nope: -; CHECK-NEXT: call void @foo(i1 [[Z_0]]) -; CHECK-NEXT: ret void -; - %xz = icmp eq i32 %x, 0 - %yz = icmp eq i32 %y, 0 - %z = and i1 %xz, %yz - br i1 %z, label %both_zero, label %nope -both_zero: - call void @foo(i1 %xz) - call void @foo(i1 %yz) - call void @bar(i32 %x) - call void @bar(i32 %y) - ret void -nope: - call void @foo(i1 %z) - ret void -} - -define void @test4(i1 %b, i32 %x) { -; CHECK-LABEL: @test4( -; CHECK-NEXT: br i1 [[B:%.*]], label [[SW:%.*]], label [[CASE3:%.*]] -; CHECK: sw: -; CHECK: i32 0, label [[CASE0:%.*]] -; CHECK-NEXT: i32 1, label [[CASE1:%.*]] -; CHECK-NEXT: i32 2, label [[CASE0]] -; CHECK-NEXT: i32 3, label [[CASE3]] -; CHECK-NEXT: i32 4, label [[DEFAULT:%.*]] -; CHECK-NEXT: ] Edge: [label [[SW]],label %case1] } -; CHECK-NEXT: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X:%.*]]) -; CHECK-NEXT: switch i32 [[X]], label [[DEFAULT]] [ -; CHECK-NEXT: i32 0, label [[CASE0]] -; CHECK-NEXT: i32 1, label [[CASE1]] -; CHECK-NEXT: i32 2, label [[CASE0]] -; CHECK-NEXT: i32 3, label [[CASE3]] -; CHECK-NEXT: i32 4, label [[DEFAULT]] -; CHECK-NEXT: ] -; CHECK: default: -; CHECK-NEXT: call void @bar(i32 [[X]]) -; CHECK-NEXT: ret void -; CHECK: case0: -; CHECK-NEXT: call void @bar(i32 [[X]]) -; CHECK-NEXT: ret void -; CHECK: case1: -; CHECK-NEXT: call void @bar(i32 [[X_0]]) -; CHECK-NEXT: ret void -; CHECK: case3: -; CHECK-NEXT: call void @bar(i32 [[X]]) -; CHECK-NEXT: ret void -; - br i1 %b, label %sw, label %case3 -sw: - switch i32 %x, label %default [ - i32 0, label %case0 - i32 1, label %case1 - i32 2, label %case0 - i32 3, label %case3 - i32 4, label %default - ] -default: - call void @bar(i32 %x) - ret void -case0: - call void @bar(i32 %x) - ret void -case1: - call void @bar(i32 %x) - ret void -case3: - call void @bar(i32 %x) - ret void -} - -define i1 @test5(i32 %x, i32 %y) { -; CHECK-LABEL: @test5( -; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]] -; CHECK: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK: [[X_1:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK: [[Y_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[Y]]) -; CHECK: [[Y_1:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[Y]]) -; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]] -; CHECK: same: -; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i32 [[X_0]], [[Y_0]] -; CHECK-NEXT: ret i1 [[CMP2]] -; CHECK: different: -; CHECK-NEXT: [[CMP3:%.*]] = icmp eq i32 [[X_1]], [[Y_1]] -; CHECK-NEXT: ret i1 [[CMP3]] -; - %cmp = icmp eq i32 %x, %y - br i1 %cmp, label %same, label %different - -same: - %cmp2 = icmp ne i32 %x, %y - ret i1 %cmp2 - -different: - %cmp3 = icmp eq i32 %x, %y - ret i1 %cmp3 -} - -define i1 @test6(i32 %x, i32 %y) { -; CHECK-LABEL: @test6( -; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i32 [[X:%.*]], [[Y:%.*]] -; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X]], [[Y]] -; CHECK-NEXT: [[CMP3:%.*]] = icmp eq i32 [[X]], [[Y]] -; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]] -; CHECK: same: -; CHECK-NEXT: ret i1 [[CMP2]] -; CHECK: different: -; CHECK-NEXT: ret i1 [[CMP3]] -; - %cmp2 = icmp ne i32 %x, %y - %cmp = icmp eq i32 %x, %y - %cmp3 = icmp eq i32 %x, %y - br i1 %cmp, label %same, label %different - -same: - ret i1 %cmp2 - -different: - ret i1 %cmp3 -} - -define i1 @test6_fp(float %x, float %y) { -; CHECK-LABEL: @test6_fp( -; CHECK-NEXT: [[CMP2:%.*]] = fcmp une float [[X:%.*]], [[Y:%.*]] -; CHECK-NEXT: [[CMP:%.*]] = fcmp oeq float [[X]], [[Y]] -; CHECK-NEXT: [[CMP3:%.*]] = fcmp oeq float [[X]], [[Y]] -; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]] -; CHECK: same: -; CHECK-NEXT: ret i1 [[CMP2]] -; CHECK: different: -; CHECK-NEXT: ret i1 [[CMP3]] -; - %cmp2 = fcmp une float %x, %y - %cmp = fcmp oeq float %x, %y - %cmp3 = fcmp oeq float %x, %y - br i1 %cmp, label %same, label %different - -same: - ret i1 %cmp2 - -different: - ret i1 %cmp3 -} - -define i1 @test7(i32 %x, i32 %y) { -; CHECK-LABEL: @test7( -; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[X:%.*]], [[Y:%.*]] -; CHECK: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK: [[X_1:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK: [[Y_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[Y]]) -; CHECK: [[Y_1:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[Y]]) -; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]] -; CHECK: same: -; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i32 [[X_0]], [[Y_0]] -; CHECK-NEXT: ret i1 [[CMP2]] -; CHECK: different: -; CHECK-NEXT: [[CMP3:%.*]] = icmp sgt i32 [[X_1]], [[Y_1]] -; CHECK-NEXT: ret i1 [[CMP3]] -; - %cmp = icmp sgt i32 %x, %y - br i1 %cmp, label %same, label %different - -same: - %cmp2 = icmp sle i32 %x, %y - ret i1 %cmp2 - -different: - %cmp3 = icmp sgt i32 %x, %y - ret i1 %cmp3 -} - -define i1 @test7_fp(float %x, float %y) { -; CHECK-LABEL: @test7_fp( -; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt float [[X:%.*]], [[Y:%.*]] -; CHECK: [[X_0:%.*]] = call float @llvm.ssa.copy.{{.+}}(float [[X]]) -; CHECK: [[X_1:%.*]] = call float @llvm.ssa.copy.{{.+}}(float [[X]]) -; CHECK: [[Y_0:%.*]] = call float @llvm.ssa.copy.{{.+}}(float [[Y]]) -; CHECK: [[Y_1:%.*]] = call float @llvm.ssa.copy.{{.+}}(float [[Y]]) -; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]] -; CHECK: same: -; CHECK-NEXT: [[CMP2:%.*]] = fcmp ule float [[X_0]], [[Y_0]] -; CHECK-NEXT: ret i1 [[CMP2]] -; CHECK: different: -; CHECK-NEXT: [[CMP3:%.*]] = fcmp ogt float [[X_1]], [[Y_1]] -; CHECK-NEXT: ret i1 [[CMP3]] -; - %cmp = fcmp ogt float %x, %y - br i1 %cmp, label %same, label %different - -same: - %cmp2 = fcmp ule float %x, %y - ret i1 %cmp2 - -different: - %cmp3 = fcmp ogt float %x, %y - ret i1 %cmp3 -} - -define i1 @test8(i32 %x, i32 %y) { -; CHECK-LABEL: @test8( -; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i32 [[X:%.*]], [[Y:%.*]] -; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[X]], [[Y]] -; CHECK-NEXT: [[CMP3:%.*]] = icmp sgt i32 [[X]], [[Y]] -; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]] -; CHECK: same: -; CHECK-NEXT: ret i1 [[CMP2]] -; CHECK: different: -; CHECK-NEXT: ret i1 [[CMP3]] -; - %cmp2 = icmp sle i32 %x, %y - %cmp = icmp sgt i32 %x, %y - %cmp3 = icmp sgt i32 %x, %y - br i1 %cmp, label %same, label %different - -same: - ret i1 %cmp2 - -different: - ret i1 %cmp3 -} - -define i1 @test8_fp(float %x, float %y) { -; CHECK-LABEL: @test8_fp( -; CHECK-NEXT: [[CMP2:%.*]] = fcmp ule float [[X:%.*]], [[Y:%.*]] -; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt float [[X]], [[Y]] -; CHECK-NEXT: [[CMP3:%.*]] = fcmp ogt float [[X]], [[Y]] -; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]] -; CHECK: same: -; CHECK-NEXT: ret i1 [[CMP2]] -; CHECK: different: -; CHECK-NEXT: ret i1 [[CMP3]] -; - %cmp2 = fcmp ule float %x, %y - %cmp = fcmp ogt float %x, %y - %cmp3 = fcmp ogt float %x, %y - br i1 %cmp, label %same, label %different - -same: - ret i1 %cmp2 - -different: - ret i1 %cmp3 -} - -define i32 @test9(i32 %i, i32 %j) { -; CHECK-LABEL: @test9( -; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[I:%.*]], [[J:%.*]] -; CHECK: [[I_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[I]]) -; CHECK: [[J_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[J]]) -; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[RET:%.*]] -; CHECK: cond_true: -; CHECK-NEXT: [[DIFF:%.*]] = sub i32 [[I_0]], [[J_0]] -; CHECK-NEXT: ret i32 [[DIFF]] -; CHECK: ret: -; CHECK-NEXT: ret i32 5 -; - %cmp = icmp eq i32 %i, %j - br i1 %cmp, label %cond_true, label %ret - -cond_true: - %diff = sub i32 %i, %j - ret i32 %diff - -ret: - ret i32 5 -} - -define i32 @test10(i32 %j, i32 %i) { -; CHECK-LABEL: @test10( -; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[I:%.*]], [[J:%.*]] -; CHECK: [[J_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[J]]) -; CHECK: [[I_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[I]]) -; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[RET:%.*]] -; CHECK: cond_true: -; CHECK-NEXT: [[DIFF:%.*]] = sub i32 [[I_0]], [[J_0]] -; CHECK-NEXT: ret i32 [[DIFF]] -; CHECK: ret: -; CHECK-NEXT: ret i32 5 -; - %cmp = icmp eq i32 %i, %j - br i1 %cmp, label %cond_true, label %ret - -cond_true: - %diff = sub i32 %i, %j - ret i32 %diff - -ret: - ret i32 5 -} - -declare i32 @yogibar() - -define i32 @test11(i32 %x) { -; CHECK-LABEL: @test11( -; CHECK-NEXT: [[V0:%.*]] = call i32 @yogibar() -; CHECK-NEXT: [[V1:%.*]] = call i32 @yogibar() -; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[V0]], [[V1]] -; CHECK: [[V0_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[V0]]) -; CHECK: [[V1_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[V1]]) -; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[NEXT:%.*]] -; CHECK: cond_true: -; CHECK-NEXT: ret i32 [[V1_0]] -; CHECK: next: -; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i32 [[X:%.*]], [[V0_0]] -; CHECK: [[V0_0_1:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[V0_0]]) -; CHECK-NEXT: br i1 [[CMP2]], label [[COND_TRUE2:%.*]], label [[NEXT2:%.*]] -; CHECK: cond_true2: -; CHECK-NEXT: ret i32 [[V0_0_1]] -; CHECK: next2: -; CHECK-NEXT: ret i32 0 -; - %v0 = call i32 @yogibar() - %v1 = call i32 @yogibar() - %cmp = icmp eq i32 %v0, %v1 - br i1 %cmp, label %cond_true, label %next - -cond_true: - ret i32 %v1 - -next: - %cmp2 = icmp eq i32 %x, %v0 - br i1 %cmp2, label %cond_true2, label %next2 - -cond_true2: - ret i32 %v0 - -next2: - ret i32 0 -} - -define i32 @test12(i32 %x) { -; CHECK-LABEL: @test12( -; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X:%.*]], 0 -; CHECK: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK: [[X_1:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -; CHECK: cond_true: -; CHECK-NEXT: br label [[RET:%.*]] -; CHECK: cond_false: -; CHECK-NEXT: br label [[RET]] -; CHECK: ret: -; CHECK-NEXT: [[RES:%.*]] = phi i32 [ [[X_0]], [[COND_TRUE]] ], [ [[X_1]], [[COND_FALSE]] ] -; CHECK-NEXT: ret i32 [[RES]] -; - %cmp = icmp eq i32 %x, 0 - br i1 %cmp, label %cond_true, label %cond_false - -cond_true: - br label %ret - -cond_false: - br label %ret - -ret: - %res = phi i32 [ %x, %cond_true ], [ %x, %cond_false ] - ret i32 %res -} diff --git a/llvm/test/Transforms/Util/PredicateInfo/diamond.ll b/llvm/test/Transforms/Util/PredicateInfo/diamond.ll deleted file mode 100644 index 8e3da687c13..00000000000 --- a/llvm/test/Transforms/Util/PredicateInfo/diamond.ll +++ /dev/null @@ -1,68 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -print-predicateinfo < %s 2>&1 | FileCheck %s -define i1 @f(i32 %x, i1 %y) { -; CHECK-LABEL: @f( -; CHECK-NEXT: br i1 [[Y:%.*]], label [[BB0:%.*]], label [[BB1:%.*]] -; CHECK: bb0: -; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[X:%.*]], 0 -; CHECK: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK-NEXT: br i1 [[CMP]], label [[BB2:%.*]], label [[BB3:%.*]] -; CHECK: bb1: -; CHECK-NEXT: [[X2:%.*]] = add nuw nsw i32 [[X]], 1 -; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i32 [[X2]], 2 -; CHECK: [[X2_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X2]]) -; CHECK-NEXT: br i1 [[CMP2]], label [[BB2]], label [[BB3]] -; CHECK: bb2: -; CHECK-NEXT: [[X3:%.*]] = phi i32 [ [[X_0]], [[BB0]] ], [ [[X2_0]], [[BB1]] ] -; CHECK-NEXT: br label [[BB3]] -; CHECK: bb3: -; CHECK-NEXT: ret i1 false -; - br i1 %y, label %bb0, label %bb1 - bb0: - %cmp = icmp sge i32 %x, 0 ; x > 0 - br i1 %cmp, label %bb2, label %bb3 - bb1: - %x2 = add nsw nuw i32 %x, 1 - %cmp2 = icmp sge i32 %x2, 2 ; x+1 > 2 / x > 1 - br i1 %cmp2, label %bb2, label %bb3 - bb2: - %x3 = phi i32 [ %x, %bb0 ], [ %x2, %bb1 ] - br label %bb3 - bb3: - ret i1 0 -} - -define i1 @g(i32 %x, i1 %y) { -; CHECK-LABEL: @g( -; CHECK-NEXT: br i1 [[Y:%.*]], label [[BB0:%.*]], label [[BB1:%.*]] -; CHECK: bb0: -; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[X:%.*]], 0 -; CHECK: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK-NEXT: br i1 [[CMP]], label [[BB3:%.*]], label [[BB2:%.*]] -; CHECK: bb1: -; CHECK-NEXT: [[X2:%.*]] = add nuw nsw i32 [[X]], 1 -; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i32 [[X2]], 2 -; CHECK: [[X2_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X2]]) -; CHECK-NEXT: br i1 [[CMP2]], label [[BB3]], label [[BB2]] -; CHECK: bb2: -; CHECK-NEXT: [[X3:%.*]] = phi i32 [ [[X_0]], [[BB0]] ], [ [[X2_0]], [[BB1]] ] -; CHECK-NEXT: br label [[BB3]] -; CHECK: bb3: -; CHECK-NEXT: ret i1 false -; - br i1 %y, label %bb0, label %bb1 - bb0: - %cmp = icmp sge i32 %x, 0 ; x > 0 - br i1 %cmp, label %bb3, label %bb2 - bb1: - %x2 = add nsw nuw i32 %x, 1 - %cmp2 = icmp sge i32 %x2, 2 ; x+1 > 2 / x > 1 - br i1 %cmp2, label %bb3, label %bb2 - bb2: - %x3 = phi i32 [ %x, %bb0 ], [ %x2, %bb1 ] - br label %bb3 - bb3: - ret i1 0 -} - diff --git a/llvm/test/Transforms/Util/PredicateInfo/edge.ll b/llvm/test/Transforms/Util/PredicateInfo/edge.ll deleted file mode 100644 index 31c8faae496..00000000000 --- a/llvm/test/Transforms/Util/PredicateInfo/edge.ll +++ /dev/null @@ -1,242 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -print-predicateinfo -analyze < %s 2>&1 | FileCheck %s - -define i32 @f1(i32 %x) { -; CHECK-LABEL: @f1( -; CHECK-NEXT: bb0: -; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X:%.*]], 0 -; CHECK: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK-NEXT: br i1 [[CMP]], label [[BB2:%.*]], label [[BB1:%.*]] -; CHECK: bb1: -; CHECK-NEXT: br label [[BB2]] -; CHECK: bb2: -; CHECK-NEXT: [[COND:%.*]] = phi i32 [ [[X_0]], [[BB0:%.*]] ], [ 0, [[BB1]] ] -; CHECK-NEXT: [[FOO:%.*]] = add i32 [[COND]], [[X]] -; CHECK-NEXT: ret i32 [[FOO]] -; -bb0: - %cmp = icmp eq i32 %x, 0 - br i1 %cmp, label %bb2, label %bb1 -bb1: - br label %bb2 -bb2: - %cond = phi i32 [ %x, %bb0 ], [ 0, %bb1 ] - %foo = add i32 %cond, %x - ret i32 %foo -} - -define i32 @f2(i32 %x) { -; CHECK-LABEL: @f2( -; CHECK-NEXT: bb0: -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[X:%.*]], 0 -; CHECK: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK-NEXT: br i1 [[CMP]], label [[BB1:%.*]], label [[BB2:%.*]] -; CHECK: bb1: -; CHECK-NEXT: br label [[BB2]] -; CHECK: bb2: -; CHECK-NEXT: [[COND:%.*]] = phi i32 [ [[X_0]], [[BB0:%.*]] ], [ 0, [[BB1]] ] -; CHECK-NEXT: [[FOO:%.*]] = add i32 [[COND]], [[X]] -; CHECK-NEXT: ret i32 [[FOO]] -; -bb0: - %cmp = icmp ne i32 %x, 0 - br i1 %cmp, label %bb1, label %bb2 -bb1: - br label %bb2 -bb2: - %cond = phi i32 [ %x, %bb0 ], [ 0, %bb1 ] - %foo = add i32 %cond, %x - ret i32 %foo -} - -define i32 @f3(i32 %x) { -; CHECK-LABEL: @f3( -; CHECK-NEXT: bb0: -; CHECK: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X:%.*]]) -; CHECK-NEXT: switch i32 [[X]], label [[BB1:%.*]] [ -; CHECK-NEXT: i32 0, label [[BB2:%.*]] -; CHECK-NEXT: ] -; CHECK: bb1: -; CHECK-NEXT: br label [[BB2]] -; CHECK: bb2: -; CHECK-NEXT: [[COND:%.*]] = phi i32 [ [[X_0]], [[BB0:%.*]] ], [ 0, [[BB1]] ] -; CHECK-NEXT: [[FOO:%.*]] = add i32 [[COND]], [[X]] -; CHECK-NEXT: ret i32 [[FOO]] -; -bb0: - switch i32 %x, label %bb1 [ i32 0, label %bb2] -bb1: - br label %bb2 -bb2: - %cond = phi i32 [ %x, %bb0 ], [ 0, %bb1 ] - %foo = add i32 %cond, %x - ret i32 %foo -} - - -define double @fcmp_oeq_not_zero(double %x, double %y) { -; CHECK-LABEL: @fcmp_oeq_not_zero( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y:%.*]], 2.000000e+00 -; CHECK: [[Y_0:%.*]] = call double @llvm.ssa.copy.{{.+}}(double [[Y]]) -; CHECK-NEXT: br i1 [[CMP]], label [[IF:%.*]], label [[RETURN:%.*]] -; CHECK: if: -; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X:%.*]], [[Y_0]] -; CHECK-NEXT: br label [[RETURN]] -; CHECK: return: -; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], [[IF]] ], [ [[X]], [[ENTRY:%.*]] ] -; CHECK-NEXT: ret double [[RETVAL]] -; -entry: - %cmp = fcmp oeq double %y, 2.0 - br i1 %cmp, label %if, label %return - -if: - %div = fdiv double %x, %y - br label %return - -return: - %retval = phi double [ %div, %if ], [ %x, %entry ] - ret double %retval - -} - -define double @fcmp_une_not_zero(double %x, double %y) { -; CHECK-LABEL: @fcmp_une_not_zero( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[Y:%.*]], 2.000000e+00 -; CHECK: [[Y_0:%.*]] = call double @llvm.ssa.copy.{{.+}}(double [[Y]]) -; CHECK-NEXT: br i1 [[CMP]], label [[RETURN:%.*]], label [[ELSE:%.*]] -; CHECK: else: -; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X:%.*]], [[Y_0]] -; CHECK-NEXT: br label [[RETURN]] -; CHECK: return: -; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], [[ELSE]] ], [ [[X]], [[ENTRY:%.*]] ] -; CHECK-NEXT: ret double [[RETVAL]] -; -entry: - %cmp = fcmp une double %y, 2.0 - br i1 %cmp, label %return, label %else - -else: - %div = fdiv double %x, %y - br label %return - -return: - %retval = phi double [ %div, %else ], [ %x, %entry ] - ret double %retval - -} - -define double @fcmp_oeq_zero(double %x, double %y) { -; CHECK-LABEL: @fcmp_oeq_zero( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y:%.*]], 0.000000e+00 -; CHECK: [[Y_0:%.*]] = call double @llvm.ssa.copy.{{.+}}(double [[Y]]) -; CHECK-NEXT: br i1 [[CMP]], label [[IF:%.*]], label [[RETURN:%.*]] -; CHECK: if: -; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X:%.*]], [[Y_0]] -; CHECK-NEXT: br label [[RETURN]] -; CHECK: return: -; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], [[IF]] ], [ [[X]], [[ENTRY:%.*]] ] -; CHECK-NEXT: ret double [[RETVAL]] -; -entry: - %cmp = fcmp oeq double %y, 0.0 - br i1 %cmp, label %if, label %return - -if: - %div = fdiv double %x, %y - br label %return - -return: - %retval = phi double [ %div, %if ], [ %x, %entry ] - ret double %retval - -} - -define double @fcmp_une_zero(double %x, double %y) { -; CHECK-LABEL: @fcmp_une_zero( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[Y:%.*]], -0.000000e+00 -; CHECK: [[Y_0:%.*]] = call double @llvm.ssa.copy.{{.+}}(double [[Y]]) -; CHECK-NEXT: br i1 [[CMP]], label [[RETURN:%.*]], label [[ELSE:%.*]] -; CHECK: else: -; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X:%.*]], [[Y_0]] -; CHECK-NEXT: br label [[RETURN]] -; CHECK: return: -; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], [[ELSE]] ], [ [[X]], [[ENTRY:%.*]] ] -; CHECK-NEXT: ret double [[RETVAL]] -; -entry: - %cmp = fcmp une double %y, -0.0 - br i1 %cmp, label %return, label %else - -else: - %div = fdiv double %x, %y - br label %return - -return: - %retval = phi double [ %div, %else ], [ %x, %entry ] - ret double %retval - -} - - -define double @fcmp_oeq_maybe_zero(double %x, double %y, double %z1, double %z2) { -; CHECK-LABEL: @fcmp_oeq_maybe_zero( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[Z:%.*]] = fadd double [[Z1:%.*]], [[Z2:%.*]] -; CHECK-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y:%.*]], [[Z]] -; CHECK: [[Z_0:%.*]] = call double @llvm.ssa.copy.{{.+}}(double [[Z]]) -; CHECK-NEXT: br i1 [[CMP]], label [[IF:%.*]], label [[RETURN:%.*]] -; CHECK: if: -; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X:%.*]], [[Z_0]] -; CHECK-NEXT: br label [[RETURN]] -; CHECK: return: -; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], [[IF]] ], [ [[X]], [[ENTRY:%.*]] ] -; CHECK-NEXT: ret double [[RETVAL]] -; -entry: - %z = fadd double %z1, %z2 - %cmp = fcmp oeq double %y, %z - br i1 %cmp, label %if, label %return - -if: - %div = fdiv double %x, %z - br label %return - -return: - %retval = phi double [ %div, %if ], [ %x, %entry ] - ret double %retval - -} - -define double @fcmp_une_maybe_zero(double %x, double %y, double %z1, double %z2) { -; CHECK-LABEL: @fcmp_une_maybe_zero( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[Z:%.*]] = fadd double [[Z1:%.*]], [[Z2:%.*]] -; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[Y:%.*]], [[Z]] -; CHECK: [[Z_0:%.*]] = call double @llvm.ssa.copy.{{.+}}(double [[Z]]) -; CHECK-NEXT: br i1 [[CMP]], label [[RETURN:%.*]], label [[ELSE:%.*]] -; CHECK: else: -; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X:%.*]], [[Z_0]] -; CHECK-NEXT: br label [[RETURN]] -; CHECK: return: -; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], [[ELSE]] ], [ [[X]], [[ENTRY:%.*]] ] -; CHECK-NEXT: ret double [[RETVAL]] -; -entry: - %z = fadd double %z1, %z2 - %cmp = fcmp une double %y, %z - br i1 %cmp, label %return, label %else - -else: - %div = fdiv double %x, %z - br label %return - -return: - %retval = phi double [ %div, %else ], [ %x, %entry ] - ret double %retval - -} diff --git a/llvm/test/Transforms/Util/PredicateInfo/ordering.ll b/llvm/test/Transforms/Util/PredicateInfo/ordering.ll deleted file mode 100644 index 519168a58b4..00000000000 --- a/llvm/test/Transforms/Util/PredicateInfo/ordering.ll +++ /dev/null @@ -1,79 +0,0 @@ -; REQUIRES: assert -; RUN: opt -print-predicateinfo -analyze -debug < %s 2>&1 | FileCheck %s - -declare void @use(i32) - -; Make sure we are visiting the values to build predicate infos for in a -; deterministic order. -define i32 @test12(i32 %x, i32 %y) { -; CHECK: Visiting i32 %x -; CHECK: Visiting i32 %y -; CHECK: Visiting %lcmp = icmp eq i32 %x, 0 -; CHECK: Visiting %lcmp2 = icmp slt i32 %y, 1000 -; CHECK: Visiting %lcmp3 = icmp slt i32 %y.0, 900 -; CHECK: Visiting %lcmp4 = icmp slt i32 %y.0.1, 700 -; CHECK: Visiting %lcmp5 = icmp slt i32 %y.0.1.2, 700 -; CHECK: Visiting %lcmp6 = icmp slt i32 %y.0.1.2.3, 700 -; CHECK: Visiting %lcmp7 = icmp slt i32 %y.0.1.2.3.4, 700 -; CHECK: Visiting %rcmp = icmp eq i32 %x, 0 -entry: - br i1 undef, label %left, label %right - -left: - %lcmp = icmp eq i32 %x, 0 - br i1 %lcmp, label %left_cond_true, label %left_cond_false - -left_cond_true: - %lcmp2 = icmp slt i32 %y, 1000 - br i1 %lcmp2, label %left_cond_true2, label %left_ret - -left_cond_true2: - call void @use(i32 %y) - %lcmp3 = icmp slt i32 %y, 900 - br i1 %lcmp3, label %left_cond_true3, label %left_ret - -left_cond_true3: - call void @use(i32 %y) - %lcmp4 = icmp slt i32 %y, 700 - br i1 %lcmp4, label %left_cond_true4, label %left_ret - -left_cond_true4: - call void @use(i32 %y) - %lcmp5 = icmp slt i32 %y, 700 - br i1 %lcmp5, label %left_cond_true5, label %left_ret - -left_cond_true5: - call void @use(i32 %y) - %lcmp6 = icmp slt i32 %y, 700 - br i1 %lcmp6, label %left_cond_true6, label %left_ret - -left_cond_true6: - call void @use(i32 %y) - %lcmp7 = icmp slt i32 %y, 700 - br i1 %lcmp7, label %left_cond_true7, label %left_ret - -left_cond_true7: - ret i32 %y - -left_cond_false: - br label %left_ret - -left_ret: - %lres = phi i32 [ %x, %left_cond_true ], [ %x, %left_cond_false ], [ %x, %left_cond_true2 ], [ %x, %left_cond_true3 ], [ %x, %left_cond_true4 ], [ %x, %left_cond_true5 ], [ %x, %left_cond_true6 ] - - ret i32 %lres - -right: - %rcmp = icmp eq i32 %x, 0 - br i1 %rcmp, label %right_cond_true, label %right_cond_false - -right_cond_true: - br label %right_ret - -right_cond_false: - br label %right_ret - -right_ret: - %rres = phi i32 [ %x, %right_cond_true ], [ %x, %right_cond_false ] - ret i32 %rres -} diff --git a/llvm/test/Transforms/Util/PredicateInfo/pr33456.ll b/llvm/test/Transforms/Util/PredicateInfo/pr33456.ll deleted file mode 100644 index f1cc83a071b..00000000000 --- a/llvm/test/Transforms/Util/PredicateInfo/pr33456.ll +++ /dev/null @@ -1,68 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -print-predicateinfo -analyze < %s 2>&1 | FileCheck %s -; Don't insert predicate info for conditions with a single target. -@a = global i32 1, align 4 -@d = common global i32 0, align 4 -@c = common global i32 0, align 4 -@b = common global i32 0, align 4 -@e = common global i32 0, align 4 - -define i32 @main() { -; CHECK-LABEL: @main( -; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @d, align 4 -; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 0 -; CHECK-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP13:%.*]] -; CHECK: [[TMP4:%.*]] = load i32, i32* @a, align 4 -; CHECK-NEXT: [[TMP5:%.*]] = load i32, i32* @c, align 4 -; CHECK-NEXT: [[TMP6:%.*]] = icmp slt i32 [[TMP5]], 1 -; CHECK-NEXT: br i1 [[TMP6]], label [[TMP7:%.*]], label [[TMP9:%.*]] -; CHECK: [[TMP8:%.*]] = icmp eq i32 [[TMP4]], 0 -; CHECK-NEXT: br i1 [[TMP8]], label [[TMP9]], label [[TMP9]] -; CHECK: [[DOT0:%.*]] = phi i32 [ [[TMP4]], [[TMP7]] ], [ [[TMP4]], [[TMP7]] ], [ [[DOT1:%.*]], [[TMP13]] ], [ [[TMP4]], [[TMP3]] ] -; CHECK-NEXT: [[TMP10:%.*]] = load i32, i32* @b, align 4 -; CHECK-NEXT: [[TMP11:%.*]] = sdiv i32 [[TMP10]], [[DOT0]] -; CHECK-NEXT: [[TMP12:%.*]] = icmp eq i32 [[TMP11]], 0 -; CHECK-NEXT: br i1 [[TMP12]], label [[TMP13]], label [[TMP13]] -; CHECK: [[DOT1]] = phi i32 [ [[DOT0]], [[TMP9]] ], [ [[DOT0]], [[TMP9]] ], [ undef, [[TMP0:%.*]] ] -; CHECK-NEXT: [[TMP14:%.*]] = load i32, i32* @e, align 4 -; CHECK-NEXT: [[TMP15:%.*]] = icmp eq i32 [[TMP14]], 0 -; CHECK-NEXT: br i1 [[TMP15]], label [[TMP16:%.*]], label [[TMP9]] -; CHECK: ret i32 0 -; - %1 = load i32, i32* @d, align 4 - %2 = icmp eq i32 %1, 0 - br i1 %2, label %3, label %13 - -; <label>:3: ; preds = %0 - %4 = load i32, i32* @a, align 4 - %5 = load i32, i32* @c, align 4 - %6 = icmp slt i32 %5, 1 - br i1 %6, label %7, label %9 - -; <label>:7: ; preds = %3 - %8 = icmp eq i32 %4, 0 - br i1 %8, label %9, label %9 - -; <label>:9: ; preds = %13, %7, %7, %3 - %.0 = phi i32 [ %4, %7 ], [ %4, %7 ], [ %.1, %13 ], [ %4, %3 ] - %10 = load i32, i32* @b, align 4 - %11 = sdiv i32 %10, %.0 - %12 = icmp eq i32 %11, 0 - br i1 %12, label %13, label %13 - -; <label>:13: ; preds = %9, %9, %0 - %.1 = phi i32 [ %.0, %9 ], [ %.0, %9 ], [ undef, %0 ] - %14 = load i32, i32* @e, align 4 - %15 = icmp eq i32 %14, 0 - br i1 %15, label %16, label %9 - -; <label>:16: ; preds = %13 - ret i32 0 -} - -; Function Attrs: argmemonly nounwind -declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) - -; Function Attrs: argmemonly nounwind -declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) - diff --git a/llvm/test/Transforms/Util/PredicateInfo/pr33457.ll b/llvm/test/Transforms/Util/PredicateInfo/pr33457.ll deleted file mode 100644 index b975ade9321..00000000000 --- a/llvm/test/Transforms/Util/PredicateInfo/pr33457.ll +++ /dev/null @@ -1,93 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -print-predicateinfo -analyze < %s 2>&1 | FileCheck %s -; Don't insert predicate info for conditions with a single target. -@a = global i32 6, align 4 -@c = global i32 -1, align 4 -@e = common global i32 0, align 4 -@.str = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 1 -@d = common global i32 0, align 4 -@b = common global [6 x i32] zeroinitializer, align 16 - -; Function Attrs: nounwind ssp uwtable -define i32 @main() { -; CHECK-LABEL: @main( -; CHECK-NEXT: store i32 6, i32* @e, align 4 -; CHECK-NEXT: br label [[TMP1:%.*]] -; CHECK: [[TMP2:%.*]] = load i32, i32* @d, align 4 -; CHECK-NEXT: [[TMP3:%.*]] = sext i32 [[TMP2]] to i64 -; CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds [6 x i32], [6 x i32]* @b, i64 0, i64 [[TMP3]] -; CHECK-NEXT: [[TMP5:%.*]] = load i32, i32* [[TMP4]], align 4 -; CHECK-NEXT: [[TMP6:%.*]] = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 [[TMP5]]) -; CHECK-NEXT: [[TMP7:%.*]] = load i32, i32* @a, align 4 -; CHECK-NEXT: [[TMP8:%.*]] = icmp eq i32 [[TMP7]], 0 -; CHECK-NEXT: br i1 [[TMP8]], label %thread-pre-split, label [[TMP9:%.*]] -; CHECK: [[TMP10:%.*]] = load i32, i32* @e, align 4 -; CHECK-NEXT: [[TMP11:%.*]] = icmp eq i32 [[TMP10]], 0 -; CHECK-NEXT: br i1 [[TMP11]], label [[TMP12:%.*]], label [[TMP12]] -; CHECK: thread-pre-split: -; CHECK-NEXT: [[DOTPR:%.*]] = load i32, i32* @e, align 4 -; CHECK-NEXT: br label [[TMP12]] -; CHECK: [[TMP13:%.*]] = phi i32 [ [[DOTPR]], %thread-pre-split ], [ [[TMP10]], [[TMP9]] ], [ [[TMP10]], [[TMP9]] ] -; CHECK-NEXT: [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 0 -; CHECK-NEXT: br i1 [[TMP14]], label [[TMP15:%.*]], label [[TMP15]] -; CHECK: br i1 [[TMP14]], label [[TMP16:%.*]], label [[TMP17:%.*]] -; CHECK: br label [[TMP17]] -; CHECK: [[DOT0:%.*]] = phi i32 [ 1, [[TMP16]] ], [ -1, [[TMP15]] ] -; CHECK-NEXT: [[TMP18:%.*]] = and i32 [[DOT0]], 8693 -; CHECK-NEXT: [[TMP19:%.*]] = load i32, i32* @c, align 4 -; CHECK-NEXT: [[TMP20:%.*]] = xor i32 [[TMP18]], [[TMP19]] -; CHECK-NEXT: [[TMP21:%.*]] = xor i32 [[TMP20]], -1 -; CHECK-NEXT: store i32 [[TMP21]], i32* @d, align 4 -; CHECK-NEXT: [[TMP22:%.*]] = icmp slt i32 [[TMP20]], -2 -; CHECK-NEXT: br i1 [[TMP22]], label [[TMP1]], label [[TMP23:%.*]] -; CHECK: ret i32 0 -; - store i32 6, i32* @e, align 4 - br label %1 - -; <label>:1: ; preds = %17, %0 - %2 = load i32, i32* @d, align 4 - %3 = sext i32 %2 to i64 - %4 = getelementptr inbounds [6 x i32], [6 x i32]* @b, i64 0, i64 %3 - %5 = load i32, i32* %4, align 4 - %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %5) #2 - %7 = load i32, i32* @a, align 4 - %8 = icmp eq i32 %7, 0 - br i1 %8, label %thread-pre-split, label %9 - -; <label>:9: ; preds = %1 - %10 = load i32, i32* @e, align 4 - %11 = icmp eq i32 %10, 0 - br i1 %11, label %12, label %12 - -thread-pre-split: ; preds = %1 - %.pr = load i32, i32* @e, align 4 - br label %12 - -; <label>:12: ; preds = %thread-pre-split, %9, %9 - %13 = phi i32 [ %.pr, %thread-pre-split ], [ %10, %9 ], [ %10, %9 ] - %14 = icmp ne i32 %13, 0 - br i1 %14, label %15, label %15 - -; <label>:15: ; preds = %12, %12 - br i1 %14, label %16, label %17 - -; <label>:16: ; preds = %15 - br label %17 - -; <label>:17: ; preds = %16, %15 - %.0 = phi i32 [ 1, %16 ], [ -1, %15 ] - %18 = and i32 %.0, 8693 - %19 = load i32, i32* @c, align 4 - %20 = xor i32 %18, %19 - %21 = xor i32 %20, -1 - store i32 %21, i32* @d, align 4 - %22 = icmp slt i32 %20, -2 - br i1 %22, label %1, label %23 - -; <label>:23: ; preds = %17 - ret i32 0 -} - -declare i32 @printf(i8*, ...) - diff --git a/llvm/test/Transforms/Util/PredicateInfo/testandor.ll b/llvm/test/Transforms/Util/PredicateInfo/testandor.ll deleted file mode 100644 index 86d1a0d247d..00000000000 --- a/llvm/test/Transforms/Util/PredicateInfo/testandor.ll +++ /dev/null @@ -1,211 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -print-predicateinfo < %s 2>&1 | FileCheck %s - -declare void @foo(i1) -declare void @bar(i32) -declare void @llvm.assume(i1) - -define void @testor(i32 %x, i32 %y) { -; CHECK-LABEL: @testor( -; CHECK-NEXT: [[XZ:%.*]] = icmp eq i32 [[X:%.*]], 0 -; CHECK-NEXT: [[YZ:%.*]] = icmp eq i32 [[Y:%.*]], 0 -; CHECK-NEXT: [[Z:%.*]] = or i1 [[XZ]], [[YZ]] -; CHECK: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK: [[Y_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[Y]]) -; CHECK: [[XZ_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[XZ]]) -; CHECK: [[YZ_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[YZ]]) -; CHECK: [[Z_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[Z]]) -; CHECK-NEXT: br i1 [[Z]], label [[ONEOF:%.*]], label [[NEITHER:%.*]] -; CHECK: oneof: -; CHECK-NEXT: call void @foo(i1 [[XZ]]) -; CHECK-NEXT: call void @foo(i1 [[YZ]]) -; CHECK-NEXT: call void @bar(i32 [[X]]) -; CHECK-NEXT: call void @bar(i32 [[Y]]) -; CHECK-NEXT: ret void -; CHECK: neither: -; CHECK-NEXT: call void @foo(i1 [[XZ_0]]) -; CHECK-NEXT: call void @foo(i1 [[YZ_0]]) -; CHECK-NEXT: call void @bar(i32 [[X_0]]) -; CHECK-NEXT: call void @bar(i32 [[Y_0]]) -; CHECK-NEXT: call void @foo(i1 [[Z_0]]) -; CHECK-NEXT: ret void -; - %xz = icmp eq i32 %x, 0 - %yz = icmp eq i32 %y, 0 - %z = or i1 %xz, %yz - br i1 %z, label %oneof, label %neither -oneof: -;; Should not insert on the true edge for or - call void @foo(i1 %xz) - call void @foo(i1 %yz) - call void @bar(i32 %x) - call void @bar(i32 %y) - ret void -neither: - call void @foo(i1 %xz) - call void @foo(i1 %yz) - call void @bar(i32 %x) - call void @bar(i32 %y) - call void @foo(i1 %z) - ret void -} -define void @testand(i32 %x, i32 %y) { -; CHECK-LABEL: @testand( -; CHECK-NEXT: [[XZ:%.*]] = icmp eq i32 [[X:%.*]], 0 -; CHECK-NEXT: [[YZ:%.*]] = icmp eq i32 [[Y:%.*]], 0 -; CHECK-NEXT: [[Z:%.*]] = and i1 [[XZ]], [[YZ]] -; CHECK: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK: [[Y_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[Y]]) -; CHECK: [[XZ_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[XZ]]) -; CHECK: [[YZ_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[YZ]]) -; CHECK: [[Z_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[Z]]) -; CHECK-NEXT: br i1 [[Z]], label [[BOTH:%.*]], label [[NOPE:%.*]] -; CHECK: both: -; CHECK-NEXT: call void @foo(i1 [[XZ_0]]) -; CHECK-NEXT: call void @foo(i1 [[YZ_0]]) -; CHECK-NEXT: call void @bar(i32 [[X_0]]) -; CHECK-NEXT: call void @bar(i32 [[Y_0]]) -; CHECK-NEXT: ret void -; CHECK: nope: -; CHECK-NEXT: call void @foo(i1 [[XZ]]) -; CHECK-NEXT: call void @foo(i1 [[YZ]]) -; CHECK-NEXT: call void @bar(i32 [[X]]) -; CHECK-NEXT: call void @bar(i32 [[Y]]) -; CHECK-NEXT: call void @foo(i1 [[Z_0]]) -; CHECK-NEXT: ret void -; - %xz = icmp eq i32 %x, 0 - %yz = icmp eq i32 %y, 0 - %z = and i1 %xz, %yz - br i1 %z, label %both, label %nope -both: - call void @foo(i1 %xz) - call void @foo(i1 %yz) - call void @bar(i32 %x) - call void @bar(i32 %y) - ret void -nope: -;; Should not insert on the false edge for and - call void @foo(i1 %xz) - call void @foo(i1 %yz) - call void @bar(i32 %x) - call void @bar(i32 %y) - call void @foo(i1 %z) - ret void -} -define void @testandsame(i32 %x, i32 %y) { -; CHECK-LABEL: @testandsame( -; CHECK-NEXT: [[XGT:%.*]] = icmp sgt i32 [[X:%.*]], 0 -; CHECK-NEXT: [[XLT:%.*]] = icmp slt i32 [[X]], 100 -; CHECK-NEXT: [[Z:%.*]] = and i1 [[XGT]], [[XLT]] -; CHECK: [[X_0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK: [[X_0_1:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X_0]]) -; CHECK: [[XGT_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[XGT]]) -; CHECK: [[XLT_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[XLT]]) -; CHECK: [[Z_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[Z]]) -; CHECK-NEXT: br i1 [[Z]], label [[BOTH:%.*]], label [[NOPE:%.*]] -; CHECK: both: -; CHECK-NEXT: call void @foo(i1 [[XGT_0]]) -; CHECK-NEXT: call void @foo(i1 [[XLT_0]]) -; CHECK-NEXT: call void @bar(i32 [[X_0_1]]) -; CHECK-NEXT: ret void -; CHECK: nope: -; CHECK-NEXT: call void @foo(i1 [[XGT]]) -; CHECK-NEXT: call void @foo(i1 [[XLT]]) -; CHECK-NEXT: call void @foo(i1 [[Z_0]]) -; CHECK-NEXT: ret void -; - %xgt = icmp sgt i32 %x, 0 - %xlt = icmp slt i32 %x, 100 - %z = and i1 %xgt, %xlt - br i1 %z, label %both, label %nope -both: - call void @foo(i1 %xgt) - call void @foo(i1 %xlt) - call void @bar(i32 %x) - ret void -nope: - call void @foo(i1 %xgt) - call void @foo(i1 %xlt) - call void @foo(i1 %z) - ret void -} - -define void @testandassume(i32 %x, i32 %y) { -; CHECK-LABEL: @testandassume( -; CHECK-NEXT: [[XZ:%.*]] = icmp eq i32 [[X:%.*]], 0 -; CHECK-NEXT: [[YZ:%.*]] = icmp eq i32 [[Y:%.*]], 0 -; CHECK-NEXT: [[Z:%.*]] = and i1 [[XZ]], [[YZ]] -; CHECK: [[TMP1:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[X]]) -; CHECK: [[TMP2:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[Y]]) -; CHECK: [[TMP3:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[XZ]]) -; CHECK: [[TMP4:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[YZ]]) -; CHECK: [[TMP5:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[Z]]) -; CHECK-NEXT: call void @llvm.assume(i1 [[TMP5]]) -; CHECK: [[DOT0:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[TMP1]]) -; CHECK: [[DOT01:%.*]] = call i32 @llvm.ssa.copy.{{.+}}(i32 [[TMP2]]) -; CHECK: [[DOT02:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[TMP3]]) -; CHECK: [[DOT03:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[TMP4]]) -; CHECK: [[DOT04:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[TMP5]]) -; CHECK-NEXT: br i1 [[TMP5]], label [[BOTH:%.*]], label [[NOPE:%.*]] -; CHECK: both: -; CHECK-NEXT: call void @foo(i1 [[DOT02]]) -; CHECK-NEXT: call void @foo(i1 [[DOT03]]) -; CHECK-NEXT: call void @bar(i32 [[DOT0]]) -; CHECK-NEXT: call void @bar(i32 [[DOT01]]) -; CHECK-NEXT: ret void -; CHECK: nope: -; CHECK-NEXT: call void @foo(i1 [[DOT04]]) -; CHECK-NEXT: ret void -; - %xz = icmp eq i32 %x, 0 - %yz = icmp eq i32 %y, 0 - %z = and i1 %xz, %yz - call void @llvm.assume(i1 %z) - br i1 %z, label %both, label %nope -both: - call void @foo(i1 %xz) - call void @foo(i1 %yz) - call void @bar(i32 %x) - call void @bar(i32 %y) - ret void -nope: - call void @foo(i1 %z) - ret void -} - -;; Unlike and/or for branches, assume is *always* true, so we only match and for it -define void @testorassume(i32 %x, i32 %y) { -; -; CHECK-LABEL: @testorassume( -; CHECK-NEXT: [[XZ:%.*]] = icmp eq i32 [[X:%.*]], 0 -; CHECK-NEXT: [[YZ:%.*]] = icmp eq i32 [[Y:%.*]], 0 -; CHECK-NEXT: [[Z:%.*]] = or i1 [[XZ]], [[YZ]] -; CHECK-NEXT: call void @llvm.assume(i1 [[Z]]) -; CHECK: [[Z_0:%.*]] = call i1 @llvm.ssa.copy.{{.+}}(i1 [[Z]]) -; CHECK-NEXT: br i1 [[Z]], label [[BOTH:%.*]], label [[NOPE:%.*]] -; CHECK: both: -; CHECK-NEXT: call void @foo(i1 [[XZ]]) -; CHECK-NEXT: call void @foo(i1 [[YZ]]) -; CHECK-NEXT: call void @bar(i32 [[X]]) -; CHECK-NEXT: call void @bar(i32 [[Y]]) -; CHECK-NEXT: ret void -; CHECK: nope: -; CHECK-NEXT: call void @foo(i1 [[Z_0]]) -; CHECK-NEXT: ret void -; - %xz = icmp eq i32 %x, 0 - %yz = icmp eq i32 %y, 0 - %z = or i1 %xz, %yz - call void @llvm.assume(i1 %z) - br i1 %z, label %both, label %nope -both: - call void @foo(i1 %xz) - call void @foo(i1 %yz) - call void @bar(i32 %x) - call void @bar(i32 %y) - ret void -nope: - call void @foo(i1 %z) - ret void -} diff --git a/llvm/test/Transforms/Util/PredicateInfo/unnamed-types.ll b/llvm/test/Transforms/Util/PredicateInfo/unnamed-types.ll deleted file mode 100644 index 21e702178fd..00000000000 --- a/llvm/test/Transforms/Util/PredicateInfo/unnamed-types.ll +++ /dev/null @@ -1,36 +0,0 @@ -; RUN: opt < %s -print-predicateinfo 2>&1 | FileCheck %s - -%1 = type opaque -%0 = type opaque - -; Check we can use ssa.copy with unnamed types. - -; CHECK-LABEL: bb: -; CHECK: Has predicate info -; CHECK: branch predicate info { TrueEdge: 1 Comparison: %cmp1 = icmp ne %0* %arg, null Edge: [label %bb,label %bb1] } -; CHECK-NEXT: %arg.0 = call %0* @llvm.ssa.copy.{{.+}}(%0* %arg) - -; CHECK-LABEL: bb1: -; CHECK: Has predicate info -; CHECK-NEXT: branch predicate info { TrueEdge: 0 Comparison: %cmp2 = icmp ne %1* null, %tmp Edge: [label %bb1,label %bb3] } -; CHECK-NEXT: %tmp.0 = call %1* @llvm.ssa.copy.{{.+}}(%1* %tmp) - -define void @f0(%0* %arg, %1* %tmp) { -bb: - %cmp1 = icmp ne %0* %arg, null - br i1 %cmp1, label %bb1, label %bb2 - -bb1: ; preds = %bb - %cmp2 = icmp ne %1* null, %tmp - br i1 %cmp2, label %bb2, label %bb3 - -bb2: ; preds = %bb - ret void - -bb3: ; preds = %bb - %u1 = call i8* @fun(%1* %tmp) - %tmp2 = bitcast %0* %arg to i8* - ret void -} - -declare i8* @fun(%1*) diff --git a/llvm/test/Transforms/Util/call-promotion-utils-ptrcast-attribute.ll b/llvm/test/Transforms/Util/call-promotion-utils-ptrcast-attribute.ll deleted file mode 100644 index 2b4c8c8e85f..00000000000 --- a/llvm/test/Transforms/Util/call-promotion-utils-ptrcast-attribute.ll +++ /dev/null @@ -1,32 +0,0 @@ -; RUN: opt -S -pgo-icall-prom -icp-total-percent-threshold=0 < %s 2>&1 | FileCheck %s - -; Test that CallPromotionUtils will promote calls which require pointer cast -; safely, i.e. drop incompatible attributes. - -@foo = common global i8* (i8*)* null, align 8 - -; casting to i64 and pointer attribute at callsite dropped. -define i64 @func2(i64 %a) { - ret i64 undef -} - -; no casting needed, attribute at callsite preserved. -define i8* @func4(i8* %a) { - ret i8* undef -} - -define i8* @bar(i8* %arg) { - %tmp = load i8* (i8*)*, i8* (i8*)** @foo, align 8 - -; Make sure callsite attributes are preserved on arguments and retval. -; CHECK: call noalias i8* @func4(i8* nonnull - -; Make sure callsite attributes are dropped on arguments and retval. -; CHECK: [[ARG:%[0-9]+]] = ptrtoint i8* %arg to i64 -; CHECK-NEXT: call i64 @func2(i64 [[ARG]]) - - %call = call noalias i8* %tmp(i8* nonnull %arg), !prof !1 - ret i8* %call -} - -!1 = !{!"VP", i32 0, i64 1440, i64 7651369219802541373, i64 1030, i64 -4377547752858689819, i64 410} diff --git a/llvm/test/Transforms/Util/call-promotion-utils-ptrcast.ll b/llvm/test/Transforms/Util/call-promotion-utils-ptrcast.ll deleted file mode 100644 index 351ec292f18..00000000000 --- a/llvm/test/Transforms/Util/call-promotion-utils-ptrcast.ll +++ /dev/null @@ -1,50 +0,0 @@ -; RUN: opt -S -pgo-icall-prom -icp-total-percent-threshold=0 -icp-max-prom=4 < %s 2>&1 | FileCheck %s - -; Test that CallPromotionUtils will promote calls which require pointer casts. - -@foo = common global i64 (i64)* null, align 8 - -; Check ptrcast arguments. -define i64 @func1(i8* %a) { - ret i64 undef -} - -; Check ptrcast return. -define i8* @func2(i64 %a) { - ret i8* undef -} - -; Check ptrcast arguments and return. -define i8* @func3(i8 *%a) { - ret i8* undef -} - -; Check mixed ptrcast and bitcast. -define i8* @func4(double %f) { - ret i8* undef -} - -define i64 @bar() { - %tmp = load i64 (i64)*, i64 (i64)** @foo, align 8 - -; CHECK: [[ARG:%[0-9]+]] = bitcast i64 1 to double -; CHECK-NEXT: [[RET:%[0-9]+]] = call i8* @func4(double [[ARG]]) -; CHECK-NEXT: ptrtoint i8* [[RET]] to i64 - -; CHECK: [[RET:%[0-9]+]] = call i8* @func2(i64 1) -; CHECK-NEXT: ptrtoint i8* [[RET]] to i64 - -; CHECK: [[ARG:%[0-9]+]] = inttoptr i64 1 to i8* -; CHECK-NEXT: [[RET:%[0-9]+]] = call i8* @func3(i8* [[ARG]]) -; CHECK-NEXT: ptrtoint i8* [[RET]] to i64 - -; CHECK: [[ARG:%[0-9]+]] = inttoptr i64 1 to i8* -; CHECK-NEXT: call i64 @func1(i8* [[ARG]]) -; CHECK-NOT: ptrtoint -; CHECK-NOT: bitcast - - %call = call i64 %tmp(i64 1), !prof !1 - ret i64 %call -} - -!1 = !{!"VP", i32 0, i64 1600, i64 7651369219802541373, i64 1030, i64 -4377547752858689819, i64 410, i64 -6929281286627296573, i64 150, i64 -2545542355363006406, i64 10} diff --git a/llvm/test/Transforms/Util/clone-dicompileunit.ll b/llvm/test/Transforms/Util/clone-dicompileunit.ll deleted file mode 100644 index 13a2abffa87..00000000000 --- a/llvm/test/Transforms/Util/clone-dicompileunit.ll +++ /dev/null @@ -1,66 +0,0 @@ -; RUN: opt -run-twice -verify -disable-debug-info-type-map -S -o - %s | FileCheck %s - -; Generated using: -; $ cat p.cpp -; void sink(void *); -; class A { -; public: -; template <typename> void m_fn2() { static int a; } -; virtual void m_fn1(); -; }; -; void foo() { -; class B : public A { -; public: -; B() { m_fn2<B>(); } -; }; -; sink(new B); -; } -; $ clang++ -target x86_64-unknown-linux -fvisibility=hidden -O2 -g2 -flto -S p.cpp -o p.ll -; # then manually removed function/gv definitions - -; Test that when the module is cloned it does not contain a reference to -; the original DICompileUnit as a result of a collision between the cloned -; DISubprogram for m_fn2<B> (which refers to the non-ODR entity B via -; template parameters) and the original DISubprogram. - -; CHECK: DICompileUnit -; CHECK-NOT: DICompileUnit - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux" - -!llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!28, !29} -!llvm.ident = !{!30} - -!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 5.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, globals: !3) -!1 = !DIFile(filename: "p.cpp", directory: "/usr/local/google/home/pcc/b682773-2-repro/small2") -!2 = !{} -!3 = !{!4} -!4 = !DIGlobalVariableExpression(var: !5, expr: !DIExpression()) -!5 = distinct !DIGlobalVariable(name: "a", scope: !6, file: !1, line: 5, type: !27, isLocal: true, isDefinition: true) -!6 = distinct !DISubprogram(name: "m_fn2<B>", linkageName: "_ZN1A5m_fn2IZ3foovE1BEEvv", scope: !7, file: !1, line: 5, type: !8, isLocal: true, isDefinition: true, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true, unit: !0, templateParams: !11, declaration: !23, retainedNodes: !24) -!7 = !DICompositeType(tag: DW_TAG_class_type, name: "A", file: !1, line: 3, flags: DIFlagFwdDecl, identifier: "_ZTS1A") -!8 = !DISubroutineType(types: !9) -!9 = !{null, !10} -!10 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer) -!11 = !{!12} -!12 = !DITemplateTypeParameter(type: !13) -!13 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "B", scope: !14, file: !1, line: 10, size: 64, elements: !17, vtableHolder: !7) -!14 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 9, type: !15, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !2) -!15 = !DISubroutineType(types: !16) -!16 = !{null} -!17 = !{!18, !19} -!18 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !13, baseType: !7, flags: DIFlagPublic) -!19 = !DISubprogram(name: "B", scope: !13, file: !1, line: 12, type: !20, isLocal: false, isDefinition: false, scopeLine: 12, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: true) -!20 = !DISubroutineType(types: !21) -!21 = !{null, !22} -!22 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer) -!23 = !DISubprogram(name: "m_fn2<B>", linkageName: "_ZN1A5m_fn2IZ3foovE1BEEvv", scope: !7, file: !1, line: 5, type: !8, isLocal: false, isDefinition: false, scopeLine: 5, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: true, templateParams: !11) -!24 = !{!25} -!25 = !DILocalVariable(name: "this", arg: 1, scope: !6, type: !26, flags: DIFlagArtificial | DIFlagObjectPointer) -!26 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64) -!27 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -!28 = !{i32 2, !"Dwarf Version", i32 4} -!29 = !{i32 2, !"Debug Info Version", i32 3} -!30 = !{!"clang version 5.0.0 "} diff --git a/llvm/test/Transforms/Util/combine-alias-scope-metadata.ll b/llvm/test/Transforms/Util/combine-alias-scope-metadata.ll deleted file mode 100644 index f58e4f783b0..00000000000 --- a/llvm/test/Transforms/Util/combine-alias-scope-metadata.ll +++ /dev/null @@ -1,24 +0,0 @@ -; RUN: opt < %s -S -basicaa -memcpyopt | FileCheck %s -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" - -define void @test(i8* noalias dereferenceable(1) %in, i8* noalias dereferenceable(1) %out) { - %tmp = alloca i8 - %tmp2 = alloca i8 -; CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %out, i8* align 8 %in, i64 1, i1 false) - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %tmp, i8* align 8 %in, i64 1, i1 false), !alias.scope !4 - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %tmp2, i8* align 8 %tmp, i64 1, i1 false), !alias.scope !5 - - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %out, i8* align 8 %tmp2, i64 1, i1 false), !noalias !6 - - ret void -} - -declare void @llvm.memcpy.p0i8.p0i8.i64(i8*, i8*, i64, i1) - -!0 = !{!0} -!1 = distinct !{!1, !0, !"in"} -!2 = distinct !{!2, !0, !"tmp"} -!3 = distinct !{!3, !0, !"tmp2"} -!4 = distinct !{!1, !2} -!5 = distinct !{!2, !3} -!6 = distinct !{!1, !2} diff --git a/llvm/test/Transforms/Util/dbg-user-of-aext.ll b/llvm/test/Transforms/Util/dbg-user-of-aext.ll deleted file mode 100644 index 9a310669389..00000000000 --- a/llvm/test/Transforms/Util/dbg-user-of-aext.ll +++ /dev/null @@ -1,87 +0,0 @@ -; Checks that llvm.dbg.declare -> llvm.dbg.value conversion utility -; (here exposed through the SROA) pass refers to [s|z]exts of values (as -; opposed to the operand of a [s|z]ext). -; RUN: opt -S -sroa %s | FileCheck %s - -; Built from: -; struct foo { bool b; long i; }; -; void f(bool b, bool expr, foo g) { -; } -; And modifying the frag dbg.declare to use a fragmented DIExpression (with offset: 0, size: 4) -; to test the dbg.declare+fragment case here. - -; Expect two fragments: -; * first starting at bit 0, 8 bits (for the bool) -; * second starting at bit 32, 32 bits (for the long) -; (this happens to create/demonstrate a gap from bits [7, 32)) - -; But also check that a complex expression is not used for a lone bool -; parameter. It can reference the register it's in directly without masking off -; high bits or anything - -; CHECK: call void @llvm.dbg.value(metadata i8 %g.coerce0, metadata ![[VAR_STRUCT:[0-9]+]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 8)) -; CHECK: call void @llvm.dbg.value(metadata i64 %g.coerce1, metadata ![[VAR_STRUCT]], metadata !DIExpression(DW_OP_LLVM_fragment, 32, 64)) -; CHECK: call void @llvm.dbg.value(metadata i8 %frombool, metadata ![[VAR_BOOL:[0-9]+]], metadata !DIExpression()) -; CHECK: call void @llvm.dbg.value(metadata i8 %frombool1, metadata ![[VAR_FRAG:[0-9]+]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 4)) - -%struct.foo = type { i8, i64 } - -; Function Attrs: noinline nounwind uwtable -define void @_Z1fbb3foo(i1 zeroext %b, i1 zeroext %frag, i8 %g.coerce0, i64 %g.coerce1) #0 !dbg !6 { -entry: - %g = alloca %struct.foo, align 8 - %b.addr = alloca i8, align 1 - %frag.addr = alloca i8, align 1 - %0 = bitcast %struct.foo* %g to { i8, i64 }* - %1 = getelementptr inbounds { i8, i64 }, { i8, i64 }* %0, i32 0, i32 0 - store i8 %g.coerce0, i8* %1, align 8 - %2 = getelementptr inbounds { i8, i64 }, { i8, i64 }* %0, i32 0, i32 1 - store i64 %g.coerce1, i64* %2, align 8 - %frombool = zext i1 %b to i8 - store i8 %frombool, i8* %b.addr, align 1 - call void @llvm.dbg.declare(metadata i8* %b.addr, metadata !15, metadata !16), !dbg !17 - %frombool1 = sext i1 %frag to i8 - store i8 %frombool1, i8* %frag.addr, align 1 - call void @llvm.dbg.declare(metadata i8* %frag.addr, metadata !18, metadata !23), !dbg !19 - call void @llvm.dbg.declare(metadata %struct.foo* %g, metadata !20, metadata !16), !dbg !21 - ret void, !dbg !22 -} - -; CHECK: ![[VAR_STRUCT]] = !DILocalVariable(name: "g" -; CHECK: ![[VAR_BOOL]] = !DILocalVariable(name: "b" -; CHECK: ![[VAR_FRAG]] = !DILocalVariable(name: "frag" - -; Function Attrs: nounwind readnone speculatable -declare void @llvm.dbg.declare(metadata, metadata, metadata) #1 - -attributes #0 = { noinline nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #1 = { nounwind readnone speculatable } - -!llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!3, !4} -!llvm.ident = !{!5} - -!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 5.0.0 (trunk 303077) (llvm/trunk 303098)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) -!1 = !DIFile(filename: "foo.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch") -!2 = !{} -!3 = !{i32 2, !"Dwarf Version", i32 4} -!4 = !{i32 2, !"Debug Info Version", i32 3} -!5 = !{!"clang version 5.0.0 (trunk 303077) (llvm/trunk 303098)"} -!6 = distinct !DISubprogram(name: "f", linkageName: "_Z1fbb3foo", scope: !1, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2) -!7 = !DISubroutineType(types: !8) -!8 = !{null, !9, !9, !10} -!9 = !DIBasicType(name: "bool", size: 8, encoding: DW_ATE_boolean) -!10 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "foo", file: !1, line: 1, size: 128, elements: !11, identifier: "_ZTS3foo") -!11 = !{!12, !13} -!12 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !10, file: !1, line: 1, baseType: !9, size: 8) -!13 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !10, file: !1, line: 1, baseType: !14, size: 64, offset: 64) -!14 = !DIBasicType(name: "long int", size: 64, encoding: DW_ATE_signed) -!15 = !DILocalVariable(name: "b", arg: 1, scope: !6, file: !1, line: 2, type: !9) -!16 = !DIExpression() -!17 = !DILocation(line: 2, column: 13, scope: !6) -!18 = !DILocalVariable(name: "frag", arg: 2, scope: !6, file: !1, line: 2, type: !9) -!19 = !DILocation(line: 2, column: 21, scope: !6) -!20 = !DILocalVariable(name: "g", arg: 3, scope: !6, file: !1, line: 2, type: !10) -!21 = !DILocation(line: 2, column: 31, scope: !6) -!22 = !DILocation(line: 3, column: 1, scope: !6) -!23 = !DIExpression(DW_OP_LLVM_fragment, 0, 4) diff --git a/llvm/test/Transforms/Util/flattencfg.ll b/llvm/test/Transforms/Util/flattencfg.ll deleted file mode 100644 index 4fcb77ab023..00000000000 --- a/llvm/test/Transforms/Util/flattencfg.ll +++ /dev/null @@ -1,26 +0,0 @@ -; RUN: opt -flattencfg -S < %s | FileCheck %s - - -; This test checks whether the pass completes without a crash. -; The code is not transformed in any way -; -; CHECK-LABEL: @test_not_crash -define void @test_not_crash(i32 %in_a) #0 { -entry: - %cmp0 = icmp eq i32 %in_a, -1 - %cmp1 = icmp ne i32 %in_a, 0 - %cond0 = and i1 %cmp0, %cmp1 - br i1 %cond0, label %b0, label %b1 - -b0: ; preds = %entry - %cmp2 = icmp eq i32 %in_a, 0 - %cmp3 = icmp ne i32 %in_a, 1 - %cond1 = or i1 %cmp2, %cmp3 - br i1 %cond1, label %exit, label %b1 - -b1: ; preds = %entry, %b0 - br label %exit - -exit: ; preds = %entry, %b0, %b1 - ret void -} diff --git a/llvm/test/Transforms/Util/libcalls-fast-math-inf-loop.ll b/llvm/test/Transforms/Util/libcalls-fast-math-inf-loop.ll deleted file mode 100644 index a351fe82173..00000000000 --- a/llvm/test/Transforms/Util/libcalls-fast-math-inf-loop.ll +++ /dev/null @@ -1,60 +0,0 @@ -; RUN: opt -S -instcombine -o - %s | FileCheck %s - -; Test that fast math lib call simplification of double math function to float -; equivalent doesn't occur when the calling function matches the float -; equivalent math function. Otherwise this can cause the generation of infinite -; loops when compiled with -O2/3 and fast math. - -; Test case C source: -; -; extern double exp(double x); -; inline float expf(float x) { return (float) exp((double) x); } -; float fn(float f) { return expf(f); } -; -; IR generated with command: -; -; clang -cc1 -O2 -ffast-math -emit-llvm -disable-llvm-passes -triple x86_64-unknown-unknown -o - <srcfile> - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-unknown" - -; Function Attrs: nounwind -define float @fn(float %f) #0 { -; CHECK: define float @fn( -; CHECK: call fast float @expf( - %f.addr = alloca float, align 4 - store float %f, float* %f.addr, align 4, !tbaa !1 - %1 = load float, float* %f.addr, align 4, !tbaa !1 - %call = call fast float @expf(float %1) #3 - ret float %call -} - -; Function Attrs: inlinehint nounwind readnone -define available_externally float @expf(float %x) #1 { -; CHECK: define available_externally float @expf( -; CHECK: fpext float -; CHECK: call fast double @exp( -; CHECK: fptrunc double - %x.addr = alloca float, align 4 - store float %x, float* %x.addr, align 4, !tbaa !1 - %1 = load float, float* %x.addr, align 4, !tbaa !1 - %conv = fpext float %1 to double - %call = call fast double @exp(double %conv) #3 - %conv1 = fptrunc double %call to float - ret float %conv1 -} - -; Function Attrs: nounwind readnone -declare double @exp(double) #2 - -attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-features"="+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #1 = { inlinehint nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-features"="+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #2 = { nounwind readnone } - -!llvm.ident = !{!0} - -!0 = !{!"clang version 5.0.0"} -!1 = !{!2, !2, i64 0} -!2 = !{!"float", !3, i64 0} -!3 = !{!"omnipotent char", !4, i64 0} -!4 = !{!"Simple C/C++ TBAA"} diff --git a/llvm/test/Transforms/Util/libcalls-opt-remarks.ll b/llvm/test/Transforms/Util/libcalls-opt-remarks.ll deleted file mode 100644 index 4d44e6dd24d..00000000000 --- a/llvm/test/Transforms/Util/libcalls-opt-remarks.ll +++ /dev/null @@ -1,57 +0,0 @@ -; RUN: opt < %s -instcombine -o /dev/null -pass-remarks-output=%t -S \ -; RUN: -pass-remarks=instcombine 2>&1 | FileCheck %s -; RUN: cat %t | FileCheck -check-prefix=YAML %s -; RUN: opt < %s -passes='require<opt-remark-emit>,instcombine' -o /dev/null \ -; RUN: -pass-remarks-output=%t -S -pass-remarks=instcombine 2>&1 | FileCheck %s -; RUN: cat %t | FileCheck -check-prefix=YAML %s - -; CHECK: remark: libcalls-opt-remarks.c:10:10: folded strlen(select) to select of constants{{$}} -; CHECK-NOT: remark: - -; YAML: --- !Passed -; YAML-NEXT: Pass: instcombine -; YAML-NEXT: Name: simplify-libcalls -; YAML-NEXT: DebugLoc: { File: libcalls-opt-remarks.c, Line: 10, Column: 10 } -; YAML-NEXT: Function: f1 -; YAML-NEXT: Args: -; YAML-NEXT: - String: 'folded strlen(select) to select of constants' -; YAML-NEXT: ... - -target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" - -declare i32 @strlen(i8*) - -@hello = constant [6 x i8] c"hello\00" -@longer = constant [7 x i8] c"longer\00" - -define i32 @f1(i1) !dbg !7 { - %hello = getelementptr [6 x i8], [6 x i8]* @hello, i32 0, i32 0, !dbg !10 - %longer = getelementptr [7 x i8], [7 x i8]* @longer, i32 0, i32 0, !dbg !12 - %2 = select i1 %0, i8* %hello, i8* %longer, !dbg !9 - %3 = call i32 @strlen(i8* %2), !dbg !14 - ret i32 %3, !dbg !16 -} - - - -!llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!3, !4, !5} -!llvm.ident = !{!6} - -!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "Apple LLVM version 8.1.0 (clang-802.0.42)", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !2) -!1 = !DIFile(filename: "libcalls-opt-remarks.c", directory: "/tmp") -!2 = !{} -!3 = !{i32 2, !"Dwarf Version", i32 4} -!4 = !{i32 2, !"Debug Info Version", i32 3} -!5 = !{i32 1, !"PIC Level", i32 2} -!6 = !{!"Apple LLVM version 8.1.0 (clang-802.0.42)"} -!7 = distinct !DISubprogram(name: "f1", scope: !1, file: !1, line: 9, type: !8, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !2) -!8 = !DISubroutineType(types: !2) -!9 = !DILocation(line: 10, column: 17, scope: !7) -!10 = !DILocation(line: 10, column: 24, scope: !11) -!11 = !DILexicalBlockFile(scope: !7, file: !1, discriminator: 1) -!12 = !DILocation(line: 10, column: 32, scope: !13) -!13 = !DILexicalBlockFile(scope: !7, file: !1, discriminator: 2) -!14 = !DILocation(line: 10, column: 10, scope: !15) -!15 = !DILexicalBlockFile(scope: !7, file: !1, discriminator: 3) -!16 = !DILocation(line: 10, column: 3, scope: !15) diff --git a/llvm/test/Transforms/Util/libcalls-shrinkwrap-double.ll b/llvm/test/Transforms/Util/libcalls-shrinkwrap-double.ll deleted file mode 100644 index d015a9d4d60..00000000000 --- a/llvm/test/Transforms/Util/libcalls-shrinkwrap-double.ll +++ /dev/null @@ -1,241 +0,0 @@ -; RUN: opt < %s -libcalls-shrinkwrap -S | FileCheck %s -; New PM -; RUN: opt < %s -passes=libcalls-shrinkwrap -S | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -define void @test_range_error(double %value) { -entry: - %call_0 = call double @cosh(double %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp olt double %value, -7.100000e+02 -; CHECK: [[COND2:%[0-9]+]] = fcmp ogt double %value, 7.100000e+02 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT:[0-9]+]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_0 = call double @cosh(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_1 = call double @exp(double %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp olt double %value, -7.450000e+02 -; CHECK: [[COND2:%[0-9]+]] = fcmp ogt double %value, 7.090000e+02 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_1 = call double @exp(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_3 = call double @exp2(double %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp olt double %value, -1.074000e+03 -; CHECK: [[COND2:%[0-9]+]] = fcmp ogt double %value, 1.023000e+03 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_3 = call double @exp2(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_4 = call double @sinh(double %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp olt double %value, -7.100000e+02 -; CHECK: [[COND2:%[0-9]+]] = fcmp ogt double %value, 7.100000e+02 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_4 = call double @sinh(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_5 = call double @expm1(double %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ogt double %value, 7.090000e+02 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_5 = call double @expm1(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - ret void -} - -declare double @cosh(double) -declare double @exp(double) -declare double @exp2(double) -declare double @sinh(double) -declare double @expm1(double) - -define void @test_domain_error(double %value) { -entry: - %call_00 = call double @acos(double %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp ogt double %value, 1.000000e+00 -; CHECK: [[COND2:%[0-9]+]] = fcmp olt double %value, -1.000000e+00 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_00 = call double @acos(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_01 = call double @asin(double %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp ogt double %value, 1.000000e+00 -; CHECK: [[COND2:%[0-9]+]] = fcmp olt double %value, -1.000000e+00 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_01 = call double @asin(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_02 = call double @cos(double %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp oeq double %value, 0xFFF0000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp oeq double %value, 0x7FF0000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_02 = call double @cos(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_03 = call double @sin(double %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp oeq double %value, 0xFFF0000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp oeq double %value, 0x7FF0000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_03 = call double @sin(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_04 = call double @acosh(double %value) -; CHECK: [[COND:%[0-9]+]] = fcmp olt double %value, 1.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_04 = call double @acosh(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_05 = call double @sqrt(double %value) -; CHECK: [[COND:%[0-9]+]] = fcmp olt double %value, 0.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_05 = call double @sqrt(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_06 = call double @atanh(double %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp oge double %value, 1.000000e+00 -; CHECK: [[COND2:%[0-9]+]] = fcmp ole double %value, -1.000000e+00 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_06 = call double @atanh(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_07 = call double @log(double %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole double %value, 0.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_07 = call double @log(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_08 = call double @log10(double %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole double %value, 0.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_08 = call double @log10(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_09 = call double @log2(double %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole double %value, 0.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_09 = call double @log2(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_10 = call double @logb(double %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole double %value, 0.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_10 = call double @logb(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_11 = call double @log1p(double %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole double %value, -1.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_11 = call double @log1p(double %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - ret void -} - -declare double @acos(double) -declare double @asin(double) -declare double @cos(double) -declare double @sin(double) -declare double @acosh(double) -declare double @sqrt(double) -declare double @atanh(double) -declare double @log(double) -declare double @log10(double) -declare double @log2(double) -declare double @logb(double) -declare double @log1p(double) - -define void @test_pow(i32 %int_val, double %exp) { - %call = call double @pow(double 2.500000e+00, double %exp) -; CHECK: [[COND:%[0-9]+]] = fcmp ogt double %exp, 1.270000e+02 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call = call double @pow(double 2.500000e+00, double %exp) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %conv = sitofp i32 %int_val to double - %call1 = call double @pow(double %conv, double %exp) -; CHECK: [[COND1:%[0-9]+]] = fcmp ogt double %exp, 3.200000e+01 -; CHECK: [[COND2:%[0-9]+]] = fcmp ole double %conv, 0.000000e+00 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call1 = call double @pow(double %conv, double %exp) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %conv2 = trunc i32 %int_val to i8 - %conv3 = uitofp i8 %conv2 to double - %call4 = call double @pow(double %conv3, double %exp) -; CHECK: [[COND1:%[0-9]+]] = fcmp ogt double %exp, 1.280000e+02 -; CHECK: [[COND2:%[0-9]+]] = fcmp ole double %conv3, 0.000000e+00 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call4 = call double @pow(double %conv3, double %exp) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - - %conv5 = trunc i32 %int_val to i16 - %conv6 = uitofp i16 %conv5 to double - %call7 = call double @pow(double %conv6, double %exp) -; CHECK: [[COND1:%[0-9]+]] = fcmp ogt double %exp, 6.400000e+01 -; CHECK: [[COND2:%[0-9]+]] = fcmp ole double %conv6, 0.000000e+00 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call7 = call double @pow(double %conv6, double %exp) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - ret void -} - -declare double @pow(double, double) - -; CHECK: ![[BRANCH_WEIGHT]] = !{!"branch_weights", i32 1, i32 2000} diff --git a/llvm/test/Transforms/Util/libcalls-shrinkwrap-float.ll b/llvm/test/Transforms/Util/libcalls-shrinkwrap-float.ll deleted file mode 100644 index 4affc006e38..00000000000 --- a/llvm/test/Transforms/Util/libcalls-shrinkwrap-float.ll +++ /dev/null @@ -1,191 +0,0 @@ -; RUN: opt < %s -libcalls-shrinkwrap -S | FileCheck %s -; New PM -; RUN: opt < %s -passes=libcalls-shrinkwrap -S | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -define void @test_range_error(float %value) { -entry: - %call_0 = call float @coshf(float %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp olt float %value, -8.900000e+01 -; CHECK: [[COND2:%[0-9]+]] = fcmp ogt float %value, 8.900000e+01 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT:[0-9]+]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_0 = call float @coshf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_1 = call float @expf(float %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp olt float %value, -1.030000e+02 -; CHECK: [[COND2:%[0-9]+]] = fcmp ogt float %value, 8.800000e+01 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_1 = call float @expf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_3 = call float @exp2f(float %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp olt float %value, -1.490000e+02 -; CHECK: [[COND2:%[0-9]+]] = fcmp ogt float %value, 1.270000e+02 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_3 = call float @exp2f(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_4 = call float @sinhf(float %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp olt float %value, -8.900000e+01 -; CHECK: [[COND2:%[0-9]+]] = fcmp ogt float %value, 8.900000e+01 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_4 = call float @sinhf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_5 = call float @expm1f(float %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ogt float %value, 8.800000e+01 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_5 = call float @expm1f(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - ret void -} - -declare float @coshf(float) -declare float @expf(float) -declare float @exp2f(float) -declare float @sinhf(float) -declare float @expm1f(float) - -define void @test_domain_error(float %value) { -entry: - - %call_00 = call float @acosf(float %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp ogt float %value, 1.000000e+00 -; CHECK: [[COND2:%[0-9]+]] = fcmp olt float %value, -1.000000e+00 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_00 = call float @acosf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_01 = call float @asinf(float %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp ogt float %value, 1.000000e+00 -; CHECK: [[COND2:%[0-9]+]] = fcmp olt float %value, -1.000000e+00 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_01 = call float @asinf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_02 = call float @cosf(float %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp oeq float %value, 0xFFF0000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp oeq float %value, 0x7FF0000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_02 = call float @cosf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_03 = call float @sinf(float %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp oeq float %value, 0xFFF0000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp oeq float %value, 0x7FF0000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_03 = call float @sinf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_04 = call float @acoshf(float %value) -; CHECK: [[COND:%[0-9]+]] = fcmp olt float %value, 1.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_04 = call float @acoshf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_05 = call float @sqrtf(float %value) -; CHECK: [[COND:%[0-9]+]] = fcmp olt float %value, 0.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_05 = call float @sqrtf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_06 = call float @atanhf(float %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp oge float %value, 1.000000e+00 -; CHECK: [[COND2:%[0-9]+]] = fcmp ole float %value, -1.000000e+00 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_06 = call float @atanhf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_07 = call float @logf(float %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, 0.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_07 = call float @logf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_08 = call float @log10f(float %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, 0.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_08 = call float @log10f(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_09 = call float @log2f(float %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, 0.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_09 = call float @log2f(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_10 = call float @logbf(float %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, 0.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_10 = call float @logbf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_11 = call float @log1pf(float %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, -1.000000e+00 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_11 = call float @log1pf(float %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - ret void -} - -declare float @acosf(float) -declare float @asinf(float) -declare float @cosf(float) -declare float @sinf(float) -declare float @acoshf(float) -declare float @sqrtf(float) -declare float @atanhf(float) -declare float @logf(float) -declare float @log10f(float) -declare float @log2f(float) -declare float @logbf(float) -declare float @log1pf(float) - -; CHECK: ![[BRANCH_WEIGHT]] = !{!"branch_weights", i32 1, i32 2000} diff --git a/llvm/test/Transforms/Util/libcalls-shrinkwrap-long-double.ll b/llvm/test/Transforms/Util/libcalls-shrinkwrap-long-double.ll deleted file mode 100644 index 54a31e5173f..00000000000 --- a/llvm/test/Transforms/Util/libcalls-shrinkwrap-long-double.ll +++ /dev/null @@ -1,192 +0,0 @@ -; RUN: opt < %s -libcalls-shrinkwrap -S | FileCheck %s -; New PM -; RUN: opt < %s -passes=libcalls-shrinkwrap -S | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -define void @test_range_error(x86_fp80 %value) { -entry: - %call_0 = call x86_fp80 @coshl(x86_fp80 %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xKC00CB174000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK400CB174000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT:[0-9]+]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_0 = call x86_fp80 @coshl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_1 = call x86_fp80 @expl(x86_fp80 %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xKC00CB21C000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK400CB170000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_1 = call x86_fp80 @expl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_3 = call x86_fp80 @exp2l(x86_fp80 %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xKC00D807A000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK400CB1DC000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_3 = call x86_fp80 @exp2l(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_4 = call x86_fp80 @sinhl(x86_fp80 %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xKC00CB174000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK400CB174000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_4 = call x86_fp80 @sinhl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_5 = call x86_fp80 @expm1l(x86_fp80 %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK400CB170000000000000 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_5 = call x86_fp80 @expm1l(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - ret void -} - -declare x86_fp80 @coshl(x86_fp80) -declare x86_fp80 @expl(x86_fp80) -declare x86_fp80 @exp10l(x86_fp80) -declare x86_fp80 @exp2l(x86_fp80) -declare x86_fp80 @sinhl(x86_fp80) -declare x86_fp80 @expm1l(x86_fp80) - -define void @test_domain_error(x86_fp80 %value) { -entry: - %call_00 = call x86_fp80 @acosl(x86_fp80 %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK3FFF8000000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xKBFFF8000000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_00 = call x86_fp80 @acosl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_01 = call x86_fp80 @asinl(x86_fp80 %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp ogt x86_fp80 %value, 0xK3FFF8000000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xKBFFF8000000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_01 = call x86_fp80 @asinl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_02 = call x86_fp80 @cosl(x86_fp80 %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp oeq x86_fp80 %value, 0xKFFFF8000000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp oeq x86_fp80 %value, 0xK7FFF8000000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_02 = call x86_fp80 @cosl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_03 = call x86_fp80 @sinl(x86_fp80 %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp oeq x86_fp80 %value, 0xKFFFF8000000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp oeq x86_fp80 %value, 0xK7FFF8000000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_03 = call x86_fp80 @sinl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_04 = call x86_fp80 @acoshl(x86_fp80 %value) -; CHECK: [[COND:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xK3FFF8000000000000000 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_04 = call x86_fp80 @acoshl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_05 = call x86_fp80 @sqrtl(x86_fp80 %value) -; CHECK: [[COND:%[0-9]+]] = fcmp olt x86_fp80 %value, 0xK00000000000000000000 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_05 = call x86_fp80 @sqrtl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_06 = call x86_fp80 @atanhl(x86_fp80 %value) -; CHECK: [[COND1:%[0-9]+]] = fcmp oge x86_fp80 %value, 0xK3FFF8000000000000000 -; CHECK: [[COND2:%[0-9]+]] = fcmp ole x86_fp80 %value, 0xKBFFF8000000000000000 -; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]] -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_06 = call x86_fp80 @atanhl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_07 = call x86_fp80 @logl(x86_fp80 %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole x86_fp80 %value, 0xK00000000000000000000 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_07 = call x86_fp80 @logl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_08 = call x86_fp80 @log10l(x86_fp80 %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole x86_fp80 %value, 0xK00000000000000000000 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_08 = call x86_fp80 @log10l(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_09 = call x86_fp80 @log2l(x86_fp80 %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole x86_fp80 %value, 0xK00000000000000000000 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_09 = call x86_fp80 @log2l(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_10 = call x86_fp80 @logbl(x86_fp80 %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole x86_fp80 %value, 0xK00000000000000000000 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_10 = call x86_fp80 @logbl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - %call_11 = call x86_fp80 @log1pl(x86_fp80 %value) -; CHECK: [[COND:%[0-9]+]] = fcmp ole x86_fp80 %value, 0xKBFFF8000000000000000 -; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]] -; CHECK: [[CALL_LABEL]]: -; CHECK-NEXT: %call_11 = call x86_fp80 @log1pl(x86_fp80 %value) -; CHECK-NEXT: br label %[[END_LABEL]] -; CHECK: [[END_LABEL]]: - - ret void -} - -declare x86_fp80 @acosl(x86_fp80) -declare x86_fp80 @asinl(x86_fp80) -declare x86_fp80 @cosl(x86_fp80) -declare x86_fp80 @sinl(x86_fp80) -declare x86_fp80 @acoshl(x86_fp80) -declare x86_fp80 @sqrtl(x86_fp80) -declare x86_fp80 @atanhl(x86_fp80) -declare x86_fp80 @logl(x86_fp80) -declare x86_fp80 @log10l(x86_fp80) -declare x86_fp80 @log2l(x86_fp80) -declare x86_fp80 @logbl(x86_fp80) -declare x86_fp80 @log1pl(x86_fp80) - -; CHECK: ![[BRANCH_WEIGHT]] = !{!"branch_weights", i32 1, i32 2000} diff --git a/llvm/test/Transforms/Util/lowerinvoke-funclet.ll b/llvm/test/Transforms/Util/lowerinvoke-funclet.ll deleted file mode 100644 index 1aa2fc8e7a2..00000000000 --- a/llvm/test/Transforms/Util/lowerinvoke-funclet.ll +++ /dev/null @@ -1,39 +0,0 @@ -; RUN: opt -lowerinvoke -S < %s | FileCheck %s - -; Test if invoke instructions that have a funclet operand bundle can be lowered. - -%struct.Cleanup = type { i8 } - -define void @lowerinvoke_funclet() personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) { -; CHECK-LABEL: @lowerinvoke_funclet -entry: - %c = alloca %struct.Cleanup, align 1 - invoke void @foo() - to label %try.cont unwind label %catch.dispatch - -catch.dispatch: ; preds = %entry - %0 = catchswitch within none [label %catch] unwind to caller - -catch: ; preds = %catch.dispatch - %1 = catchpad within %0 [i8* null, i32 64, i8* null] - invoke void @bar(i32 3) [ "funclet"(token %1), "test"(i32 0) ] - to label %invoke.cont1 unwind label %ehcleanup -; CHECK: call void @bar(i32 3) [ "funclet"(token %1), "test"(i32 0) ] - -invoke.cont1: ; preds = %catch - call void @"??1Cleanup@@QEAA@XZ"(%struct.Cleanup* %c) #3 [ "funclet"(token %1) ] - catchret from %1 to label %try.cont - -try.cont: ; preds = %entry, %invoke.cont1 - ret void - -ehcleanup: ; preds = %catch - %2 = cleanuppad within %1 [] - call void @"??1Cleanup@@QEAA@XZ"(%struct.Cleanup* %c) #3 [ "funclet"(token %2) ] - cleanupret from %2 unwind to caller -} - -declare void @foo() -declare void @bar(i32) -declare i32 @__CxxFrameHandler3(...) -declare void @"??1Cleanup@@QEAA@XZ"(%struct.Cleanup*) unnamed_addr diff --git a/llvm/test/Transforms/Util/lowerswitch.ll b/llvm/test/Transforms/Util/lowerswitch.ll deleted file mode 100644 index 6344f17b6ba..00000000000 --- a/llvm/test/Transforms/Util/lowerswitch.ll +++ /dev/null @@ -1,302 +0,0 @@ -; RUN: opt -lowerswitch -S < %s | FileCheck %s - -; Test that we don't crash and have a different basic block for each incoming edge. -define void @test0(i32 %mode) { -; CHECK-LABEL: @test0 -; -; CHECK: icmp eq i32 %mode, 4 -; CHECK-NEXT: label %BB3, label %NewDefault -; -; CHECK: icmp eq i32 %mode, 2 -; CHECK-NEXT: label %BB3, label %NewDefault -; -; CHECK: icmp eq i32 %mode, 0 -; CHECK-NEXT: label %BB3, label %NewDefault -; -; CHECK: %merge = phi i64 [ 1, %BB3 ], [ 0, %NewDefault ] -BB1: - switch i32 %mode, label %BB2 [ - i32 3, label %BB2 - i32 5, label %BB2 - i32 0, label %BB3 - i32 2, label %BB3 - i32 4, label %BB3 - ] - -BB2: - %merge = phi i64 [ 1, %BB3 ], [ 0, %BB1 ], [ 0, %BB1 ], [ 0, %BB1 ] - ret void - -BB3: - br label %BB2 -} - -; Test switch cases that are merged into a single case during lowerswitch -; (take 84 and 85 below) - check that the number of incoming phi values match -; the number of branches. -define void @test1(i32 %mode) { -; CHECK-LABEL: @test1 -entry: - br label %bb1 - -bb1: - switch i32 %mode, label %bb1 [ - i32 84, label %bb3 - i32 85, label %bb3 - i32 86, label %bb2 - i32 78, label %exit - i32 99, label %bb3 - ] - -bb2: - br label %bb3 - -bb3: -; CHECK-LABEL: bb3 -; CHECK: %tmp = phi i32 [ 1, %NodeBlock ], [ 0, %bb2 ], [ 1, %LeafBlock3 ] - %tmp = phi i32 [ 1, %bb1 ], [ 0, %bb2 ], [ 1, %bb1 ], [ 1, %bb1 ] -; CHECK-NEXT: %tmp2 = phi i32 [ 2, %NodeBlock ], [ 5, %bb2 ], [ 2, %LeafBlock3 ] - %tmp2 = phi i32 [ 2, %bb1 ], [ 2, %bb1 ], [ 5, %bb2 ], [ 2, %bb1 ] - br label %exit - -exit: - ret void -} - -; Test that we don't crash. -define void @test2(i32 %mode) { -; CHECK-LABEL: @test2 - br i1 undef, label %1, label %._crit_edge - -; <label>:1 ; preds = %0 - switch i32 %mode, label %33 [ - i32 2, label %2 - i32 3, label %3 - i32 4, label %4 - i32 5, label %5 - i32 6, label %6 - i32 7, label %7 - i32 8, label %8 - i32 9, label %9 - i32 10, label %10 - i32 11, label %14 - i32 12, label %18 - i32 13, label %22 - i32 14, label %26 - i32 15, label %27 - i32 16, label %34 - i32 17, label %34 - i32 18, label %34 - i32 19, label %34 - i32 22, label %34 - i32 20, label %31 - i32 21, label %32 - ] - -; <label>:2 ; preds = %1 - br label %34 - -; <label>:3 ; preds = %1 - br label %34 - -; <label>:4 ; preds = %1 - br label %34 - -; <label>:5 ; preds = %1 - br label %34 - -; <label>:6 ; preds = %1 - br label %34 - -; <label>:7 ; preds = %1 - br label %34 - -; <label>:8 ; preds = %1 - br label %34 - -; <label>:9 ; preds = %1 - br label %34 - -; <label>:10 ; preds = %1 - br i1 undef, label %11, label %12 - -; <label>:11 ; preds = %10 - br label %13 - -; <label>:12 ; preds = %10 - br label %13 - -; <label>:13 ; preds = %12, %11 - br label %34 - -; <label>:14 ; preds = %1 - br i1 undef, label %15, label %16 - -; <label>:15 ; preds = %14 - br label %17 - -; <label>:16 ; preds = %14 - br label %17 - -; <label>:17 ; preds = %16, %15 - br label %34 - -; <label>:18 ; preds = %1 - br i1 undef, label %19, label %20 - -; <label>:19 ; preds = %18 - br label %21 - -; <label>:20 ; preds = %18 - br label %21 - -; <label>:21 ; preds = %20, %19 - br label %34 - -; <label>:22 ; preds = %1 - br i1 undef, label %23, label %24 - -; <label>:23 ; preds = %22 - br label %25 - -; <label>:24 ; preds = %22 - br label %25 - -; <label>:25 ; preds = %24, %23 - br label %34 - -; <label>:26 ; preds = %1 - br label %34 - -; <label>:27 ; preds = %1 - br i1 undef, label %28, label %29 - -; <label>:28 ; preds = %27 - br label %30 - -; <label>:29 ; preds = %27 - br label %30 - -; <label>:30 ; preds = %29, %28 - br label %34 - -; <label>:31 ; preds = %1 - br label %34 - -; <label>:32 ; preds = %1 - br label %34 - -; <label>:33 ; preds = %1 - br label %34 - -; <label>:34 ; preds = %33, %32, %31, %30, %26, %25, %21, %17, %13, %9, %8, %7, %6, %5, %4, %3, %2, %1, %1, %1, %1, %1 - %o.0 = phi float [ undef, %33 ], [ undef, %32 ], [ undef, %31 ], [ undef, %30 ], [ undef, %26 ], [ undef, %25 ], [ undef, %21 ], [ undef, %17 ], [ undef, %13 ], [ undef, %9 ], [ undef, %8 ], [ undef, %7 ], [ undef, %6 ], [ undef, %5 ], [ undef, %4 ], [ undef, %3 ], [ undef, %2 ], [ undef, %1 ], [ undef, %1 ], [ undef, %1 ], [ undef, %1 ], [ undef, %1 ] - br label %._crit_edge - -._crit_edge: ; preds = %34, %0 - ret void -} - -; Test that the PHI node in for.cond should have one entry for each predecessor -; of its parent basic block after lowerswitch merged several cases into a new -; default block. -define void @test3(i32 %mode) { -; CHECK-LABEL: @test3 -entry: - br label %lbl1 - -lbl1: ; preds = %cleanup, %entry - br label %lbl2 - -lbl2: ; preds = %cleanup, %lbl1 - br label %for.cond - -for.cond: ; preds = %cleanup, %cleanup, %lbl2 -; CHECK: for.cond: -; CHECK: phi i16 [ undef, %lbl2 ], [ %b.3, %NewDefault ]{{$}} -; CHECK: for.cond1: - %b.2 = phi i16 [ undef, %lbl2 ], [ %b.3, %cleanup ], [ %b.3, %cleanup ] - br label %for.cond1 - -for.cond1: ; preds = %for.inc, %for.cond - %b.3 = phi i16 [ %b.2, %for.cond ], [ undef, %for.inc ] - %tobool = icmp ne i16 %b.3, 0 - br i1 %tobool, label %for.body, label %for.end - -for.body: ; preds = %for.cond1 - br i1 undef, label %if.then, label %for.inc - -if.then: ; preds = %for.body - br label %cleanup - -for.inc: ; preds = %for.body - br label %for.cond1 - -for.end: ; preds = %for.cond1 - br i1 undef, label %if.then4, label %for.body7 - -if.then4: ; preds = %for.end - br label %cleanup - -for.body7: ; preds = %for.end - br label %cleanup - -cleanup: ; preds = %for.body7, %if.then4, %if.then - switch i32 %mode, label %unreachable [ - i32 0, label %for.cond - i32 2, label %lbl1 - i32 5, label %for.cond - i32 3, label %lbl2 - ] - -unreachable: ; preds = %cleanup - unreachable -} - -; Test that the PHI node in cleanup17 is removed as the switch default block is -; not reachable. -define void @test4(i32 %mode) { -; CHECK-LABEL: @test4 -entry: - switch i32 %mode, label %cleanup17 [ - i32 0, label %return - i32 9, label %return - ] - -cleanup17: -; CHECK: cleanup17: -; CHECK-NOT: phi i16 [ undef, %entry ] -; CHECK: return: - - %retval.4 = phi i16 [ undef, %entry ] - unreachable - -return: - ret void -} - -; Test that the PHI node in for.inc is updated correctly as the switch is -; replaced with a single branch to for.inc -define void @test5(i32 %mode) { -; CHECK-LABEL: @test5 -entry: - br i1 undef, label %cleanup10, label %cleanup10.thread - -cleanup10.thread: - br label %for.inc - -cleanup10: - switch i32 %mode, label %unreachable [ - i32 0, label %for.inc - i32 4, label %for.inc - ] - -for.inc: -; CHECK: for.inc: -; CHECK-NEXT: phi i16 [ 0, %cleanup10.thread ], [ undef, %cleanup10 ] -%0 = phi i16 [ undef, %cleanup10 ], [ 0, %cleanup10.thread ], [ undef, %cleanup10 ] - unreachable - -unreachable: - unreachable -} diff --git a/llvm/test/Transforms/Util/simplify-dbg-declare-load.ll b/llvm/test/Transforms/Util/simplify-dbg-declare-load.ll deleted file mode 100644 index a62e2891ccb..00000000000 --- a/llvm/test/Transforms/Util/simplify-dbg-declare-load.ll +++ /dev/null @@ -1,61 +0,0 @@ -; RUN: opt -instcombine -instcombine-lower-dbg-declare=1 -S < %s | FileCheck %s -; RUN: opt -instcombine -instcombine-lower-dbg-declare=0 -S < %s | FileCheck %s --check-prefix=DECLARE -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-pc-linux-gnu" - -%foo = type { i64, i32, i32 } - -; Function Attrs: nounwind readnone -declare void @llvm.dbg.declare(metadata, metadata, metadata) #0 -declare void @llvm.dbg.value(metadata, metadata, metadata) #0 - -; Function Attrs: sspreq -define void @julia_fastshortest_6256() #1 { -top: - %cp = alloca %foo, align 8 - %sink = alloca %foo, align 8 - call void @llvm.dbg.declare(metadata %foo* %cp, metadata !1, metadata !16), !dbg !17 - br i1 undef, label %idxend, label %fail - -fail: ; preds = %top - unreachable - -idxend: ; preds = %top -; CHECK-NOT: call void @llvm.dbg.value(metadata %foo* %cp, - %0 = load %foo, %foo* %cp, align 8 - store volatile %foo %0, %foo *%sink, align 8 -; CHECK: call void @llvm.dbg.value(metadata %foo % - store %foo %0, %foo* undef, align 8 - ret void -} - -; Keep the declare if we keep the alloca. -; DECLARE-LABEL: define void @julia_fastshortest_6256() -; DECLARE: %cp = alloca %foo, align 8 -; DECLARE: call void @llvm.dbg.declare(metadata %foo* %cp, - -attributes #0 = { nounwind readnone } -attributes #1 = { sspreq } - -!llvm.module.flags = !{!0} -!llvm.dbg.cu = !{!18} - -!0 = !{i32 1, !"Debug Info Version", i32 3} -!1 = !DILocalVariable(name: "cp", scope: !2, file: !3, line: 106, type: !12) -!2 = distinct !DISubprogram(name: "fastshortest", linkageName: "julia_fastshortest_6256", scope: null, file: !3, type: !4, isLocal: false, isDefinition: true, isOptimized: true, unit: !18, retainedNodes: !11) -!3 = !DIFile(filename: "grisu/fastshortest.jl", directory: ".") -!4 = !DISubroutineType(types: !5) -!5 = !{!6, !7} -!6 = !DIBasicType(name: "Float64", size: 64, align: 64, encoding: DW_ATE_unsigned) -!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 64) -!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "jl_value_t", file: !9, line: 71, align: 64, elements: !10) -!9 = !DIFile(filename: "julia.h", directory: "") -!10 = !{!7} -!11 = !{} -!12 = !DICompositeType(tag: DW_TAG_structure_type, name: "Float", size: 128, align: 64, elements: !13, runtimeLang: DW_LANG_Julia) -!13 = !{!14, !15, !15} -!14 = !DIBasicType(name: "UInt64", size: 64, align: 64, encoding: DW_ATE_unsigned) -!15 = !DIBasicType(name: "Int32", size: 32, align: 32, encoding: DW_ATE_unsigned) -!16 = !DIExpression() -!17 = !DILocation(line: 106, scope: !2) -!18 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !3) diff --git a/llvm/test/Transforms/Util/store-first-op.ll b/llvm/test/Transforms/Util/store-first-op.ll deleted file mode 100644 index c4ef2a14262..00000000000 --- a/llvm/test/Transforms/Util/store-first-op.ll +++ /dev/null @@ -1,37 +0,0 @@ -; RUN: opt -instcombine -S %s | FileCheck %s - -%foo = type { i8 } - -; Function Attrs: nounwind uwtable -define void @_ZN4llvm13ScaledNumbers10multiply64Emm() { -entry: - %getU = alloca %foo, align 1 -; This is supposed to make sure that the declare conversion, does not accidentally think the store OF -; %getU is a store TO %getU. There are valid reasons to have an llvm.dbg.value here, but if the pass -; is changed to emit such, a more specific check should be added to make sure that any llvm.dbg.value -; is correct. -; CHECK-NOT: @llvm.dbg.value(metadata %foo* %getU - call void @llvm.dbg.declare(metadata %foo* %getU, metadata !3, metadata !6), !dbg !7 - store %foo* %getU, %foo** undef, align 8, !tbaa !8 - unreachable -} - -; Function Attrs: nounwind readnone -declare void @llvm.dbg.declare(metadata, metadata, metadata) #1 - -attributes #1 = { nounwind readnone } - -!llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!2} - -!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 3.8.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug) -!1 = !DIFile(filename: "none", directory: ".") -!2 = !{i32 2, !"Debug Info Version", i32 3} -!3 = !DILocalVariable(name: "getU", scope: !4, file: !1, line: 25, type: !5) -!4 = distinct !DISubprogram(name: "multiply64", linkageName: "_ZN4llvm13ScaledNumbers10multiply64Emm", scope: null, file: !1, line: 22, isLocal: false, isDefinition: true, scopeLine: 23, flags: DIFlagPrototyped, isOptimized: true, unit: !0) -!5 = !DICompositeType(tag: DW_TAG_class_type, scope: !4, file: !1, line: 25, size: 8, align: 8) -!6 = !DIExpression() -!7 = !DILocation(line: 25, column: 8, scope: !4) -!8 = !{!10, !10, i64 0} -!9 = !{i64 0} -!10 = !{!"scalar type", !9} diff --git a/llvm/test/Transforms/Util/strip-gc-relocates.ll b/llvm/test/Transforms/Util/strip-gc-relocates.ll deleted file mode 100644 index 359de7b3efe..00000000000 --- a/llvm/test/Transforms/Util/strip-gc-relocates.ll +++ /dev/null @@ -1,120 +0,0 @@ -; RUN: opt -S -strip-gc-relocates -instcombine < %s | FileCheck %s -; test utility/debugging pass which removes gc.relocates, inserted by -rewrite-statepoints-for-gc -declare void @use_obj32(i32 addrspace(1)*) "gc-leaf-function" - -declare void @g() -declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...) -declare i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token, i32, i32) #0 -declare void @do_safepoint() - -declare i32 addrspace(1)* @new_instance() #1 - - -; Simple case: remove gc.relocate -define i32 addrspace(1)* @test1(i32 addrspace(1)* %arg) gc "statepoint-example" { -entry: -; CHECK-LABEL: test1 -; CHECK: gc.statepoint -; CHECK-NOT: gc.relocate -; CHECK: ret i32 addrspace(1)* %arg - %statepoint_token = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void ()* @g, i32 0, i32 0, i32 0, i32 1, i32 100, i32 addrspace(1)* %arg) - %arg.relocated = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %statepoint_token, i32 8, i32 8) ; (%arg, %arg) - %arg.relocated.casted = bitcast i8 addrspace(1)* %arg.relocated to i32 addrspace(1)* - ret i32 addrspace(1)* %arg.relocated.casted -} - -; Remove gc.relocates in presence of nested relocates. -define void @test2(i32 addrspace(1)* %base) gc "statepoint-example" { -entry: -; CHECK-LABEL: test2 -; CHECK: statepoint -; CHECK-NOT: gc.relocate -; CHECK: call void @use_obj32(i32 addrspace(1)* %ptr.gep1) -; CHECK: call void @use_obj32(i32 addrspace(1)* %ptr.gep1) - %ptr.gep = getelementptr i32, i32 addrspace(1)* %base, i32 15 - %ptr.gep1 = getelementptr i32, i32 addrspace(1)* %ptr.gep, i32 15 - %statepoint_token = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void ()* @do_safepoint, i32 0, i32 0, i32 0, i32 0, i32 addrspace(1)* %ptr.gep1, i32 addrspace(1)* %base) - %ptr.gep1.relocated = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %statepoint_token, i32 8, i32 7) ; (%base, %ptr.gep1) - %ptr.gep1.relocated.casted = bitcast i8 addrspace(1)* %ptr.gep1.relocated to i32 addrspace(1)* - %base.relocated = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %statepoint_token, i32 8, i32 8) ; (%base, %base) - %base.relocated.casted = bitcast i8 addrspace(1)* %base.relocated to i32 addrspace(1)* - call void @use_obj32(i32 addrspace(1)* %ptr.gep1.relocated.casted) - %statepoint_token1 = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void ()* @do_safepoint, i32 0, i32 0, i32 0, i32 0, i32 addrspace(1)* %ptr.gep1.relocated.casted, i32 addrspace(1)* %base.relocated.casted) - %ptr.gep1.relocated2 = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %statepoint_token1, i32 8, i32 7) ; (%base.relocated.casted, %ptr.gep1.relocated.casted) - %ptr.gep1.relocated2.casted = bitcast i8 addrspace(1)* %ptr.gep1.relocated2 to i32 addrspace(1)* - %base.relocated3 = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %statepoint_token1, i32 8, i32 8) ; (%base.relocated.casted, %base.relocated.casted) - %base.relocated3.casted = bitcast i8 addrspace(1)* %base.relocated3 to i32 addrspace(1)* - call void @use_obj32(i32 addrspace(1)* %ptr.gep1.relocated2.casted) - ret void -} - -; landing pad gc.relocates removed by instcombine since it has no uses. -define i32 addrspace(1)* @test3(i32 addrspace(1)* %arg) gc "statepoint-example" personality i32 8 { -; CHECK-LABEL: test3( -; CHECK: gc.statepoint -; CHECK-LABEL: normal_dest: -; CHECK-NOT: gc.relocate -; CHECK: ret i32 addrspace(1)* %arg -; CHECK-LABEL: unwind_dest: -; CHECK-NOT: gc.relocate -entry: - %statepoint_token = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void ()* @g, i32 0, i32 0, i32 0, i32 1, i32 100, i32 addrspace(1)* %arg) - to label %normal_dest unwind label %unwind_dest - -normal_dest: ; preds = %entry - %arg.relocated1 = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %statepoint_token, i32 8, i32 8) ; (%arg, %arg) - %arg.relocated1.casted = bitcast i8 addrspace(1)* %arg.relocated1 to i32 addrspace(1)* - ret i32 addrspace(1)* %arg.relocated1.casted - -unwind_dest: ; preds = %entry - %lpad = landingpad token - cleanup - %arg.relocated = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %lpad, i32 8, i32 8) ; (%arg, %arg) - %arg.relocated.casted = bitcast i8 addrspace(1)* %arg.relocated to i32 addrspace(1)* - resume token undef -} - -; in presence of phi -define void @test4(i1 %cond) gc "statepoint-example" { -; CHECK-LABEL: test4 -entry: - %base1 = call i32 addrspace(1)* @new_instance() - %base2 = call i32 addrspace(1)* @new_instance() - br i1 %cond, label %here, label %there - -here: ; preds = %entry - br label %merge - -there: ; preds = %entry - br label %merge - -merge: ; preds = %there, %here -; CHECK-LABEL: merge: -; CHECK-NOT: gc.relocate -; CHECK: %ptr.gep.remat = getelementptr i32, i32 addrspace(1)* %basephi.base - %basephi.base = phi i32 addrspace(1)* [ %base1, %here ], [ %base2, %there ], !is_base_value !0 - %basephi = phi i32 addrspace(1)* [ %base1, %here ], [ %base2, %there ] - %ptr.gep = getelementptr i32, i32 addrspace(1)* %basephi, i32 15 - %statepoint_token = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void ()* @do_safepoint, i32 0, i32 0, i32 0, i32 0, i32 addrspace(1)* %basephi.base) - %basephi.base.relocated = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %statepoint_token, i32 7, i32 7) ; (%basephi.base, %basephi.base) - %basephi.base.relocated.casted = bitcast i8 addrspace(1)* %basephi.base.relocated to i32 addrspace(1)* - %ptr.gep.remat = getelementptr i32, i32 addrspace(1)* %basephi.base.relocated.casted, i32 15 - call void @use_obj32(i32 addrspace(1)* %ptr.gep.remat) - ret void -} - -; The gc.relocate type is different from %arg, but removing the gc.relocate, -; needs a bitcast to be added from i32 addrspace(1)* to i8 addrspace(1)* -define i8 addrspace(1)* @test5(i32 addrspace(1)* %arg) gc "statepoint-example" { -entry: -; CHECK-LABEL: test5 -; CHECK: gc.statepoint -; CHECK-NOT: gc.relocate - %statepoint_token = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void ()* @g, i32 0, i32 0, i32 0, i32 1, i32 100, i32 addrspace(1)* %arg) - %arg.relocated = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %statepoint_token, i32 8, i32 8) ; (%arg, %arg) - ret i8 addrspace(1)* %arg.relocated -} - -attributes #0 = { nounwind readonly } -attributes #1 = { nounwind "gc-leaf-function" } -!0 = !{} diff --git a/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-containingtypes.ll b/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-containingtypes.ll deleted file mode 100644 index 7a666764d1f..00000000000 --- a/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-containingtypes.ll +++ /dev/null @@ -1,94 +0,0 @@ -; RUN: opt -S -strip-nonlinetable-debuginfo %s -o %t.ll -; RUN: cat %t.ll | FileCheck %s -; RUN: cat %t.ll | FileCheck %s --check-prefix=CHECK-NEG -; -; This test provides coverage for setting the containing type of a DISubprogram. -; -; Generated an reduced from: -; struct A { -; virtual ~A(); -; }; -; struct B : A {}; -; B b; - -source_filename = "t.cpp" -target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx10.12.0" - -%struct.B = type { %struct.A } -%struct.A = type { i32 (...)** } - -; CHECK: @b = global -; CHECK-NOT: !dbg -@b = global %struct.B zeroinitializer, align 8, !dbg !0 - -declare void @_ZN1BC2Ev(%struct.B*) unnamed_addr - -; Function Attrs: nounwind readnone -declare void @llvm.dbg.declare(metadata, metadata, metadata) #0 -; CHECK: define - -; Function Attrs: inlinehint nounwind ssp uwtable -define linkonce_odr void @_ZN1BC1Ev(%struct.B* %this) unnamed_addr #1 align 2 !dbg !25 { -entry: - %this.addr = alloca %struct.B*, align 8 - store %struct.B* %this, %struct.B** %this.addr, align 8 - ; CHECK-NOT: @llvm.dbg.declare - call void @llvm.dbg.declare(metadata %struct.B** %this.addr, metadata !30, metadata !32), !dbg !33 - %this1 = load %struct.B*, %struct.B** %this.addr, align 8 - call void @_ZN1BC2Ev(%struct.B* %this1) #2, !dbg !34 - ret void, !dbg !34 - ; CHECK: call void @_ZN1BC2Ev(%struct.B* %this1){{.*}} !dbg ! -} - -attributes #0 = { nounwind readnone } -attributes #1 = { inlinehint nounwind ssp uwtable } -attributes #2 = { nounwind } - -!llvm.dbg.cu = !{!2} -!llvm.module.flags = !{!21, !22, !23} -!llvm.ident = !{!24} - -; CHECK-NEG-NOT: !DI{{Basic|Composite|Derived}}Type - -!0 = distinct !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) -!1 = !DIGlobalVariable(name: "b", scope: !2, file: !3, line: 5, type: !6, isLocal: false, isDefinition: true) -!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 4.0.0 (trunk 282583) (llvm/trunk 282611)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5) -!3 = !DIFile(filename: "t.cpp", directory: "/") -!4 = !{} -!5 = !{!0} -!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "B", file: !3, line: 4, size: 64, align: 64, elements: !7, vtableHolder: !9, identifier: "_ZTS1B") -!7 = !{!8} -!8 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !6, baseType: !9) -!9 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: !3, line: 1, size: 64, align: 64, elements: !10, vtableHolder: !9, identifier: "_ZTS1A") -!10 = !{!11, !17} -!11 = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$A", scope: !3, file: !3, baseType: !12, size: 64, flags: DIFlagArtificial) -!12 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 64) -!13 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "__vtbl_ptr_type", baseType: !14, size: 64) -!14 = !DISubroutineType(types: !15) -!15 = !{!16} -!16 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) -!17 = !DISubprogram(name: "~A", scope: !9, file: !3, line: 2, type: !18, isLocal: false, isDefinition: false, scopeLine: 2, containingType: !9, virtuality: DW_VIRTUALITY_virtual, virtualIndex: 0, flags: DIFlagPrototyped, isOptimized: false) -!18 = !DISubroutineType(types: !19) -!19 = !{null, !20} -!20 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !9, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer) -!21 = !{i32 2, !"Dwarf Version", i32 4} -!22 = !{i32 2, !"Debug Info Version", i32 3} -!23 = !{i32 1, !"PIC Level", i32 2} -!24 = !{!"clang version 4.0.0 (trunk 282583) (llvm/trunk 282611)"} -; Only referenced by the type system. -; CHECK-NEG-NOT: !DISubprogram(name: "~A" -!25 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC1Ev", scope: !6, file: !3, line: 4, type: !26, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, unit: !2, declaration: !29, retainedNodes: !4) -!26 = !DISubroutineType(types: !27) -!27 = !{null, !28} -!28 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer) -!29 = !DISubprogram(name: "B", scope: !6, type: !26, isLocal: false, isDefinition: false, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false) -!30 = !DILocalVariable(name: "this", arg: 1, scope: !25, type: !31, flags: DIFlagArtificial | DIFlagObjectPointer) -!31 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64) -!32 = !DIExpression() -!33 = !DILocation(line: 0, scope: !25) -!34 = !DILocation(line: 4, column: 8, scope: !25) - -; CHECK: !DISubprogram(name: "B", scope: ![[FILE:.*]], file: ![[FILE]], -; CHECK-NOT: containingType: -; CHECK-NEG-NOT: !DISubprogram(name: "B", {{.*}}, isDefinition: false diff --git a/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-cus.ll b/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-cus.ll deleted file mode 100644 index f7ffdf9cf9a..00000000000 --- a/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-cus.ll +++ /dev/null @@ -1,24 +0,0 @@ -; RUN: opt -S -strip-nonlinetable-debuginfo %s -o - | FileCheck %s -!llvm.dbg.cu = !{!2, !6} -!llvm.gcov = !{!3} -!llvm.module.flags = !{!7} - -!1 = !DIFile(filename: "path/to/file", directory: "/path/to/dir") -; The first CU is used for the line table, the second one is a module skeleton -; and should be stripped. -; CHECK: !llvm.dbg.cu = !{![[CU:[0-9]+]]} -; CHECK: ![[CU]] = distinct !DICompileUnit({{.*}}"abc.debug"{{.*}}LineTablesOnly -; CHECK-NOT: retainedTypes: -; CHECK-SAME: ) -; CHECK-NOT: DICompositeType -!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang", - isOptimized: true, flags: "-O2", runtimeVersion: 2, - splitDebugFilename: "abc.debug", emissionKind: FullDebug, - retainedTypes: !4) -!3 = !{!"path/to/file.o", !2} -!4 = !{!5} -!5 = !DICompositeType(tag: DW_TAG_structure_type, file: !1, identifier: "ThisWillBeStripped") -!6 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang", - splitDebugFilename: "abc.dwo", emissionKind: FullDebug, - dwoId: 1234) -!7 = !{i32 1, !"Debug Info Version", i32 3} diff --git a/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-localvars.ll b/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-localvars.ll deleted file mode 100644 index c2cb87acb2a..00000000000 --- a/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-localvars.ll +++ /dev/null @@ -1,36 +0,0 @@ -; RUN: opt -S -strip-nonlinetable-debuginfo %s -o - | FileCheck %s -; CHECK: define void @f() !dbg ![[F:[0-9]+]] -define void @f() !dbg !4 { -entry: - %i = alloca i32, align 4 - ; CHECK-NOT: llvm.dbg.declare - call void @llvm.dbg.declare(metadata i32* %i, metadata !11, metadata !13), !dbg !14 - store i32 42, i32* %i, align 4, !dbg !14 - ret void, !dbg !15 -} - -; Function Attrs: nounwind readnone -declare void @llvm.dbg.declare(metadata, metadata, metadata) - -!llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!7, !8, !9} -!llvm.ident = !{!10} - -!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "LLVM", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2) -!1 = !DIFile(filename: "f.c", directory: "/") -!2 = !{} -; CHECK: ![[F]] = distinct !DISubprogram(name: "f" -; CHECK-NOT: retainedNodes: -; CHECK-NOT: distinct !DISubprogram(name: "f" -!4 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, unit: !0, retainedNodes: !2) -!5 = !DISubroutineType(types: !6) -!6 = !{null} -!7 = !{i32 2, !"Dwarf Version", i32 2} -!8 = !{i32 2, !"Debug Info Version", i32 3} -!9 = !{i32 1, !"PIC Level", i32 2} -!10 = !{!"LLVM"} -!11 = !DILocalVariable(name: "i", scope: !4, file: !1, line: 1, type: !12) -!12 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) -!13 = !DIExpression() -!14 = !DILocation(line: 1, column: 16, scope: !4) -!15 = !DILocation(line: 1, column: 24, scope: !4) diff --git a/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-loops.ll b/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-loops.ll deleted file mode 100644 index 7144f9cb96a..00000000000 --- a/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-loops.ll +++ /dev/null @@ -1,71 +0,0 @@ -; RUN: opt -S -strip-nonlinetable-debuginfo %s -o %t -; RUN: cat %t | FileCheck %s -; RUN: cat %t | FileCheck %s --check-prefix=NEGATIVE -; void f(volatile int *i) { -; while (--*i) {} -; } -source_filename = "/tmp/loop.c" -target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx10.12.0" - -define void @f(i32* %i) local_unnamed_addr #0 !dbg !7 { -entry: - tail call void @llvm.dbg.value(metadata i32* %i, metadata !14, metadata !15), !dbg !16 - br label %while.cond, !dbg !17 - -while.cond: ; preds = %while.cond, %entry - %0 = load volatile i32, i32* %i, align 4, !dbg !18, !tbaa !19 - %dec = add nsw i32 %0, -1, !dbg !18 - store volatile i32 %dec, i32* %i, align 4, !dbg !18, !tbaa !19 - %tobool = icmp eq i32 %dec, 0, !dbg !17 - ; CHECK: !llvm.loop ![[LOOP:[0-9]+]] - br i1 %tobool, label %while.end, label %while.cond, !dbg !17, !llvm.loop !23 - -while.end: ; preds = %while.cond - ret void, !dbg !25 -} - -; Function Attrs: nounwind readnone -declare void @llvm.dbg.value(metadata, metadata, metadata) #1 - -attributes #0 = { nounwind ssp uwtable } -attributes #1 = { nounwind readnone } - -!llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!3, !4, !5} -!llvm.ident = !{!6} - -; CHECK: ![[CU:.*]] = distinct !DICompileUnit(language: DW_LANG_C99, -; CHECK-SAME: emissionKind: LineTablesOnly -; NEGATIVE-NOT: !DICompileUnit({{.*}} emissionKind: FullDebug -!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 5.0.0 (trunk 298880) (llvm/trunk 298875)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) -!1 = !DIFile(filename: "/tmp/loop.c", directory: "/") -!2 = !{} -!3 = !{i32 2, !"Dwarf Version", i32 4} -!4 = !{i32 2, !"Debug Info Version", i32 3} -!5 = !{i32 1, !"PIC Level", i32 2} -!6 = !{!"clang version 5.0.0 (trunk 298880) (llvm/trunk 298875)"} -; CHECK: ![[F:[0-9]]] = distinct !DISubprogram(name: "f", scope: !1 -!7 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !13) -!8 = !DISubroutineType(types: !9) -!9 = !{null, !10} -!10 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !11, size: 64) -!11 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !12) -; NEGATIVE-NOT: !DIBasicType(name: "int", -!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -!13 = !{!14} -!14 = !DILocalVariable(name: "i", arg: 1, scope: !7, file: !1, line: 1, type: !10) -!15 = !DIExpression() -!16 = !DILocation(line: 1, column: 22, scope: !7) -; CHECK: ![[BEGIN:[0-9]+]] = !DILocation(line: 2, column: 3, scope: ![[F]]) -!17 = !DILocation(line: 2, column: 3, scope: !7) -!18 = !DILocation(line: 2, column: 10, scope: !7) -!19 = !{!20, !20, i64 0} -!20 = !{!"int", !21, i64 0} -!21 = !{!"omnipotent char", !22, i64 0} -!22 = !{!"Simple C/C++ TBAA"} -; CHECK: ![[LOOP]] = distinct !{![[LOOP]], ![[BEGIN]], ![[END:[0-9]+]]} -!23 = distinct !{!23, !17, !24} -; CHECK: ![[END]] = !DILocation(line: 3, column: 3, scope: ![[F]]) -!24 = !DILocation(line: 3, column: 3, scope: !7) -!25 = !DILocation(line: 4, column: 1, scope: !7) diff --git a/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-subroutinetypes.ll b/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-subroutinetypes.ll deleted file mode 100644 index 6dce41f56fa..00000000000 --- a/llvm/test/Transforms/Util/strip-nonlinetable-debuginfo-subroutinetypes.ll +++ /dev/null @@ -1,22 +0,0 @@ -; RUN: opt -S -strip-nonlinetable-debuginfo %s -o - | FileCheck %s -; Test that subroutine types are downgraded to (void)(). -define internal i32 @"__hidden#2878_"() #0 !dbg !12 { - ret i32 0, !dbg !634 -} -!llvm.dbg.cu = !{!18} -!llvm.module.flags = !{!482} -!5 = !{} -!2 = !{!12} -; CHECK-NOT: DICompositeType -; CHECK: distinct !DISubprogram(name: "f", {{.*}}, type: ![[FNTY:[0-9]+]] -; CHECK: ![[FNTY]] = !DISubroutineType(types: ![[VOID:[0-9]+]]) -; CHECK: ![[VOID]] = !{} -; CHECK-NOT: DICompositeType -!12 = distinct !DISubprogram(name: "f", scope: !16, file: !16, line: 133, type: !13, isLocal: true, isDefinition: true, scopeLine: 133, flags: DIFlagPrototyped, isOptimized: true, unit: !18, retainedNodes: !5) -!13 = !DISubroutineType(types: !14) -!14 = !{!17} -!16 = !DIFile(filename: "f.m", directory: "/") -!17 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "e", scope: !18, file: !16, line: 13, size: 32, align: 32, flags: DIFlagFwdDecl) -!18 = distinct !DICompileUnit(language: DW_LANG_ObjC, file: !16, producer: "clang", isOptimized: true, runtimeVersion: 2, emissionKind: 1, enums: !14, retainedTypes: !14, globals: !5, imports: !5) -!482 = !{i32 2, !"Debug Info Version", i32 3} -!634 = !DILocation(line: 143, column: 5, scope: !12) |