[llvm] Remove br i1 undef from some regression tests [NFC] (#116739)
This PR removes tests with br i1 undef under `llvm/tests/Transforms/JumpThreading, LCSSA, LICM, LoopDeletion, LoopIdiom`.
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
define void @f(i32 %p1) {
|
||||
bb0:
|
||||
%0 = icmp eq i32 %p1, 0
|
||||
br i1 undef, label %bb6, label %bb1
|
||||
br i1 true, label %bb6, label %bb1
|
||||
|
||||
bb1:
|
||||
br label %bb2
|
||||
|
||||
@@ -60,12 +60,11 @@ F2:
|
||||
}
|
||||
|
||||
|
||||
; Undef handling.
|
||||
define i32 @test3(i1 %cond) {
|
||||
; CHECK-LABEL: @test3(
|
||||
; CHECK-NEXT: T1:
|
||||
; CHECK-NEXT: ret i32 42
|
||||
br i1 undef, label %T1, label %F1
|
||||
br i1 true, label %T1, label %F1
|
||||
|
||||
T1:
|
||||
ret i32 42
|
||||
|
||||
@@ -239,7 +239,7 @@ return:
|
||||
}
|
||||
|
||||
; PR6119
|
||||
define i32 @test8(i32 %action) nounwind {
|
||||
define i32 @test8(i32 %action, i1 %arg) nounwind {
|
||||
entry:
|
||||
switch i32 %action, label %lor.rhs [
|
||||
i32 1, label %if.then
|
||||
@@ -257,14 +257,14 @@ lor.end: ; preds = %lor.rhs, %entry
|
||||
br i1 %cmp103, label %for.cond, label %if.then
|
||||
|
||||
for.cond: ; preds = %for.body, %lor.end
|
||||
br i1 undef, label %if.then, label %for.body
|
||||
br i1 %arg, label %if.then, label %for.body
|
||||
|
||||
for.body: ; preds = %for.cond
|
||||
br label %for.cond
|
||||
}
|
||||
|
||||
; PR6119
|
||||
define i32 @test9(i32 %action) nounwind {
|
||||
define i32 @test9(i32 %action, i1 %arg) nounwind {
|
||||
entry:
|
||||
switch i32 %action, label %lor.rhs [
|
||||
i32 1, label %if.then
|
||||
@@ -283,14 +283,14 @@ lor.end: ; preds = %lor.rhs, %entry
|
||||
br i1 %cmp103, label %for.cond, label %if.then
|
||||
|
||||
for.cond: ; preds = %for.body, %lor.end
|
||||
br i1 undef, label %if.then, label %for.body
|
||||
br i1 %arg, label %if.then, label %for.body
|
||||
|
||||
for.body: ; preds = %for.cond
|
||||
br label %for.cond
|
||||
}
|
||||
|
||||
; PR6119
|
||||
define i32 @test10(i32 %action, i32 %type) nounwind {
|
||||
define i32 @test10(i32 %action, i32 %type, i1 %arg) nounwind {
|
||||
entry:
|
||||
%cmp2 = icmp eq i32 %type, 0 ; <i1> [#uses=1]
|
||||
switch i32 %action, label %lor.rhs [
|
||||
@@ -311,7 +311,7 @@ lor.end: ; preds = %lor.rhs, %entry
|
||||
br i1 %cmp103, label %for.cond, label %if.then
|
||||
|
||||
for.cond: ; preds = %for.body, %lor.end
|
||||
br i1 undef, label %if.then, label %for.body
|
||||
br i1 %arg, label %if.then, label %for.body
|
||||
|
||||
for.body: ; preds = %for.cond
|
||||
br label %for.cond
|
||||
@@ -391,7 +391,7 @@ if.end: ; preds = %land.end69
|
||||
}
|
||||
|
||||
; PR7647
|
||||
define void @test15() nounwind {
|
||||
define void @test15(i1 %arg) nounwind {
|
||||
entry:
|
||||
ret void
|
||||
|
||||
@@ -420,7 +420,7 @@ lbl_709:
|
||||
br label %if.end949
|
||||
|
||||
for.cond603: ; preds = %for.body607, %if.end336
|
||||
br i1 undef, label %for.cond603, label %if.end949
|
||||
br i1 %arg, label %for.cond603, label %if.end949
|
||||
|
||||
if.end949: ; preds = %for.cond603, %lbl_709, %for.cond111
|
||||
%l_678.2 = phi i64 [ %l_678.5, %for.cond111 ], [ undef, %lbl_709 ], [ 5, %for.cond603 ] ; <i64> [#uses=1]
|
||||
@@ -430,7 +430,7 @@ for.body1016: ; preds = %for.cond1012
|
||||
br label %for.body1016
|
||||
|
||||
for.cond1035: ; preds = %for.inc1055, %if.then1026
|
||||
br i1 undef, label %for.cond1040, label %lbl_664
|
||||
br i1 %arg, label %for.cond1040, label %lbl_664
|
||||
|
||||
for.cond1040: ; preds = %for.body1044, %for.cond1035
|
||||
ret void
|
||||
@@ -461,9 +461,9 @@ if.end:
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @test17() {
|
||||
define void @test17(i1 %arg) {
|
||||
entry:
|
||||
br i1 undef, label %bb269.us.us, label %bb269.us.us.us
|
||||
br i1 %arg, label %bb269.us.us, label %bb269.us.us.us
|
||||
|
||||
bb269.us.us.us:
|
||||
%indvar = phi i64 [ %indvar.next, %bb287.us.us.us ], [ 0, %entry ]
|
||||
|
||||
@@ -66,7 +66,7 @@ bb11:
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @spam(ptr %arg) {
|
||||
define void @spam(ptr %arg, i1 %arg2) {
|
||||
; CHECK-LABEL: @spam(
|
||||
; CHECK-NEXT: bb:
|
||||
; CHECK-NEXT: [[TMP:%.*]] = load i8, ptr undef, align 8
|
||||
@@ -87,9 +87,11 @@ define void @spam(ptr %arg) {
|
||||
; CHECK-NEXT: i8 0, label [[BB11]]
|
||||
; CHECK-NEXT: i8 1, label [[BB10:%.*]]
|
||||
; CHECK-NEXT: i8 2, label [[BB10]]
|
||||
; CHECK-NEXT: i8 3, label [[BB8]]
|
||||
; CHECK-NEXT: i8 4, label [[BB8]]
|
||||
; CHECK-NEXT: i8 3, label [[BB7:%.*]]
|
||||
; CHECK-NEXT: i8 4, label [[BB7]]
|
||||
; CHECK-NEXT: ]
|
||||
; CHECK: bb7:
|
||||
; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB8]], label [[BB10]]
|
||||
; CHECK: bb8:
|
||||
; CHECK-NEXT: [[TMP9:%.*]] = icmp eq ptr undef, [[ARG:%.*]]
|
||||
; CHECK-NEXT: br i1 [[TMP9]], label [[BB10]], label [[BB2]]
|
||||
@@ -175,7 +177,7 @@ bb6:
|
||||
br label %bb7
|
||||
|
||||
bb7:
|
||||
br i1 undef, label %bb8, label %bb10
|
||||
br i1 %arg2, label %bb8, label %bb10
|
||||
|
||||
bb8:
|
||||
%tmp9 = icmp eq ptr undef, %arg
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
@global = external global i64, align 8
|
||||
|
||||
define void @f() {
|
||||
define void @f(i1 %arg) {
|
||||
; CHECK-LABEL: @f(
|
||||
; CHECK-NEXT: bb:
|
||||
; CHECK-NEXT: br label [[BB1:%.*]]
|
||||
@@ -15,12 +15,28 @@ define void @f() {
|
||||
; CHECK-NEXT: [[TMP4:%.*]] = load i64, ptr @global, align 8
|
||||
; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i64 [[TMP4]], 0
|
||||
; CHECK-NEXT: br i1 [[TMP5]], label [[BB23:%.*]], label [[BB23]]
|
||||
; CHECK: bb23:
|
||||
; CHECK: bb10:
|
||||
; CHECK-NEXT: [[TMP11:%.*]] = load i64, ptr @global, align 8
|
||||
; CHECK-NEXT: [[TMP12:%.*]] = icmp slt i64 [[TMP11]], 5
|
||||
; CHECK-NEXT: br i1 [[TMP12]], label [[BB14:%.*]], label [[BB17:%.*]]
|
||||
; CHECK: bb14:
|
||||
; CHECK-NEXT: br i1 [[ARG:%.*]], label [[BB15:%.*]], label [[BB10:%.*]]
|
||||
; CHECK: bb15:
|
||||
; CHECK-NEXT: unreachable
|
||||
; CHECK: bb17:
|
||||
; CHECK-NEXT: br label [[BB26:%.*]]
|
||||
; CHECK: bb18:
|
||||
; CHECK-NEXT: br i1 [[ARG]], label [[BB23]], label [[BB14]]
|
||||
; CHECK: bb21:
|
||||
; CHECK-NEXT: br label [[BB26]]
|
||||
; CHECK: bb23:
|
||||
; CHECK-NEXT: br i1 [[ARG]], label [[BB24:%.*]], label [[BB14]]
|
||||
; CHECK: bb24:
|
||||
; CHECK-NEXT: br i1 [[ARG]], label [[BB28:%.*]], label [[BB21:%.*]]
|
||||
; CHECK: bb26:
|
||||
; CHECK-NEXT: br label [[BB1]]
|
||||
; CHECK: bb27:
|
||||
; CHECK-NEXT: br label [[BB26]]
|
||||
; CHECK-NEXT: br label [[BB24]]
|
||||
;
|
||||
bb:
|
||||
br label %bb1
|
||||
@@ -52,7 +68,7 @@ bb13:
|
||||
br label %bb14
|
||||
|
||||
bb14:
|
||||
br i1 undef, label %bb15, label %bb16
|
||||
br i1 %arg, label %bb15, label %bb16
|
||||
|
||||
bb15:
|
||||
unreachable
|
||||
@@ -64,10 +80,10 @@ bb17:
|
||||
br label %bb18
|
||||
|
||||
bb18:
|
||||
br i1 undef, label %bb22, label %bb13
|
||||
br i1 %arg, label %bb22, label %bb13
|
||||
|
||||
bb19:
|
||||
br i1 undef, label %bb20, label %bb21
|
||||
br i1 %arg, label %bb20, label %bb21
|
||||
|
||||
bb20:
|
||||
unreachable
|
||||
@@ -79,10 +95,10 @@ bb22:
|
||||
br label %bb23
|
||||
|
||||
bb23:
|
||||
br i1 undef, label %bb24, label %bb13
|
||||
br i1 %arg, label %bb24, label %bb13
|
||||
|
||||
bb24:
|
||||
br i1 undef, label %bb26, label %bb25
|
||||
br i1 %arg, label %bb26, label %bb25
|
||||
|
||||
bb25:
|
||||
br label %bb19
|
||||
|
||||
@@ -63,7 +63,7 @@ entry:
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @_Z3fn1v() uwtable personality ptr @__gxx_personality_v0 {
|
||||
define void @_Z3fn1v(i1 %arg) uwtable personality ptr @__gxx_personality_v0 {
|
||||
; CHECK-LABEL: @_Z3fn1v(
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: [[CALL:%.*]] = call noalias ptr @_Znwm()
|
||||
@@ -93,6 +93,8 @@ define void @_Z3fn1v() uwtable personality ptr @__gxx_personality_v0 {
|
||||
; CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[_REF_I_I_I]], align 4
|
||||
; CHECK-NEXT: [[TOBOOL_I_I_I:%.*]] = icmp eq i32 [[TMP3]], 0
|
||||
; CHECK-NEXT: br i1 [[TOBOOL_I_I_I]], label [[_ZN1BI1DED1EV_EXIT:%.*]], label [[DELETE_NOTNULL_I_I_I:%.*]]
|
||||
; CHECK: if.then.i.i.i:
|
||||
; CHECK-NEXT: br i1 [[ARG:%.*]], label [[_ZN1BI1DED1EV_EXIT]], label [[DELETE_NOTNULL_I_I_I1:%.*]]
|
||||
; CHECK: delete.notnull.i.i.i:
|
||||
; CHECK-NEXT: call void @_ZdlPv()
|
||||
; CHECK-NEXT: unreachable
|
||||
@@ -138,7 +140,7 @@ lpad1: ; preds = %_ZN1DC1Ev.exit, %_Z
|
||||
br i1 %tobool.i.i.i, label %_ZN1BI1DED1Ev.exit, label %if.then.i.i.i
|
||||
|
||||
if.then.i.i.i: ; preds = %lpad1
|
||||
br i1 undef, label %_ZN1BI1DED1Ev.exit, label %delete.notnull.i.i.i
|
||||
br i1 %arg, label %_ZN1BI1DED1Ev.exit, label %delete.notnull.i.i.i
|
||||
|
||||
delete.notnull.i.i.i: ; preds = %if.then.i.i.i
|
||||
call void @_ZdlPv() #9
|
||||
@@ -191,7 +193,7 @@ entry:
|
||||
|
||||
declare void @_ZN1D16deleteKeyPressedEv()
|
||||
|
||||
define void @_ZN1BI1DED1Ev(ptr nocapture readonly %this) unnamed_addr uwtable align 2 {
|
||||
define void @_ZN1BI1DED1Ev(ptr nocapture readonly %this, i1 %arg) unnamed_addr uwtable align 2 {
|
||||
; CHECK-LABEL: @_ZN1BI1DED1Ev(
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS:%.*]], align 8
|
||||
@@ -199,6 +201,8 @@ define void @_ZN1BI1DED1Ev(ptr nocapture readonly %this) unnamed_addr uwtable al
|
||||
; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[_REF_I_I]], align 4
|
||||
; CHECK-NEXT: [[TOBOOL_I_I:%.*]] = icmp eq i32 [[TMP1]], 0
|
||||
; CHECK-NEXT: br i1 [[TOBOOL_I_I]], label [[_ZN1BI1DED2EV_EXIT:%.*]], label [[DELETE_NOTNULL_I_I:%.*]]
|
||||
; CHECK: if.then.i.i:
|
||||
; CHECK-NEXT: br i1 [[ARG:%.*]], label [[_ZN1BI1DED2EV_EXIT]], label [[DELETE_NOTNULL_I_I1:%.*]]
|
||||
; CHECK: delete.notnull.i.i:
|
||||
; CHECK-NEXT: call void @_ZdlPv()
|
||||
; CHECK-NEXT: unreachable
|
||||
@@ -213,7 +217,7 @@ entry:
|
||||
br i1 %tobool.i.i, label %_ZN1BI1DED2Ev.exit, label %if.then.i.i
|
||||
|
||||
if.then.i.i: ; preds = %entry
|
||||
br i1 undef, label %_ZN1BI1DED2Ev.exit, label %delete.notnull.i.i
|
||||
br i1 %arg, label %_ZN1BI1DED2Ev.exit, label %delete.notnull.i.i
|
||||
|
||||
delete.notnull.i.i: ; preds = %if.then.i.i
|
||||
call void @_ZdlPv() #9
|
||||
@@ -225,7 +229,7 @@ _ZN1BI1DED2Ev.exit: ; preds = %entry, %if.then.i.i
|
||||
|
||||
declare hidden void @__clang_call_terminate()
|
||||
|
||||
define void @_ZN1BI1DED2Ev(ptr nocapture readonly %this) unnamed_addr uwtable align 2 {
|
||||
define void @_ZN1BI1DED2Ev(ptr nocapture readonly %this, i1 %arg) unnamed_addr uwtable align 2 {
|
||||
; CHECK-LABEL: @_ZN1BI1DED2Ev(
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS:%.*]], align 8
|
||||
@@ -233,6 +237,8 @@ define void @_ZN1BI1DED2Ev(ptr nocapture readonly %this) unnamed_addr uwtable al
|
||||
; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[_REF_I]], align 4
|
||||
; CHECK-NEXT: [[TOBOOL_I:%.*]] = icmp eq i32 [[TMP1]], 0
|
||||
; CHECK-NEXT: br i1 [[TOBOOL_I]], label [[_ZN1AI1CE5DEREFEV_EXIT:%.*]], label [[DELETE_NOTNULL_I:%.*]]
|
||||
; CHECK: if.then.i:
|
||||
; CHECK-NEXT: br i1 [[ARG:%.*]], label [[_ZN1AI1CE5DEREFEV_EXIT]], label [[DELETE_NOTNULL_I1:%.*]]
|
||||
; CHECK: delete.notnull.i:
|
||||
; CHECK-NEXT: call void @_ZdlPv()
|
||||
; CHECK-NEXT: unreachable
|
||||
@@ -247,7 +253,7 @@ entry:
|
||||
br i1 %tobool.i, label %_ZN1AI1CE5derefEv.exit, label %if.then.i
|
||||
|
||||
if.then.i: ; preds = %entry
|
||||
br i1 undef, label %_ZN1AI1CE5derefEv.exit, label %delete.notnull.i
|
||||
br i1 %arg, label %_ZN1AI1CE5derefEv.exit, label %delete.notnull.i
|
||||
|
||||
delete.notnull.i: ; preds = %if.then.i
|
||||
call void @_ZdlPv() #9
|
||||
@@ -257,12 +263,14 @@ _ZN1AI1CE5derefEv.exit: ; preds = %entry, %if.then.i
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @_ZN1AI1CE5derefEv(ptr nocapture readonly %this) nounwind uwtable align 2 {
|
||||
define void @_ZN1AI1CE5derefEv(ptr nocapture readonly %this, i1 %arg) nounwind uwtable align 2 {
|
||||
; CHECK-LABEL: @_ZN1AI1CE5derefEv(
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[THIS:%.*]], align 4
|
||||
; CHECK-NEXT: [[TOBOOL:%.*]] = icmp eq i32 [[TMP0]], 0
|
||||
; CHECK-NEXT: br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[DELETE_NOTNULL:%.*]]
|
||||
; CHECK: if.then:
|
||||
; CHECK-NEXT: br i1 [[ARG:%.*]], label [[IF_END]], label [[DELETE_NOTNULL1:%.*]]
|
||||
; CHECK: delete.notnull:
|
||||
; CHECK-NEXT: call void @_ZdlPv()
|
||||
; CHECK-NEXT: unreachable
|
||||
@@ -275,7 +283,7 @@ entry:
|
||||
br i1 %tobool, label %if.end, label %if.then
|
||||
|
||||
if.then: ; preds = %entry
|
||||
br i1 undef, label %if.end, label %delete.notnull
|
||||
br i1 %arg, label %if.end, label %delete.notnull
|
||||
|
||||
delete.notnull: ; preds = %if.then
|
||||
call void @_ZdlPv() #9
|
||||
|
||||
@@ -3,12 +3,15 @@
|
||||
|
||||
|
||||
|
||||
define void @f() {
|
||||
; CHECK-LABEL: define void @f() {
|
||||
define void @f(i1 %arg) {
|
||||
; CHECK-LABEL: define void @f(
|
||||
; CHECK-SAME: i1 [[ARG:%.*]]) {
|
||||
; CHECK-NEXT: [[ENTRY:.*:]]
|
||||
; CHECK-NEXT: br label %[[LOR_RHS:.*]]
|
||||
; CHECK-NEXT: br label %[[FOR_COND1:.*]]
|
||||
; CHECK: [[FOR_COND1]]:
|
||||
; CHECK-NEXT: br i1 [[ARG]], label %[[LOR_RHS:.*]], label %[[LOR_RHS]]
|
||||
; CHECK: [[LOR_RHS]]:
|
||||
; CHECK-NEXT: br label %[[LOR_RHS]]
|
||||
; CHECK-NEXT: br label %[[FOR_COND1]]
|
||||
;
|
||||
entry:
|
||||
br label %for.cond1
|
||||
@@ -23,7 +26,7 @@ if.end16:
|
||||
|
||||
for.cond1:
|
||||
%g.1 = phi i32 [ 0, %entry ], [ 0, %lor.rhs ], [ %g.3, %if.end16 ]
|
||||
br i1 undef, label %lor.rhs, label %if.end16
|
||||
br i1 %arg, label %lor.rhs, label %if.end16
|
||||
|
||||
lor.rhs:
|
||||
br label %for.cond1
|
||||
|
||||
@@ -13,17 +13,16 @@ entry:
|
||||
|
||||
for.cond2: ; preds = %for.inc46, %lor.end, %entry
|
||||
%p_44.addr.1 = phi i8 [ %p_44.addr.1, %lor.end ], [ %p_44, %entry ], [ %p_44.addr.1, %for.inc46 ]
|
||||
br i1 undef, label %for.inc46, label %for.body5
|
||||
br i1 true, label %for.inc46, label %for.body5
|
||||
|
||||
for.body5: ; preds = %for.cond2
|
||||
br i1 undef, label %lbl_465, label %if.then9
|
||||
br i1 false, label %lbl_465, label %if.then9
|
||||
|
||||
if.then9: ; preds = %for.body5
|
||||
br label %return
|
||||
|
||||
lbl_465: ; preds = %lbl_465, %for.body5
|
||||
%tobool19 = icmp eq i8 undef, 0
|
||||
br i1 %tobool19, label %if.end21, label %lbl_465
|
||||
br i1 true, label %if.end21, label %lbl_465
|
||||
|
||||
if.end21: ; preds = %lbl_465
|
||||
%conv23 = zext i8 %p_44.addr.1 to i64
|
||||
|
||||
@@ -24,11 +24,10 @@ lor.rhs: ; preds = %entry
|
||||
br label %lor.end, !dbg !10
|
||||
|
||||
lor.end: ; preds = %lor.rhs, %entry
|
||||
%cmp103 = xor i1 undef, undef, !dbg !11
|
||||
br i1 %cmp103, label %for.cond, label %if.then, !dbg !12
|
||||
br i1 false, label %for.cond, label %if.then, !dbg !12
|
||||
|
||||
for.cond: ; preds = %for.body, %lor.end
|
||||
br i1 undef, label %if.then, label %for.body, !dbg !13
|
||||
br i1 false, label %if.then, label %for.body, !dbg !13
|
||||
|
||||
for.body: ; preds = %for.cond
|
||||
br label %for.cond, !dbg !14
|
||||
|
||||
@@ -94,7 +94,7 @@ declare i32 @a()
|
||||
; This gets into a state that could cause instruction simplify
|
||||
; to hang - an insertelement instruction has itself as an operand.
|
||||
|
||||
define void @PR48362() {
|
||||
define void @PR48362(i1 %arg) {
|
||||
;
|
||||
; CHECK-LABEL: @PR48362(
|
||||
; CHECK-NEXT: cleanup.cont1500:
|
||||
@@ -142,7 +142,7 @@ for.body1911: ; preds = %if.else1904
|
||||
br label %land.end2173
|
||||
|
||||
land.end2173: ; preds = %for.body1911
|
||||
br i1 undef, label %if.end2178, label %cleanup2297
|
||||
br i1 %arg, label %if.end2178, label %cleanup2297
|
||||
|
||||
if.end2178: ; preds = %land.end2173
|
||||
%l_580.sroa.0.2.vec.insert = insertelement <4 x i32> %l_580.sroa.0.0, i32 undef, i32 1
|
||||
@@ -165,7 +165,7 @@ cleanup.cont2339: ; preds = %cleanup2329
|
||||
br label %for.inc2340
|
||||
|
||||
for.inc2340: ; preds = %cleanup.cont2339
|
||||
br i1 undef, label %for.body1509, label %crit_edge115
|
||||
br i1 %arg, label %for.body1509, label %crit_edge115
|
||||
|
||||
crit_edge114: ; preds = %cleanup2329
|
||||
unreachable
|
||||
|
||||
@@ -4,25 +4,25 @@
|
||||
; the loop, and the loop has exits with predecessors not within the loop
|
||||
; (and btw these edges are unsplittable due to the indirectbr).
|
||||
; PR5437
|
||||
define i32 @test0() nounwind {
|
||||
define i32 @test0(i1 %arg) nounwind {
|
||||
; CHECK-LABEL: @test0
|
||||
entry:
|
||||
br i1 undef, label %"4", label %"3"
|
||||
br i1 %arg, label %"4", label %"3"
|
||||
|
||||
"3": ; preds = %entry
|
||||
ret i32 0
|
||||
|
||||
"4": ; preds = %entry
|
||||
br i1 undef, label %"6", label %"5"
|
||||
br i1 %arg, label %"6", label %"5"
|
||||
|
||||
"5": ; preds = %"4"
|
||||
unreachable
|
||||
|
||||
"6": ; preds = %"4"
|
||||
br i1 undef, label %"10", label %"13"
|
||||
br i1 %arg, label %"10", label %"13"
|
||||
|
||||
"10": ; preds = %"6"
|
||||
br i1 undef, label %"22", label %"15"
|
||||
br i1 %arg, label %"22", label %"15"
|
||||
|
||||
"13": ; preds = %"6"
|
||||
unreachable
|
||||
@@ -393,7 +393,7 @@ entry:
|
||||
unreachable
|
||||
|
||||
"1566": ; preds = %"23"
|
||||
br i1 undef, label %"1569", label %"1568"
|
||||
br i1 %arg, label %"1569", label %"1568"
|
||||
|
||||
"1568": ; preds = %"1566"
|
||||
unreachable
|
||||
@@ -545,13 +545,13 @@ entry:
|
||||
; create PHIs in one of such exits we are also inserting PHIs in L2 header. This
|
||||
; could break LCSSA form for L2 because these inserted PHIs can also have uses
|
||||
; in L2 exits. Test that we don't assert/crash on that.
|
||||
define void @test1() {
|
||||
define void @test1(i1 %arg) {
|
||||
; CHECK-LABEL: @test1
|
||||
br label %lab1
|
||||
|
||||
lab1:
|
||||
%tmp21 = add i32 undef, 677038203
|
||||
br i1 undef, label %lab2, label %exit
|
||||
br i1 %arg, label %lab2, label %exit
|
||||
|
||||
lab2:
|
||||
indirectbr ptr undef, [label %lab1, label %lab3]
|
||||
@@ -559,7 +559,7 @@ lab2:
|
||||
lab3:
|
||||
; CHECK: %tmp21.lcssa1 = phi i32 [ %tmp21.lcssa1, %lab4 ], [ %tmp21, %lab2 ]
|
||||
%tmp12 = phi i32 [ %tmp21, %lab2 ], [ %tmp12, %lab4 ]
|
||||
br i1 undef, label %lab5, label %lab4
|
||||
br i1 %arg, label %lab5, label %lab4
|
||||
|
||||
lab4:
|
||||
br label %lab3
|
||||
|
||||
@@ -9,9 +9,9 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
|
||||
@.str32190 = external constant [92 x i8], align 1 ; <ptr> [#uses=1]
|
||||
@.str41 = external constant [25 x i8], align 1 ; <ptr> [#uses=1]
|
||||
|
||||
define void @_ZN8EtherBus10initializeEv() personality ptr @__gxx_personality_v0 {
|
||||
define void @_ZN8EtherBus10initializeEv(i1 %arg) personality ptr @__gxx_personality_v0 {
|
||||
entry:
|
||||
br i1 undef, label %_ZN7cObjectnwEj.exit, label %bb.i
|
||||
br i1 %arg, label %_ZN7cObjectnwEj.exit, label %bb.i
|
||||
|
||||
bb.i: ; preds = %entry
|
||||
br label %_ZN7cObjectnwEj.exit
|
||||
@@ -21,19 +21,19 @@ _ZN7cObjectnwEj.exit: ; preds = %bb.i, %entry
|
||||
to label %bb1 unwind label %lpad
|
||||
|
||||
bb1: ; preds = %_ZN7cObjectnwEj.exit
|
||||
br i1 undef, label %_ZNK5cGate4sizeEv.exit, label %bb.i110
|
||||
br i1 %arg, label %_ZNK5cGate4sizeEv.exit, label %bb.i110
|
||||
|
||||
bb.i110: ; preds = %bb1
|
||||
br label %_ZNK5cGate4sizeEv.exit
|
||||
|
||||
_ZNK5cGate4sizeEv.exit: ; preds = %bb.i110, %bb1
|
||||
br i1 undef, label %_ZNK5cGate4sizeEv.exit122, label %bb.i120
|
||||
br i1 %arg, label %_ZNK5cGate4sizeEv.exit122, label %bb.i120
|
||||
|
||||
bb.i120: ; preds = %_ZNK5cGate4sizeEv.exit
|
||||
br label %_ZNK5cGate4sizeEv.exit122
|
||||
|
||||
_ZNK5cGate4sizeEv.exit122: ; preds = %bb.i120, %_ZNK5cGate4sizeEv.exit
|
||||
br i1 undef, label %bb8, label %bb2
|
||||
br i1 %arg, label %bb8, label %bb2
|
||||
|
||||
bb2: ; preds = %_ZNK5cGate4sizeEv.exit122
|
||||
unreachable
|
||||
@@ -51,7 +51,7 @@ invcont10: ; preds = %invcont9
|
||||
to label %invcont11 unwind label %lpad119
|
||||
|
||||
invcont11: ; preds = %invcont10
|
||||
br i1 undef, label %bb12, label %bb18
|
||||
br i1 %arg, label %bb12, label %bb18
|
||||
|
||||
bb12: ; preds = %invcont11
|
||||
invoke void (ptr, ptr, ...) @_ZN6cEnvir6printfEPKcz(ptr null, ptr @.str12, i32 undef)
|
||||
@@ -61,10 +61,10 @@ bb.i.i159: ; preds = %bb12
|
||||
unreachable
|
||||
|
||||
bb18: ; preds = %invcont11
|
||||
br i1 undef, label %bb32, label %bb34
|
||||
br i1 %arg, label %bb32, label %bb34
|
||||
|
||||
bb32: ; preds = %bb18
|
||||
br i1 undef, label %bb.i.i123, label %bb34
|
||||
br i1 %arg, label %bb.i.i123, label %bb34
|
||||
|
||||
bb.i.i123: ; preds = %bb32
|
||||
br label %bb34
|
||||
@@ -74,7 +74,7 @@ bb34: ; preds = %bb.i.i123, %bb32, %bb18
|
||||
to label %invcont35 unwind label %lpad119 ; <ptr> [#uses=0]
|
||||
|
||||
invcont35: ; preds = %bb34
|
||||
br i1 undef, label %bb49, label %bb61
|
||||
br i1 %arg, label %bb49, label %bb61
|
||||
|
||||
bb49: ; preds = %invcont35
|
||||
invoke void (ptr, ptr, ...) @_ZNK13cSimpleModule5errorEPKcz(ptr undef, ptr @.str32190)
|
||||
|
||||
@@ -8,19 +8,19 @@ target triple = "x86_64-unknown-linux-gnu"
|
||||
; it.
|
||||
|
||||
; CHECK-LABEL: @foo1
|
||||
define internal i32 @foo1() {
|
||||
define internal i32 @foo1(i1 %arg) {
|
||||
entry:
|
||||
br label %header
|
||||
|
||||
header:
|
||||
%x = add i32 0, 1
|
||||
br i1 undef, label %if, label %loopexit1
|
||||
br i1 %arg, label %if, label %loopexit1
|
||||
|
||||
if:
|
||||
br i1 undef, label %latch, label %loopexit2
|
||||
br i1 %arg, label %latch, label %loopexit2
|
||||
|
||||
latch:
|
||||
br i1 undef, label %header, label %loopexit3
|
||||
br i1 %arg, label %header, label %loopexit3
|
||||
|
||||
; CHECK: loopexit1:
|
||||
; CHECK: %x.lcssa = phi i32 [ %x, %header ]
|
||||
@@ -40,7 +40,7 @@ loopexit3:
|
||||
; CHECK: loop_with_insert_point:
|
||||
; CHECK: %x4 = phi i32 [ %x4, %loop_with_insert_point ], [ %x.lcssa2, %loopexit3 ], [ %x.lcssa, %loopexit1 ]
|
||||
loop_with_insert_point:
|
||||
br i1 undef, label %loop_with_insert_point, label %bb
|
||||
br i1 %arg, label %loop_with_insert_point, label %bb
|
||||
|
||||
; CHECK: bb:
|
||||
; CHECK: %x4.lcssa = phi i32 [ %x4, %loop_with_insert_point ]
|
||||
@@ -54,16 +54,16 @@ exit:
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @foo2
|
||||
define internal i32 @foo2() {
|
||||
define internal i32 @foo2(i1 %arg) {
|
||||
entry:
|
||||
br label %header
|
||||
|
||||
header:
|
||||
%x = add i32 0, 1
|
||||
br i1 undef, label %latch, label %loopexit1
|
||||
br i1 %arg, label %latch, label %loopexit1
|
||||
|
||||
latch:
|
||||
br i1 undef, label %header, label %loopexit2
|
||||
br i1 %arg, label %header, label %loopexit2
|
||||
|
||||
; CHECK: loopexit1:
|
||||
; CHECK: %x.lcssa = phi i32 [ %x, %header ]
|
||||
@@ -78,7 +78,7 @@ loopexit2:
|
||||
; CHECK: loop_with_insert_point:
|
||||
; CHECK: %x2 = phi i32 [ %x2, %loop_with_insert_point ], [ %x.lcssa1, %loopexit2 ], [ %x.lcssa, %loopexit1 ]
|
||||
loop_with_insert_point:
|
||||
br i1 undef, label %loop_with_insert_point, label %exit
|
||||
br i1 %arg, label %loop_with_insert_point, label %exit
|
||||
|
||||
; CHECK: exit:
|
||||
; CHECK: %x2.lcssa = phi i32 [ %x2, %loop_with_insert_point ]
|
||||
|
||||
@@ -5,7 +5,7 @@ target triple = "x86_64-unknown-linux-gnu"
|
||||
; PR28608
|
||||
; Check that we don't crash on this test.
|
||||
|
||||
define void @foo() {
|
||||
define void @foo(i1 %arg) {
|
||||
entry:
|
||||
br label %bb1
|
||||
|
||||
@@ -14,10 +14,10 @@ bb1:
|
||||
|
||||
bb2:
|
||||
%x = phi i32 [ undef, %bb5 ], [ undef, %bb1 ]
|
||||
br i1 undef, label %bb3, label %bb6
|
||||
br i1 %arg, label %bb3, label %bb6
|
||||
|
||||
bb3:
|
||||
br i1 undef, label %bb5, label %bb4
|
||||
br i1 %arg, label %bb5, label %bb4
|
||||
|
||||
bb4:
|
||||
br label %bb6
|
||||
|
||||
@@ -3,37 +3,37 @@
|
||||
; This bugpoint reduced test case used to assert when removing unused PHI nodes.
|
||||
; Just verify that we do not assert/crash.
|
||||
|
||||
define void @test() {
|
||||
define void @test(i1 %arg) {
|
||||
entry:
|
||||
br label %gazank
|
||||
|
||||
gazank:
|
||||
%value = phi i16 [ 0, %entry ], [ undef, %gazonk ]
|
||||
br i1 undef, label %gazink, label %qqq
|
||||
br i1 %arg, label %gazink, label %qqq
|
||||
|
||||
gazink:
|
||||
br i1 undef, label %gazonk, label %infinite.loop.pred
|
||||
br i1 %arg, label %gazonk, label %infinite.loop.pred
|
||||
|
||||
gazonk:
|
||||
br i1 undef, label %exit1, label %gazank
|
||||
br i1 %arg, label %exit1, label %gazank
|
||||
|
||||
qqq:
|
||||
br i1 undef, label %www, label %exit2
|
||||
br i1 %arg, label %www, label %exit2
|
||||
|
||||
www:
|
||||
br i1 undef, label %qqq, label %foo.pred
|
||||
br i1 %arg, label %qqq, label %foo.pred
|
||||
|
||||
foo.pred:
|
||||
br label %foo
|
||||
|
||||
foo:
|
||||
br i1 undef, label %bar, label %exit1.pred
|
||||
br i1 %arg, label %bar, label %exit1.pred
|
||||
|
||||
bar:
|
||||
br i1 undef, label %foo, label %exit2.pred
|
||||
br i1 %arg, label %foo, label %exit2.pred
|
||||
|
||||
unreachable1:
|
||||
br i1 undef, label %foo, label %exit2.pred
|
||||
br i1 %arg, label %foo, label %exit2.pred
|
||||
|
||||
exit1.pred:
|
||||
br label %exit1
|
||||
|
||||
@@ -12,19 +12,19 @@
|
||||
|
||||
declare void @printf(i32 %i)
|
||||
|
||||
define i32 @unused_phis() nounwind {
|
||||
define i32 @unused_phis(i1 %arg) nounwind {
|
||||
entry:
|
||||
br label %loop
|
||||
|
||||
loop:
|
||||
%i = phi i32 [0, %entry], [1, %then2]
|
||||
br i1 undef, label %exit1, label %then1
|
||||
br i1 %arg, label %exit1, label %then1
|
||||
|
||||
then1:
|
||||
br i1 undef, label %exit2, label %then2
|
||||
br i1 %arg, label %exit2, label %then2
|
||||
|
||||
then2:
|
||||
br i1 undef, label %exit3, label %loop
|
||||
br i1 %arg, label %exit3, label %loop
|
||||
|
||||
exit1:
|
||||
call void @printf(i32 %i)
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
; Test for rdar://7452967
|
||||
; RUN: opt < %s -passes=licm -disable-output
|
||||
define void @foo (ptr %v)
|
||||
define void @foo (ptr %arg)
|
||||
{
|
||||
entry:
|
||||
br i1 undef, label %preheader, label %return
|
||||
br i1 false, label %preheader, label %return
|
||||
|
||||
preheader:
|
||||
br i1 undef, label %loop, label %return
|
||||
br i1 false, label %loop, label %return
|
||||
|
||||
loop:
|
||||
indirectbr ptr undef, [label %preheader, label %stuff]
|
||||
indirectbr ptr %arg, [label %preheader, label %stuff]
|
||||
|
||||
stuff:
|
||||
%0 = load i8, ptr undef, align 1
|
||||
%0 = load i8, ptr %arg, align 1
|
||||
br label %loop
|
||||
|
||||
return:
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
; removed, its alias set tracker is destroyed and no longer available when LICM
|
||||
; runs on the outer loop.
|
||||
|
||||
define void @f() {
|
||||
define void @f(i1 %arg) {
|
||||
entry:
|
||||
br label %l1
|
||||
|
||||
@@ -17,7 +17,7 @@ l1.loopexit:
|
||||
br label %l1.backedge
|
||||
|
||||
l1:
|
||||
br i1 undef, label %l1.backedge, label %l2.preheader
|
||||
br i1 %arg, label %l1.backedge, label %l2.preheader
|
||||
|
||||
l1.backedge:
|
||||
br label %l1
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
; RUN: opt -passes=licm < %s -S | FileCheck %s
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes='require<aa>,require<target-ir>,require<scalar-evolution>,require<opt-remark-emit>,loop-mssa(licm)' < %s -S | FileCheck %s
|
||||
|
||||
define void @f_0(i1 %p) nounwind ssp {
|
||||
define void @f_0(i1 %p, i1 %arg) nounwind ssp {
|
||||
; CHECK-LABEL: @f_0(
|
||||
entry:
|
||||
br label %for.body
|
||||
|
||||
for.body:
|
||||
br i1 undef, label %if.then, label %for.cond.backedge
|
||||
br i1 %arg, label %if.then, label %for.cond.backedge
|
||||
|
||||
for.cond.backedge:
|
||||
br i1 undef, label %for.end104, label %for.body
|
||||
br i1 %arg, label %for.end104, label %for.body
|
||||
|
||||
if.then:
|
||||
br i1 undef, label %if.then27, label %if.end.if.end.split_crit_edge.critedge
|
||||
br i1 %arg, label %if.then27, label %if.end.if.end.split_crit_edge.critedge
|
||||
|
||||
if.then27:
|
||||
; CHECK: tail call void @llvm.assume
|
||||
@@ -24,10 +24,10 @@ if.end.if.end.split_crit_edge.critedge:
|
||||
br label %for.body61
|
||||
|
||||
for.body61.us:
|
||||
br i1 undef, label %for.cond.backedge, label %for.body61.us
|
||||
br i1 %arg, label %for.cond.backedge, label %for.body61.us
|
||||
|
||||
for.body61:
|
||||
br i1 undef, label %for.cond.backedge, label %for.body61
|
||||
br i1 %arg, label %for.cond.backedge, label %for.body61
|
||||
|
||||
for.end104:
|
||||
ret void
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -S -passes=licm < %s | FileCheck %s
|
||||
|
||||
define i32 @j() {
|
||||
define i32 @j(i1 %arg) {
|
||||
; CHECK-LABEL: @j(
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: br label [[FOR_COND:%.*]]
|
||||
@@ -9,7 +9,7 @@ define i32 @j() {
|
||||
; CHECK-NEXT: callbr void asm sideeffect "", "!i,~{dirflag},~{fpsr},~{flags}"()
|
||||
; CHECK-NEXT: to label [[COND_TRUE_I:%.*]] [label %for.end.split.loop.exit1]
|
||||
; CHECK: cond.true.i:
|
||||
; CHECK-NEXT: br i1 true, label [[FOR_END_SPLIT_LOOP_EXIT:%.*]], label [[FOR_COND]]
|
||||
; CHECK-NEXT: br i1 [[ARG:%.*]], label [[FOR_END_SPLIT_LOOP_EXIT:%.*]], label [[FOR_COND]]
|
||||
; CHECK: for.end.split.loop.exit:
|
||||
; CHECK-NEXT: [[ASMRESULT1_I_I_LE:%.*]] = extractvalue { i8, i32 } zeroinitializer, 1
|
||||
; CHECK-NEXT: br label [[FOR_END:%.*]]
|
||||
@@ -29,7 +29,7 @@ for.cond: ; preds = %cond.true.i, %entry
|
||||
|
||||
cond.true.i: ; preds = %for.cond
|
||||
%asmresult1.i.i = extractvalue { i8, i32 } zeroinitializer, 1
|
||||
br i1 undef, label %for.end, label %for.cond
|
||||
br i1 %arg, label %for.end, label %for.cond
|
||||
|
||||
for.end: ; preds = %cond.true.i, %for.cond
|
||||
%phi = phi i32 [ %asmresult1.i.i, %cond.true.i ], [ undef, %for.cond ]
|
||||
|
||||
@@ -42,10 +42,10 @@ for.body: ; preds = %for.body, %entry
|
||||
}
|
||||
|
||||
; PR8102
|
||||
define void @test3() {
|
||||
define void @test3(i1 %arg) {
|
||||
entry:
|
||||
%__first = alloca { ptr }
|
||||
br i1 undef, label %for.cond, label %for.end
|
||||
br i1 %arg, label %for.cond, label %for.end
|
||||
|
||||
for.cond: ; preds = %for.cond, %entry
|
||||
%tmp2 = load ptr, ptr %__first, align 4
|
||||
|
||||
@@ -3,18 +3,18 @@
|
||||
|
||||
; RUN: opt -passes=licm < %s -S --try-experimental-debuginfo-iterators | FileCheck %s
|
||||
|
||||
define void @dgefa() nounwind ssp {
|
||||
define void @dgefa(i1 %arg) nounwind ssp {
|
||||
entry:
|
||||
br label %for.body
|
||||
|
||||
for.body: ; preds = %for.cond.backedge, %entry
|
||||
br i1 undef, label %if.then, label %for.cond.backedge, !dbg !11
|
||||
br i1 %arg, label %if.then, label %for.cond.backedge, !dbg !11
|
||||
|
||||
for.cond.backedge: ; preds = %for.body61, %for.body61.us, %for.body
|
||||
br i1 undef, label %for.end104, label %for.body, !dbg !15
|
||||
br i1 %arg, label %for.end104, label %for.body, !dbg !15
|
||||
|
||||
if.then: ; preds = %for.body
|
||||
br i1 undef, label %if.then27, label %if.end.if.end.split_crit_edge.critedge, !dbg !16
|
||||
br i1 %arg, label %if.then27, label %if.end.if.end.split_crit_edge.critedge, !dbg !16
|
||||
|
||||
if.then27: ; preds = %if.then
|
||||
; CHECK: #dbg_value
|
||||
@@ -25,10 +25,10 @@ if.end.if.end.split_crit_edge.critedge: ; preds = %if.then
|
||||
br label %for.body61
|
||||
|
||||
for.body61.us: ; preds = %for.body61.us, %if.then27
|
||||
br i1 undef, label %for.cond.backedge, label %for.body61.us, !dbg !23
|
||||
br i1 %arg, label %for.cond.backedge, label %for.body61.us, !dbg !23
|
||||
|
||||
for.body61: ; preds = %for.body61, %if.end.if.end.split_crit_edge.critedge
|
||||
br i1 undef, label %for.cond.backedge, label %for.body61, !dbg !23
|
||||
br i1 %arg, label %for.cond.backedge, label %for.body61, !dbg !23
|
||||
|
||||
for.end104: ; preds = %for.cond.backedge
|
||||
ret void, !dbg !24
|
||||
|
||||
@@ -4,15 +4,15 @@
|
||||
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
define ptr addrspace(1) @test(ptr addrspace(1) %arg) #0 gc "statepoint-example" personality ptr @wobble {
|
||||
define ptr addrspace(1) @test(ptr addrspace(1) %arg, i1 %arg2) #0 gc "statepoint-example" personality ptr @wobble {
|
||||
; CHECK-LABEL: @test(
|
||||
; CHECK-NEXT: bb:
|
||||
; CHECK-NEXT: br label [[BB1:%.*]]
|
||||
; CHECK: bb1:
|
||||
; CHECK-NEXT: [[TMP:%.*]] = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 1, i32 16, ptr nonnull elementtype(i32 (i32, ptr addrspace(1), i32, i32, i32)) @zot, i32 5, i32 0, i32 undef, ptr addrspace(1) undef, i32 undef, i32 undef, i32 undef, i32 0, i32 0) [ "deopt"(i32 0, i32 0, i32 0, i32 235, i32 3, i32 32, i32 0, i32 0, ptr addrspace(1) undef, i32 3, i32 undef, i32 3, float undef, i32 0, ptr addrspace(1) undef, i32 7, ptr null, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 0, ptr addrspace(1) undef, i32 4, double undef, i32 7, ptr null, i32 0, ptr addrspace(1) undef, i32 3, float undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) null, i32 3, i32 -15108, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null), "gc-live"(ptr addrspace(1) [[ARG:%.*]]) ]
|
||||
; CHECK-NEXT: br i1 false, label [[BB1]], label [[BB2:%.*]]
|
||||
; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1]], label [[BB2:%.*]]
|
||||
; CHECK: bb2:
|
||||
; CHECK-NEXT: [[RES_LE:%.*]] = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[TMP]], i32 0, i32 0) #[[ATTR1:[0-9]+]]
|
||||
; CHECK-NEXT: [[RES_LE:%.*]] = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[TMP]], i32 0, i32 0) #[[ATTR2:[0-9]+]]
|
||||
; CHECK-NEXT: ret ptr addrspace(1) [[RES_LE]]
|
||||
;
|
||||
bb:
|
||||
@@ -21,7 +21,7 @@ bb:
|
||||
bb1:
|
||||
%tmp = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 1, i32 16, ptr nonnull elementtype(i32 (i32, ptr addrspace(1), i32, i32, i32)) @zot, i32 5, i32 0, i32 undef, ptr addrspace(1) undef, i32 undef, i32 undef, i32 undef, i32 0, i32 0) [ "deopt"(i32 0, i32 0, i32 0, i32 235, i32 3, i32 32, i32 0, i32 0, ptr addrspace(1) undef, i32 3, i32 undef, i32 3, float undef, i32 0, ptr addrspace(1) undef, i32 7, ptr null, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 0, ptr addrspace(1) undef, i32 4, double undef, i32 7, ptr null, i32 0, ptr addrspace(1) undef, i32 3, float undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) null, i32 3, i32 -15108, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null), "gc-live"(ptr addrspace(1) %arg) ]
|
||||
%res = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tmp, i32 0, i32 0) readnone
|
||||
br i1 undef, label %bb1, label %bb2
|
||||
br i1 %arg2, label %bb1, label %bb2
|
||||
|
||||
bb2:
|
||||
ret ptr addrspace(1) %res
|
||||
|
||||
@@ -819,7 +819,7 @@ then:
|
||||
; to check that we have a unique loop preheader when we hoist the store (and so
|
||||
; don't fail an assertion).
|
||||
; CHECK-LABEL: @triangles_in_diamond
|
||||
define void @triangles_in_diamond(ptr %ptr) {
|
||||
define void @triangles_in_diamond(ptr %ptr, i1 %arg) {
|
||||
; CHECK-LABEL: entry:
|
||||
; CHECK: store i32 0, ptr %ptr, align 4
|
||||
; CHECK: br label %loop
|
||||
@@ -827,16 +827,16 @@ entry:
|
||||
br label %loop
|
||||
|
||||
loop:
|
||||
br i1 undef, label %left_triangle_1, label %right_triangle
|
||||
br i1 %arg, label %left_triangle_1, label %right_triangle
|
||||
|
||||
left_triangle_1:
|
||||
br i1 undef, label %left_triangle_1_if, label %left_triangle_2
|
||||
br i1 %arg, label %left_triangle_1_if, label %left_triangle_2
|
||||
|
||||
left_triangle_1_if:
|
||||
br label %left_triangle_2
|
||||
|
||||
left_triangle_2:
|
||||
br i1 undef, label %left_triangle_2_if, label %left_triangle_2_then
|
||||
br i1 %arg, label %left_triangle_2_if, label %left_triangle_2_then
|
||||
|
||||
left_triangle_2_if:
|
||||
br label %left_triangle_2_then
|
||||
@@ -845,7 +845,7 @@ left_triangle_2_then:
|
||||
br label %loop.end
|
||||
|
||||
right_triangle:
|
||||
br i1 undef, label %right_triangle.if, label %right_triangle.then
|
||||
br i1 %arg, label %right_triangle.if, label %right_triangle.then
|
||||
|
||||
right_triangle.if:
|
||||
br label %right_triangle.then
|
||||
@@ -860,7 +860,7 @@ loop.end:
|
||||
|
||||
; %cmp dominates its used after being hoisted, but not after %brmerge is rehoisted
|
||||
; CHECK-LABEL: @rehoist
|
||||
define void @rehoist(ptr %this, i32 %x) {
|
||||
define void @rehoist(ptr %this, i32 %x, i1 %arg) {
|
||||
; CHECK-LABEL: entry:
|
||||
; CHECK-DAG: %sub = add nsw i32 %x, -1
|
||||
; CHECK-DAG: %cmp = icmp eq i32 0, %sub
|
||||
@@ -870,7 +870,7 @@ entry:
|
||||
br label %loop
|
||||
|
||||
loop:
|
||||
br i1 undef, label %if1, label %else1
|
||||
br i1 %arg, label %if1, label %else1
|
||||
|
||||
if1:
|
||||
call void %this(ptr %this)
|
||||
@@ -897,7 +897,7 @@ end:
|
||||
; A test case that uses empty blocks in a way that can cause control flow
|
||||
; hoisting to get confused.
|
||||
; CHECK-LABEL: @empty_blocks_multiple_conditional_branches
|
||||
define void @empty_blocks_multiple_conditional_branches(float %arg, ptr %ptr) {
|
||||
define void @empty_blocks_multiple_conditional_branches(float %arg, ptr %ptr, i1 %arg2) {
|
||||
; CHECK-LABEL: entry
|
||||
; CHECK-DAG: %div1 = fmul float %arg, 4.000000e+00
|
||||
; CHECK-DAG: %div2 = fmul float %arg, 2.000000e+00
|
||||
@@ -910,10 +910,10 @@ entry:
|
||||
; CHECK: br label %loop
|
||||
|
||||
loop:
|
||||
br i1 undef, label %backedge2, label %cond1
|
||||
br i1 %arg2, label %backedge2, label %cond1
|
||||
|
||||
cond1:
|
||||
br i1 undef, label %cond1.if, label %cond1.else
|
||||
br i1 %arg2, label %cond1.if, label %cond1.else
|
||||
|
||||
cond1.else:
|
||||
br label %cond3
|
||||
@@ -926,7 +926,7 @@ cond1.if.next:
|
||||
|
||||
cond2:
|
||||
%div1 = fmul float %arg, 4.000000e+00
|
||||
br i1 undef, label %cond2.if, label %cond2.then
|
||||
br i1 %arg2, label %cond2.if, label %cond2.then
|
||||
|
||||
cond2.if:
|
||||
br label %cond2.then
|
||||
@@ -939,7 +939,7 @@ cond2.then:
|
||||
br label %backedge2
|
||||
|
||||
cond3:
|
||||
br i1 undef, label %cond3.then, label %cond3.if
|
||||
br i1 %arg2, label %cond3.then, label %cond3.if
|
||||
|
||||
cond3.if:
|
||||
%div2 = fmul float %arg, 2.000000e+00
|
||||
@@ -955,7 +955,7 @@ backedge2:
|
||||
|
||||
; We can't do much here, so mainly just check that we don't crash.
|
||||
; CHECK-LABEL: @many_path_phi
|
||||
define void @many_path_phi(ptr %ptr1, ptr %ptr2) {
|
||||
define void @many_path_phi(ptr %ptr1, ptr %ptr2, i1 %arg) {
|
||||
; CHECK-LABEL: entry:
|
||||
; CHECK-DAG: %gep3 = getelementptr inbounds i32, ptr %ptr2, i32 2
|
||||
; CHECK-DAG: %gep2 = getelementptr inbounds i32, ptr %ptr2, i32 2
|
||||
@@ -969,7 +969,7 @@ loop:
|
||||
br i1 %cmp1, label %cond2, label %cond1
|
||||
|
||||
cond1:
|
||||
br i1 undef, label %end, label %cond1.else
|
||||
br i1 %arg, label %end, label %cond1.else
|
||||
|
||||
cond1.else:
|
||||
%gep2 = getelementptr inbounds i32, ptr %ptr2, i32 2
|
||||
@@ -981,7 +981,7 @@ cond1.end:
|
||||
br label %end
|
||||
|
||||
cond2:
|
||||
br i1 undef, label %end, label %cond2.else
|
||||
br i1 %arg, label %end, label %cond2.else
|
||||
|
||||
cond2.else:
|
||||
%gep3 = getelementptr inbounds i32, ptr %ptr2, i32 2
|
||||
@@ -1000,7 +1000,7 @@ end:
|
||||
; Check that we correctly handle the hoisting of %gep when theres a critical
|
||||
; edge that branches to the preheader.
|
||||
; CHECK-LABEL: @crit_edge
|
||||
define void @crit_edge(ptr %ptr, i32 %idx, i1 %cond1, i1 %cond2) {
|
||||
define void @crit_edge(ptr %ptr, i32 %idx, i1 %cond1, i1 %cond2, i1 %arg) {
|
||||
; CHECK-LABEL: entry:
|
||||
; CHECK: %gep = getelementptr inbounds i32, ptr %ptr, i32 %idx
|
||||
; CHECK: br label %preheader
|
||||
@@ -1030,7 +1030,7 @@ crit_edge:
|
||||
; Check that the conditional sub is correctly hoisted from the inner loop to the
|
||||
; preheader of the outer loop.
|
||||
; CHECK-LABEL: @hoist_from_innermost_loop
|
||||
define void @hoist_from_innermost_loop(i32 %nx, ptr %ptr) {
|
||||
define void @hoist_from_innermost_loop(i32 %nx, ptr %ptr, i1 %arg) {
|
||||
; CHECK-LABEL: entry:
|
||||
; CHECK-DAG: %sub = sub nsw i32 0, %nx
|
||||
; CHECK: br label %outer_loop
|
||||
@@ -1044,7 +1044,7 @@ middle_loop:
|
||||
br label %inner_loop
|
||||
|
||||
inner_loop:
|
||||
br i1 undef, label %inner_loop_end, label %if
|
||||
br i1 %arg, label %inner_loop_end, label %if
|
||||
|
||||
if:
|
||||
%sub = sub nsw i32 0, %nx
|
||||
@@ -1052,10 +1052,10 @@ if:
|
||||
br label %inner_loop_end
|
||||
|
||||
inner_loop_end:
|
||||
br i1 undef, label %inner_loop, label %middle_loop_end
|
||||
br i1 %arg, label %inner_loop, label %middle_loop_end
|
||||
|
||||
middle_loop_end:
|
||||
br i1 undef, label %middle_loop, label %outer_loop_end
|
||||
br i1 %arg, label %middle_loop, label %outer_loop_end
|
||||
|
||||
outer_loop_end:
|
||||
br label %outer_loop
|
||||
@@ -1231,7 +1231,7 @@ end:
|
||||
; two destinations that are actually the same. We can't hoist this.
|
||||
; TODO: This could be hoisted by erasing one of the incoming values.
|
||||
; CHECK-LABEL: @phi_multiple_values_same_block
|
||||
define i32 @phi_multiple_values_same_block(i32 %arg) {
|
||||
define i32 @phi_multiple_values_same_block(i32 %arg, i1 %arg2) {
|
||||
; CHECK-LABEL: entry:
|
||||
; CHECK: %cmp = icmp sgt i32 %arg, 4
|
||||
; CHECK-NOT: phi
|
||||
@@ -1244,11 +1244,11 @@ loop:
|
||||
br i1 %cmp, label %if, label %then
|
||||
|
||||
if:
|
||||
br i1 undef, label %then, label %then
|
||||
br i1 %arg2, label %then, label %then
|
||||
|
||||
then:
|
||||
%phi = phi i32 [ %arg, %loop ], [ 1, %if ], [ 1, %if ]
|
||||
br i1 undef, label %exit, label %loop
|
||||
br i1 %arg2, label %exit, label %loop
|
||||
|
||||
exit:
|
||||
ret i32 %phi
|
||||
@@ -1379,12 +1379,12 @@ loop.backedge:
|
||||
; The order that we hoist instructions from the loop is different to the textual
|
||||
; order in the function. Check that we can rehoist this correctly.
|
||||
; CHECK-LABEL: @rehoist_wrong_order_1
|
||||
define void @rehoist_wrong_order_1(ptr %ptr) {
|
||||
define void @rehoist_wrong_order_1(ptr %ptr, i1 %arg) {
|
||||
; CHECK-LABEL: entry
|
||||
; CHECK-DAG: %gep2 = getelementptr inbounds i32, ptr %ptr, i64 2
|
||||
; CHECK-DAG: %gep3 = getelementptr inbounds i32, ptr %ptr, i64 3
|
||||
; CHECK-DAG: %gep1 = getelementptr inbounds i32, ptr %ptr, i64 1
|
||||
; CHECK-ENABLED: br i1 undef, label %[[IF1_LICM:.*]], label %[[ELSE1_LICM:.*]]
|
||||
; CHECK-ENABLED: br i1 %arg, label %[[IF1_LICM:.*]], label %[[ELSE1_LICM:.*]]
|
||||
entry:
|
||||
br label %loop
|
||||
|
||||
@@ -1395,7 +1395,7 @@ entry:
|
||||
; CHECK-ENABLED: br label %[[LOOP_BACKEDGE_LICM]]
|
||||
|
||||
; CHECK-ENABLED: [[LOOP_BACKEDGE_LICM]]:
|
||||
; CHECK-ENABLED: br i1 undef, label %[[IF3_LICM:.*]], label %[[END_LICM:.*]]
|
||||
; CHECK-ENABLED: br i1 %arg, label %[[IF3_LICM:.*]], label %[[END_LICM:.*]]
|
||||
|
||||
; CHECK-ENABLED: [[IF3_LICM]]:
|
||||
; CHECK-ENABLED: br label %[[END_LICM]]
|
||||
@@ -1404,7 +1404,7 @@ entry:
|
||||
; CHECK: br label %loop
|
||||
|
||||
loop:
|
||||
br i1 undef, label %if1, label %else1
|
||||
br i1 %arg, label %if1, label %else1
|
||||
|
||||
if1:
|
||||
%gep1 = getelementptr inbounds i32, ptr %ptr, i64 1
|
||||
@@ -1414,10 +1414,10 @@ if1:
|
||||
else1:
|
||||
%gep2 = getelementptr inbounds i32, ptr %ptr, i64 2
|
||||
store i32 0, ptr %gep2, align 4
|
||||
br i1 undef, label %if2, label %loop.backedge
|
||||
br i1 %arg, label %if2, label %loop.backedge
|
||||
|
||||
if2:
|
||||
br i1 undef, label %if3, label %end
|
||||
br i1 %arg, label %if3, label %end
|
||||
|
||||
if3:
|
||||
%gep3 = getelementptr inbounds i32, ptr %ptr, i64 3
|
||||
@@ -1433,12 +1433,12 @@ loop.backedge:
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @rehoist_wrong_order_2
|
||||
define void @rehoist_wrong_order_2(ptr %ptr) {
|
||||
define void @rehoist_wrong_order_2(ptr %ptr, i1 %arg) {
|
||||
; CHECK-LABEL: entry
|
||||
; CHECK-DAG: %gep2 = getelementptr inbounds i32, ptr %ptr, i64 2
|
||||
; CHECK-DAG: %gep3 = getelementptr inbounds i32, ptr %gep2, i64 3
|
||||
; CHECK-DAG: %gep1 = getelementptr inbounds i32, ptr %ptr, i64 1
|
||||
; CHECK-ENABLED: br i1 undef, label %[[IF1_LICM:.*]], label %[[ELSE1_LICM:.*]]
|
||||
; CHECK-ENABLED: br i1 %arg, label %[[IF1_LICM:.*]], label %[[ELSE1_LICM:.*]]
|
||||
entry:
|
||||
br label %loop
|
||||
|
||||
@@ -1449,7 +1449,7 @@ entry:
|
||||
; CHECK-ENABLED: br label %[[LOOP_BACKEDGE_LICM]]
|
||||
|
||||
; CHECK-ENABLED: [[LOOP_BACKEDGE_LICM]]:
|
||||
; CHECK-ENABLED: br i1 undef, label %[[IF3_LICM:.*]], label %[[END_LICM:.*]]
|
||||
; CHECK-ENABLED: br i1 %arg, label %[[IF3_LICM:.*]], label %[[END_LICM:.*]]
|
||||
|
||||
; CHECK-ENABLED: [[IF3_LICM]]:
|
||||
; CHECK-ENABLED: br label %[[END_LICM]]
|
||||
@@ -1458,7 +1458,7 @@ entry:
|
||||
; CHECK: br label %loop
|
||||
|
||||
loop:
|
||||
br i1 undef, label %if1, label %else1
|
||||
br i1 %arg, label %if1, label %else1
|
||||
|
||||
if1:
|
||||
%gep1 = getelementptr inbounds i32, ptr %ptr, i64 1
|
||||
@@ -1468,10 +1468,10 @@ if1:
|
||||
else1:
|
||||
%gep2 = getelementptr inbounds i32, ptr %ptr, i64 2
|
||||
store i32 0, ptr %gep2, align 4
|
||||
br i1 undef, label %if2, label %loop.backedge
|
||||
br i1 %arg, label %if2, label %loop.backedge
|
||||
|
||||
if2:
|
||||
br i1 undef, label %if3, label %end
|
||||
br i1 %arg, label %if3, label %end
|
||||
|
||||
if3:
|
||||
%gep3 = getelementptr inbounds i32, ptr %gep2, i64 3
|
||||
@@ -1486,11 +1486,11 @@ loop.backedge:
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @rehoist_wrong_order_3
|
||||
define void @rehoist_wrong_order_3(ptr %ptr) {
|
||||
define void @rehoist_wrong_order_3(ptr %ptr, i1 %arg) {
|
||||
; CHECK-LABEL: entry
|
||||
; CHECK-DAG: %gep2 = getelementptr inbounds i32, ptr %ptr, i64 2
|
||||
; CHECK-DAG: %gep1 = getelementptr inbounds i32, ptr %ptr, i64 1
|
||||
; CHECK-ENABLED: br i1 undef, label %[[IF1_LICM:.*]], label %[[ELSE1_LICM:.*]]
|
||||
; CHECK-ENABLED: br i1 %arg, label %[[IF1_LICM:.*]], label %[[ELSE1_LICM:.*]]
|
||||
entry:
|
||||
br label %loop
|
||||
|
||||
@@ -1503,7 +1503,7 @@ entry:
|
||||
; CHECK-ENABLED: [[IF2_LICM]]:
|
||||
; CHECK-ENABLED: %phi = phi ptr [ %gep1, %[[IF1_LICM]] ], [ %gep2, %[[ELSE1_LICM]] ]
|
||||
; CHECK-ENABLED: %gep3 = getelementptr inbounds i32, ptr %phi, i64 3
|
||||
; CHECK-ENABLED: br i1 undef, label %[[IF3_LICM:.*]], label %[[END_LICM:.*]]
|
||||
; CHECK-ENABLED: br i1 %arg, label %[[IF3_LICM:.*]], label %[[END_LICM:.*]]
|
||||
|
||||
; CHECK-ENABLED: [[IF3_LICM]]:
|
||||
; CHECK-ENABLED: br label %[[END_LICM]]
|
||||
@@ -1512,7 +1512,7 @@ entry:
|
||||
; CHECK: br label %loop
|
||||
|
||||
loop:
|
||||
br i1 undef, label %if1, label %else1
|
||||
br i1 %arg, label %if1, label %else1
|
||||
|
||||
if1:
|
||||
%gep1 = getelementptr inbounds i32, ptr %ptr, i64 1
|
||||
@@ -1522,11 +1522,11 @@ if1:
|
||||
else1:
|
||||
%gep2 = getelementptr inbounds i32, ptr %ptr, i64 2
|
||||
store i32 0, ptr %gep2, align 4
|
||||
br i1 undef, label %if2, label %loop.backedge
|
||||
br i1 %arg, label %if2, label %loop.backedge
|
||||
|
||||
if2:
|
||||
%phi = phi ptr [ %gep1, %if1 ], [ %gep2, %else1 ]
|
||||
br i1 undef, label %if3, label %end
|
||||
br i1 %arg, label %if3, label %end
|
||||
|
||||
if3:
|
||||
%gep3 = getelementptr inbounds i32, ptr %phi, i64 3
|
||||
|
||||
@@ -11,21 +11,21 @@ target triple = "x86_64-unknown-linux-gnu"
|
||||
@x = common global i32 0, align 4
|
||||
@y = common global i32 0, align 4
|
||||
|
||||
define void @PR18688() {
|
||||
define void @PR18688(i1 %arg) {
|
||||
; CHECK-LABEL: @PR18688(
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: br i1 undef, label [[RETURN:%.*]], label [[OUTER_PREHEADER:%.*]]
|
||||
; CHECK-NEXT: br i1 [[ARG:%.*]], label [[RETURN:%.*]], label [[OUTER_PREHEADER:%.*]]
|
||||
; CHECK: outer.preheader:
|
||||
; CHECK-NEXT: [[Y_VAL:%.*]] = load i32, ptr @y, align 4
|
||||
; CHECK-NEXT: [[ICMP:%.*]] = icmp eq i32 [[Y_VAL]], 0
|
||||
; CHECK-NEXT: br label [[OUTER_HEADER:%.*]]
|
||||
; CHECK: outer.header:
|
||||
; CHECK-NEXT: br i1 undef, label [[OUTER_LATCH:%.*]], label [[INNER_PREHEADER:%.*]]
|
||||
; CHECK-NEXT: br i1 [[ARG]], label [[OUTER_LATCH:%.*]], label [[INNER_PREHEADER:%.*]]
|
||||
; CHECK: inner.preheader:
|
||||
; CHECK-NEXT: br label [[INNER_HEADER:%.*]]
|
||||
; CHECK: inner.header:
|
||||
; CHECK-NEXT: [[TMP0:%.*]] = phi i32 [ [[TMP1:%.*]], [[INNER_LATCH:%.*]] ], [ 0, [[INNER_PREHEADER]] ]
|
||||
; CHECK-NEXT: br i1 undef, label [[INNER_BODY_RHS:%.*]], label [[INNER_LATCH]]
|
||||
; CHECK-NEXT: br i1 [[ARG]], label [[INNER_BODY_RHS:%.*]], label [[INNER_LATCH]]
|
||||
; CHECK: inner.body.rhs:
|
||||
; CHECK-NEXT: br label [[INNER_LATCH]]
|
||||
; CHECK: inner.latch:
|
||||
@@ -36,7 +36,7 @@ define void @PR18688() {
|
||||
; CHECK-NEXT: br label [[OUTER_LATCH]]
|
||||
; CHECK: outer.latch:
|
||||
; CHECK-NEXT: [[TMP2:%.*]] = phi i32 [ [[DOTLCSSA1]], [[INNER_EXIT]] ], [ 0, [[OUTER_HEADER]] ]
|
||||
; CHECK-NEXT: br i1 true, label [[OUTER_EXIT:%.*]], label [[OUTER_HEADER]]
|
||||
; CHECK-NEXT: br i1 [[ARG]], label [[OUTER_EXIT:%.*]], label [[OUTER_HEADER]]
|
||||
; CHECK: outer.exit:
|
||||
; CHECK-NEXT: [[DOTLCSSA:%.*]] = phi i32 [ [[TMP2]], [[OUTER_LATCH]] ]
|
||||
; CHECK-NEXT: store i32 [[DOTLCSSA]], ptr @x, align 4
|
||||
@@ -46,20 +46,20 @@ define void @PR18688() {
|
||||
;
|
||||
|
||||
entry:
|
||||
br i1 undef, label %return, label %outer.preheader
|
||||
br i1 %arg, label %return, label %outer.preheader
|
||||
|
||||
outer.preheader:
|
||||
br label %outer.header
|
||||
|
||||
outer.header:
|
||||
store i32 0, ptr @x, align 4
|
||||
br i1 undef, label %outer.latch, label %inner.preheader
|
||||
br i1 %arg, label %outer.latch, label %inner.preheader
|
||||
|
||||
inner.preheader:
|
||||
br label %inner.header
|
||||
|
||||
inner.header:
|
||||
br i1 undef, label %inner.body.rhs, label %inner.latch
|
||||
br i1 %arg, label %inner.body.rhs, label %inner.latch
|
||||
|
||||
inner.body.rhs:
|
||||
store i32 0, ptr @x, align 4
|
||||
@@ -74,7 +74,7 @@ inner.exit:
|
||||
br label %outer.latch
|
||||
|
||||
outer.latch:
|
||||
br i1 undef, label %outer.exit, label %outer.header
|
||||
br i1 %arg, label %outer.exit, label %outer.header
|
||||
|
||||
outer.exit:
|
||||
br label %return
|
||||
|
||||
@@ -39,8 +39,8 @@
|
||||
%32 = type { ptr }
|
||||
%33 = type <{ %8, ptr, %10, i32, ptr, ptr, ptr, %27, %28, i16, [2 x i8] }>
|
||||
|
||||
define dso_local void @pr39570() local_unnamed_addr align 2 personality ptr @__gxx_personality_v0 !prof !1 {
|
||||
br i1 undef, label %8, label %1, !prof !2
|
||||
define dso_local void @pr39570(i1 %arg) local_unnamed_addr align 2 personality ptr @__gxx_personality_v0 !prof !1 {
|
||||
br i1 %arg, label %8, label %1, !prof !2
|
||||
|
||||
; <label>:1: ; preds = %0
|
||||
%2 = load ptr, ptr undef, align 4
|
||||
@@ -52,7 +52,7 @@ define dso_local void @pr39570() local_unnamed_addr align 2 personality ptr @__g
|
||||
|
||||
; <label>:5: ; preds = %3
|
||||
%6 = getelementptr inbounds %0, ptr %2, i32 undef, i32 4
|
||||
br i1 undef, label %18, label %7, !prof !3
|
||||
br i1 %arg, label %18, label %7, !prof !3
|
||||
|
||||
; <label>:7: ; preds = %5
|
||||
br label %3
|
||||
|
||||
@@ -39,7 +39,7 @@ for.body467.for.body467_crit_edge: ; preds = %for.body467
|
||||
br i1 false, label %for.end539, label %for.body467
|
||||
|
||||
for.end539: ; preds = %for.body467
|
||||
br i1 undef, label %for.body43, label %for.end547
|
||||
br i1 false, label %for.body43, label %for.end547
|
||||
|
||||
for.end547: ; preds = %for.body43
|
||||
ret void
|
||||
|
||||
@@ -3,18 +3,23 @@
|
||||
|
||||
declare void @llvm.experimental.guard(i1, ...)
|
||||
|
||||
define void @test() {
|
||||
; CHECK-LABEL: define void @test() {
|
||||
define void @test(i1 %arg) {
|
||||
; CHECK-LABEL: define void @test
|
||||
; CHECK-SAME: (i1 [[ARG:%.*]]) {
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 0, 400
|
||||
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[TMP0]], i32 9) [ "deopt"() ]
|
||||
; CHECK-NEXT: br i1 [[ARG]], label [[ENTRY_SPLIT:%.*]], label [[HEADER_SPLIT:%.*]]
|
||||
; CHECK: entry.split:
|
||||
; CHECK-NEXT: br label [[HEADER:%.*]]
|
||||
; CHECK: header.loopexit:
|
||||
; CHECK-NEXT: br label [[HEADER]]
|
||||
; CHECK: header:
|
||||
; CHECK-NEXT: br label [[LOOP:%.*]]
|
||||
; CHECK: header.split:
|
||||
; CHECK-NEXT: br label [[LOOP1:%.*]]
|
||||
; CHECK: loop:
|
||||
; CHECK-NEXT: br i1 true, label [[HEADER_LOOPEXIT:%.*]], label [[LOOP]]
|
||||
; CHECK-NEXT: br label [[LOOP1]]
|
||||
;
|
||||
entry:
|
||||
br label %header
|
||||
@@ -25,5 +30,5 @@ header:
|
||||
loop:
|
||||
%0 = icmp ult i32 0, 400
|
||||
call void (i1, ...) @llvm.experimental.guard(i1 %0, i32 9) [ "deopt"() ]
|
||||
br i1 undef, label %header, label %loop
|
||||
br i1 %arg, label %header, label %loop
|
||||
}
|
||||
|
||||
@@ -7,23 +7,23 @@ target triple = "x86_64-unknown-linux-gnu"
|
||||
;Make sure this test do not crash while accessing PostDomTree which is not
|
||||
;preserved in LICM.
|
||||
;
|
||||
;CHECK-LABEL: fn1()
|
||||
;CHECK-LABEL: fn1(i1 %arg)
|
||||
;CHECK-LABEL: for.cond.loopexit.split.loop.exit
|
||||
;CHECK-LABEL: for.cond.loopexit.split.loop.exit1
|
||||
define void @fn1() {
|
||||
define void @fn1(i1 %arg) {
|
||||
entry:
|
||||
br label %for.cond
|
||||
|
||||
for.cond: ; preds = %if.end, %for.cond1, %entry
|
||||
%0 = phi i16 [ undef, %entry ], [ ptrtoint (ptr @c to i16), %if.end ], [ %.mux, %for.cond1 ]
|
||||
br i1 undef, label %for.cond1, label %for.end8
|
||||
br i1 %arg, label %for.cond1, label %for.end8
|
||||
|
||||
for.cond1: ; preds = %if.end, %for.cond
|
||||
%.mux = select i1 undef, i16 undef, i16 ptrtoint (ptr @c to i16)
|
||||
br i1 undef, label %for.cond, label %if.end
|
||||
br i1 %arg, label %for.cond, label %if.end
|
||||
|
||||
if.end: ; preds = %for.cond1
|
||||
br i1 undef, label %for.cond, label %for.cond1
|
||||
br i1 %arg, label %for.cond, label %for.cond1
|
||||
|
||||
for.end8: ; preds = %for.cond
|
||||
ret void
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
; RUN: opt -disable-basic-aa -alias-set-saturation-threshold=2 -passes='loop-mssa(licm)' -S < %s | FileCheck %s
|
||||
; REQUIRES: asserts
|
||||
|
||||
; CHECK-LABEL: @f1()
|
||||
define void @f1() {
|
||||
; CHECK-LABEL: @f1(i1 %arg)
|
||||
define void @f1(i1 %arg) {
|
||||
%lc1.10 = alloca [3 x i16]
|
||||
br label %bb1
|
||||
|
||||
@@ -19,7 +19,7 @@ bb2: ; preds = %bb8, %bb1
|
||||
br label %bb8
|
||||
|
||||
bb8: ; preds = %bb2
|
||||
br i1 undef, label %bb2, label %bb6
|
||||
br i1 %arg, label %bb2, label %bb6
|
||||
|
||||
bb6: ; preds = %bb8
|
||||
br label %bb1
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
; RUN: opt -S -passes='loop-mssa(licm)' < %s | FileCheck %s
|
||||
@e = external dso_local global ptr, align 8
|
||||
|
||||
define void @main() {
|
||||
define void @main(i1 %arg) {
|
||||
; CHECK-LABEL: @main(
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: br label [[LOOP1:%.*]]
|
||||
; CHECK: loop1:
|
||||
; CHECK-NEXT: br label [[LOOP2:%.*]]
|
||||
; CHECK: loop2:
|
||||
; CHECK-NEXT: br i1 false, label [[LOOP2_LATCH:%.*]], label [[LOOP_LATCH:%.*]]
|
||||
; CHECK-NEXT: br i1 [[ARG:%.*]], label [[LOOP2_LATCH:%.*]], label [[LOOP_LATCH:%.*]]
|
||||
; CHECK: loop2.latch:
|
||||
; CHECK-NEXT: br label [[LOOP2]]
|
||||
; CHECK: loop.latch:
|
||||
@@ -22,7 +22,7 @@ loop1:
|
||||
br label %loop2
|
||||
|
||||
loop2:
|
||||
br i1 undef, label %loop2.latch, label %loop.latch
|
||||
br i1 %arg, label %loop2.latch, label %loop.latch
|
||||
|
||||
loop2.latch:
|
||||
store i32 0, ptr null, align 4
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
; a memory location in a loop.
|
||||
; Store can be sunk out of exit block containing indirectbr instructions after
|
||||
; D50925. Updated to use an argument instead of undef, due to PR38989.
|
||||
define void @test12(ptr %ptr) {
|
||||
define void @test12(ptr %ptr, ptr %arg) {
|
||||
; CHECK-LABEL: @test12
|
||||
; CHECK: store
|
||||
; CHECK-NEXT: br label %lab4
|
||||
@@ -20,10 +20,10 @@ lab6:
|
||||
br label %lab4
|
||||
|
||||
lab7:
|
||||
br i1 undef, label %lab8, label %lab13
|
||||
br i1 false, label %lab8, label %lab13
|
||||
|
||||
lab8:
|
||||
br i1 undef, label %lab13, label %lab10
|
||||
br i1 true, label %lab13, label %lab10
|
||||
|
||||
lab10:
|
||||
br label %lab7
|
||||
@@ -39,12 +39,12 @@ lab21:
|
||||
; CHECK-NOT: store
|
||||
; CHECK: br i1 false, label %lab21, label %lab22
|
||||
store i32 36127957, ptr %ptr, align 4
|
||||
br i1 undef, label %lab21, label %lab22
|
||||
br i1 false, label %lab21, label %lab22
|
||||
|
||||
lab22:
|
||||
; CHECK: lab22:
|
||||
; CHECK-NOT: store
|
||||
; CHECK-NEXT: indirectbr ptr undef
|
||||
indirectbr ptr undef, [label %lab5, label %lab6, label %lab7]
|
||||
; CHECK-NEXT: indirectbr ptr %arg
|
||||
indirectbr ptr %arg, [label %lab5, label %lab6, label %lab7]
|
||||
}
|
||||
|
||||
|
||||
@@ -482,15 +482,15 @@ exit:
|
||||
; Test that we don't crash when trying to sink stores and there's no preheader
|
||||
; available (which is used for creating loads that may be used by the SSA
|
||||
; updater)
|
||||
define void @test13() {
|
||||
define void @test13(i1 %arg) {
|
||||
; CHECK-LABEL: @test13(
|
||||
; CHECK-NEXT: br label [[LAB59:%.*]]
|
||||
; CHECK: lab19:
|
||||
; CHECK-NEXT: br i1 false, label [[LAB20:%.*]], label [[LAB38_LOOPEXIT:%.*]]
|
||||
; CHECK-NEXT: br i1 [[ARG:%.*]], label [[LAB20:%.*]], label [[LAB38_LOOPEXIT:%.*]]
|
||||
; CHECK: lab20:
|
||||
; CHECK-NEXT: br label [[LAB60:%.*]]
|
||||
; CHECK: lab21:
|
||||
; CHECK-NEXT: br i1 undef, label [[LAB22:%.*]], label [[LAB38:%.*]]
|
||||
; CHECK-NEXT: br i1 [[ARG]], label [[LAB22:%.*]], label [[LAB38:%.*]]
|
||||
; CHECK: lab22:
|
||||
; CHECK-NEXT: br label [[LAB38]]
|
||||
; CHECK: lab38.loopexit:
|
||||
@@ -506,13 +506,13 @@ define void @test13() {
|
||||
br label %lab59
|
||||
|
||||
lab19:
|
||||
br i1 undef, label %lab20, label %lab38
|
||||
br i1 %arg, label %lab20, label %lab38
|
||||
|
||||
lab20:
|
||||
br label %lab60
|
||||
|
||||
lab21:
|
||||
br i1 undef, label %lab22, label %lab38
|
||||
br i1 %arg, label %lab22, label %lab38
|
||||
|
||||
lab22:
|
||||
br label %lab38
|
||||
@@ -886,16 +886,16 @@ try.cont:
|
||||
; The sinkable call should be sunk into an exit block split. After splitting
|
||||
; the exit block, BlockColor for new blocks should be added properly so
|
||||
; that we should be able to access valid ColorVector.
|
||||
define i32 @test21_pr36184(ptr %P) personality ptr @__CxxFrameHandler3 {
|
||||
define i32 @test21_pr36184(ptr %P, i1 %arg) personality ptr @__CxxFrameHandler3 {
|
||||
; CHECK-LABEL: @test21_pr36184(
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: br label [[LOOP_PH:%.*]]
|
||||
; CHECK: loop.ph:
|
||||
; CHECK-NEXT: br label [[LOOP:%.*]]
|
||||
; CHECK: Loop:
|
||||
; CHECK-NEXT: br i1 false, label [[CONTLOOP:%.*]], label [[OUT_SPLIT_LOOP_EXIT1:%.*]]
|
||||
; CHECK-NEXT: br i1 [[ARG:%.*]], label [[CONTLOOP:%.*]], label [[OUT_SPLIT_LOOP_EXIT1:%.*]]
|
||||
; CHECK: ContLoop:
|
||||
; CHECK-NEXT: br i1 false, label [[LOOP]], label [[OUT_SPLIT_LOOP_EXIT:%.*]]
|
||||
; CHECK-NEXT: br i1 [[ARG]], label [[LOOP]], label [[OUT_SPLIT_LOOP_EXIT:%.*]]
|
||||
; CHECK: Out.split.loop.exit:
|
||||
; CHECK-NEXT: [[IDX_PH:%.*]] = phi i32 [ 0, [[CONTLOOP]] ]
|
||||
; CHECK-NEXT: br label [[OUT:%.*]]
|
||||
@@ -914,10 +914,10 @@ loop.ph:
|
||||
|
||||
Loop:
|
||||
%sinkableCall = call i32 @strlen( ptr %P ) readonly
|
||||
br i1 undef, label %ContLoop, label %Out
|
||||
br i1 %arg, label %ContLoop, label %Out
|
||||
|
||||
ContLoop:
|
||||
br i1 undef, label %Loop, label %Out
|
||||
br i1 %arg, label %Loop, label %Out
|
||||
|
||||
Out:
|
||||
%idx = phi i32 [ %sinkableCall, %Loop ], [0, %ContLoop ]
|
||||
|
||||
@@ -13,9 +13,9 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
|
||||
%"class.llvm::SmallVectorTemplateCommon" = type { %"class.llvm::SmallVectorBase" }
|
||||
%"union.llvm::SmallVectorBase::U" = type { x86_fp80 }
|
||||
|
||||
define void @_ZNK5clang6driver7ArgList20AddAllArgsTranslatedERN4llvm11SmallVectorIPKcLj16EEENS0_12OptSpecifierES5_b(i1 zeroext %Joined) nounwind align 2 {
|
||||
define void @_ZNK5clang6driver7ArgList20AddAllArgsTranslatedERN4llvm11SmallVectorIPKcLj16EEENS0_12OptSpecifierES5_b(i1 zeroext %Joined, i1 %arg) nounwind align 2 {
|
||||
entry:
|
||||
br i1 undef, label %entry.split.us, label %entry.entry.split_crit_edge
|
||||
br i1 %arg, label %entry.split.us, label %entry.entry.split_crit_edge
|
||||
|
||||
entry.entry.split_crit_edge: ; preds = %entry
|
||||
br label %entry.split
|
||||
@@ -39,10 +39,10 @@ entry.split: ; preds = %entry.entry.split_c
|
||||
br label %for.cond.i14
|
||||
|
||||
for.cond.i14: ; preds = %for.inc.i38, %entry.split
|
||||
br i1 undef, label %for.cond.i50.us-lcssa, label %if.end.i23
|
||||
br i1 %arg, label %for.cond.i50.us-lcssa, label %if.end.i23
|
||||
|
||||
if.end.i23: ; preds = %for.cond.i14
|
||||
br i1 undef, label %for.cond.i50.us-lcssa, label %for.inc.i38
|
||||
br i1 %arg, label %for.cond.i50.us-lcssa, label %for.inc.i38
|
||||
|
||||
for.inc.i38: ; preds = %if.end.i23
|
||||
br label %for.cond.i14
|
||||
@@ -60,52 +60,52 @@ for.cond.loopexit: ; preds = %for.cond.loopexit.u
|
||||
br label %for.cond
|
||||
|
||||
for.cond: ; preds = %for.cond.loopexit, %for.cond.i50
|
||||
br i1 undef, label %for.end, label %for.body
|
||||
br i1 %arg, label %for.end, label %for.body
|
||||
|
||||
for.body: ; preds = %for.cond
|
||||
br i1 %Joined, label %if.then, label %if.else
|
||||
|
||||
if.then: ; preds = %for.body
|
||||
br i1 undef, label %cond.false.i.i, label %_ZN4llvm9StringRefC1EPKc.exit
|
||||
br i1 %arg, label %cond.false.i.i, label %_ZN4llvm9StringRefC1EPKc.exit
|
||||
|
||||
cond.false.i.i: ; preds = %if.then
|
||||
unreachable
|
||||
|
||||
_ZN4llvm9StringRefC1EPKc.exit: ; preds = %if.then
|
||||
br i1 undef, label %_ZNK5clang6driver3Arg8getValueERKNS0_7ArgListEj.exit, label %cond.false.i.i91
|
||||
br i1 %arg, label %_ZNK5clang6driver3Arg8getValueERKNS0_7ArgListEj.exit, label %cond.false.i.i91
|
||||
|
||||
cond.false.i.i91: ; preds = %_ZN4llvm9StringRefC1EPKc.exit
|
||||
unreachable
|
||||
|
||||
_ZNK5clang6driver3Arg8getValueERKNS0_7ArgListEj.exit: ; preds = %_ZN4llvm9StringRefC1EPKc.exit
|
||||
br i1 undef, label %cond.false.i.i.i, label %if.end13.i.i.i.i
|
||||
br i1 %arg, label %cond.false.i.i.i, label %if.end13.i.i.i.i
|
||||
|
||||
if.end13.i.i.i.i: ; preds = %_ZNK5clang6driver3Arg8getValueERKNS0_7ArgListEj.exit
|
||||
br i1 undef, label %land.lhs.true16.i.i.i.i, label %if.end19.i.i.i.i
|
||||
br i1 %arg, label %land.lhs.true16.i.i.i.i, label %if.end19.i.i.i.i
|
||||
|
||||
land.lhs.true16.i.i.i.i: ; preds = %if.end13.i.i.i.i
|
||||
br i1 undef, label %cond.false.i.i.i, label %_ZNK4llvm5Twine8isBinaryEv.exit8.i.i.i.i
|
||||
br i1 %arg, label %cond.false.i.i.i, label %_ZNK4llvm5Twine8isBinaryEv.exit8.i.i.i.i
|
||||
|
||||
_ZNK4llvm5Twine8isBinaryEv.exit8.i.i.i.i: ; preds = %land.lhs.true16.i.i.i.i
|
||||
br i1 undef, label %cond.false.i.i.i, label %if.end19.i.i.i.i
|
||||
br i1 %arg, label %cond.false.i.i.i, label %if.end19.i.i.i.i
|
||||
|
||||
if.end19.i.i.i.i: ; preds = %_ZNK4llvm5Twine8isBinaryEv.exit8.i.i.i.i, %if.end13.i.i.i.i
|
||||
br i1 undef, label %land.lhs.true22.i.i.i.i, label %_ZN4llvmplERKNS_9StringRefEPKc.exit
|
||||
br i1 %arg, label %land.lhs.true22.i.i.i.i, label %_ZN4llvmplERKNS_9StringRefEPKc.exit
|
||||
|
||||
land.lhs.true22.i.i.i.i: ; preds = %if.end19.i.i.i.i
|
||||
br i1 undef, label %cond.false.i.i.i, label %_ZNK4llvm5Twine8isBinaryEv.exit.i.i.i.i
|
||||
br i1 %arg, label %cond.false.i.i.i, label %_ZNK4llvm5Twine8isBinaryEv.exit.i.i.i.i
|
||||
|
||||
_ZNK4llvm5Twine8isBinaryEv.exit.i.i.i.i: ; preds = %land.lhs.true22.i.i.i.i
|
||||
br i1 undef, label %cond.false.i.i.i, label %_ZN4llvmplERKNS_9StringRefEPKc.exit
|
||||
br i1 %arg, label %cond.false.i.i.i, label %_ZN4llvmplERKNS_9StringRefEPKc.exit
|
||||
|
||||
cond.false.i.i.i: ; preds = %_ZNK4llvm5Twine8isBinaryEv.exit.i.i.i.i, %land.lhs.true22.i.i.i.i, %_ZNK4llvm5Twine8isBinaryEv.exit8.i.i.i.i, %land.lhs.true16.i.i.i.i, %_ZNK5clang6driver3Arg8getValueERKNS0_7ArgListEj.exit
|
||||
unreachable
|
||||
|
||||
_ZN4llvmplERKNS_9StringRefEPKc.exit: ; preds = %_ZNK4llvm5Twine8isBinaryEv.exit.i.i.i.i, %if.end19.i.i.i.i
|
||||
br i1 undef, label %Retry.i, label %if.end.i99
|
||||
br i1 %arg, label %Retry.i, label %if.end.i99
|
||||
|
||||
Retry.i: ; preds = %if.end.i99, %_ZN4llvmplERKNS_9StringRefEPKc.exit
|
||||
br i1 undef, label %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit, label %new.notnull.i
|
||||
br i1 %arg, label %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit, label %new.notnull.i
|
||||
|
||||
new.notnull.i: ; preds = %Retry.i
|
||||
br label %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit
|
||||
@@ -117,10 +117,10 @@ _ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit: ; preds = %new.notnull.i, %
|
||||
br label %for.cond.i.preheader
|
||||
|
||||
if.else: ; preds = %for.body
|
||||
br i1 undef, label %Retry.i108, label %if.end.i113
|
||||
br i1 %arg, label %Retry.i108, label %if.end.i113
|
||||
|
||||
Retry.i108: ; preds = %if.end.i113, %if.else
|
||||
br i1 undef, label %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit114, label %new.notnull.i110
|
||||
br i1 %arg, label %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit114, label %new.notnull.i110
|
||||
|
||||
new.notnull.i110: ; preds = %Retry.i108
|
||||
br label %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit114
|
||||
@@ -129,16 +129,16 @@ if.end.i113: ; preds = %if.else
|
||||
br label %Retry.i108
|
||||
|
||||
_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit114: ; preds = %new.notnull.i110, %Retry.i108
|
||||
br i1 undef, label %_ZNK5clang6driver3Arg8getValueERKNS0_7ArgListEj.exit125, label %cond.false.i.i123
|
||||
br i1 %arg, label %_ZNK5clang6driver3Arg8getValueERKNS0_7ArgListEj.exit125, label %cond.false.i.i123
|
||||
|
||||
cond.false.i.i123: ; preds = %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit114
|
||||
unreachable
|
||||
|
||||
_ZNK5clang6driver3Arg8getValueERKNS0_7ArgListEj.exit125: ; preds = %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit114
|
||||
br i1 undef, label %Retry.i134, label %if.end.i139
|
||||
br i1 %arg, label %Retry.i134, label %if.end.i139
|
||||
|
||||
Retry.i134: ; preds = %if.end.i139, %_ZNK5clang6driver3Arg8getValueERKNS0_7ArgListEj.exit125
|
||||
br i1 undef, label %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit140, label %new.notnull.i136
|
||||
br i1 %arg, label %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit140, label %new.notnull.i136
|
||||
|
||||
new.notnull.i136: ; preds = %Retry.i134
|
||||
br label %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit140
|
||||
@@ -150,7 +150,7 @@ _ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit140: ; preds = %new.notnull.i
|
||||
br label %for.cond.i.preheader
|
||||
|
||||
for.cond.i.preheader: ; preds = %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit140, %_ZN4llvm15SmallVectorImplIPKcE9push_backERKS2_.exit
|
||||
br i1 undef, label %for.cond.i.preheader.split.us, label %for.cond.i.preheader.for.cond.i.preheader.split_crit_edge
|
||||
br i1 %arg, label %for.cond.i.preheader.split.us, label %for.cond.i.preheader.for.cond.i.preheader.split_crit_edge
|
||||
|
||||
for.cond.i.preheader.for.cond.i.preheader.split_crit_edge: ; preds = %for.cond.i.preheader
|
||||
br label %for.cond.i.preheader.split
|
||||
@@ -172,10 +172,10 @@ for.cond.i.preheader.split: ; preds = %for.cond.i.preheade
|
||||
br label %for.cond.i
|
||||
|
||||
for.cond.i: ; preds = %if.end.i, %for.cond.i.preheader.split
|
||||
br i1 undef, label %for.cond.loopexit.us-lcssa, label %if.end.i
|
||||
br i1 %arg, label %for.cond.loopexit.us-lcssa, label %if.end.i
|
||||
|
||||
if.end.i: ; preds = %for.cond.i
|
||||
br i1 undef, label %for.cond.loopexit.us-lcssa, label %for.cond.i
|
||||
br i1 %arg, label %for.cond.loopexit.us-lcssa, label %for.cond.i
|
||||
|
||||
for.end: ; preds = %for.cond
|
||||
ret void
|
||||
|
||||
@@ -17,19 +17,19 @@ entry:
|
||||
br label %for.cond
|
||||
|
||||
for.cond: ; preds = %entry
|
||||
br i1 undef, label %lbl63A679E5, label %for.body
|
||||
br i1 true, label %lbl63A679E5, label %for.body
|
||||
|
||||
for.body: ; preds = %for.cond
|
||||
br label %for.cond1
|
||||
|
||||
for.cond1: ; preds = %for.cond1, %for.body
|
||||
br i1 undef, label %for.cond1, label %for.cond3.loopexit
|
||||
br i1 false, label %for.cond1, label %for.cond3.loopexit
|
||||
|
||||
for.cond3.loopexit: ; preds = %for.cond1
|
||||
br label %for.cond3
|
||||
|
||||
for.cond3: ; preds = %for.cond9, %for.cond3.loopexit
|
||||
br i1 undef, label %for.body4, label %for.cond17
|
||||
br i1 false, label %for.body4, label %for.cond17
|
||||
|
||||
for.body4: ; preds = %for.cond3
|
||||
br label %for.cond5
|
||||
@@ -41,7 +41,7 @@ lbl63A679E5: ; preds = %for.cond
|
||||
br label %for.cond5
|
||||
|
||||
for.cond9: ; preds = %for.end14.split, %for.cond5
|
||||
br i1 undef, label %for.cond3, label %lbl64774A9B
|
||||
br i1 false, label %for.cond3, label %lbl64774A9B
|
||||
|
||||
lbl64774A9B: ; preds = %for.cond17, %for.cond9
|
||||
br label %for.end14.split
|
||||
|
||||
@@ -20,7 +20,7 @@ for.body45: ; preds = %for.end72, %entry
|
||||
|
||||
for.body48: ; preds = %for.body48, %for.body45
|
||||
store i32 433429641, ptr undef, align 1
|
||||
br i1 undef, label %for.body48, label %for.end72
|
||||
br i1 false, label %for.body48, label %for.end72
|
||||
|
||||
for.end72: ; preds = %for.body48
|
||||
br label %for.body45
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
; RUN: opt < %s -passes=loop-deletion -o /dev/null
|
||||
; RUN: opt < %s -passes=loop-deletion -o /dev/null --try-experimental-debuginfo-iterators
|
||||
|
||||
define void @f() {
|
||||
define void @f(i1 %arg) {
|
||||
br label %bb1
|
||||
|
||||
bb1: ; preds = %bb1, %0
|
||||
call void @llvm.dbg.value(metadata i16 undef, metadata !1, metadata !DIExpression()), !dbg !11
|
||||
br i1 undef, label %bb1, label %bb3
|
||||
br i1 %arg, label %bb1, label %bb3
|
||||
|
||||
bb3: ; preds = %bb1
|
||||
ret void
|
||||
|
||||
@@ -66,7 +66,7 @@ bb1: ; preds = %bb31, %bb
|
||||
br i1 %tmp10, label %bb33, label %bb34
|
||||
|
||||
bb11: ; preds = %bb34
|
||||
br i1 undef, label %bb33, label %bb34
|
||||
br i1 true, label %bb33, label %bb34
|
||||
|
||||
bb12: ; preds = %bb34
|
||||
%tmp13 = icmp eq ptr addrspace(1) undef, null
|
||||
@@ -113,7 +113,7 @@ bb34: ; preds = %bb11, %bb1
|
||||
%tmp39 = add i32 %tmp38, undef
|
||||
%tmp40 = sext i32 %tmp39 to i64
|
||||
%tmp41 = add i64 undef, %tmp40
|
||||
br i1 undef, label %bb11, label %bb12
|
||||
br i1 false, label %bb11, label %bb12
|
||||
|
||||
bb42: ; preds = %bb22
|
||||
store atomic i64 %tmp18, ptr addrspace(1) undef unordered, align 8
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
target datalayout = "e-p:64:64:64"
|
||||
|
||||
define i32 @pmat(i32 %m, i32 %n, ptr %y) nounwind {
|
||||
define i32 @pmat(i32 %m, i32 %n, ptr %y, i1 %arg) nounwind {
|
||||
; CHECK-LABEL: @pmat(
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: [[CMP4:%.*]] = icmp sgt i32 [[M:%.*]], 0
|
||||
@@ -45,7 +45,7 @@ w.c2.p:
|
||||
br i1 false, label %bb.n, label %w.e
|
||||
|
||||
w.c2:
|
||||
br i1 undef, label %w.b6, label %w.c2.w.ec
|
||||
br i1 %arg, label %w.b6, label %w.c2.w.ec
|
||||
|
||||
w.c2.w.ec:
|
||||
br label %w.e
|
||||
|
||||
@@ -5,15 +5,15 @@
|
||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
define void @test(ptr %currMB) nounwind uwtable {
|
||||
define void @test(ptr %currMB, i1 %arg, ptr %arg2) nounwind uwtable {
|
||||
entry:
|
||||
br i1 undef, label %start.exit, label %if.then.i
|
||||
br i1 %arg, label %start.exit, label %if.then.i
|
||||
|
||||
if.then.i: ; preds = %entry
|
||||
unreachable
|
||||
|
||||
start.exit: ; preds = %entry
|
||||
indirectbr ptr undef, [label %0, label %for.bodyprime]
|
||||
indirectbr ptr %arg2, [label %0, label %for.bodyprime]
|
||||
|
||||
; <label>:0 ; preds = %start.exit
|
||||
unreachable
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
; CHECK-LABEL: @f1()
|
||||
; CHECK-LABEL: @f1(i1 %arg)
|
||||
; CHECK-NEXT: entry:
|
||||
define void @f1() {
|
||||
define void @f1(i1 %arg) {
|
||||
entry:
|
||||
br label %lbl1
|
||||
|
||||
@@ -15,10 +15,10 @@ for: ; preds = %if.end, %lbl1
|
||||
br label %lor.end
|
||||
|
||||
lor.end: ; preds = %for
|
||||
br i1 undef, label %for.end, label %if.end
|
||||
br i1 %arg, label %for.end, label %if.end
|
||||
|
||||
if.end: ; preds = %lor.end
|
||||
br i1 undef, label %lbl1, label %for
|
||||
br i1 %arg, label %lbl1, label %for
|
||||
|
||||
for.end: ; preds = %lor.end
|
||||
ret void
|
||||
|
||||
Reference in New Issue
Block a user