Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
; RUN: opt -S -passes=slp-vectorizer -mattr=+avx -mtriple=x86_64 < %s | FileCheck %s

define void @test() {
define void @test(i1 %arg) {
; CHECK-LABEL: define void @test
; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: br i1 undef, label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK-SAME: (i1 %arg) #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: br i1 %arg, label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 undef, i32 undef, i32 undef, i32 undef>)
; CHECK-NEXT: call void @f(i32 noundef [[TMP1]])
Expand All @@ -20,7 +20,7 @@ define void @test() {
%i32 = extractelement <4 x i32> zeroinitializer, i64 1
%i33 = extractelement <4 x i32> zeroinitializer, i64 2
%i34 = extractelement <4 x i32> zeroinitializer, i64 3
br i1 undef, label %bb1, label %bb2
br i1 %arg, label %bb1, label %bb2

bb1:
%i11 = mul nsw i32 %i28, %i27
Expand Down
10 changes: 5 additions & 5 deletions llvm/test/Transforms/SLPVectorizer/X86/ordering.ll
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ entry:
declare ptr @objc_msgSend(ptr, ptr, ...)
declare i32 @personality_v0(...)

define void @invoketest() personality ptr @personality_v0 {
define void @invoketest(i1 %arg) personality ptr @personality_v0 {
; CHECK-LABEL: @invoketest(
; CHECK-NEXT: entry:
; CHECK-NEXT: br i1 undef, label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
; CHECK-NEXT: br i1 %arg, label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
; CHECK: cond.true:
; CHECK-NEXT: [[CALL49:%.*]] = invoke double @objc_msgSend(ptr undef, ptr undef)
; CHECK-NEXT: to label [[COND_TRUE54:%.*]] unwind label [[LPAD:%.*]]
Expand All @@ -43,7 +43,7 @@ define void @invoketest() personality ptr @personality_v0 {
; CHECK-NEXT: [[CALL59:%.*]] = invoke double @objc_msgSend(ptr undef, ptr undef)
; CHECK-NEXT: to label [[COND_END60]] unwind label [[LPAD]]
; CHECK: cond.end60:
; CHECK-NEXT: br i1 undef, label [[IF_END98:%.*]], label [[IF_THEN63:%.*]]
; CHECK-NEXT: br i1 %arg, label [[IF_END98:%.*]], label [[IF_THEN63:%.*]]
; CHECK: if.then63:
; CHECK-NEXT: br label [[IF_END98]]
; CHECK: lpad:
Expand All @@ -56,7 +56,7 @@ define void @invoketest() personality ptr @personality_v0 {
; CHECK-NEXT: ret void
;
entry:
br i1 undef, label %cond.true, label %cond.false
br i1 %arg, label %cond.true, label %cond.false

cond.true:
%call49 = invoke double @objc_msgSend(ptr undef, ptr undef)
Expand All @@ -77,7 +77,7 @@ cond.false57:
cond.end60:
%cond126 = phi double [ %call49, %cond.true54 ], [ %call51, %cond.false57 ]
%cond61 = phi double [ %call56, %cond.true54 ], [ %call59, %cond.false57 ]
br i1 undef, label %if.end98, label %if.then63
br i1 %arg, label %if.end98, label %if.then63

if.then63:
%conv69 = fptrunc double undef to float
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/SLPVectorizer/X86/partail.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
; RUN: opt -passes=slp-vectorizer -S -mtriple=x86_64-unknown-linux-gnu -mcpu=bdver2 < %s | FileCheck %s

; Function Attrs: nounwind uwtable
define void @get_block(i32 %y_pos) local_unnamed_addr #0 {
define void @get_block(i32 %y_pos, i1 %arg) local_unnamed_addr #0 {
; CHECK-LABEL: @get_block(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LAND_LHS_TRUE:%.*]]
; CHECK: land.lhs.true:
; CHECK-NEXT: br i1 undef, label [[IF_THEN:%.*]], label [[IF_END:%.*]]
; CHECK-NEXT: br i1 %arg, label [[IF_THEN:%.*]], label [[IF_END:%.*]]
; CHECK: if.then:
; CHECK-NEXT: unreachable
; CHECK: if.end:
Expand Down Expand Up @@ -43,7 +43,7 @@ entry:
br label %land.lhs.true

land.lhs.true: ; preds = %entry
br i1 undef, label %if.then, label %if.end
br i1 %arg, label %if.then, label %if.end

if.then: ; preds = %land.lhs.true
unreachable
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/SLPVectorizer/X86/phi.ll
Original file line number Diff line number Diff line change
Expand Up @@ -277,13 +277,13 @@ for.end: ; preds = %for.body
ret float %add31
}

define void @test(ptr %i1, ptr %i2, ptr %o) {
define void @test(ptr %i1, ptr %i2, ptr %o, i1 %arg) {
; CHECK-LABEL: @test(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[I1_0:%.*]] = load x86_fp80, ptr [[I1:%.*]], align 16
; CHECK-NEXT: [[I1_GEP1:%.*]] = getelementptr x86_fp80, ptr [[I1]], i64 1
; CHECK-NEXT: [[I1_1:%.*]] = load x86_fp80, ptr [[I1_GEP1]], align 16
; CHECK-NEXT: br i1 undef, label [[THEN:%.*]], label [[END:%.*]]
; CHECK-NEXT: br i1 %arg, label [[THEN:%.*]], label [[END:%.*]]
; CHECK: then:
; CHECK-NEXT: [[I2_0:%.*]] = load x86_fp80, ptr [[I2:%.*]], align 16
; CHECK-NEXT: [[I2_GEP1:%.*]] = getelementptr inbounds x86_fp80, ptr [[I2]], i64 1
Expand All @@ -305,7 +305,7 @@ entry:
%i1.0 = load x86_fp80, ptr %i1, align 16
%i1.gep1 = getelementptr x86_fp80, ptr %i1, i64 1
%i1.1 = load x86_fp80, ptr %i1.gep1, align 16
br i1 undef, label %then, label %end
br i1 %arg, label %then, label %end

then:
%i2.0 = load x86_fp80, ptr %i2, align 16
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/SLPVectorizer/X86/phi_overalignedtype.ll
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
target triple = "i386-apple-macosx10.9.0"


define void @test(ptr %i1, ptr %i2, ptr %o) {
define void @test(ptr %i1, ptr %i2, ptr %o, i1 %arg) {
; CHECK-LABEL: @test(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[I1_0:%.*]] = load double, ptr [[I1:%.*]], align 16
; CHECK-NEXT: [[I1_GEP1:%.*]] = getelementptr double, ptr [[I1]], i64 1
; CHECK-NEXT: [[I1_1:%.*]] = load double, ptr [[I1_GEP1]], align 16
; CHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x double> poison, double [[I1_0]], i32 0
; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> [[TMP0]], double [[I1_1]], i32 1
; CHECK-NEXT: br i1 undef, label [[THEN:%.*]], label [[END:%.*]]
; CHECK-NEXT: br i1 %arg, label [[THEN:%.*]], label [[END:%.*]]
; CHECK: then:
; CHECK-NEXT: [[I2_0:%.*]] = load double, ptr [[I2:%.*]], align 16
; CHECK-NEXT: [[I2_GEP1:%.*]] = getelementptr inbounds double, ptr [[I2]], i64 1
Expand All @@ -38,7 +38,7 @@ entry:
%i1.0 = load double, ptr %i1, align 16
%i1.gep1 = getelementptr double, ptr %i1, i64 1
%i1.1 = load double, ptr %i1.gep1, align 16
br i1 undef, label %then, label %end
br i1 %arg, label %then, label %end

then:
%i2.0 = load double, ptr %i2, align 16
Expand Down
8 changes: 4 additions & 4 deletions llvm/test/Transforms/SLPVectorizer/X86/pr16571.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,20 @@
target datalayout = "e-p:32:32:32-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-f80:32:32-n8:16:32-S32"
target triple = "i686-pc-win32"

define hidden fastcc void @"System.PrimitiveTypesParser.TryParseIEEE754<char>(char*,uint,double&)"() unnamed_addr {
define hidden fastcc void @"System.PrimitiveTypesParser.TryParseIEEE754<char>(char*,uint,double&)"(i1 %arg) unnamed_addr {
"@0":
br i1 undef, label %"@38.lr.ph", label %"@37"
br i1 %arg, label %"@38.lr.ph", label %"@37"

"@37": ; preds = %"@38.lr.ph", %"@44", %"@0"
ret void

"@44": ; preds = %"@38.lr.ph"
%0 = add i64 undef, undef
%1 = add i32 %mainPartDigits.loc.0.ph45, 1
br i1 undef, label %"@38.lr.ph", label %"@37"
br i1 %arg, label %"@38.lr.ph", label %"@37"

"@38.lr.ph": ; preds = %"@44", %"@0"
%mainDoublePart.loc.0.ph46 = phi i64 [ %0, %"@44" ], [ 0, %"@0" ]
%mainPartDigits.loc.0.ph45 = phi i32 [ %1, %"@44" ], [ 0, %"@0" ]
br i1 undef, label %"@44", label %"@37"
br i1 %arg, label %"@44", label %"@37"
}
6 changes: 3 additions & 3 deletions llvm/test/Transforms/SLPVectorizer/X86/remark_unsupported.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
; RUN: FileCheck --input-file=%t --check-prefix=YAML %s

; This type is not supported by SLP
define i1 @test(ptr %i1, ptr %i2) {
define i1 @test(ptr %i1, ptr %i2, i1 %arg) {
; CHECK-LABEL: @test(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[I1_0:%.*]] = load x86_fp80, ptr [[I1:%.*]], align 16
; CHECK-NEXT: [[I1_GEP1:%.*]] = getelementptr x86_fp80, ptr [[I1]], i64 1
; CHECK-NEXT: [[I1_1:%.*]] = load x86_fp80, ptr [[I1_GEP1]], align 16
; CHECK-NEXT: br i1 undef, label [[THEN:%.*]], label [[END:%.*]]
; CHECK-NEXT: br i1 %arg, label [[THEN:%.*]], label [[END:%.*]]
; CHECK: then:
; CHECK-NEXT: [[I2_0:%.*]] = load x86_fp80, ptr [[I2:%.*]], align 16
; CHECK-NEXT: [[I2_GEP1:%.*]] = getelementptr inbounds x86_fp80, ptr [[I2]], i64 1
Expand All @@ -25,7 +25,7 @@ entry:
%i1.0 = load x86_fp80, ptr %i1, align 16
%i1.gep1 = getelementptr x86_fp80, ptr %i1, i64 1
%i1.1 = load x86_fp80, ptr %i1.gep1, align 16
br i1 undef, label %then, label %end
br i1 %arg, label %then, label %end
then:
%i2.0 = load x86_fp80, ptr %i2, align 16
%i2.gep1 = getelementptr inbounds x86_fp80, ptr %i2, i64 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@

target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"

define void @hoge() {
define void @hoge(i1 %arg) {
; CHECK-LABEL: @hoge(
; CHECK-NEXT: bb:
; CHECK-NEXT: br i1 undef, label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK-NEXT: br i1 %arg, label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: ret void
; CHECK: bb2:
Expand Down Expand Up @@ -57,7 +57,7 @@ define void @hoge() {
; CHECK-NEXT: unreachable
;
bb:
br i1 undef, label %bb1, label %bb2
br i1 %arg, label %bb1, label %bb2

bb1: ; preds = %bb
ret void
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,16 @@
; comment out reorderTopToBottom() and remove the stores.


define void @reorder_crash(ptr %ptr) {
define void @reorder_crash(ptr %ptr, i1 %arg) {
; CHECK-LABEL: @reorder_crash(
; CHECK-NEXT: entry:
; CHECK-NEXT: br i1 undef, label [[BB0:%.*]], label [[BB12:%.*]]
; CHECK-NEXT: br i1 %arg, label [[BB0:%.*]], label [[BB12:%.*]]
; CHECK: bb0:
; CHECK-NEXT: [[TMP0:%.*]] = load <4 x float>, ptr [[PTR:%.*]], align 4
; CHECK-NEXT: store <4 x float> [[TMP0]], ptr [[PTR]], align 4
; CHECK-NEXT: br label [[BB3:%.*]]
; CHECK: bb12:
; CHECK-NEXT: br i1 undef, label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK-NEXT: br i1 %arg, label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr [[PTR]], align 4
; CHECK-NEXT: store <4 x float> [[TMP1]], ptr [[PTR]], align 4
Expand All @@ -69,7 +69,7 @@ entry:
%gep1 = getelementptr inbounds float, ptr %ptr, i64 1
%gep2 = getelementptr inbounds float, ptr %ptr, i64 2
%gep3 = getelementptr inbounds float, ptr %ptr, i64 3
br i1 undef, label %bb0, label %bb12
br i1 %arg, label %bb0, label %bb12

bb0:
; Used by phi in this order: 1, 0, 2, 3
Expand All @@ -86,7 +86,7 @@ bb0:
br label %bb3

bb12:
br i1 undef, label %bb1, label %bb2
br i1 %arg, label %bb1, label %bb2

bb1:
; Used by phi in this order: 1, 0, 2, 3
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/SLPVectorizer/X86/resched.ll
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
%"struct.std::array" = type { [32 x i8] }

; Function Attrs: nounwind uwtable
define fastcc void @_ZN12_GLOBAL__N_127PolynomialMultiplyRecognize9recognizeEv() unnamed_addr #0 align 2 {
define fastcc void @_ZN12_GLOBAL__N_127PolynomialMultiplyRecognize9recognizeEv(i1 %arg) unnamed_addr #0 align 2 {
; CHECK-LABEL: @_ZN12_GLOBAL__N_127PolynomialMultiplyRecognize9recognizeEv(
; CHECK-NEXT: entry:
; CHECK-NEXT: br i1 undef, label [[IF_END50_I:%.*]], label [[IF_THEN22_I:%.*]]
; CHECK-NEXT: br i1 %arg, label [[IF_END50_I:%.*]], label [[IF_THEN22_I:%.*]]
; CHECK: if.then22.i:
; CHECK-NEXT: [[SUB_I:%.*]] = add nsw i32 undef, -1
; CHECK-NEXT: [[CONV31_I:%.*]] = and i32 undef, [[SUB_I]]
Expand Down Expand Up @@ -36,7 +36,7 @@ define fastcc void @_ZN12_GLOBAL__N_127PolynomialMultiplyRecognize9recognizeEv()
; CHECK-NEXT: ret void
;
entry:
br i1 undef, label %if.end50.i, label %if.then22.i
br i1 %arg, label %if.end50.i, label %if.then22.i

if.then22.i: ; preds = %entry
%sub.i = add nsw i32 undef, -1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16

%struct.S = type { [3 x float], [3 x float], [4 x float] }

define i32 @foo(i32 %0, ptr %1, ptr %2) {
define i32 @foo(i32 %0, ptr %1, ptr %2, i1 %arg) {
; CHECK-LABEL: @foo(
; CHECK-NEXT: [[T4:%.*]] = alloca [[STRUCT_S:%.*]], align 8
; CHECK-NEXT: [[T8:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[T4]], i64 0, i32 1
Expand All @@ -19,7 +19,7 @@ define i32 @foo(i32 %0, ptr %1, ptr %2) {
; CHECK-NEXT: [[T21:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[T4]], i64 0, i32 2, i64 0
; CHECK-NEXT: store <4 x float> [[SHUFFLE]], ptr [[T21]], align 4
; CHECK-NEXT: [[T89]] = load <2 x float>, ptr [[T9]], align 4
; CHECK-NEXT: br i1 undef, label [[T37]], label [[T55:%.*]]
; CHECK-NEXT: br i1 %arg, label [[T37]], label [[T55:%.*]]
; CHECK: t55:
; CHECK-NEXT: ret i32 0
;
Expand Down Expand Up @@ -49,7 +49,7 @@ t37:
%t89 = load <2 x float>, ptr %t9, align 4
%x23 = extractelement <2 x float> %t89, i32 0
%x24 = extractelement <2 x float> %t89, i32 1
br i1 undef, label %t37, label %t55
br i1 %arg, label %t37, label %t55

t55:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
; iteration (it was matched and vectorized, which added a use of a deleted
; instruction)

define void @test() {
define void @test(i1 %arg) {
; CHECK-LABEL: @test(
; CHECK-NEXT: entry:
; CHECK-NEXT: br i1 undef, label [[IF_END:%.*]], label [[FOR_COND_PREHEADER:%.*]]
; CHECK-NEXT: br i1 %arg, label [[IF_END:%.*]], label [[FOR_COND_PREHEADER:%.*]]
; CHECK: for.cond.preheader:
; CHECK-NEXT: [[I:%.*]] = getelementptr inbounds [100 x i32], ptr undef, i64 0, i64 2
; CHECK-NEXT: [[I1:%.*]] = getelementptr inbounds [100 x i32], ptr undef, i64 0, i64 3
Expand All @@ -35,7 +35,7 @@ define void @test() {
; CHECK-NEXT: ret void
;
entry:
br i1 undef, label %if.end, label %for.cond.preheader
br i1 %arg, label %if.end, label %for.cond.preheader

for.cond.preheader: ; preds = %entry
%i = getelementptr inbounds [100 x i32], ptr undef, i64 0, i64 2
Expand Down
10 changes: 5 additions & 5 deletions llvm/test/Transforms/SLPVectorizer/X86/value-bug-inseltpoison.ll
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
; as elements of the vectorized tree.
; PR19621

define void @test() {
define void @test(i1 %arg) {
; CHECK-LABEL: @test(
; CHECK-NEXT: bb279:
; CHECK-NEXT: br label [[BB283:%.*]]
Expand All @@ -22,13 +22,13 @@ define void @test() {
; CHECK-NEXT: [[TMP4:%.*]] = fsub <2 x double> [[TMP3]], undef
; CHECK-NEXT: br label [[BB21_I:%.*]]
; CHECK: bb21.i:
; CHECK-NEXT: br i1 undef, label [[BB22_I:%.*]], label [[EXIT]]
; CHECK-NEXT: br i1 %arg, label [[BB22_I:%.*]], label [[EXIT]]
; CHECK: bb22.i:
; CHECK-NEXT: [[TMP5:%.*]] = fadd <2 x double> undef, [[TMP4]]
; CHECK-NEXT: br label [[BB32_I:%.*]]
; CHECK: bb32.i:
; CHECK-NEXT: [[TMP6:%.*]] = phi <2 x double> [ [[TMP5]], [[BB22_I]] ], [ zeroinitializer, [[BB32_I]] ]
; CHECK-NEXT: br i1 undef, label [[BB32_I]], label [[BB21_I]]
; CHECK-NEXT: br i1 %arg, label [[BB32_I]], label [[BB21_I]]
; CHECK: exit:
; CHECK-NEXT: [[TMP7:%.*]] = fpext <2 x float> [[TMP1]] to <2 x double>
; CHECK-NEXT: [[TMP8:%.*]] = fmul <2 x double> [[TMP7]], <double undef, double 0.000000e+00>
Expand Down Expand Up @@ -57,7 +57,7 @@ bb284:
br label %bb21.i

bb21.i:
br i1 undef, label %bb22.i, label %exit
br i1 %arg, label %bb22.i, label %exit

bb22.i:
%tmp24.i = fadd double undef, %tmp9.i
Expand All @@ -67,7 +67,7 @@ bb22.i:
bb32.i:
%xs.0.i = phi double [ %tmp24.i, %bb22.i ], [ 0.000000e+00, %bb32.i ]
%ys.0.i = phi double [ %tmp26.i, %bb22.i ], [ 0.000000e+00, %bb32.i ]
br i1 undef, label %bb32.i, label %bb21.i
br i1 %arg, label %bb32.i, label %bb21.i

exit:
%tmp303 = fpext float %Av.sroa.0.0 to double
Expand Down
10 changes: 5 additions & 5 deletions llvm/test/Transforms/SLPVectorizer/X86/value-bug.ll
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
; as elements of the vectorized tree.
; PR19621

define void @test() {
define void @test(i1 %arg) {
; CHECK-LABEL: @test(
; CHECK-NEXT: bb279:
; CHECK-NEXT: br label [[BB283:%.*]]
Expand All @@ -22,13 +22,13 @@ define void @test() {
; CHECK-NEXT: [[TMP4:%.*]] = fsub <2 x double> [[TMP3]], undef
; CHECK-NEXT: br label [[BB21_I:%.*]]
; CHECK: bb21.i:
; CHECK-NEXT: br i1 undef, label [[BB22_I:%.*]], label [[EXIT]]
; CHECK-NEXT: br i1 %arg, label [[BB22_I:%.*]], label [[EXIT]]
; CHECK: bb22.i:
; CHECK-NEXT: [[TMP5:%.*]] = fadd <2 x double> undef, [[TMP4]]
; CHECK-NEXT: br label [[BB32_I:%.*]]
; CHECK: bb32.i:
; CHECK-NEXT: [[TMP6:%.*]] = phi <2 x double> [ [[TMP5]], [[BB22_I]] ], [ zeroinitializer, [[BB32_I]] ]
; CHECK-NEXT: br i1 undef, label [[BB32_I]], label [[BB21_I]]
; CHECK-NEXT: br i1 %arg, label [[BB32_I]], label [[BB21_I]]
; CHECK: exit:
; CHECK-NEXT: [[TMP7:%.*]] = fpext <2 x float> [[TMP1]] to <2 x double>
; CHECK-NEXT: [[TMP8:%.*]] = fmul <2 x double> [[TMP7]], <double undef, double 0.000000e+00>
Expand Down Expand Up @@ -57,7 +57,7 @@ bb284:
br label %bb21.i

bb21.i:
br i1 undef, label %bb22.i, label %exit
br i1 %arg, label %bb22.i, label %exit

bb22.i:
%tmp24.i = fadd double undef, %tmp9.i
Expand All @@ -67,7 +67,7 @@ bb22.i:
bb32.i:
%xs.0.i = phi double [ %tmp24.i, %bb22.i ], [ 0.000000e+00, %bb32.i ]
%ys.0.i = phi double [ %tmp26.i, %bb22.i ], [ 0.000000e+00, %bb32.i ]
br i1 undef, label %bb32.i, label %bb21.i
br i1 %arg, label %bb32.i, label %bb21.i

exit:
%tmp303 = fpext float %Av.sroa.0.0 to double
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -passes=slp-vectorizer -S -mcpu=cascadelake -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s

define void @foo() {
define void @foo(i1 %arg) {
; CHECK-LABEL: @foo(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CONV:%.*]] = uitofp i16 undef to float
Expand All @@ -14,7 +14,7 @@ define void @foo() {
; CHECK: bb2:
; CHECK-NEXT: [[TMP2:%.*]] = phi <4 x float> [ [[TMP1]], [[BB1]] ], [ [[TMP14:%.*]], [[BB3:%.*]] ]
; CHECK-NEXT: [[TMP3:%.*]] = load double, ptr undef, align 8
; CHECK-NEXT: br i1 undef, label [[BB3]], label [[BB4:%.*]]
; CHECK-NEXT: br i1 %arg, label [[BB3]], label [[BB4:%.*]]
; CHECK: bb4:
; CHECK-NEXT: [[TMP4:%.*]] = fpext <4 x float> [[TMP2]] to <4 x double>
; CHECK-NEXT: [[CONV2:%.*]] = uitofp i16 undef to double
Expand Down Expand Up @@ -46,7 +46,7 @@ bb2:
%2 = phi float [ undef, %bb1 ], [ %11, %bb3 ]
%3 = phi float [ undef, %bb1 ], [ %12, %bb3 ]
%4 = load double, ptr undef, align 8
br i1 undef, label %bb3, label %bb4
br i1 %arg, label %bb3, label %bb4

bb4:
%ext = fpext float %3 to double
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
; to UMax and thus same reduction kind is returned.
; The routine's later code merely assumes the instruction to be a select.

define dso_local void @test() {
define dso_local void @test(i1 %arg) {
; CHECK-LABEL: @test(
; CHECK-NEXT: entry:
; CHECK-NEXT: br i1 undef, label [[NEXT:%.*]], label [[THEN:%.*]]
; CHECK-NEXT: br i1 %arg, label [[NEXT:%.*]], label [[THEN:%.*]]
; CHECK: then:
; CHECK-NEXT: [[UM:%.*]] = call i8 @llvm.umax.i8(i8 0, i8 undef)
; CHECK-NEXT: [[SELCMP:%.*]] = icmp ult i8 [[UM]], undef
Expand All @@ -21,7 +21,7 @@ define dso_local void @test() {
; CHECK-NEXT: ret void
;
entry:
br i1 undef, label %next, label %then
br i1 %arg, label %next, label %then

then:
%um = call i8 @llvm.umax.i8(i8 0, i8 undef)
Expand Down
8 changes: 4 additions & 4 deletions llvm/test/Transforms/Scalarizer/crash-bug.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@

; Don't crash

define void @foo() {
; CHECK-LABEL: define void @foo() {
define void @foo(i1 %arg) {
; CHECK-LABEL: define void @foo(i1 %arg) {
; CHECK-NEXT: br label [[BB1:%.*]]
; CHECK: bb2:
; CHECK-NEXT: br label [[BB1]]
; CHECK: bb1:
; CHECK-NEXT: [[BB2_VEC_I1:%.*]] = phi i16 [ 200, [[TMP0:%.*]] ], [ [[BB2_VEC_I1]], [[BB2:%.*]] ]
; CHECK-NEXT: br i1 undef, label [[BB3:%.*]], label [[BB2]]
; CHECK-NEXT: br i1 %arg, label [[BB3:%.*]], label [[BB2]]
; CHECK: bb3:
; CHECK-NEXT: ret void
;
Expand All @@ -22,7 +22,7 @@ bb2: ; preds = %bb1

bb1: ; preds = %bb2, %0
%bb1_vec = phi <2 x i16> [ <i16 100, i16 200>, %0 ], [ %bb2_vec, %bb2 ]
br i1 undef, label %bb3, label %bb2
br i1 %arg, label %bb3, label %bb2

bb3:
ret void
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/Transforms/Scalarizer/dbgloc-bug-inseltpoison.ll
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ define i16 @f1() !dbg !5 {
ret i16 undef, !dbg !9
}

define void @f2() !dbg !10 {
define void @f2(i1 %arg) !dbg !10 {
bb1:
%_tmp7 = tail call i16 @f1(), !dbg !13
; CHECK: call i16 @f1(), !dbg !13
Expand All @@ -16,7 +16,7 @@ bb1:
br label %vector.body

vector.body:
br i1 undef, label %middle.block, label %vector.body
br i1 %arg, label %middle.block, label %vector.body

middle.block:
ret void, !dbg !15
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/Transforms/Scalarizer/dbgloc-bug.ll
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ define i16 @f1() !dbg !5 {
ret i16 undef, !dbg !9
}

define void @f2() !dbg !10 {
define void @f2(i1 %arg) !dbg !10 {
bb1:
%_tmp7 = tail call i16 @f1(), !dbg !13
; CHECK: call i16 @f1(), !dbg !13
Expand All @@ -16,7 +16,7 @@ bb1:
br label %vector.body

vector.body:
br i1 undef, label %middle.block, label %vector.body
br i1 %arg, label %middle.block, label %vector.body

middle.block:
ret void, !dbg !15
Expand Down
20 changes: 10 additions & 10 deletions llvm/test/Transforms/Scalarizer/phi-unreachable-pred.ll
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -passes='function(scalarizer)' -S -o - | FileCheck %s

define i16 @f1() {
define i16 @f1(i1 %arg) {
; CHECK-LABEL: @f1(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[FOR_END:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INSERT:%.*]] = insertelement <4 x i16> [[INSERT]], i16 ptrtoint (ptr @f1 to i16), i32 0
; CHECK-NEXT: br label [[FOR_COND:%.*]]
; CHECK: for.cond:
; CHECK-NEXT: br i1 undef, label [[FOR_BODY:%.*]], label [[FOR_END]]
; CHECK-NEXT: br i1 %arg, label [[FOR_BODY:%.*]], label [[FOR_END]]
; CHECK: for.end:
; CHECK-NEXT: [[PHI_I0:%.*]] = phi i16 [ 1, [[ENTRY:%.*]] ], [ poison, [[FOR_COND]] ]
; CHECK-NEXT: ret i16 [[PHI_I0]]
Expand All @@ -22,7 +22,7 @@ for.body:
br label %for.cond

for.cond:
br i1 undef, label %for.body, label %for.end
br i1 %arg, label %for.body, label %for.end

for.end:
; opt used to hang when scalarizing this code. When scattering %insert we
Expand All @@ -34,22 +34,22 @@ for.end:
ret i16 %extract
}

define void @f2() {
define void @f2(i1 %arg) {
; CHECK-LABEL: @f2(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: br i1 undef, label [[IF_THEN:%.*]], label [[IF_END8:%.*]]
; CHECK-NEXT: br i1 %arg, label [[IF_THEN:%.*]], label [[IF_END8:%.*]]
; CHECK: if.then:
; CHECK-NEXT: br label [[IF_END8]]
; CHECK: for.body2:
; CHECK-NEXT: br i1 undef, label [[FOR_END:%.*]], label [[FOR_INC:%.*]]
; CHECK-NEXT: br i1 %arg, label [[FOR_END:%.*]], label [[FOR_INC:%.*]]
; CHECK: for.end:
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[E_SROA_3_2:%.*]] = phi <2 x i64> [ splat (i64 1), [[FOR_END]] ], [ [[E_SROA_3_2]], [[FOR_BODY2:%.*]] ]
; CHECK-NEXT: [[TMP0:%.*]] = phi i32 [ 6, [[FOR_END]] ], [ [[TMP0]], [[FOR_BODY2]] ]
; CHECK-NEXT: br i1 undef, label [[FOR_BODY2]], label [[FOR_COND1_FOR_END7_CRIT_EDGE:%.*]]
; CHECK-NEXT: br i1 %arg, label [[FOR_BODY2]], label [[FOR_COND1_FOR_END7_CRIT_EDGE:%.*]]
; CHECK: for.cond1.for.end7_crit_edge:
; CHECK-NEXT: br label [[IF_END8]]
; CHECK: if.end8:
Expand All @@ -61,21 +61,21 @@ entry:
br label %for.body

for.body: ; preds = %if.end8, %entry
br i1 undef, label %if.then, label %if.end8
br i1 %arg, label %if.then, label %if.end8

if.then: ; preds = %for.body
br label %if.end8

for.body2: ; preds = %for.inc
br i1 undef, label %for.end, label %for.inc
br i1 %arg, label %for.end, label %for.inc

for.end: ; preds = %for.body2
br label %for.inc

for.inc: ; preds = %for.end, %for.body2
%e.sroa.3.2 = phi <2 x i64> [ <i64 1, i64 1>, %for.end ], [ %e.sroa.3.2, %for.body2 ]
%0 = phi i32 [ 6, %for.end ], [ %0, %for.body2 ]
br i1 undef, label %for.body2, label %for.cond1.for.end7_crit_edge
br i1 %arg, label %for.body2, label %for.cond1.for.end7_crit_edge

for.cond1.for.end7_crit_edge: ; preds = %for.inc
br label %if.end8
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
; RUN: opt -passes="loop-mssa(simple-loop-unswitch)" -verify-memoryssa -disable-output < %s
; PR10031

define i32 @test(i32 %command) {
define i32 @test(i32 %command, i1 %arg) {
entry:
br label %tailrecurse

tailrecurse: ; preds = %if.then14, %tailrecurse, %entry
br i1 undef, label %if.then, label %tailrecurse
br i1 %arg, label %if.then, label %tailrecurse

if.then: ; preds = %tailrecurse
switch i32 %command, label %sw.bb [
Expand All @@ -15,7 +15,7 @@ if.then: ; preds = %tailrecurse
]

land.lhs.true: ; preds = %if.then, %if.then
br i1 undef, label %sw.bb, label %if.then14
br i1 %arg, label %sw.bb, label %if.then14

if.then14: ; preds = %land.lhs.true
switch i32 %command, label %tailrecurse [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ target triple = "x86_64-apple-macosx10.7.0"
%class.B.21.41.65.101.137.157.177.197.237.241.245.249.261.293.301.337.345.378 = type { ptr }
%class.A.20.40.64.100.136.156.176.196.236.240.244.248.260.292.300.336.344.377 = type { i8 }

define void @_Z23get_reconstruction_pathv() uwtable ssp personality ptr @__gxx_personality_v0 {
define void @_Z23get_reconstruction_pathv(i1 %arg) uwtable ssp personality ptr @__gxx_personality_v0 {
entry:
%c = alloca %class.D.22.42.66.102.138.158.178.198.238.242.246.250.262.294.302.338.346.379, align 8
br label %for.cond
Expand All @@ -30,7 +30,7 @@ invoke.cont4: ; preds = %for.cond3
to label %invoke.cont6 unwind label %lpad

invoke.cont6: ; preds = %invoke.cont4
br i1 undef, label %for.cond3, label %for.end
br i1 %arg, label %for.cond3, label %for.end

lpad: ; preds = %for.end, %invoke.cont4, %for.cond3, %invoke.cont, %for.cond
%0 = landingpad { ptr, i32 }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@

target datalayout = "e-m:e-p:16:16-p1:32:16-i32:16-i64:16-n8:16"

define void @foo() {
define void @foo(i1 %arg) {
; CHECK-LABEL: @foo
entry:
%arrayidx.i1 = getelementptr inbounds i16, ptr undef, i16 undef
%arrayidx.i = addrspacecast ptr %arrayidx.i1 to ptr addrspace(1)
br i1 undef, label %for.body.i, label %bar.exit
br i1 %arg, label %for.body.i, label %bar.exit

for.body.i: ; preds = %for.body.i, %entry
; When we call makeLoopInvariant (i.e. trivial LICM) on this load, it
Expand Down
10 changes: 5 additions & 5 deletions llvm/test/Transforms/SimpleLoopUnswitch/delete-dead-blocks.ll
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ get_out2:
;
; This comes from PR38778
; CHECK-LABEL: @Test2
define void @Test2(i32) {
define void @Test2(i32, i1 %arg) {
header:
br label %loop
loop:
Expand All @@ -58,12 +58,12 @@ loop:
]
; CHECK-NOT: {{^}}guarded1:
guarded1:
br i1 undef, label %continue, label %leave
br i1 %arg, label %continue, label %leave
guarded2:
br label %continue
check:
%val = add i32 0, 1
br i1 undef, label %continue, label %leave
br i1 %arg, label %continue, label %leave
continue:
br label %loop
leave:
Expand All @@ -75,7 +75,7 @@ leave:
; Yet another test from PR38778
;
; CHECK-LABEL: @Test3
define void @Test3(i32) {
define void @Test3(i32, i1 %arg) {
header:
br label %outer
outer:
Expand All @@ -95,7 +95,7 @@ case2:
br label %continue
continue:
%local_11_92 = phi i32 [ 0, %switchme ], [ 18, %case2 ], [ 0, %overflow ]
br i1 undef, label %outer, label %inner
br i1 %arg, label %outer, label %inner
go_out:
unreachable
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

; PR38283
; PR38737
define void @f1() {
define void @f1(i1 %arg) {
for.cond1thread-pre-split.lr.ph.lr.ph:
%tobool4 = icmp eq i16 undef, 0
br label %for.cond1thread-pre-split
Expand All @@ -18,7 +18,7 @@ if.end: ; preds = %for.body2
br i1 %tobool4, label %if.end6, label %for.cond1thread-pre-split

if.end6: ; preds = %if.end
br i1 undef, label %for.body2, label %for.end
br i1 %arg, label %for.body2, label %for.end

for.end: ; preds = %if.end6, %for.body2
ret void
Expand Down
54 changes: 40 additions & 14 deletions llvm/test/Transforms/SimpleLoopUnswitch/guards.ll
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: -p --version 5
; RUN: opt -passes='loop(simple-loop-unswitch<nontrivial>),verify<loops>' -simple-loop-unswitch-guards -S < %s | FileCheck %s
; RUN: opt -passes='simple-loop-unswitch<nontrivial>' -simple-loop-unswitch-guards -S < %s | FileCheck %s
; RUN: opt -passes='loop-mssa(simple-loop-unswitch<nontrivial>),verify<loops>' -simple-loop-unswitch-guards -verify-memoryssa -verify-loop-info -S < %s | FileCheck %s
Expand Down Expand Up @@ -131,30 +132,55 @@ exit:
ret void
}

define void @test_nested_loop(i1 %cond, i32 %N) {
; CHECK-LABEL: @test_nested_loop(
define void @test_nested_loop(i1 %cond, i32 %N, i1 %arg) {
; CHECK-LABEL: define void @test_nested_loop(i1 %cond, i32 %N, i1 %arg) {
; CHECK-NEXT: entry:
; CHECK-NEXT: br i1 [[COND:%.*]], label [[ENTRY_SPLIT:%.*]], label [[OUTER_LOOP_SPLIT:%.*]]
; CHECK-NEXT: br i1 %cond, label %entry.split, label %outer_loop.split
; CHECK: entry.split:
; CHECK-NEXT: br label [[OUTER_LOOP:%.*]]
; CHECK-NEXT: br i1 %arg, label %entry.split.split.us, label %entry.split.split
; CHECK: entry.split.split.us:
; CHECK-NEXT: br label %outer_loop.us
; CHECK: outer_loop.us:
; CHECK-NEXT: br label %outer_loop.split.us.us
; CHECK: outer_backedge.us:
; CHECK-NEXT: br label %outer_loop.us
; CHECK: outer_loop.split.us.us:
; CHECK-NEXT: br label %loop.us.us
; CHECK: loop.us.us:
; CHECK-NEXT: %iv.us.us = phi i32 [ 0, %outer_loop.split.us.us ], [ %iv.next.us.us, %guarded.us.us ]
; CHECK-NEXT: br label %guarded.us.us
; CHECK: guarded.us.us:
; CHECK-NEXT: %iv.next.us.us = add i32 %iv.us.us, 1
; CHECK-NEXT: %loop.cond.us.us = icmp slt i32 %iv.next.us.us, %N
; CHECK-NEXT: br i1 %loop.cond.us.us, label %loop.us.us, label %outer_backedge.split.us.us
; CHECK: outer_backedge.split.us.us:
; CHECK-NEXT: br label %outer_backedge.us
; CHECK: entry.split.split:
; CHECK-NEXT: br label %outer_loop
; CHECK: outer_loop:
; CHECK-NEXT: br label [[OUTER_LOOP_SPLIT_US:%.*]]
; CHECK-NEXT: br label %outer_loop.split.us
; CHECK: outer_loop.split.us:
; CHECK-NEXT: br label [[LOOP_US:%.*]]
; CHECK-NEXT: br label %loop.us
; CHECK: loop.us:
; CHECK-NEXT: [[IV_US:%.*]] = phi i32 [ 0, [[OUTER_LOOP_SPLIT_US]] ], [ [[IV_NEXT_US:%.*]], [[GUARDED_US:%.*]] ]
; CHECK-NEXT: br label [[GUARDED_US]]
; CHECK-NEXT: %iv.us = phi i32 [ 0, %outer_loop.split.us ], [ %iv.next.us, %guarded.us ]
; CHECK-NEXT: br label %guarded.us
; CHECK: guarded.us:
; CHECK-NEXT: [[IV_NEXT_US]] = add i32 [[IV_US]], 1
; CHECK-NEXT: [[LOOP_COND_US:%.*]] = icmp slt i32 [[IV_NEXT_US]], [[N:%.*]]
; CHECK-NEXT: br i1 [[LOOP_COND_US]], label [[LOOP_US]], label [[OUTER_BACKEDGE_SPLIT_US:%.*]]
; CHECK-NEXT: %iv.next.us = add i32 %iv.us, 1
; CHECK-NEXT: %loop.cond.us = icmp slt i32 %iv.next.us, %N
; CHECK-NEXT: br i1 %loop.cond.us, label %loop.us, label %outer_backedge.split.us
; CHECK: outer_backedge.split.us:
; CHECK-NEXT: br label [[OUTER_BACKEDGE:%.*]]
; CHECK-NEXT: br label %outer_backedge
; CHECK: outer_loop.split:
; CHECK-NEXT: br label %loop
; CHECK: loop:
; CHECK-NEXT: br label %deopt
; CHECK: deopt:
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
; CHECK-NEXT: unreachable
; CHECK: outer_backedge:
; CHECK-NEXT: br i1 false, label [[OUTER_LOOP]], label [[EXIT:%.*]]
; CHECK-NEXT: br label %exit
; CHECK: exit:
; CHECK-NEXT: ret void
;

entry:
Expand All @@ -171,7 +197,7 @@ loop:
br i1 %loop.cond, label %loop, label %outer_backedge

outer_backedge:
br i1 undef, label %outer_loop, label %exit
br i1 %arg, label %outer_loop, label %exit

exit:
ret void
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/SimpleLoopUnswitch/pr37888.ll
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ if.end:
br label %for.inc

for.inc:
br i1 undef, label %for.body, label %for.end
br i1 false, label %for.body, label %for.end

for.end:
ret void
Expand Down
12 changes: 6 additions & 6 deletions llvm/test/Transforms/SimpleLoopUnswitch/preserve-analyses.ll
Original file line number Diff line number Diff line change
Expand Up @@ -74,21 +74,21 @@ bb10: ; preds = %bb8, %bb
; This is a simplified form of ineqn from above. It triggers some
; different cases in the loop-unswitch code.

define void @simplified_ineqn() nounwind readonly {
define void @simplified_ineqn(i1 %arg) nounwind readonly {
entry:
br label %bb8.outer

bb8.outer: ; preds = %bb6, %bb2, %entry
%x = phi i32 [ 0, %entry ], [ 0, %bb6 ], [ 1, %bb2 ] ; <i32> [#uses=1]
br i1 undef, label %return, label %bb2
br i1 %arg, label %return, label %bb2

bb2: ; preds = %bb
switch i32 %x, label %bb6 [
i32 0, label %bb8.outer
]

bb6: ; preds = %bb2
br i1 undef, label %bb8.outer, label %bb2
br i1 %arg, label %bb8.outer, label %bb2

return: ; preds = %bb8, %bb
ret void
Expand All @@ -97,17 +97,17 @@ return: ; preds = %bb8, %bb
; This function requires special handling to preserve LCSSA form.
; PR4934

define void @pnp_check_irq() nounwind noredzone {
define void @pnp_check_irq(i1 %arg) nounwind noredzone {
entry:
%conv56 = trunc i64 undef to i32 ; <i32> [#uses=1]
br label %while.cond.i

while.cond.i: ; preds = %while.cond.i.backedge, %entry
%call.i25 = call ptr @pci_get_device() nounwind noredzone ; <ptr> [#uses=2]
br i1 undef, label %if.then65, label %while.body.i
br i1 %arg, label %if.then65, label %while.body.i

while.body.i: ; preds = %while.cond.i
br i1 undef, label %if.then31.i.i, label %while.cond.i.backedge
br i1 %arg, label %if.then31.i.i, label %while.cond.i.backedge

while.cond.i.backedge: ; preds = %if.then31.i.i, %while.body.i
br label %while.cond.i
Expand Down
20 changes: 10 additions & 10 deletions llvm/test/Transforms/SimplifyCFG/2004-12-10-SimplifyCFGCrash.ll
Original file line number Diff line number Diff line change
@@ -1,36 +1,36 @@
; RUN: opt < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -disable-output

define void @symhash_add() {
define void @symhash_add(i1 %arg) {
entry:
br i1 undef, label %then.0, label %UnifiedReturnBlock
br i1 %arg, label %then.0, label %UnifiedReturnBlock
then.0: ; preds = %entry
br i1 undef, label %loopentry.2, label %loopentry.1.preheader
br i1 %arg, label %loopentry.2, label %loopentry.1.preheader
loopentry.1.preheader: ; preds = %then.0
br label %loopentry.1.outer
loopentry.1.outer: ; preds = %loopexit.1, %loopentry.1.preheader
br label %loopentry.1
loopentry.1: ; preds = %endif.1, %then.4, %then.3, %then.1, %loopentry.1.outer
br i1 undef, label %loopexit.1, label %no_exit.1
br i1 %arg, label %loopexit.1, label %no_exit.1
no_exit.1: ; preds = %loopentry.1
br i1 undef, label %then.1, label %else.0
br i1 %arg, label %then.1, label %else.0
then.1: ; preds = %no_exit.1
br label %loopentry.1
else.0: ; preds = %no_exit.1
br i1 undef, label %then.2, label %else.1
br i1 %arg, label %then.2, label %else.1
then.2: ; preds = %else.0
br i1 undef, label %then.3, label %endif.1
br i1 %arg, label %then.3, label %endif.1
then.3: ; preds = %then.2
br label %loopentry.1
else.1: ; preds = %else.0
br i1 undef, label %endif.1, label %then.4
br i1 %arg, label %endif.1, label %then.4
then.4: ; preds = %else.1
br label %loopentry.1
endif.1: ; preds = %else.1, %then.2
br label %loopentry.1
loopexit.1: ; preds = %loopentry.1
br i1 undef, label %loopentry.1.outer, label %loopentry.2
br i1 %arg, label %loopentry.1.outer, label %loopentry.2
loopentry.2: ; preds = %no_exit.2, %loopexit.1, %then.0
br i1 undef, label %loopexit.2, label %no_exit.2
br i1 %arg, label %loopexit.2, label %no_exit.2
no_exit.2: ; preds = %loopentry.2
br label %loopentry.2
loopexit.2: ; preds = %loopentry.2
Expand Down
32 changes: 16 additions & 16 deletions llvm/test/Transforms/SimplifyCFG/2006-06-12-InfLoop.ll
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
; RUN: opt < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -disable-output
; END.

define void @main(i32 %c) {
define void @main(i32 %c, i1 %arg) {
entry:
%tmp.9 = icmp eq i32 %c, 2 ; <i1> [#uses=1]
br i1 %tmp.9, label %endif.0, label %then.0
Expand Down Expand Up @@ -186,21 +186,21 @@ no_exit.0.i31.preheader: ; preds = %loopentry.1.i30
no_exit.0.i31: ; preds = %loopexit.3.i, %no_exit.0.i31.preheader
br i1 false, label %then.1.i, label %else.0.i
then.1.i: ; preds = %no_exit.0.i31
br i1 undef, label %then.0.i29, label %loopentry.0.i31
br i1 %arg, label %then.0.i29, label %loopentry.0.i31
then.0.i29: ; preds = %then.1.i
unreachable
loopentry.0.i31: ; preds = %then.1.i
br i1 false, label %no_exit.0.i38.preheader, label %loopentry.1.i.preheader
no_exit.0.i38.preheader: ; preds = %loopentry.0.i31
br label %no_exit.0.i38
no_exit.0.i38: ; preds = %no_exit.0.i38, %no_exit.0.i38.preheader
br i1 undef, label %no_exit.0.i38, label %loopentry.1.i.preheader.loopexit
br i1 %arg, label %no_exit.0.i38, label %loopentry.1.i.preheader.loopexit
loopentry.1.i.preheader.loopexit: ; preds = %no_exit.0.i38
br label %loopentry.1.i.preheader
loopentry.1.i.preheader: ; preds = %loopentry.1.i.preheader.loopexit, %loopentry.0.i31
br label %loopentry.1.i
loopentry.1.i: ; preds = %endif.2.i, %loopentry.1.i.preheader
br i1 undef, label %loopentry.2.i39.preheader, label %loopexit.1.i79.loopexit2
br i1 %arg, label %loopentry.2.i39.preheader, label %loopexit.1.i79.loopexit2
loopentry.2.i39.preheader: ; preds = %loopentry.1.i
br label %loopentry.2.i39
loopentry.2.i39: ; preds = %loopexit.5.i77, %loopentry.2.i39.preheader
Expand All @@ -212,61 +212,61 @@ loopentry.3.i40: ; preds = %loopexit.3.i51, %loopentry.3.i40.preheader
no_exit.3.preheader.i42: ; preds = %loopentry.3.i40
br label %no_exit.3.i49
no_exit.3.i49: ; preds = %no_exit.3.i49, %no_exit.3.preheader.i42
br i1 undef, label %no_exit.3.i49, label %loopexit.3.i51.loopexit
br i1 %arg, label %no_exit.3.i49, label %loopexit.3.i51.loopexit
loopexit.3.i51.loopexit: ; preds = %no_exit.3.i49
br label %loopexit.3.i51
loopexit.3.i51: ; preds = %loopexit.3.i51.loopexit, %loopentry.3.i40
br i1 undef, label %loopentry.3.i40, label %loopentry.4.i52
br i1 %arg, label %loopentry.3.i40, label %loopentry.4.i52
loopentry.4.i52: ; preds = %loopexit.3.i51
br i1 false, label %no_exit.4.i54.preheader, label %hamming.exit.i71
no_exit.4.i54.preheader: ; preds = %loopentry.4.i52
br label %no_exit.4.i54
no_exit.4.i54: ; preds = %no_exit.4.backedge.i, %no_exit.4.i54.preheader
br i1 undef, label %then.1.i55, label %endif.1.i56
br i1 %arg, label %then.1.i55, label %endif.1.i56
then.1.i55: ; preds = %no_exit.4.i54
br i1 undef, label %no_exit.4.backedge.i, label %loopexit.4.i57
br i1 %arg, label %no_exit.4.backedge.i, label %loopexit.4.i57
no_exit.4.backedge.i: ; preds = %endif.1.i56, %then.1.i55
br label %no_exit.4.i54
endif.1.i56: ; preds = %no_exit.4.i54
br i1 undef, label %no_exit.4.backedge.i, label %loopexit.4.i57
br i1 %arg, label %no_exit.4.backedge.i, label %loopexit.4.i57
loopexit.4.i57: ; preds = %endif.1.i56, %then.1.i55
br i1 false, label %no_exit.i.i69.preheader, label %hamming.exit.i71
no_exit.i.i69.preheader: ; preds = %loopexit.4.i57
br label %no_exit.i.i69
no_exit.i.i69: ; preds = %no_exit.i.i69, %no_exit.i.i69.preheader
br i1 undef, label %no_exit.i.i69, label %hamming.exit.i71.loopexit
br i1 %arg, label %no_exit.i.i69, label %hamming.exit.i71.loopexit
hamming.exit.i71.loopexit: ; preds = %no_exit.i.i69
br label %hamming.exit.i71
hamming.exit.i71: ; preds = %hamming.exit.i71.loopexit, %loopexit.4.i57, %loopentry.4.i52, %loopentry.2.i39
br i1 undef, label %endif.2.i, label %loopentry.5.i72
br i1 %arg, label %endif.2.i, label %loopentry.5.i72
loopentry.5.i72: ; preds = %hamming.exit.i71
br i1 false, label %shortcirc_next.i74.preheader, label %loopexit.5.i77
shortcirc_next.i74.preheader: ; preds = %loopentry.5.i72
br label %shortcirc_next.i74
shortcirc_next.i74: ; preds = %no_exit.5.i76, %shortcirc_next.i74.preheader
br i1 undef, label %no_exit.5.i76, label %loopexit.5.i77.loopexit
br i1 %arg, label %no_exit.5.i76, label %loopexit.5.i77.loopexit
no_exit.5.i76: ; preds = %shortcirc_next.i74
br i1 undef, label %shortcirc_next.i74, label %loopexit.5.i77.loopexit
br i1 %arg, label %shortcirc_next.i74, label %loopexit.5.i77.loopexit
loopexit.5.i77.loopexit: ; preds = %no_exit.5.i76, %shortcirc_next.i74
br label %loopexit.5.i77
loopexit.5.i77: ; preds = %loopexit.5.i77.loopexit, %loopentry.5.i72
br i1 undef, label %loopentry.2.i39, label %loopexit.1.i79.loopexit
br i1 %arg, label %loopentry.2.i39, label %loopexit.1.i79.loopexit
endif.2.i: ; preds = %hamming.exit.i71
br label %loopentry.1.i
loopexit.1.i79.loopexit: ; preds = %loopexit.5.i77
br label %loopexit.1.i79
loopexit.1.i79.loopexit2: ; preds = %loopentry.1.i
br label %loopexit.1.i79
loopexit.1.i79: ; preds = %loopexit.1.i79.loopexit2, %loopexit.1.i79.loopexit
br i1 undef, label %then.3.i, label %loopentry.6.i80
br i1 %arg, label %then.3.i, label %loopentry.6.i80
then.3.i: ; preds = %loopexit.1.i79
br i1 false, label %no_exit.6.i82.preheader, label %run.exit
loopentry.6.i80: ; preds = %loopexit.1.i79
br i1 false, label %no_exit.6.i82.preheader, label %run.exit
no_exit.6.i82.preheader: ; preds = %loopentry.6.i80, %then.3.i
br label %no_exit.6.i82
no_exit.6.i82: ; preds = %no_exit.6.i82, %no_exit.6.i82.preheader
br i1 undef, label %no_exit.6.i82, label %run.exit.loopexit
br i1 %arg, label %no_exit.6.i82, label %run.exit.loopexit
run.exit.loopexit: ; preds = %no_exit.6.i82
br label %run.exit
run.exit: ; preds = %run.exit.loopexit, %loopentry.6.i80, %then.3.i
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/SimplifyCFG/branch-on-undef.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@

declare void @foo(i32)

define void @br_undef_simple() {
define void @br_undef_simple(i1 %arg) {
; CHECK-LABEL: @br_undef_simple(
; CHECK-NEXT: call void @foo(i32 0)
; CHECK-NEXT: br i1 undef, label [[IF:%.*]], label [[ELSE:%.*]]
; CHECK-NEXT: br i1 %arg, label [[IF:%.*]], label [[ELSE:%.*]]
; CHECK: common.ret:
; CHECK-NEXT: ret void
; CHECK: if:
Expand All @@ -17,7 +17,7 @@ define void @br_undef_simple() {
; CHECK-NEXT: br label [[COMMON_RET]]
;
call void @foo(i32 0)
br i1 undef, label %if, label %else
br i1 %arg, label %if, label %else

if:
call void @foo(i32 1)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -939,7 +939,7 @@ if.end.loopexit:
}

@f.b = external global i8, align 1
define void @pr48450_3() {
define void @pr48450_3(i1 %arg) {
; CHECK-LABEL: @pr48450_3(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[FOR_COND1:%.*]]
Expand Down Expand Up @@ -979,7 +979,7 @@ for.cond.cleanup:
br label %cleanup

for.body4:
br i1 undef, label %if.then6, label %if.end7
br i1 %arg, label %if.then6, label %if.end7

if.then6:
br label %cleanup
Expand Down
22 changes: 11 additions & 11 deletions llvm/test/Transforms/SimplifyCFG/pr34131.ll
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,24 @@
; Earlier version using auto-generated checks from utils/update_test_checks.py
; had bot problems though...

define void @patatino() {
define void @patatino(i1 %arg) {

; CHECK-LABEL: @patatino

br label %bb1
bb1: ; preds = %bb36, %0
br label %bb2
bb2: ; preds = %bb3, %bb1
br i1 undef, label %bb4, label %bb3
br i1 %arg, label %bb4, label %bb3
bb3: ; preds = %bb4, %bb2
br i1 undef, label %bb2, label %bb5
br i1 %arg, label %bb2, label %bb5
bb4: ; preds = %bb2
switch i32 undef, label %bb3 [
]
bb5: ; preds = %bb3
br label %bb6
bb6: ; preds = %bb5
br i1 undef, label %bb7, label %bb9
br i1 %arg, label %bb7, label %bb9
bb7: ; preds = %bb6
%tmp = or i64 undef, 1
%tmp8 = icmp ult i64 %tmp, 0
Expand Down Expand Up @@ -58,17 +58,17 @@ bb27: ; preds = %bb24
%tmp29 = icmp ult i64 %tmp28, 0
br i1 %tmp29, label %bb30, label %bb9
bb30: ; preds = %bb27
br i1 undef, label %bb31, label %bb9
br i1 %arg, label %bb31, label %bb9
bb31: ; preds = %bb30
br i1 undef, label %bb32, label %bb9
br i1 %arg, label %bb32, label %bb9
bb32: ; preds = %bb31
br i1 undef, label %bb33, label %bb9
br i1 %arg, label %bb33, label %bb9
bb33: ; preds = %bb32
br i1 undef, label %bb34, label %bb9
br i1 %arg, label %bb34, label %bb9
bb34: ; preds = %bb33
br i1 undef, label %bb35, label %bb9
br i1 %arg, label %bb35, label %bb9
bb35: ; preds = %bb34
br i1 undef, label %bb36, label %bb9
br i1 %arg, label %bb36, label %bb9
bb36: ; preds = %bb35
br i1 undef, label %bb1, label %bb10
br i1 %arg, label %bb1, label %bb10
}
25 changes: 12 additions & 13 deletions llvm/test/Transforms/Sink/dead-user.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,26 @@
; Compiler should not be broken with a dead user.
; RUN: opt -passes=sink -S < %s | FileCheck %s

define void @test(i16 %p1) {
; CHECK-LABEL: define void @test(
; CHECK-SAME: i16 [[P1:%.*]]) {
define void @test(i16 %p1, i1 %arg) {
; CHECK-LABEL: define void @test(i16 %p1, i1 %arg) {
; CHECK-NEXT: bb.0:
; CHECK-NEXT: [[CONV:%.*]] = sext i16 [[P1]] to i32
; CHECK-NEXT: br i1 undef, label [[BB_1:%.*]], label [[BB_3:%.*]]
; CHECK-NEXT: %conv = sext i16 %p1 to i32
; CHECK-NEXT: br i1 %arg, label %bb.1, label %bb.3
; CHECK: bb.1:
; CHECK-NEXT: br label [[BB_2:%.*]]
; CHECK-NEXT: br label %bb.2
; CHECK: bb.2:
; CHECK-NEXT: [[AND_2:%.*]] = and i32 undef, [[CONV]]
; CHECK-NEXT: br label [[BB_2]]
; CHECK-NEXT: %and.2 = and i32 undef, %conv
; CHECK-NEXT: br label %bb.2
; CHECK: bb.3:
; CHECK-NEXT: [[AND_3:%.*]] = and i32 undef, [[CONV]]
; CHECK-NEXT: br label [[BB_3]]
; CHECK-NEXT: %and.3 = and i32 undef, %conv
; CHECK-NEXT: br label %bb.3
; CHECK: dead:
; CHECK-NEXT: [[AND_DEAD:%.*]] = and i32 undef, [[CONV]]
; CHECK-NEXT: br label [[DEAD:%.*]]
; CHECK-NEXT: %and.dead = and i32 undef, %conv
; CHECK-NEXT: br label %dead
;
bb.0:
%conv = sext i16 %p1 to i32
br i1 undef, label %bb.1, label %bb.3
br i1 %arg, label %bb.1, label %bb.3

bb.1: ; preds = %bb.0
br label %bb.2
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/Transforms/SpeculativeExecution/PR46267.ll
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ end: ; preds = %notnull, %entry
ret ptr %i6
}

define void @f(i32 %i) {
define void @f(i32 %i, i1 %arg) {
entry:
; CHECK-LABEL: @f(
; CHECK: %a2 = add i32 %i, 0
br i1 undef, label %land.rhs, label %land.end
br i1 %arg, label %land.rhs, label %land.end

land.rhs: ; preds = %entry
; CHECK: land.rhs:
Expand Down
27 changes: 14 additions & 13 deletions llvm/test/Transforms/StructurizeCFG/loop-continue-phi.ll
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S -o - -structurizecfg < %s | FileCheck %s

define void @test1() {
define void @test1(i1 %arg) {
; CHECK-LABEL: @test1(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK-NEXT: %arg.inv = xor i1 %arg, true
; CHECK-NEXT: br label %loop
; CHECK: Flow:
; CHECK-NEXT: br label [[FLOW1:%.*]]
; CHECK-NEXT: br label %Flow1
; CHECK: loop:
; CHECK-NEXT: [[CTR:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[TMP0:%.*]], [[FLOW1]] ]
; CHECK-NEXT: [[CTR_NEXT:%.*]] = add i32 [[CTR]], 1
; CHECK-NEXT: br i1 undef, label [[LOOP_A:%.*]], label [[FLOW1]]
; CHECK-NEXT: %ctr = phi i32 [ 0, %entry ], [ %0, %Flow1 ]
; CHECK-NEXT: %ctr.next = add i32 %ctr, 1
; CHECK-NEXT: br i1 %arg.inv, label %loop.a, label %Flow1
; CHECK: loop.a:
; CHECK-NEXT: br i1 undef, label [[LOOP_B:%.*]], label [[FLOW:%.*]]
; CHECK-NEXT: br i1 %arg.inv, label %loop.b, label %Flow
; CHECK: loop.b:
; CHECK-NEXT: br label [[FLOW]]
; CHECK-NEXT: br label %Flow
; CHECK: Flow1:
; CHECK-NEXT: [[TMP0]] = phi i32 [ [[CTR_NEXT]], [[FLOW]] ], [ undef, [[LOOP]] ]
; CHECK-NEXT: [[TMP1:%.*]] = phi i1 [ false, [[FLOW]] ], [ true, [[LOOP]] ]
; CHECK-NEXT: br i1 [[TMP1]], label [[EXIT:%.*]], label [[LOOP]]
; CHECK-NEXT: %0 = phi i32 [ %ctr.next, %Flow ], [ undef, %loop ]
; CHECK-NEXT: %1 = phi i1 [ false, %Flow ], [ true, %loop ]
; CHECK-NEXT: br i1 %1, label %exit, label %loop
; CHECK: exit:
; CHECK-NEXT: ret void
;
Expand All @@ -28,10 +29,10 @@ entry:
loop:
%ctr = phi i32 [ 0, %entry ], [ %ctr.next, %loop.a ], [ %ctr.next, %loop.b ]
%ctr.next = add i32 %ctr, 1
br i1 undef, label %exit, label %loop.a
br i1 %arg, label %exit, label %loop.a

loop.a:
br i1 undef, label %loop, label %loop.b
br i1 %arg, label %loop, label %loop.b

loop.b:
br label %loop
Expand Down