[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:
Lee Wei
2024-11-19 01:12:25 -07:00
committed by GitHub
parent 752dbd6112
commit ead9ad2960
41 changed files with 278 additions and 247 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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 ]

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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 ]

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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 ]

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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]
}

View File

@@ -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 ]

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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