[llvm] c0cfdd3 - [ArgPromo][Tests] Run update_test_checks on all ArgumentPromotion tests
Johannes Doerfert via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 13 22:30:55 PST 2019
Author: Johannes Doerfert
Date: 2019-12-14T00:29:38-06:00
New Revision: c0cfdd32d036c29ac3f77a1817d11e92eb143eb1
URL: https://github.com/llvm/llvm-project/commit/c0cfdd32d036c29ac3f77a1817d11e92eb143eb1
DIFF: https://github.com/llvm/llvm-project/commit/c0cfdd32d036c29ac3f77a1817d11e92eb143eb1.diff
LOG: [ArgPromo][Tests] Run update_test_checks on all ArgumentPromotion tests
Summary:
In preparation of D65531 as well as the reuse of these tests for the
Attributor, we modernize them and use the update_test_checks to simplify
updates.
This was done with the update_test_checks after D68819 and D68850.
Reviewers: hfinkel, vsk, dblaikie, davidxl, tejohnson, tstellar, echristo, chandlerc, efriedma, lebedev.ri
Subscribers: bollu, arphaman, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68766
Added:
Modified:
llvm/test/Transforms/ArgumentPromotion/2008-02-01-ReturnAttrs.ll
llvm/test/Transforms/ArgumentPromotion/2008-07-02-array-indexing.ll
llvm/test/Transforms/ArgumentPromotion/2008-09-07-CGUpdate.ll
llvm/test/Transforms/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll
llvm/test/Transforms/ArgumentPromotion/X86/attributes.ll
llvm/test/Transforms/ArgumentPromotion/X86/min-legal-vector-width.ll
llvm/test/Transforms/ArgumentPromotion/X86/thiscall.ll
llvm/test/Transforms/ArgumentPromotion/aggregate-promote.ll
llvm/test/Transforms/ArgumentPromotion/attrs.ll
llvm/test/Transforms/ArgumentPromotion/basictest.ll
llvm/test/Transforms/ArgumentPromotion/byval-2.ll
llvm/test/Transforms/ArgumentPromotion/byval.ll
llvm/test/Transforms/ArgumentPromotion/chained.ll
llvm/test/Transforms/ArgumentPromotion/control-flow.ll
llvm/test/Transforms/ArgumentPromotion/control-flow2.ll
llvm/test/Transforms/ArgumentPromotion/crash.ll
llvm/test/Transforms/ArgumentPromotion/dbg.ll
llvm/test/Transforms/ArgumentPromotion/fp80.ll
llvm/test/Transforms/ArgumentPromotion/inalloca.ll
llvm/test/Transforms/ArgumentPromotion/invalidation.ll
llvm/test/Transforms/ArgumentPromotion/musttail.ll
llvm/test/Transforms/ArgumentPromotion/naked_functions.ll
llvm/test/Transforms/ArgumentPromotion/nonzero-address-spaces.ll
llvm/test/Transforms/ArgumentPromotion/pr27568.ll
llvm/test/Transforms/ArgumentPromotion/pr3085.ll
llvm/test/Transforms/ArgumentPromotion/pr32917.ll
llvm/test/Transforms/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
llvm/test/Transforms/ArgumentPromotion/profile.ll
llvm/test/Transforms/ArgumentPromotion/reserve-tbaa.ll
llvm/test/Transforms/ArgumentPromotion/sret.ll
llvm/test/Transforms/ArgumentPromotion/tail.ll
llvm/test/Transforms/ArgumentPromotion/variadic.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/ArgumentPromotion/2008-02-01-ReturnAttrs.ll b/llvm/test/Transforms/ArgumentPromotion/2008-02-01-ReturnAttrs.ll
index c988774da8a7..9b13fee1f043 100644
--- a/llvm/test/Transforms/ArgumentPromotion/2008-02-01-ReturnAttrs.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/2008-02-01-ReturnAttrs.ll
@@ -1,19 +1,30 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
-; CHECK: define internal i32 @deref(i32 %x.val) #0 {
define internal i32 @deref(i32* %x) nounwind {
+; CHECK-LABEL: define {{[^@]+}}@deref
+; CHECK-SAME: (i32 [[X_VAL:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: ret i32 [[X_VAL]]
+;
entry:
%tmp2 = load i32, i32* %x, align 4
ret i32 %tmp2
}
define i32 @f(i32 %x) {
+; CHECK-LABEL: define {{[^@]+}}@f
+; CHECK-SAME: (i32 [[X:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[X_ADDR:%.*]] = alloca i32
+; CHECK-NEXT: store i32 [[X]], i32* [[X_ADDR]], align 4
+; CHECK-NEXT: [[X_ADDR_VAL:%.*]] = load i32, i32* [[X_ADDR]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = call i32 @deref(i32 [[X_ADDR_VAL]])
+; CHECK-NEXT: ret i32 [[TMP1]]
+;
entry:
%x_addr = alloca i32
store i32 %x, i32* %x_addr, align 4
-; CHECK: %tmp1 = call i32 @deref(i32 %x_addr.val) [[NUW:#[0-9]+]]
%tmp1 = call i32 @deref( i32* %x_addr ) nounwind
ret i32 %tmp1
}
-
-; CHECK: attributes [[NUW]] = { nounwind }
diff --git a/llvm/test/Transforms/ArgumentPromotion/2008-07-02-array-indexing.ll b/llvm/test/Transforms/ArgumentPromotion/2008-07-02-array-indexing.ll
index fac84d092df3..f943930459db 100644
--- a/llvm/test/Transforms/ArgumentPromotion/2008-07-02-array-indexing.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/2008-07-02-array-indexing.ll
@@ -1,11 +1,22 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; PR2498
-; This test tries to convince argpromotion about promoting the load from %A + 2,
+; This test tries to convince CHECK about promoting the load from %A + 2,
; because there is a load of %A in the entry block
define internal i32 @callee(i1 %C, i32* %A) {
-; CHECK-LABEL: define internal i32 @callee(
-; CHECK: i1 %C, i32* %A)
+; CHECK-LABEL: define {{[^@]+}}@callee
+; CHECK-SAME: (i1 [[C:%.*]], i32* [[A:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[A_0:%.*]] = load i32, i32* [[A]]
+; CHECK-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
+; CHECK: T:
+; CHECK-NEXT: ret i32 [[A_0]]
+; CHECK: F:
+; CHECK-NEXT: [[A_2:%.*]] = getelementptr i32, i32* [[A]], i32 2
+; CHECK-NEXT: [[R:%.*]] = load i32, i32* [[A_2]]
+; CHECK-NEXT: ret i32 [[R]]
+;
entry:
; Unconditonally load the element at %A
%A.0 = load i32, i32* %A
@@ -22,9 +33,11 @@ F:
}
define i32 @foo() {
-; CHECK-LABEL: define i32 @foo
- %X = call i32 @callee(i1 false, i32* null) ; <i32> [#uses=1]
-; CHECK: call i32 @callee(i1 false, i32* null)
- ret i32 %X
+; CHECK-LABEL: define {{[^@]+}}@foo()
+; CHECK-NEXT: [[X:%.*]] = call i32 @callee(i1 false, i32* null)
+; CHECK-NEXT: ret i32 [[X]]
+;
+ %X = call i32 @callee(i1 false, i32* null) ; <i32> [#uses=1]
+ ret i32 %X
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/2008-09-07-CGUpdate.ll b/llvm/test/Transforms/ArgumentPromotion/2008-09-07-CGUpdate.ll
index 7ee6654ea463..639457ac64ae 100644
--- a/llvm/test/Transforms/ArgumentPromotion/2008-09-07-CGUpdate.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/2008-09-07-CGUpdate.ll
@@ -1,12 +1,13 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -inline -argpromotion -disable-output
define internal fastcc i32 @hash(i32* %ts, i32 %mod) nounwind {
entry:
- unreachable
+ unreachable
}
define void @encode(i32* %m, i32* %ts, i32* %new) nounwind {
entry:
- %0 = call fastcc i32 @hash( i32* %ts, i32 0 ) nounwind ; <i32> [#uses=0]
- unreachable
+ %0 = call fastcc i32 @hash( i32* %ts, i32 0 ) nounwind ; <i32> [#uses=0]
+ unreachable
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll b/llvm/test/Transforms/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll
index aff917c6a5a7..4b2245eeceed 100644
--- a/llvm/test/Transforms/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll
@@ -1,25 +1,26 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -disable-output
define internal fastcc i32 @term_SharingList(i32* %Term, i32* %List) nounwind {
entry:
- br i1 false, label %bb, label %bb5
+ br i1 false, label %bb, label %bb5
bb: ; preds = %entry
- %0 = call fastcc i32 @term_SharingList( i32* null, i32* %List ) nounwind ; <i32> [#uses=0]
- unreachable
+ %0 = call fastcc i32 @term_SharingList( i32* null, i32* %List ) nounwind ; <i32> [#uses=0]
+ unreachable
bb5: ; preds = %entry
- ret i32 0
+ ret i32 0
}
define i32 @term_Sharing(i32* %Term) nounwind {
entry:
- br i1 false, label %bb.i, label %bb14
+ br i1 false, label %bb.i, label %bb14
bb.i: ; preds = %entry
- %0 = call fastcc i32 @term_SharingList( i32* null, i32* null ) nounwind ; <i32> [#uses=0]
- ret i32 1
+ %0 = call fastcc i32 @term_SharingList( i32* null, i32* null ) nounwind ; <i32> [#uses=0]
+ ret i32 1
bb14: ; preds = %entry
- ret i32 0
+ ret i32 0
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/X86/attributes.ll b/llvm/test/Transforms/ArgumentPromotion/X86/attributes.ll
index 82a264109874..c849ad807113 100644
--- a/llvm/test/Transforms/ArgumentPromotion/X86/attributes.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/X86/attributes.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt -S -argpromotion < %s | FileCheck %s
; RUN: opt -S -passes=argpromotion < %s | FileCheck %s
; Test that we only promote arguments when the caller/callee have compatible
@@ -5,8 +6,14 @@
target triple = "x86_64-unknown-linux-gnu"
-; CHECK-LABEL: @no_promote_avx2(<4 x i64>* %arg, <4 x i64>* readonly %arg1)
define internal fastcc void @no_promote_avx2(<4 x i64>* %arg, <4 x i64>* readonly %arg1) #0 {
+; CHECK-LABEL: define {{[^@]+}}@no_promote_avx2
+; CHECK-SAME: (<4 x i64>* [[ARG:%.*]], <4 x i64>* readonly [[ARG1:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = load <4 x i64>, <4 x i64>* [[ARG1]]
+; CHECK-NEXT: store <4 x i64> [[TMP]], <4 x i64>* [[ARG]]
+; CHECK-NEXT: ret void
+;
bb:
%tmp = load <4 x i64>, <4 x i64>* %arg1
store <4 x i64> %tmp, <4 x i64>* %arg
@@ -14,6 +21,18 @@ bb:
}
define void @no_promote(<4 x i64>* %arg) #1 {
+; CHECK-LABEL: define {{[^@]+}}@no_promote
+; CHECK-SAME: (<4 x i64>* [[ARG:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = alloca <4 x i64>, align 32
+; CHECK-NEXT: [[TMP2:%.*]] = alloca <4 x i64>, align 32
+; CHECK-NEXT: [[TMP3:%.*]] = bitcast <4 x i64>* [[TMP]] to i8*
+; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 32 [[TMP3]], i8 0, i64 32, i1 false)
+; CHECK-NEXT: call fastcc void @no_promote_avx2(<4 x i64>* [[TMP2]], <4 x i64>* [[TMP]])
+; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i64>, <4 x i64>* [[TMP2]], align 32
+; CHECK-NEXT: store <4 x i64> [[TMP4]], <4 x i64>* [[ARG]], align 2
+; CHECK-NEXT: ret void
+;
bb:
%tmp = alloca <4 x i64>, align 32
%tmp2 = alloca <4 x i64>, align 32
@@ -25,8 +44,13 @@ bb:
ret void
}
-; CHECK-LABEL: @promote_avx2(<4 x i64>* %arg, <4 x i64> %
define internal fastcc void @promote_avx2(<4 x i64>* %arg, <4 x i64>* readonly %arg1) #0 {
+; CHECK-LABEL: define {{[^@]+}}@promote_avx2
+; CHECK-SAME: (<4 x i64>* [[ARG:%.*]], <4 x i64> [[ARG1_VAL:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: store <4 x i64> [[ARG1_VAL]], <4 x i64>* [[ARG]]
+; CHECK-NEXT: ret void
+;
bb:
%tmp = load <4 x i64>, <4 x i64>* %arg1
store <4 x i64> %tmp, <4 x i64>* %arg
@@ -34,6 +58,19 @@ bb:
}
define void @promote(<4 x i64>* %arg) #0 {
+; CHECK-LABEL: define {{[^@]+}}@promote
+; CHECK-SAME: (<4 x i64>* [[ARG:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = alloca <4 x i64>, align 32
+; CHECK-NEXT: [[TMP2:%.*]] = alloca <4 x i64>, align 32
+; CHECK-NEXT: [[TMP3:%.*]] = bitcast <4 x i64>* [[TMP]] to i8*
+; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 32 [[TMP3]], i8 0, i64 32, i1 false)
+; CHECK-NEXT: [[TMP_VAL:%.*]] = load <4 x i64>, <4 x i64>* [[TMP]]
+; CHECK-NEXT: call fastcc void @promote_avx2(<4 x i64>* [[TMP2]], <4 x i64> [[TMP_VAL]])
+; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i64>, <4 x i64>* [[TMP2]], align 32
+; CHECK-NEXT: store <4 x i64> [[TMP4]], <4 x i64>* [[ARG]], align 2
+; CHECK-NEXT: ret void
+;
bb:
%tmp = alloca <4 x i64>, align 32
%tmp2 = alloca <4 x i64>, align 32
diff --git a/llvm/test/Transforms/ArgumentPromotion/X86/min-legal-vector-width.ll b/llvm/test/Transforms/ArgumentPromotion/X86/min-legal-vector-width.ll
index 59ac7d3c195b..6cca81531867 100644
--- a/llvm/test/Transforms/ArgumentPromotion/X86/min-legal-vector-width.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/X86/min-legal-vector-width.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt -S -argpromotion < %s | FileCheck %s
; RUN: opt -S -passes=argpromotion < %s | FileCheck %s
; Test that we only promote arguments when the caller/callee have compatible
@@ -6,8 +7,13 @@
target triple = "x86_64-unknown-linux-gnu"
; This should promote
-; CHECK-LABEL: @callee_avx512_legal512_prefer512_call_avx512_legal512_prefer512(<8 x i64>* %arg, <8 x i64> %arg1.val)
define internal fastcc void @callee_avx512_legal512_prefer512_call_avx512_legal512_prefer512(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #0 {
+; CHECK-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer512_call_avx512_legal512_prefer512
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]], <8 x i64> [[ARG1_VAL:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: store <8 x i64> [[ARG1_VAL]], <8 x i64>* [[ARG]]
+; CHECK-NEXT: ret void
+;
bb:
%tmp = load <8 x i64>, <8 x i64>* %arg1
store <8 x i64> %tmp, <8 x i64>* %arg
@@ -15,6 +21,19 @@ bb:
}
define void @avx512_legal512_prefer512_call_avx512_legal512_prefer512(<8 x i64>* %arg) #0 {
+; CHECK-LABEL: define {{[^@]+}}@avx512_legal512_prefer512_call_avx512_legal512_prefer512
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP2:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP3:%.*]] = bitcast <8 x i64>* [[TMP]] to i8*
+; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 32 [[TMP3]], i8 0, i64 32, i1 false)
+; CHECK-NEXT: [[TMP_VAL:%.*]] = load <8 x i64>, <8 x i64>* [[TMP]]
+; CHECK-NEXT: call fastcc void @callee_avx512_legal512_prefer512_call_avx512_legal512_prefer512(<8 x i64>* [[TMP2]], <8 x i64> [[TMP_VAL]])
+; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i64>, <8 x i64>* [[TMP2]], align 32
+; CHECK-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
+; CHECK-NEXT: ret void
+;
bb:
%tmp = alloca <8 x i64>, align 32
%tmp2 = alloca <8 x i64>, align 32
@@ -27,8 +46,13 @@ bb:
}
; This should promote
-; CHECK-LABEL: @callee_avx512_legal512_prefer256_call_avx512_legal512_prefer256(<8 x i64>* %arg, <8 x i64> %arg1.val)
define internal fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal512_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #1 {
+; CHECK-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer256_call_avx512_legal512_prefer256
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]], <8 x i64> [[ARG1_VAL:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: store <8 x i64> [[ARG1_VAL]], <8 x i64>* [[ARG]]
+; CHECK-NEXT: ret void
+;
bb:
%tmp = load <8 x i64>, <8 x i64>* %arg1
store <8 x i64> %tmp, <8 x i64>* %arg
@@ -36,6 +60,19 @@ bb:
}
define void @avx512_legal512_prefer256_call_avx512_legal512_prefer256(<8 x i64>* %arg) #1 {
+; CHECK-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal512_prefer256
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP2:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP3:%.*]] = bitcast <8 x i64>* [[TMP]] to i8*
+; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 32 [[TMP3]], i8 0, i64 32, i1 false)
+; CHECK-NEXT: [[TMP_VAL:%.*]] = load <8 x i64>, <8 x i64>* [[TMP]]
+; CHECK-NEXT: call fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal512_prefer256(<8 x i64>* [[TMP2]], <8 x i64> [[TMP_VAL]])
+; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i64>, <8 x i64>* [[TMP2]], align 32
+; CHECK-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
+; CHECK-NEXT: ret void
+;
bb:
%tmp = alloca <8 x i64>, align 32
%tmp2 = alloca <8 x i64>, align 32
@@ -48,8 +85,13 @@ bb:
}
; This should promote
-; CHECK-LABEL: @callee_avx512_legal512_prefer512_call_avx512_legal512_prefer256(<8 x i64>* %arg, <8 x i64> %arg1.val)
define internal fastcc void @callee_avx512_legal512_prefer512_call_avx512_legal512_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #1 {
+; CHECK-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer512_call_avx512_legal512_prefer256
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]], <8 x i64> [[ARG1_VAL:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: store <8 x i64> [[ARG1_VAL]], <8 x i64>* [[ARG]]
+; CHECK-NEXT: ret void
+;
bb:
%tmp = load <8 x i64>, <8 x i64>* %arg1
store <8 x i64> %tmp, <8 x i64>* %arg
@@ -57,6 +99,19 @@ bb:
}
define void @avx512_legal512_prefer512_call_avx512_legal512_prefer256(<8 x i64>* %arg) #0 {
+; CHECK-LABEL: define {{[^@]+}}@avx512_legal512_prefer512_call_avx512_legal512_prefer256
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP2:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP3:%.*]] = bitcast <8 x i64>* [[TMP]] to i8*
+; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 32 [[TMP3]], i8 0, i64 32, i1 false)
+; CHECK-NEXT: [[TMP_VAL:%.*]] = load <8 x i64>, <8 x i64>* [[TMP]]
+; CHECK-NEXT: call fastcc void @callee_avx512_legal512_prefer512_call_avx512_legal512_prefer256(<8 x i64>* [[TMP2]], <8 x i64> [[TMP_VAL]])
+; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i64>, <8 x i64>* [[TMP2]], align 32
+; CHECK-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
+; CHECK-NEXT: ret void
+;
bb:
%tmp = alloca <8 x i64>, align 32
%tmp2 = alloca <8 x i64>, align 32
@@ -69,8 +124,13 @@ bb:
}
; This should promote
-; CHECK-LABEL: @callee_avx512_legal512_prefer256_call_avx512_legal512_prefer512(<8 x i64>* %arg, <8 x i64> %arg1.val)
define internal fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal512_prefer512(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #0 {
+; CHECK-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer256_call_avx512_legal512_prefer512
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]], <8 x i64> [[ARG1_VAL:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: store <8 x i64> [[ARG1_VAL]], <8 x i64>* [[ARG]]
+; CHECK-NEXT: ret void
+;
bb:
%tmp = load <8 x i64>, <8 x i64>* %arg1
store <8 x i64> %tmp, <8 x i64>* %arg
@@ -78,6 +138,19 @@ bb:
}
define void @avx512_legal512_prefer256_call_avx512_legal512_prefer512(<8 x i64>* %arg) #1 {
+; CHECK-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal512_prefer512
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP2:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP3:%.*]] = bitcast <8 x i64>* [[TMP]] to i8*
+; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 32 [[TMP3]], i8 0, i64 32, i1 false)
+; CHECK-NEXT: [[TMP_VAL:%.*]] = load <8 x i64>, <8 x i64>* [[TMP]]
+; CHECK-NEXT: call fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal512_prefer512(<8 x i64>* [[TMP2]], <8 x i64> [[TMP_VAL]])
+; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i64>, <8 x i64>* [[TMP2]], align 32
+; CHECK-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
+; CHECK-NEXT: ret void
+;
bb:
%tmp = alloca <8 x i64>, align 32
%tmp2 = alloca <8 x i64>, align 32
@@ -90,8 +163,14 @@ bb:
}
; This should not promote
-; CHECK-LABEL: @callee_avx512_legal256_prefer256_call_avx512_legal512_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1)
define internal fastcc void @callee_avx512_legal256_prefer256_call_avx512_legal512_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #1 {
+; CHECK-LABEL: define {{[^@]+}}@callee_avx512_legal256_prefer256_call_avx512_legal512_prefer256
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]], <8 x i64>* readonly [[ARG1:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = load <8 x i64>, <8 x i64>* [[ARG1]]
+; CHECK-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]]
+; CHECK-NEXT: ret void
+;
bb:
%tmp = load <8 x i64>, <8 x i64>* %arg1
store <8 x i64> %tmp, <8 x i64>* %arg
@@ -99,6 +178,18 @@ bb:
}
define void @avx512_legal256_prefer256_call_avx512_legal512_prefer256(<8 x i64>* %arg) #2 {
+; CHECK-LABEL: define {{[^@]+}}@avx512_legal256_prefer256_call_avx512_legal512_prefer256
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP2:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP3:%.*]] = bitcast <8 x i64>* [[TMP]] to i8*
+; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 32 [[TMP3]], i8 0, i64 32, i1 false)
+; CHECK-NEXT: call fastcc void @callee_avx512_legal256_prefer256_call_avx512_legal512_prefer256(<8 x i64>* [[TMP2]], <8 x i64>* [[TMP]])
+; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i64>, <8 x i64>* [[TMP2]], align 32
+; CHECK-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
+; CHECK-NEXT: ret void
+;
bb:
%tmp = alloca <8 x i64>, align 32
%tmp2 = alloca <8 x i64>, align 32
@@ -111,8 +202,14 @@ bb:
}
; This should not promote
-; CHECK-LABEL: @callee_avx512_legal512_prefer256_call_avx512_legal256_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1)
define internal fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal256_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #2 {
+; CHECK-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer256_call_avx512_legal256_prefer256
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]], <8 x i64>* readonly [[ARG1:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = load <8 x i64>, <8 x i64>* [[ARG1]]
+; CHECK-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]]
+; CHECK-NEXT: ret void
+;
bb:
%tmp = load <8 x i64>, <8 x i64>* %arg1
store <8 x i64> %tmp, <8 x i64>* %arg
@@ -120,6 +217,18 @@ bb:
}
define void @avx512_legal512_prefer256_call_avx512_legal256_prefer256(<8 x i64>* %arg) #1 {
+; CHECK-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal256_prefer256
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP2:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP3:%.*]] = bitcast <8 x i64>* [[TMP]] to i8*
+; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 32 [[TMP3]], i8 0, i64 32, i1 false)
+; CHECK-NEXT: call fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal256_prefer256(<8 x i64>* [[TMP2]], <8 x i64>* [[TMP]])
+; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i64>, <8 x i64>* [[TMP2]], align 32
+; CHECK-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
+; CHECK-NEXT: ret void
+;
bb:
%tmp = alloca <8 x i64>, align 32
%tmp2 = alloca <8 x i64>, align 32
@@ -132,8 +241,13 @@ bb:
}
; This should promote
-; CHECK-LABEL: @callee_avx2_legal256_prefer256_call_avx2_legal512_prefer256(<8 x i64>* %arg, <8 x i64> %arg1.val)
define internal fastcc void @callee_avx2_legal256_prefer256_call_avx2_legal512_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #3 {
+; CHECK-LABEL: define {{[^@]+}}@callee_avx2_legal256_prefer256_call_avx2_legal512_prefer256
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]], <8 x i64> [[ARG1_VAL:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: store <8 x i64> [[ARG1_VAL]], <8 x i64>* [[ARG]]
+; CHECK-NEXT: ret void
+;
bb:
%tmp = load <8 x i64>, <8 x i64>* %arg1
store <8 x i64> %tmp, <8 x i64>* %arg
@@ -141,6 +255,19 @@ bb:
}
define void @avx2_legal256_prefer256_call_avx2_legal512_prefer256(<8 x i64>* %arg) #4 {
+; CHECK-LABEL: define {{[^@]+}}@avx2_legal256_prefer256_call_avx2_legal512_prefer256
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP2:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP3:%.*]] = bitcast <8 x i64>* [[TMP]] to i8*
+; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 32 [[TMP3]], i8 0, i64 32, i1 false)
+; CHECK-NEXT: [[TMP_VAL:%.*]] = load <8 x i64>, <8 x i64>* [[TMP]]
+; CHECK-NEXT: call fastcc void @callee_avx2_legal256_prefer256_call_avx2_legal512_prefer256(<8 x i64>* [[TMP2]], <8 x i64> [[TMP_VAL]])
+; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i64>, <8 x i64>* [[TMP2]], align 32
+; CHECK-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
+; CHECK-NEXT: ret void
+;
bb:
%tmp = alloca <8 x i64>, align 32
%tmp2 = alloca <8 x i64>, align 32
@@ -153,8 +280,13 @@ bb:
}
; This should promote
-; CHECK-LABEL: @callee_avx2_legal512_prefer256_call_avx2_legal256_prefer256(<8 x i64>* %arg, <8 x i64> %arg1.val)
define internal fastcc void @callee_avx2_legal512_prefer256_call_avx2_legal256_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #4 {
+; CHECK-LABEL: define {{[^@]+}}@callee_avx2_legal512_prefer256_call_avx2_legal256_prefer256
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]], <8 x i64> [[ARG1_VAL:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: store <8 x i64> [[ARG1_VAL]], <8 x i64>* [[ARG]]
+; CHECK-NEXT: ret void
+;
bb:
%tmp = load <8 x i64>, <8 x i64>* %arg1
store <8 x i64> %tmp, <8 x i64>* %arg
@@ -162,6 +294,19 @@ bb:
}
define void @avx2_legal512_prefer256_call_avx2_legal256_prefer256(<8 x i64>* %arg) #3 {
+; CHECK-LABEL: define {{[^@]+}}@avx2_legal512_prefer256_call_avx2_legal256_prefer256
+; CHECK-SAME: (<8 x i64>* [[ARG:%.*]])
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP2:%.*]] = alloca <8 x i64>, align 32
+; CHECK-NEXT: [[TMP3:%.*]] = bitcast <8 x i64>* [[TMP]] to i8*
+; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 32 [[TMP3]], i8 0, i64 32, i1 false)
+; CHECK-NEXT: [[TMP_VAL:%.*]] = load <8 x i64>, <8 x i64>* [[TMP]]
+; CHECK-NEXT: call fastcc void @callee_avx2_legal512_prefer256_call_avx2_legal256_prefer256(<8 x i64>* [[TMP2]], <8 x i64> [[TMP_VAL]])
+; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i64>, <8 x i64>* [[TMP2]], align 32
+; CHECK-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
+; CHECK-NEXT: ret void
+;
bb:
%tmp = alloca <8 x i64>, align 32
%tmp2 = alloca <8 x i64>, align 32
diff --git a/llvm/test/Transforms/ArgumentPromotion/X86/thiscall.ll b/llvm/test/Transforms/ArgumentPromotion/X86/thiscall.ll
index acc7c9ecf12c..d9f3681ba4ab 100644
--- a/llvm/test/Transforms/ArgumentPromotion/X86/thiscall.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/X86/thiscall.ll
@@ -1,12 +1,11 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; In PR41658, argpromotion put an inalloca in a position that per the
; calling convention is passed in a register. This test verifies that
; we don't do that anymore. It also verifies that the combination of
; globalopt and argpromotion is able to optimize the call safely.
;
-; RUN: opt -S -argpromotion %s | FileCheck --check-prefix=THIS %s
-; RUN: opt -S -globalopt -argpromotion %s | FileCheck --check-prefix=OPT %s
-; THIS: define internal x86_thiscallcc void @internalfun(%struct.a* %this, <{ %struct.a
-; OPT: define internal fastcc void @internalfun(<{ %struct.a }>* %0)
+; RUN: opt -S -argpromotion %s | FileCheck %s --check-prefix=ARGPROMOTION
+; RUN: opt -S -globalopt -argpromotion %s | FileCheck %s --check-prefix=GLOBALOPT_ARGPROMOTION
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
target triple = "i386-pc-windows-msvc19.11.0"
@@ -14,6 +13,26 @@ target triple = "i386-pc-windows-msvc19.11.0"
%struct.a = type { i8 }
define internal x86_thiscallcc void @internalfun(%struct.a* %this, <{ %struct.a }>* inalloca) {
+; ARGPROMOTION-LABEL: define {{[^@]+}}@internalfun
+; ARGPROMOTION-SAME: (%struct.a* [[THIS:%.*]], <{ [[STRUCT_A:%.*]] }>* inalloca [[TMP0:%.*]])
+; ARGPROMOTION-NEXT: entry:
+; ARGPROMOTION-NEXT: [[A:%.*]] = getelementptr inbounds <{ [[STRUCT_A]] }>, <{ [[STRUCT_A]] }>* [[TMP0]], i32 0, i32 0
+; ARGPROMOTION-NEXT: [[ARGMEM:%.*]] = alloca inalloca <{ [[STRUCT_A]] }>, align 4
+; ARGPROMOTION-NEXT: [[TMP1:%.*]] = getelementptr inbounds <{ [[STRUCT_A]] }>, <{ [[STRUCT_A]] }>* [[ARGMEM]], i32 0, i32 0
+; ARGPROMOTION-NEXT: [[CALL:%.*]] = call x86_thiscallcc %struct.a* @copy_ctor(%struct.a* [[TMP1]], %struct.a* dereferenceable(1) [[A]])
+; ARGPROMOTION-NEXT: call void @ext(<{ [[STRUCT_A]] }>* inalloca [[ARGMEM]])
+; ARGPROMOTION-NEXT: ret void
+;
+; GLOBALOPT_ARGPROMOTION-LABEL: define {{[^@]+}}@internalfun
+; GLOBALOPT_ARGPROMOTION-SAME: (<{ [[STRUCT_A:%.*]] }>* [[TMP0:%.*]]) unnamed_addr
+; GLOBALOPT_ARGPROMOTION-NEXT: entry:
+; GLOBALOPT_ARGPROMOTION-NEXT: [[A:%.*]] = getelementptr inbounds <{ [[STRUCT_A]] }>, <{ [[STRUCT_A]] }>* [[TMP0]], i32 0, i32 0
+; GLOBALOPT_ARGPROMOTION-NEXT: [[ARGMEM:%.*]] = alloca inalloca <{ [[STRUCT_A]] }>, align 4
+; GLOBALOPT_ARGPROMOTION-NEXT: [[TMP1:%.*]] = getelementptr inbounds <{ [[STRUCT_A]] }>, <{ [[STRUCT_A]] }>* [[ARGMEM]], i32 0, i32 0
+; GLOBALOPT_ARGPROMOTION-NEXT: [[CALL:%.*]] = call x86_thiscallcc %struct.a* @copy_ctor(%struct.a* [[TMP1]], %struct.a* dereferenceable(1) [[A]])
+; GLOBALOPT_ARGPROMOTION-NEXT: call void @ext(<{ [[STRUCT_A]] }>* inalloca [[ARGMEM]])
+; GLOBALOPT_ARGPROMOTION-NEXT: ret void
+;
entry:
%a = getelementptr inbounds <{ %struct.a }>, <{ %struct.a }>* %0, i32 0, i32 0
%argmem = alloca inalloca <{ %struct.a }>, align 4
@@ -25,6 +44,22 @@ entry:
; This is here to ensure @internalfun is live.
define void @exportedfun(%struct.a* %a) {
+; ARGPROMOTION-LABEL: define {{[^@]+}}@exportedfun
+; ARGPROMOTION-SAME: (%struct.a* [[A:%.*]])
+; ARGPROMOTION-NEXT: [[INALLOCA_SAVE:%.*]] = tail call i8* @llvm.stacksave()
+; ARGPROMOTION-NEXT: [[ARGMEM:%.*]] = alloca inalloca <{ [[STRUCT_A:%.*]] }>, align 4
+; ARGPROMOTION-NEXT: call x86_thiscallcc void @internalfun(%struct.a* [[A]], <{ [[STRUCT_A]] }>* inalloca [[ARGMEM]])
+; ARGPROMOTION-NEXT: call void @llvm.stackrestore(i8* [[INALLOCA_SAVE]])
+; ARGPROMOTION-NEXT: ret void
+;
+; GLOBALOPT_ARGPROMOTION-LABEL: define {{[^@]+}}@exportedfun
+; GLOBALOPT_ARGPROMOTION-SAME: (%struct.a* [[A:%.*]]) local_unnamed_addr
+; GLOBALOPT_ARGPROMOTION-NEXT: [[INALLOCA_SAVE:%.*]] = tail call i8* @llvm.stacksave()
+; GLOBALOPT_ARGPROMOTION-NEXT: [[ARGMEM:%.*]] = alloca inalloca <{ [[STRUCT_A:%.*]] }>, align 4
+; GLOBALOPT_ARGPROMOTION-NEXT: call fastcc void @internalfun(<{ [[STRUCT_A]] }>* [[ARGMEM]])
+; GLOBALOPT_ARGPROMOTION-NEXT: call void @llvm.stackrestore(i8* [[INALLOCA_SAVE]])
+; GLOBALOPT_ARGPROMOTION-NEXT: ret void
+;
%inalloca.save = tail call i8* @llvm.stacksave()
%argmem = alloca inalloca <{ %struct.a }>, align 4
call x86_thiscallcc void @internalfun(%struct.a* %a, <{ %struct.a }>* inalloca %argmem)
diff --git a/llvm/test/Transforms/ArgumentPromotion/aggregate-promote.ll b/llvm/test/Transforms/ArgumentPromotion/aggregate-promote.ll
index b0bab7784edb..9c8f9f5df698 100644
--- a/llvm/test/Transforms/ArgumentPromotion/aggregate-promote.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/aggregate-promote.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
@@ -5,27 +6,32 @@
@G = constant %T { i32 0, i32 0, i32 17, i32 25 }
define internal i32 @test(%T* %p) {
-; CHECK-LABEL: define internal i32 @test(
-; CHECK: i32 %{{.*}}, i32 %{{.*}})
+; CHECK-LABEL: define {{[^@]+}}@test
+; CHECK-SAME: (i32 [[P_0_2_VAL:%.*]], i32 [[P_0_3_VAL:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[V:%.*]] = add i32 [[P_0_3_VAL]], [[P_0_2_VAL]]
+; CHECK-NEXT: ret i32 [[V]]
+;
entry:
%a.gep = getelementptr %T, %T* %p, i64 0, i32 3
%b.gep = getelementptr %T, %T* %p, i64 0, i32 2
%a = load i32, i32* %a.gep
%b = load i32, i32* %b.gep
-; CHECK-NOT: load
%v = add i32 %a, %b
ret i32 %v
-; CHECK: ret i32
}
define i32 @caller() {
-; CHECK-LABEL: define i32 @caller(
+; CHECK-LABEL: define {{[^@]+}}@caller()
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[G_IDX:%.*]] = getelementptr [[T:%.*]], %T* @G, i64 0, i32 2
+; CHECK-NEXT: [[G_IDX_VAL:%.*]] = load i32, i32* [[G_IDX]]
+; CHECK-NEXT: [[G_IDX1:%.*]] = getelementptr [[T]], %T* @G, i64 0, i32 3
+; CHECK-NEXT: [[G_IDX1_VAL:%.*]] = load i32, i32* [[G_IDX1]]
+; CHECK-NEXT: [[V:%.*]] = call i32 @test(i32 [[G_IDX_VAL]], i32 [[G_IDX1_VAL]])
+; CHECK-NEXT: ret i32 [[V]]
+;
entry:
%v = call i32 @test(%T* @G)
-; CHECK: %[[B_GEP:.*]] = getelementptr %T, %T* @G, i64 0, i32 2
-; CHECK: %[[B:.*]] = load i32, i32* %[[B_GEP]]
-; CHECK: %[[A_GEP:.*]] = getelementptr %T, %T* @G, i64 0, i32 3
-; CHECK: %[[A:.*]] = load i32, i32* %[[A_GEP]]
-; CHECK: call i32 @test(i32 %[[B]], i32 %[[A]])
ret i32 %v
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/attrs.ll b/llvm/test/Transforms/ArgumentPromotion/attrs.ll
index 29cef50fe802..7d801ebf60ff 100644
--- a/llvm/test/Transforms/ArgumentPromotion/attrs.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/attrs.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
@@ -5,48 +6,57 @@
; Don't drop 'byval' on %X here.
define internal void @f(%struct.ss* byval %b, i32* byval %X, i32 %i) nounwind {
-; CHECK-LABEL: define internal void @f(
-; CHECK: i32 %[[B0:.*]], i64 %[[B1:.*]], i32* byval %X, i32 %i)
+; CHECK-LABEL: define {{[^@]+}}@f
+; CHECK-SAME: (i32 [[B_0:%.*]], i64 [[B_1:%.*]], i32* byval [[X:%.*]], i32 [[I:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[B:%.*]] = alloca [[STRUCT_SS:%.*]]
+; CHECK-NEXT: [[DOT0:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[B]], i32 0, i32 0
+; CHECK-NEXT: store i32 [[B_0]], i32* [[DOT0]]
+; CHECK-NEXT: [[DOT1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[B]], i32 0, i32 1
+; CHECK-NEXT: store i64 [[B_1]], i64* [[DOT1]]
+; CHECK-NEXT: [[TMP:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[B]], i32 0, i32 0
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[TMP]], align 4
+; CHECK-NEXT: [[TMP2:%.*]] = add i32 [[TMP1]], 1
+; CHECK-NEXT: store i32 [[TMP2]], i32* [[TMP]], align 4
+; CHECK-NEXT: store i32 0, i32* [[X]]
+; CHECK-NEXT: ret void
+;
entry:
-; CHECK: %[[B:.*]] = alloca %struct.ss
-; CHECK: %[[B_GEP0:.*]] = getelementptr %struct.ss, %struct.ss* %[[B]], i32 0, i32 0
-; CHECK: store i32 %[[B0]], i32* %[[B_GEP0]]
-; CHECK: %[[B_GEP1:.*]] = getelementptr %struct.ss, %struct.ss* %[[B]], i32 0, i32 1
-; CHECK: store i64 %[[B1]], i64* %[[B_GEP1]]
%tmp = getelementptr %struct.ss, %struct.ss* %b, i32 0, i32 0
-; CHECK: %[[TMP:.*]] = getelementptr %struct.ss, %struct.ss* %[[B]], i32 0, i32 0
%tmp1 = load i32, i32* %tmp, align 4
-; CHECK: %[[TMP1:.*]] = load i32, i32* %[[TMP]]
%tmp2 = add i32 %tmp1, 1
-; CHECK: %[[TMP2:.*]] = add i32 %[[TMP1]], 1
store i32 %tmp2, i32* %tmp, align 4
-; CHECK: store i32 %[[TMP2]], i32* %[[TMP]]
store i32 0, i32* %X
-; CHECK: store i32 0, i32* %X
ret void
}
; Also make sure we don't drop the call zeroext attribute.
define i32 @test(i32* %X) {
-; CHECK-LABEL: define i32 @test(
+; CHECK-LABEL: define {{[^@]+}}@test
+; CHECK-SAME: (i32* [[X:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[S:%.*]] = alloca [[STRUCT_SS:%.*]]
+; CHECK-NEXT: [[TMP1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 0
+; CHECK-NEXT: store i32 1, i32* [[TMP1]], align 8
+; CHECK-NEXT: [[TMP4:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 1
+; CHECK-NEXT: store i64 2, i64* [[TMP4]], align 4
+; CHECK-NEXT: [[S_0:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 0
+; CHECK-NEXT: [[S_0_VAL:%.*]] = load i32, i32* [[S_0]]
+; CHECK-NEXT: [[S_1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 1
+; CHECK-NEXT: [[S_1_VAL:%.*]] = load i64, i64* [[S_1]]
+; CHECK-NEXT: call void @f(i32 [[S_0_VAL]], i64 [[S_1_VAL]], i32* byval [[X]], i32 zeroext 0)
+; CHECK-NEXT: ret i32 0
+;
entry:
%S = alloca %struct.ss
-; CHECK: %[[S:.*]] = alloca %struct.ss
%tmp1 = getelementptr %struct.ss, %struct.ss* %S, i32 0, i32 0
store i32 1, i32* %tmp1, align 8
-; CHECK: store i32 1
%tmp4 = getelementptr %struct.ss, %struct.ss* %S, i32 0, i32 1
store i64 2, i64* %tmp4, align 4
-; CHECK: store i64 2
call void @f( %struct.ss* byval %S, i32* byval %X, i32 zeroext 0)
-; CHECK: %[[S_GEP0:.*]] = getelementptr %struct.ss, %struct.ss* %[[S]], i32 0, i32 0
-; CHECK: %[[S0:.*]] = load i32, i32* %[[S_GEP0]]
-; CHECK: %[[S_GEP1:.*]] = getelementptr %struct.ss, %struct.ss* %[[S]], i32 0, i32 1
-; CHECK: %[[S1:.*]] = load i64, i64* %[[S_GEP1]]
-; CHECK: call void @f(i32 %[[S0]], i64 %[[S1]], i32* byval %X, i32 zeroext 0)
ret i32 0
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/basictest.ll b/llvm/test/Transforms/ArgumentPromotion/basictest.ll
index 89888bbc98a7..13cbd77812cc 100644
--- a/llvm/test/Transforms/ArgumentPromotion/basictest.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/basictest.ll
@@ -1,8 +1,13 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -basicaa -argpromotion -mem2reg -S | FileCheck %s
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
define internal i32 @test(i32* %X, i32* %Y) {
-; CHECK-LABEL: define internal i32 @test(i32 %X.val, i32 %Y.val)
+; CHECK-LABEL: define {{[^@]+}}@test
+; CHECK-SAME: (i32 [[X_VAL:%.*]], i32 [[Y_VAL:%.*]])
+; CHECK-NEXT: [[C:%.*]] = add i32 [[X_VAL]], [[Y_VAL]]
+; CHECK-NEXT: ret i32 [[C]]
+;
%A = load i32, i32* %X
%B = load i32, i32* %Y
%C = add i32 %A, %B
@@ -10,20 +15,25 @@ define internal i32 @test(i32* %X, i32* %Y) {
}
define internal i32 @caller(i32* %B) {
-; CHECK-LABEL: define internal i32 @caller(i32 %B.val1)
+; CHECK-LABEL: define {{[^@]+}}@caller
+; CHECK-SAME: (i32 [[B_VAL1:%.*]])
+; CHECK-NEXT: [[C:%.*]] = call i32 @test(i32 1, i32 [[B_VAL1]])
+; CHECK-NEXT: ret i32 [[C]]
+;
%A = alloca i32
store i32 1, i32* %A
%C = call i32 @test(i32* %A, i32* %B)
-; CHECK: call i32 @test(i32 1, i32 %B.val1)
ret i32 %C
}
define i32 @callercaller() {
-; CHECK-LABEL: define i32 @callercaller()
+; CHECK-LABEL: define {{[^@]+}}@callercaller()
+; CHECK-NEXT: [[X:%.*]] = call i32 @caller(i32 2)
+; CHECK-NEXT: ret i32 [[X]]
+;
%B = alloca i32
store i32 2, i32* %B
%X = call i32 @caller(i32* %B)
-; CHECK: call i32 @caller(i32 2)
ret i32 %X
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/byval-2.ll b/llvm/test/Transforms/ArgumentPromotion/byval-2.ll
index 3e1fee8badd9..f46a1f371cc9 100644
--- a/llvm/test/Transforms/ArgumentPromotion/byval-2.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/byval-2.ll
@@ -1,13 +1,28 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
; Arg promotion eliminates the struct argument.
-; FIXME: Should it eliminate the i32* argument?
+; FIXME: We should eliminate the i32* argument.
%struct.ss = type { i32, i64 }
define internal void @f(%struct.ss* byval %b, i32* byval %X) nounwind {
-; CHECK-LABEL: define internal void @f(i32 %b.0, i64 %b.1, i32* byval %X)
+; CHECK-LABEL: define {{[^@]+}}@f
+; CHECK-SAME: (i32 [[B_0:%.*]], i64 [[B_1:%.*]], i32* byval [[X:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[B:%.*]] = alloca [[STRUCT_SS:%.*]]
+; CHECK-NEXT: [[DOT0:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[B]], i32 0, i32 0
+; CHECK-NEXT: store i32 [[B_0]], i32* [[DOT0]]
+; CHECK-NEXT: [[DOT1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[B]], i32 0, i32 1
+; CHECK-NEXT: store i64 [[B_1]], i64* [[DOT1]]
+; CHECK-NEXT: [[TMP:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[B]], i32 0, i32 0
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[TMP]], align 4
+; CHECK-NEXT: [[TMP2:%.*]] = add i32 [[TMP1]], 1
+; CHECK-NEXT: store i32 [[TMP2]], i32* [[TMP]], align 4
+; CHECK-NEXT: store i32 0, i32* [[X]]
+; CHECK-NEXT: ret void
+;
entry:
%tmp = getelementptr %struct.ss, %struct.ss* %b, i32 0, i32 0
%tmp1 = load i32, i32* %tmp, align 4
@@ -19,7 +34,21 @@ entry:
}
define i32 @test(i32* %X) {
-; CHECK-LABEL: define i32 @test
+; CHECK-LABEL: define {{[^@]+}}@test
+; CHECK-SAME: (i32* [[X:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[S:%.*]] = alloca [[STRUCT_SS:%.*]]
+; CHECK-NEXT: [[TMP1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 0
+; CHECK-NEXT: store i32 1, i32* [[TMP1]], align 8
+; CHECK-NEXT: [[TMP4:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 1
+; CHECK-NEXT: store i64 2, i64* [[TMP4]], align 4
+; CHECK-NEXT: [[S_0:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 0
+; CHECK-NEXT: [[S_0_VAL:%.*]] = load i32, i32* [[S_0]]
+; CHECK-NEXT: [[S_1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 1
+; CHECK-NEXT: [[S_1_VAL:%.*]] = load i64, i64* [[S_1]]
+; CHECK-NEXT: call void @f(i32 [[S_0_VAL]], i64 [[S_1_VAL]], i32* byval [[X]])
+; CHECK-NEXT: ret i32 0
+;
entry:
%S = alloca %struct.ss
%tmp1 = getelementptr %struct.ss, %struct.ss* %S, i32 0, i32 0
@@ -27,6 +56,5 @@ entry:
%tmp4 = getelementptr %struct.ss, %struct.ss* %S, i32 0, i32 1
store i64 2, i64* %tmp4, align 4
call void @f( %struct.ss* byval %S, i32* byval %X)
-; CHECK: call void @f(i32 %{{.*}}, i64 %{{.*}}, i32* byval %{{.*}})
ret i32 0
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/byval.ll b/llvm/test/Transforms/ArgumentPromotion/byval.ll
index 00542e3ec244..020c0f292be8 100644
--- a/llvm/test/Transforms/ArgumentPromotion/byval.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/byval.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
@@ -6,6 +7,20 @@ target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:1
%struct.ss = type { i32, i64 }
define internal void @f(%struct.ss* byval %b) nounwind {
+; CHECK-LABEL: define {{[^@]+}}@f
+; CHECK-SAME: (i32 [[B_0:%.*]], i64 [[B_1:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[B:%.*]] = alloca [[STRUCT_SS:%.*]]
+; CHECK-NEXT: [[DOT0:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[B]], i32 0, i32 0
+; CHECK-NEXT: store i32 [[B_0]], i32* [[DOT0]]
+; CHECK-NEXT: [[DOT1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[B]], i32 0, i32 1
+; CHECK-NEXT: store i64 [[B_1]], i64* [[DOT1]]
+; CHECK-NEXT: [[TMP:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[B]], i32 0, i32 0
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[TMP]], align 4
+; CHECK-NEXT: [[TMP2:%.*]] = add i32 [[TMP1]], 1
+; CHECK-NEXT: store i32 [[TMP2]], i32* [[TMP]], align 4
+; CHECK-NEXT: ret void
+;
entry:
%tmp = getelementptr %struct.ss, %struct.ss* %b, i32 0, i32 0
%tmp1 = load i32, i32* %tmp, align 4
@@ -14,12 +29,22 @@ entry:
ret void
}
-; CHECK-LABEL: define internal void @f(i32 %b.0, i64 %b.1)
-; CHECK: alloca %struct.ss{{$}}
-; CHECK: store i32 %b.0
-; CHECK: store i64 %b.1
define internal void @g(%struct.ss* byval align 32 %b) nounwind {
+; CHECK-LABEL: define {{[^@]+}}@g
+; CHECK-SAME: (i32 [[B_0:%.*]], i64 [[B_1:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[B:%.*]] = alloca [[STRUCT_SS:%.*]], align 32
+; CHECK-NEXT: [[DOT0:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[B]], i32 0, i32 0
+; CHECK-NEXT: store i32 [[B_0]], i32* [[DOT0]]
+; CHECK-NEXT: [[DOT1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[B]], i32 0, i32 1
+; CHECK-NEXT: store i64 [[B_1]], i64* [[DOT1]]
+; CHECK-NEXT: [[TMP:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[B]], i32 0, i32 0
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[TMP]], align 4
+; CHECK-NEXT: [[TMP2:%.*]] = add i32 [[TMP1]], 1
+; CHECK-NEXT: store i32 [[TMP2]], i32* [[TMP]], align 4
+; CHECK-NEXT: ret void
+;
entry:
%tmp = getelementptr %struct.ss, %struct.ss* %b, i32 0, i32 0
%tmp1 = load i32, i32* %tmp, align 4
@@ -28,12 +53,27 @@ entry:
ret void
}
-; CHECK-LABEL: define internal void @g(i32 %b.0, i64 %b.1)
-; CHECK: alloca %struct.ss, align 32
-; CHECK: store i32 %b.0
-; CHECK: store i64 %b.1
define i32 @main() nounwind {
+; CHECK-LABEL: define {{[^@]+}}@main()
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[S:%.*]] = alloca [[STRUCT_SS:%.*]]
+; CHECK-NEXT: [[TMP1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 0
+; CHECK-NEXT: store i32 1, i32* [[TMP1]], align 8
+; CHECK-NEXT: [[TMP4:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 1
+; CHECK-NEXT: store i64 2, i64* [[TMP4]], align 4
+; CHECK-NEXT: [[S_0:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 0
+; CHECK-NEXT: [[S_0_VAL:%.*]] = load i32, i32* [[S_0]]
+; CHECK-NEXT: [[S_1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 1
+; CHECK-NEXT: [[S_1_VAL:%.*]] = load i64, i64* [[S_1]]
+; CHECK-NEXT: call void @f(i32 [[S_0_VAL]], i64 [[S_1_VAL]])
+; CHECK-NEXT: [[S_01:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 0
+; CHECK-NEXT: [[S_01_VAL:%.*]] = load i32, i32* [[S_01]]
+; CHECK-NEXT: [[S_12:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 1
+; CHECK-NEXT: [[S_12_VAL:%.*]] = load i64, i64* [[S_12]]
+; CHECK-NEXT: call void @g(i32 [[S_01_VAL]], i64 [[S_12_VAL]])
+; CHECK-NEXT: ret i32 0
+;
entry:
%S = alloca %struct.ss
%tmp1 = getelementptr %struct.ss, %struct.ss* %S, i32 0, i32 0
@@ -45,6 +85,4 @@ entry:
ret i32 0
}
-; CHECK-LABEL: define i32 @main
-; CHECK: call void @f(i32 %{{.*}}, i64 %{{.*}})
-; CHECK: call void @g(i32 %{{.*}}, i64 %{{.*}})
+
diff --git a/llvm/test/Transforms/ArgumentPromotion/chained.ll b/llvm/test/Transforms/ArgumentPromotion/chained.ll
index 028c6c426e52..c7115fed98f0 100644
--- a/llvm/test/Transforms/ArgumentPromotion/chained.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/chained.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
@@ -5,23 +6,27 @@
@G2 = constant i32* @G1
define internal i32 @test(i32** %x) {
-; CHECK-LABEL: define internal i32 @test(
-; CHECK: i32 %{{.*}})
+; CHECK-LABEL: define {{[^@]+}}@test
+; CHECK-SAME: (i32 [[X_VAL_VAL:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: ret i32 [[X_VAL_VAL]]
+;
entry:
%y = load i32*, i32** %x
%z = load i32, i32* %y
-; CHECK-NOT: load
ret i32 %z
-; CHECK: ret i32
}
define i32 @caller() {
-; CHECK-LABEL: define i32 @caller()
+; CHECK-LABEL: define {{[^@]+}}@caller()
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[G2_VAL:%.*]] = load i32*, i32** @G2
+; CHECK-NEXT: [[G2_VAL_VAL:%.*]] = load i32, i32* [[G2_VAL]]
+; CHECK-NEXT: [[X:%.*]] = call i32 @test(i32 [[G2_VAL_VAL]])
+; CHECK-NEXT: ret i32 [[X]]
+;
entry:
%x = call i32 @test(i32** @G2)
-; CHECK: %[[Y:.*]] = load i32*, i32** @G2
-; CHECK: %[[Z:.*]] = load i32, i32* %[[Y]]
-; CHECK: call i32 @test(i32 %[[Z]])
ret i32 %x
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/control-flow.ll b/llvm/test/Transforms/ArgumentPromotion/control-flow.ll
index c3fe0c00e877..2835788e7a10 100644
--- a/llvm/test/Transforms/ArgumentPromotion/control-flow.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/control-flow.ll
@@ -1,10 +1,19 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
; Don't promote around control flow.
define internal i32 @callee(i1 %C, i32* %P) {
-; CHECK-LABEL: define internal i32 @callee(
-; CHECK: i1 %C, i32* %P)
+; CHECK-LABEL: define {{[^@]+}}@callee
+; CHECK-SAME: (i1 [[C:%.*]], i32* [[P:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
+; CHECK: T:
+; CHECK-NEXT: ret i32 17
+; CHECK: F:
+; CHECK-NEXT: [[X:%.*]] = load i32, i32* [[P]]
+; CHECK-NEXT: ret i32 [[X]]
+;
entry:
br i1 %C, label %T, label %F
@@ -17,11 +26,13 @@ F:
}
define i32 @foo() {
-; CHECK-LABEL: define i32 @foo(
+; CHECK-LABEL: define {{[^@]+}}@foo()
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[X:%.*]] = call i32 @callee(i1 true, i32* null)
+; CHECK-NEXT: ret i32 [[X]]
+;
entry:
-; CHECK-NOT: load i32, i32* null
%X = call i32 @callee(i1 true, i32* null)
-; CHECK: call i32 @callee(i1 true, i32* null)
ret i32 %X
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/control-flow2.ll b/llvm/test/Transforms/ArgumentPromotion/control-flow2.ll
index b75a32ddb331..3f13b5e23541 100644
--- a/llvm/test/Transforms/ArgumentPromotion/control-flow2.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/control-flow2.ll
@@ -1,24 +1,39 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
-; CHECK: load i32, i32* %A
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
define internal i32 @callee(i1 %C, i32* %P) {
- br i1 %C, label %T, label %F
+; CHECK-LABEL: define {{[^@]+}}@callee
+; CHECK-SAME: (i1 [[C:%.*]], i32 [[P_VAL:%.*]])
+; CHECK-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
+; CHECK: T:
+; CHECK-NEXT: ret i32 17
+; CHECK: F:
+; CHECK-NEXT: ret i32 [[P_VAL]]
+;
+ br i1 %C, label %T, label %F
T: ; preds = %0
- ret i32 17
+ ret i32 17
F: ; preds = %0
- %X = load i32, i32* %P ; <i32> [#uses=1]
- ret i32 %X
+ %X = load i32, i32* %P ; <i32> [#uses=1]
+ ret i32 %X
}
define i32 @foo() {
- %A = alloca i32 ; <i32*> [#uses=2]
- store i32 17, i32* %A
- %X = call i32 @callee( i1 false, i32* %A ) ; <i32> [#uses=1]
- ret i32 %X
+; CHECK-LABEL: define {{[^@]+}}@foo()
+; CHECK-NEXT: [[A:%.*]] = alloca i32
+; CHECK-NEXT: store i32 17, i32* [[A]]
+; CHECK-NEXT: [[A_VAL:%.*]] = load i32, i32* [[A]]
+; CHECK-NEXT: [[X:%.*]] = call i32 @callee(i1 false, i32 [[A_VAL]])
+; CHECK-NEXT: ret i32 [[X]]
+;
+ %A = alloca i32 ; <i32*> [#uses=2]
+ store i32 17, i32* %A
+ %X = call i32 @callee( i1 false, i32* %A ) ; <i32> [#uses=1]
+ ret i32 %X
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/crash.ll b/llvm/test/Transforms/ArgumentPromotion/crash.ll
index d46a48101e78..d79d906434bb 100644
--- a/llvm/test/Transforms/ArgumentPromotion/crash.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/crash.ll
@@ -1,24 +1,34 @@
-; RUN: opt -S < %s -inline -argpromotion | FileCheck %s
-; RUN: opt -S < %s -passes=inline,argpromotion | FileCheck %s
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
+; RUN: opt -S < %s -inline -argpromotion | FileCheck %s --check-prefixes=ARGPROMOTION,ALL_OLDPM
+; RUN: opt -S < %s -passes=inline,argpromotion | FileCheck %s --check-prefixes=ARGPROMOTION,ALL_NEWPM
%S = type { %S* }
; Inlining should nuke the invoke (and any inlined calls) here even with
; argument promotion running along with it.
define void @zot() personality i32 (...)* @wibble {
-; CHECK-LABEL: define void @zot() personality i32 (...)* @wibble
-; CHECK-NOT: call
-; CHECK-NOT: invoke
+; ARGPROMOTION-LABEL: define {{[^@]+}}@zot() personality i32 (...)* @wibble
+; ARGPROMOTION-NEXT: bb:
+; ARGPROMOTION-NEXT: unreachable
+; ARGPROMOTION: hoge.exit:
+; ARGPROMOTION-NEXT: br label [[BB1:%.*]]
+; ARGPROMOTION: bb1:
+; ARGPROMOTION-NEXT: unreachable
+; ARGPROMOTION: bb2:
+; ARGPROMOTION-NEXT: [[TMP:%.*]] = landingpad { i8*, i32 }
+; ARGPROMOTION-NEXT: cleanup
+; ARGPROMOTION-NEXT: unreachable
+;
bb:
invoke void @hoge()
- to label %bb1 unwind label %bb2
+ to label %bb1 unwind label %bb2
bb1:
unreachable
bb2:
%tmp = landingpad { i8*, i32 }
- cleanup
+ cleanup
unreachable
}
@@ -35,6 +45,10 @@ bb:
}
define internal i1 @eggs(i8* %arg) {
+; ALL_NEWPM-LABEL: define {{[^@]+}}@eggs()
+; ALL_NEWPM-NEXT: bb:
+; ALL_NEWPM-NEXT: unreachable
+;
bb:
%tmp = call zeroext i1 @barney(i8* %arg)
unreachable
@@ -46,26 +60,39 @@ bb:
}
define i32 @test_inf_promote_caller(i32 %arg) {
-; CHECK-LABEL: define i32 @test_inf_promote_caller(
+; ARGPROMOTION-LABEL: define {{[^@]+}}@test_inf_promote_caller
+; ARGPROMOTION-SAME: (i32 [[ARG:%.*]])
+; ARGPROMOTION-NEXT: bb:
+; ARGPROMOTION-NEXT: [[TMP:%.*]] = alloca [[S:%.*]]
+; ARGPROMOTION-NEXT: [[TMP1:%.*]] = alloca [[S]]
+; ARGPROMOTION-NEXT: [[TMP2:%.*]] = call i32 @test_inf_promote_callee(%S* [[TMP]], %S* [[TMP1]])
+; ARGPROMOTION-NEXT: ret i32 0
+;
bb:
%tmp = alloca %S
%tmp1 = alloca %S
%tmp2 = call i32 @test_inf_promote_callee(%S* %tmp, %S* %tmp1)
-; CHECK: call i32 @test_inf_promote_callee(%S* %{{.*}}, %S* %{{.*}})
ret i32 0
}
define internal i32 @test_inf_promote_callee(%S* %arg, %S* %arg1) {
-; CHECK-LABEL: define internal i32 @test_inf_promote_callee(
-; CHECK: %S* %{{.*}}, %S* %{{.*}})
+; ARGPROMOTION-LABEL: define {{[^@]+}}@test_inf_promote_callee
+; ARGPROMOTION-SAME: (%S* [[ARG:%.*]], %S* [[ARG1:%.*]])
+; ARGPROMOTION-NEXT: bb:
+; ARGPROMOTION-NEXT: [[TMP:%.*]] = getelementptr [[S:%.*]], %S* [[ARG1]], i32 0, i32 0
+; ARGPROMOTION-NEXT: [[TMP2:%.*]] = load %S*, %S** [[TMP]]
+; ARGPROMOTION-NEXT: [[TMP3:%.*]] = getelementptr [[S]], %S* [[ARG]], i32 0, i32 0
+; ARGPROMOTION-NEXT: [[TMP4:%.*]] = load %S*, %S** [[TMP3]]
+; ARGPROMOTION-NEXT: [[TMP5:%.*]] = call i32 @test_inf_promote_callee(%S* [[TMP4]], %S* [[TMP2]])
+; ARGPROMOTION-NEXT: ret i32 0
+;
bb:
%tmp = getelementptr %S, %S* %arg1, i32 0, i32 0
%tmp2 = load %S*, %S** %tmp
%tmp3 = getelementptr %S, %S* %arg, i32 0, i32 0
%tmp4 = load %S*, %S** %tmp3
%tmp5 = call i32 @test_inf_promote_callee(%S* %tmp4, %S* %tmp2)
-; CHECK: call i32 @test_inf_promote_callee(%S* %{{.*}}, %S* %{{.*}})
ret i32 0
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/dbg.ll b/llvm/test/Transforms/ArgumentPromotion/dbg.ll
index 668276290b68..b26f5ce04b33 100644
--- a/llvm/test/Transforms/ArgumentPromotion/dbg.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/dbg.ll
@@ -1,10 +1,15 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
declare void @sink(i32)
-; CHECK: define internal void @test({{.*}} !dbg [[SP:![0-9]+]]
define internal void @test(i32** %X) !dbg !2 {
+; CHECK-LABEL: define {{[^@]+}}@test
+; CHECK-SAME: (i32 [[X_VAL_VAL:%.*]]) !dbg !3
+; CHECK-NEXT: call void @sink(i32 [[X_VAL_VAL]])
+; CHECK-NEXT: ret void
+;
%1 = load i32*, i32** %X, align 8
%2 = load i32, i32* %1, align 8
call void @sink(i32 %2)
@@ -13,30 +18,38 @@ define internal void @test(i32** %X) !dbg !2 {
%struct.pair = type { i32, i32 }
-; CHECK: define internal void @test_byval(i32 %{{.*}}, i32 %{{.*}})
define internal void @test_byval(%struct.pair* byval %P) {
+; CHECK-LABEL: define {{[^@]+}}@test_byval
+; CHECK-SAME: (i32 [[P_0:%.*]], i32 [[P_1:%.*]])
+; CHECK-NEXT: [[P:%.*]] = alloca [[STRUCT_PAIR:%.*]]
+; CHECK-NEXT: [[DOT0:%.*]] = getelementptr [[STRUCT_PAIR]], %struct.pair* [[P]], i32 0, i32 0
+; CHECK-NEXT: store i32 [[P_0]], i32* [[DOT0]]
+; CHECK-NEXT: [[DOT1:%.*]] = getelementptr [[STRUCT_PAIR]], %struct.pair* [[P]], i32 0, i32 1
+; CHECK-NEXT: store i32 [[P_1]], i32* [[DOT1]]
+; CHECK-NEXT: ret void
+;
ret void
}
-; CHECK-LABEL: define {{.*}} @caller(
define void @caller(i32** %Y, %struct.pair* %P) {
-; CHECK: load i32*, {{.*}} !dbg [[LOC_1:![0-9]+]]
-; CHECK-NEXT: load i32, {{.*}} !dbg [[LOC_1]]
-; CHECK-NEXT: call void @test(i32 %{{.*}}), !dbg [[LOC_1]]
+; CHECK-LABEL: define {{[^@]+}}@caller
+; CHECK-SAME: (i32** [[Y:%.*]], %struct.pair* [[P:%.*]])
+; CHECK-NEXT: [[Y_VAL:%.*]] = load i32*, i32** [[Y]], align 8, !dbg !4
+; CHECK-NEXT: [[Y_VAL_VAL:%.*]] = load i32, i32* [[Y_VAL]], align 8, !dbg !4
+; CHECK-NEXT: call void @test(i32 [[Y_VAL_VAL]]), !dbg !4
+; CHECK-NEXT: [[P_0:%.*]] = getelementptr [[STRUCT_PAIR:%.*]], %struct.pair* [[P]], i32 0, i32 0, !dbg !5
+; CHECK-NEXT: [[P_0_VAL:%.*]] = load i32, i32* [[P_0]], !dbg !5
+; CHECK-NEXT: [[P_1:%.*]] = getelementptr [[STRUCT_PAIR]], %struct.pair* [[P]], i32 0, i32 1, !dbg !5
+; CHECK-NEXT: [[P_1_VAL:%.*]] = load i32, i32* [[P_1]], !dbg !5
+; CHECK-NEXT: call void @test_byval(i32 [[P_0_VAL]], i32 [[P_1_VAL]]), !dbg !5
+; CHECK-NEXT: ret void
+;
call void @test(i32** %Y), !dbg !1
-; CHECK: getelementptr %struct.pair, {{.*}} !dbg [[LOC_2:![0-9]+]]
-; CHECK-NEXT: load i32, i32* {{.*}} !dbg [[LOC_2]]
-; CHECK-NEXT: getelementptr %struct.pair, {{.*}} !dbg [[LOC_2]]
-; CHECK-NEXT: load i32, i32* {{.*}} !dbg [[LOC_2]]
-; CHECK-NEXT: call void @test_byval(i32 %{{.*}}, i32 %{{.*}}), !dbg [[LOC_2]]
call void @test_byval(%struct.pair* %P), !dbg !6
ret void
}
-; CHECK: [[SP]] = distinct !DISubprogram(name: "test",
-; CHECK: [[LOC_1]] = !DILocation(line: 8
-; CHECK: [[LOC_2]] = !DILocation(line: 9
!llvm.module.flags = !{!0}
!llvm.dbg.cu = !{!3}
diff --git a/llvm/test/Transforms/ArgumentPromotion/fp80.ll b/llvm/test/Transforms/ArgumentPromotion/fp80.ll
index bd780fa21aeb..dd7cebf5a1c1 100644
--- a/llvm/test/Transforms/ArgumentPromotion/fp80.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/fp80.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
@@ -13,6 +14,16 @@ target triple = "x86_64-unknown-linux-gnu"
@a = internal global %struct.Foo { i32 1, i64 2 }, align 8
define void @run() {
+; CHECK-LABEL: define {{[^@]+}}@run()
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = tail call i8 @UseLongDoubleUnsafely(%union.u* byval align 16 bitcast (%struct.s* @b to %union.u*))
+; CHECK-NEXT: [[DOT0:%.*]] = getelementptr [[UNION_U:%.*]], %union.u* bitcast (%struct.s* @b to %union.u*), i32 0, i32 0
+; CHECK-NEXT: [[DOT0_VAL:%.*]] = load x86_fp80, x86_fp80* [[DOT0]]
+; CHECK-NEXT: [[TMP1:%.*]] = tail call x86_fp80 @UseLongDoubleSafely(x86_fp80 [[DOT0_VAL]])
+; CHECK-NEXT: [[TMP2:%.*]] = call i64 @AccessPaddingOfStruct(%struct.Foo* @a)
+; CHECK-NEXT: [[TMP3:%.*]] = call i64 @CaptureAStruct(%struct.Foo* @a)
+; CHECK-NEXT: ret void
+;
entry:
tail call i8 @UseLongDoubleUnsafely(%union.u* byval align 16 bitcast (%struct.s* @b to %union.u*))
tail call x86_fp80 @UseLongDoubleSafely(%union.u* byval align 16 bitcast (%struct.s* @b to %union.u*))
@@ -21,8 +32,15 @@ entry:
ret void
}
-; CHECK: internal i8 @UseLongDoubleUnsafely(%union.u* byval align 16 %arg) {
define internal i8 @UseLongDoubleUnsafely(%union.u* byval align 16 %arg) {
+; CHECK-LABEL: define {{[^@]+}}@UseLongDoubleUnsafely
+; CHECK-SAME: (%union.u* byval align 16 [[ARG:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[BITCAST:%.*]] = bitcast %union.u* [[ARG]] to %struct.s*
+; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], %struct.s* [[BITCAST]], i64 0, i32 2
+; CHECK-NEXT: [[RESULT:%.*]] = load i8, i8* [[GEP]]
+; CHECK-NEXT: ret i8 [[RESULT]]
+;
entry:
%bitcast = bitcast %union.u* %arg to %struct.s*
%gep = getelementptr inbounds %struct.s, %struct.s* %bitcast, i64 0, i32 2
@@ -30,22 +48,46 @@ entry:
ret i8 %result
}
-; CHECK: internal x86_fp80 @UseLongDoubleSafely(x86_fp80 {{%.*}}) {
define internal x86_fp80 @UseLongDoubleSafely(%union.u* byval align 16 %arg) {
+; CHECK-LABEL: define {{[^@]+}}@UseLongDoubleSafely
+; CHECK-SAME: (x86_fp80 [[ARG_0:%.*]])
+; CHECK-NEXT: [[ARG:%.*]] = alloca [[UNION_U:%.*]], align 16
+; CHECK-NEXT: [[DOT0:%.*]] = getelementptr [[UNION_U]], %union.u* [[ARG]], i32 0, i32 0
+; CHECK-NEXT: store x86_fp80 [[ARG_0]], x86_fp80* [[DOT0]]
+; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds [[UNION_U]], %union.u* [[ARG]], i64 0, i32 0
+; CHECK-NEXT: [[FP80:%.*]] = load x86_fp80, x86_fp80* [[GEP]]
+; CHECK-NEXT: ret x86_fp80 [[FP80]]
+;
%gep = getelementptr inbounds %union.u, %union.u* %arg, i64 0, i32 0
%fp80 = load x86_fp80, x86_fp80* %gep
ret x86_fp80 %fp80
}
-; CHECK: define internal i64 @AccessPaddingOfStruct(%struct.Foo* byval %a) {
define internal i64 @AccessPaddingOfStruct(%struct.Foo* byval %a) {
+; CHECK-LABEL: define {{[^@]+}}@AccessPaddingOfStruct
+; CHECK-SAME: (%struct.Foo* byval [[A:%.*]])
+; CHECK-NEXT: [[P:%.*]] = bitcast %struct.Foo* [[A]] to i64*
+; CHECK-NEXT: [[V:%.*]] = load i64, i64* [[P]]
+; CHECK-NEXT: ret i64 [[V]]
+;
%p = bitcast %struct.Foo* %a to i64*
%v = load i64, i64* %p
ret i64 %v
}
-; CHECK: define internal i64 @CaptureAStruct(%struct.Foo* byval %a) {
define internal i64 @CaptureAStruct(%struct.Foo* byval %a) {
+; CHECK-LABEL: define {{[^@]+}}@CaptureAStruct
+; CHECK-SAME: (%struct.Foo* byval [[A:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[A_PTR:%.*]] = alloca %struct.Foo*
+; CHECK-NEXT: br label [[LOOP:%.*]]
+; CHECK: loop:
+; CHECK-NEXT: [[PHI:%.*]] = phi %struct.Foo* [ null, [[ENTRY:%.*]] ], [ [[GEP:%.*]], [[LOOP]] ]
+; CHECK-NEXT: [[TMP0:%.*]] = phi %struct.Foo* [ [[A]], [[ENTRY]] ], [ [[TMP0]], [[LOOP]] ]
+; CHECK-NEXT: store %struct.Foo* [[PHI]], %struct.Foo** [[A_PTR]]
+; CHECK-NEXT: [[GEP]] = getelementptr [[STRUCT_FOO:%.*]], %struct.Foo* [[A]], i64 0
+; CHECK-NEXT: br label [[LOOP]]
+;
entry:
%a_ptr = alloca %struct.Foo*
br label %loop
diff --git a/llvm/test/Transforms/ArgumentPromotion/inalloca.ll b/llvm/test/Transforms/ArgumentPromotion/inalloca.ll
index 02d782b65cf4..ebf3d18f2fc5 100644
--- a/llvm/test/Transforms/ArgumentPromotion/inalloca.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/inalloca.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt %s -globalopt -argpromotion -sroa -S | FileCheck %s
; RUN: opt %s -passes='module(globalopt),cgscc(argpromotion),function(sroa)' -S | FileCheck %s
@@ -7,6 +8,12 @@ target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:1
; Argpromote + sroa should change this to passing the two integers by value.
define internal i32 @f(%struct.ss* inalloca %s) {
+; CHECK-LABEL: define {{[^@]+}}@f
+; CHECK-SAME: (i32 [[S_0_0_VAL:%.*]], i32 [[S_0_1_VAL:%.*]]) unnamed_addr
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[R:%.*]] = add i32 [[S_0_0_VAL]], [[S_0_1_VAL]]
+; CHECK-NEXT: ret i32 [[R]]
+;
entry:
%f0 = getelementptr %struct.ss, %struct.ss* %s, i32 0, i32 0
%f1 = getelementptr %struct.ss, %struct.ss* %s, i32 0, i32 1
@@ -15,11 +22,13 @@ entry:
%r = add i32 %a, %b
ret i32 %r
}
-; CHECK-LABEL: define internal fastcc i32 @f
-; CHECK-NOT: load
-; CHECK: ret
define i32 @main() {
+; CHECK-LABEL: define {{[^@]+}}@main() local_unnamed_addr
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[R:%.*]] = call fastcc i32 @f(i32 1, i32 2)
+; CHECK-NEXT: ret i32 [[R]]
+;
entry:
%S = alloca inalloca %struct.ss
%f0 = getelementptr %struct.ss, %struct.ss* %S, i32 0, i32 0
@@ -29,22 +38,29 @@ entry:
%r = call i32 @f(%struct.ss* inalloca %S)
ret i32 %r
}
-; CHECK-LABEL: define i32 @main
-; CHECK-NOT: load
-; CHECK: ret
; Argpromote can't promote %a because of the icmp use.
define internal i1 @g(%struct.ss* %a, %struct.ss* inalloca %b) nounwind {
-; CHECK: define internal fastcc i1 @g(%struct.ss* %a, %struct.ss* %b)
+; CHECK-LABEL: define {{[^@]+}}@g
+; CHECK-SAME: (%struct.ss* [[A:%.*]], %struct.ss* [[B:%.*]]) unnamed_addr
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[C:%.*]] = icmp eq %struct.ss* [[A]], [[B]]
+; CHECK-NEXT: ret i1 [[C]]
+;
entry:
%c = icmp eq %struct.ss* %a, %b
ret i1 %c
}
define i32 @test() {
+; CHECK-LABEL: define {{[^@]+}}@test() local_unnamed_addr
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[S:%.*]] = alloca inalloca [[STRUCT_SS:%.*]]
+; CHECK-NEXT: [[C:%.*]] = call fastcc i1 @g(%struct.ss* [[S]], %struct.ss* [[S]])
+; CHECK-NEXT: ret i32 0
+;
entry:
%S = alloca inalloca %struct.ss
%c = call i1 @g(%struct.ss* %S, %struct.ss* inalloca %S)
-; CHECK: call fastcc i1 @g(%struct.ss* %S, %struct.ss* %S)
ret i32 0
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/invalidation.ll b/llvm/test/Transforms/ArgumentPromotion/invalidation.ll
index fd7168e35a36..d86c93b28ac3 100644
--- a/llvm/test/Transforms/ArgumentPromotion/invalidation.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/invalidation.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; Check that when argument promotion changes a function in some parent node of
; the call graph, any analyses that happened to be cached for that function are
; actually invalidated. We are using `demanded-bits` here because when printed
@@ -11,37 +12,37 @@
@G = constant i32 0
define internal i32 @a(i32* %x) {
-; CHECK-LABEL: define internal i32 @a(
-; CHECK-SAME: i32 %[[V:.*]]) {
+; CHECK-LABEL: define {{[^@]+}}@a
+; CHECK-SAME: (i32 [[X_VAL:%.*]])
; CHECK-NEXT: entry:
-; CHECK-NEXT: ret i32 %[[V]]
-; CHECK-NEXT: }
+; CHECK-NEXT: ret i32 [[X_VAL]]
+;
entry:
%v = load i32, i32* %x
ret i32 %v
}
define i32 @b() {
-; CHECK-LABEL: define i32 @b()
+; CHECK-LABEL: define {{[^@]+}}@b()
; CHECK-NEXT: entry:
-; CHECK-NEXT: %[[L:.*]] = load i32, i32* @G
-; CHECK-NEXT: %[[V:.*]] = call i32 @a(i32 %[[L]])
-; CHECK-NEXT: ret i32 %[[V]]
-; CHECK-NEXT: }
+; CHECK-NEXT: [[G_VAL:%.*]] = load i32, i32* @G
+; CHECK-NEXT: [[V:%.*]] = call i32 @a(i32 [[G_VAL]])
+; CHECK-NEXT: ret i32 [[V]]
+;
entry:
%v = call i32 @a(i32* @G)
ret i32 %v
}
define i32 @c() {
-; CHECK-LABEL: define i32 @c()
+; CHECK-LABEL: define {{[^@]+}}@c()
; CHECK-NEXT: entry:
-; CHECK-NEXT: %[[L:.*]] = load i32, i32* @G
-; CHECK-NEXT: %[[V1:.*]] = call i32 @a(i32 %[[L]])
-; CHECK-NEXT: %[[V2:.*]] = call i32 @b()
-; CHECK-NEXT: %[[RESULT:.*]] = add i32 %[[V1]], %[[V2]]
-; CHECK-NEXT: ret i32 %[[RESULT]]
-; CHECK-NEXT: }
+; CHECK-NEXT: [[G_VAL:%.*]] = load i32, i32* @G
+; CHECK-NEXT: [[V1:%.*]] = call i32 @a(i32 [[G_VAL]])
+; CHECK-NEXT: [[V2:%.*]] = call i32 @b()
+; CHECK-NEXT: [[RESULT:%.*]] = add i32 [[V1]], [[V2]]
+; CHECK-NEXT: ret i32 [[RESULT]]
+;
entry:
%v1 = call i32 @a(i32* @G)
%v2 = call i32 @b()
diff --git a/llvm/test/Transforms/ArgumentPromotion/musttail.ll b/llvm/test/Transforms/ArgumentPromotion/musttail.ll
index aa1871168693..29511d009df7 100644
--- a/llvm/test/Transforms/ArgumentPromotion/musttail.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/musttail.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; PR36543
@@ -5,8 +6,16 @@
%T = type { i32, i32, i32, i32 }
-; CHECK-LABEL: define internal i32 @test(%T* %p)
define internal i32 @test(%T* %p) {
+; CHECK-LABEL: define {{[^@]+}}@test
+; CHECK-SAME: (%T* [[P:%.*]])
+; CHECK-NEXT: [[A_GEP:%.*]] = getelementptr [[T:%.*]], %T* [[P]], i64 0, i32 3
+; CHECK-NEXT: [[B_GEP:%.*]] = getelementptr [[T]], %T* [[P]], i64 0, i32 2
+; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[A_GEP]]
+; CHECK-NEXT: [[B:%.*]] = load i32, i32* [[B_GEP]]
+; CHECK-NEXT: [[V:%.*]] = add i32 [[A]], [[B]]
+; CHECK-NEXT: ret i32 [[V]]
+;
%a.gep = getelementptr %T, %T* %p, i64 0, i32 3
%b.gep = getelementptr %T, %T* %p, i64 0, i32 2
%a = load i32, i32* %a.gep
@@ -15,8 +24,12 @@ define internal i32 @test(%T* %p) {
ret i32 %v
}
-; CHECK-LABEL: define i32 @caller(%T* %p)
define i32 @caller(%T* %p) {
+; CHECK-LABEL: define {{[^@]+}}@caller
+; CHECK-SAME: (%T* [[P:%.*]])
+; CHECK-NEXT: [[V:%.*]] = musttail call i32 @test(%T* [[P]])
+; CHECK-NEXT: ret i32 [[V]]
+;
%v = musttail call i32 @test(%T* %p)
ret i32 %v
}
@@ -24,11 +37,24 @@ define i32 @caller(%T* %p) {
; Don't promote arguments of musttail caller
define i32 @foo(%T* %p, i32 %v) {
+; CHECK-LABEL: define {{[^@]+}}@foo
+; CHECK-SAME: (%T* [[P:%.*]], i32 [[V:%.*]])
+; CHECK-NEXT: ret i32 0
+;
ret i32 0
}
-; CHECK-LABEL: define internal i32 @test2(%T* %p, i32 %p2)
define internal i32 @test2(%T* %p, i32 %p2) {
+; CHECK-LABEL: define {{[^@]+}}@test2
+; CHECK-SAME: (%T* [[P:%.*]], i32 [[P2:%.*]])
+; CHECK-NEXT: [[A_GEP:%.*]] = getelementptr [[T:%.*]], %T* [[P]], i64 0, i32 3
+; CHECK-NEXT: [[B_GEP:%.*]] = getelementptr [[T]], %T* [[P]], i64 0, i32 2
+; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[A_GEP]]
+; CHECK-NEXT: [[B:%.*]] = load i32, i32* [[B_GEP]]
+; CHECK-NEXT: [[V:%.*]] = add i32 [[A]], [[B]]
+; CHECK-NEXT: [[CA:%.*]] = musttail call i32 @foo(%T* undef, i32 [[V]])
+; CHECK-NEXT: ret i32 [[CA]]
+;
%a.gep = getelementptr %T, %T* %p, i64 0, i32 3
%b.gep = getelementptr %T, %T* %p, i64 0, i32 2
%a = load i32, i32* %a.gep
@@ -38,8 +64,12 @@ define internal i32 @test2(%T* %p, i32 %p2) {
ret i32 %ca
}
-; CHECK-LABEL: define i32 @caller2(%T* %g)
define i32 @caller2(%T* %g) {
+; CHECK-LABEL: define {{[^@]+}}@caller2
+; CHECK-SAME: (%T* [[G:%.*]])
+; CHECK-NEXT: [[V:%.*]] = call i32 @test2(%T* [[G]], i32 0)
+; CHECK-NEXT: ret i32 [[V]]
+;
%v = call i32 @test2(%T* %g, i32 0)
ret i32 %v
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/naked_functions.ll b/llvm/test/Transforms/ArgumentPromotion/naked_functions.ll
index 66600005c0ad..5560bdf56730 100644
--- a/llvm/test/Transforms/ArgumentPromotion/naked_functions.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/naked_functions.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; Don't promote paramaters of/arguments to naked functions
@@ -5,19 +6,29 @@
@g = common global i32 0, align 4
define i32 @bar() {
+; CHECK-LABEL: define {{[^@]+}}@bar()
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[CALL:%.*]] = call i32 @foo(i32* @g)
+; CHECK-NEXT: ret i32 [[CALL]]
+;
entry:
%call = call i32 @foo(i32* @g)
-; CHECK: %call = call i32 @foo(i32* @g)
ret i32 %call
}
define internal i32 @foo(i32*) #0 {
+; CHECK-LABEL: define {{[^@]+}}@foo
+; CHECK-SAME: (i32* [[TMP0:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
+; CHECK-NEXT: call void asm sideeffect "ldr r0, [r0] \0Abx lr \0A", ""()
+; CHECK-NEXT: unreachable
+;
entry:
%retval = alloca i32, align 4
call void asm sideeffect "ldr r0, [r0] \0Abx lr \0A", ""()
unreachable
}
-; CHECK: define internal i32 @foo(i32* %0)
attributes #0 = { naked }
diff --git a/llvm/test/Transforms/ArgumentPromotion/nonzero-address-spaces.ll b/llvm/test/Transforms/ArgumentPromotion/nonzero-address-spaces.ll
index 2ed362b873f8..083188395c7a 100644
--- a/llvm/test/Transforms/ArgumentPromotion/nonzero-address-spaces.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/nonzero-address-spaces.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; ArgumentPromotion should preserve the default function address space
@@ -8,14 +9,24 @@ target datalayout = "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8"
@g = common global i32 0, align 4
define i32 @bar() {
+; CHECK-LABEL: define {{[^@]+}}@bar() addrspace(1)
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[CALL:%.*]] = call addrspace(1) i32 @foo()
+; CHECK-NEXT: ret i32 [[CALL]]
+;
+
entry:
%call = call i32 @foo(i32* @g)
-; CHECK: %call = call addrspace(1) i32 @foo()
ret i32 %call
}
-; CHECK: define internal i32 @foo() addrspace(1)
define internal i32 @foo(i32*) {
+; CHECK-LABEL: define {{[^@]+}}@foo() addrspace(1)
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
+; CHECK-NEXT: call addrspace(0) void asm sideeffect "ldr r0, [r0] \0Abx lr \0A", ""()
+; CHECK-NEXT: unreachable
+;
entry:
%retval = alloca i32, align 4
call void asm sideeffect "ldr r0, [r0] \0Abx lr \0A", ""()
diff --git a/llvm/test/Transforms/ArgumentPromotion/pr27568.ll b/llvm/test/Transforms/ArgumentPromotion/pr27568.ll
index 711a71fed4f1..1cecbb0ff89e 100644
--- a/llvm/test/Transforms/ArgumentPromotion/pr27568.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/pr27568.ll
@@ -1,18 +1,35 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt -S -argpromotion < %s | FileCheck %s
; RUN: opt -S -passes=argpromotion < %s | FileCheck %s
; RUN: opt -S -debugify -o /dev/null < %s
target triple = "x86_64-pc-windows-msvc"
define internal void @callee(i8*) {
+; CHECK-LABEL: define {{[^@]+}}@callee()
+; CHECK-NEXT: entry:
+; CHECK-NEXT: call void @thunk()
+; CHECK-NEXT: ret void
+;
entry:
call void @thunk()
ret void
}
define void @test1() personality i32 (...)* @__CxxFrameHandler3 {
+; CHECK-LABEL: define {{[^@]+}}@test1() personality i32 (...)* @__CxxFrameHandler3
+; CHECK-NEXT: entry:
+; CHECK-NEXT: invoke void @thunk()
+; CHECK-NEXT: to label [[OUT:%.*]] unwind label [[CPAD:%.*]]
+; CHECK: out:
+; CHECK-NEXT: ret void
+; CHECK: cpad:
+; CHECK-NEXT: [[PAD:%.*]] = cleanuppad within none []
+; CHECK-NEXT: call void @callee() [ "funclet"(token [[PAD]]) ]
+; CHECK-NEXT: cleanupret from [[PAD]] unwind to caller
+;
entry:
invoke void @thunk()
- to label %out unwind label %cpad
+ to label %out unwind label %cpad
out:
ret void
@@ -23,10 +40,6 @@ cpad:
cleanupret from %pad unwind to caller
}
-; CHECK-LABEL: define void @test1(
-; CHECK: %[[pad:.*]] = cleanuppad within none []
-; CHECK-NEXT: call void @callee() [ "funclet"(token %[[pad]]) ]
-; CHECK-NEXT: cleanupret from %[[pad]] unwind to caller
declare void @thunk()
diff --git a/llvm/test/Transforms/ArgumentPromotion/pr3085.ll b/llvm/test/Transforms/ArgumentPromotion/pr3085.ll
index 3048c603deb3..d7eefcf7f92b 100644
--- a/llvm/test/Transforms/ArgumentPromotion/pr3085.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/pr3085.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -disable-output -loop-extract-single -loop-rotate -loop-reduce -argpromotion
; PR 3085
@@ -5,1940 +6,1940 @@
define fastcc %struct.Lit* @import_lit(i32 %lit) nounwind {
entry:
- br i1 false, label %bb, label %bb1
+ br i1 false, label %bb, label %bb1
bb: ; preds = %entry
- unreachable
+ unreachable
bb1: ; preds = %entry
- br label %bb3
+ br label %bb3
bb2: ; preds = %bb3
- br label %bb3
+ br label %bb3
bb3: ; preds = %bb2, %bb1
- br i1 false, label %bb2, label %bb6
+ br i1 false, label %bb2, label %bb6
bb6: ; preds = %bb3
- br i1 false, label %bb.i.i, label %bb1.i.i
+ br i1 false, label %bb.i.i, label %bb1.i.i
bb.i.i: ; preds = %bb6
- br label %int2lit.exit
+ br label %int2lit.exit
bb1.i.i: ; preds = %bb6
- br label %int2lit.exit
+ br label %int2lit.exit
int2lit.exit: ; preds = %bb1.i.i, %bb.i.i
- ret %struct.Lit* null
+ ret %struct.Lit* null
}
define fastcc i32 @picosat_main(i32 %argc, i8** %argv) nounwind {
entry:
- br i1 false, label %bb.i, label %picosat_time_stamp.exit
+ br i1 false, label %bb.i, label %picosat_time_stamp.exit
bb.i: ; preds = %entry
- br label %picosat_time_stamp.exit
+ br label %picosat_time_stamp.exit
picosat_time_stamp.exit: ; preds = %bb.i, %entry
- br label %bb108
+ br label %bb108
bb: ; preds = %bb108
- br i1 false, label %bb1, label %bb2
+ br i1 false, label %bb1, label %bb2
bb1: ; preds = %bb
- br label %bb106
+ br label %bb106
bb2: ; preds = %bb
- br i1 false, label %bb3, label %bb4
+ br i1 false, label %bb3, label %bb4
bb3: ; preds = %bb2
- br label %bb106
+ br label %bb106
bb4: ; preds = %bb2
- br i1 false, label %bb5, label %bb6
+ br i1 false, label %bb5, label %bb6
bb5: ; preds = %bb4
- br label %bb106
+ br label %bb106
bb6: ; preds = %bb4
- br i1 false, label %bb7, label %bb8
+ br i1 false, label %bb7, label %bb8
bb7: ; preds = %bb6
- br label %bb106
+ br label %bb106
bb8: ; preds = %bb6
- br i1 false, label %bb106, label %bb10
+ br i1 false, label %bb106, label %bb10
bb10: ; preds = %bb8
- br i1 false, label %bb106, label %bb12
+ br i1 false, label %bb106, label %bb12
bb12: ; preds = %bb10
- br i1 false, label %bb106, label %bb14
+ br i1 false, label %bb106, label %bb14
bb14: ; preds = %bb12
- br i1 false, label %bb15, label %bb19
+ br i1 false, label %bb15, label %bb19
bb15: ; preds = %bb14
- br i1 false, label %bb16, label %bb17
+ br i1 false, label %bb16, label %bb17
bb16: ; preds = %bb15
- br label %bb106
+ br label %bb106
bb17: ; preds = %bb15
- br label %bb106
+ br label %bb106
bb19: ; preds = %bb14
- br i1 false, label %bb20, label %bb28
+ br i1 false, label %bb20, label %bb28
bb20: ; preds = %bb19
- br i1 false, label %bb21, label %bb22
+ br i1 false, label %bb21, label %bb22
bb21: ; preds = %bb20
- br label %bb106
+ br label %bb106
bb22: ; preds = %bb20
- br i1 false, label %bb106, label %bb24
+ br i1 false, label %bb106, label %bb24
bb24: ; preds = %bb22
- br i1 false, label %bb106, label %bb26
+ br i1 false, label %bb106, label %bb26
bb26: ; preds = %bb24
- br label %bb106
+ br label %bb106
bb28: ; preds = %bb19
- br i1 false, label %bb29, label %bb35
+ br i1 false, label %bb29, label %bb35
bb29: ; preds = %bb28
- br i1 false, label %bb30, label %bb31
+ br i1 false, label %bb30, label %bb31
bb30: ; preds = %bb29
- br label %bb106
+ br label %bb106
bb31: ; preds = %bb29
- br i1 false, label %bb32, label %bb33
+ br i1 false, label %bb32, label %bb33
bb32: ; preds = %bb31
- br label %bb106
+ br label %bb106
bb33: ; preds = %bb31
- br label %bb106
+ br label %bb106
bb35: ; preds = %bb28
- br i1 false, label %bb36, label %bb40
+ br i1 false, label %bb36, label %bb40
bb36: ; preds = %bb35
- br i1 false, label %bb37, label %bb38
+ br i1 false, label %bb37, label %bb38
bb37: ; preds = %bb36
- br label %bb106
+ br label %bb106
bb38: ; preds = %bb36
- br label %bb106
+ br label %bb106
bb40: ; preds = %bb35
- br i1 false, label %bb41, label %bb49
+ br i1 false, label %bb41, label %bb49
bb41: ; preds = %bb40
- br i1 false, label %bb43, label %bb42
+ br i1 false, label %bb43, label %bb42
bb42: ; preds = %bb41
- br label %bb106
+ br label %bb106
bb43: ; preds = %bb41
- br i1 false, label %bb44, label %bb45
+ br i1 false, label %bb44, label %bb45
bb44: ; preds = %bb43
- br label %bb106
+ br label %bb106
bb45: ; preds = %bb43
- br i1 false, label %bb46, label %bb47
+ br i1 false, label %bb46, label %bb47
bb46: ; preds = %bb45
- br label %bb106
+ br label %bb106
bb47: ; preds = %bb45
- br label %bb106
+ br label %bb106
bb49: ; preds = %bb40
- br i1 false, label %bb50, label %bb56
+ br i1 false, label %bb50, label %bb56
bb50: ; preds = %bb49
- br i1 false, label %bb52, label %bb51
+ br i1 false, label %bb52, label %bb51
bb51: ; preds = %bb50
- br label %bb106
+ br label %bb106
bb52: ; preds = %bb50
- br i1 false, label %bb53, label %bb54
+ br i1 false, label %bb53, label %bb54
bb53: ; preds = %bb52
- br label %bb106
+ br label %bb106
bb54: ; preds = %bb52
- br label %bb106
+ br label %bb106
bb56: ; preds = %bb49
- br i1 false, label %bb57, label %bb63
+ br i1 false, label %bb57, label %bb63
bb57: ; preds = %bb56
- br i1 false, label %bb59, label %bb58
+ br i1 false, label %bb59, label %bb58
bb58: ; preds = %bb57
- br label %bb106
+ br label %bb106
bb59: ; preds = %bb57
- br i1 false, label %bb60, label %bb61
+ br i1 false, label %bb60, label %bb61
bb60: ; preds = %bb59
- br label %bb106
+ br label %bb106
bb61: ; preds = %bb59
- br label %bb106
+ br label %bb106
bb63: ; preds = %bb56
- br i1 false, label %bb64, label %bb70
+ br i1 false, label %bb64, label %bb70
bb64: ; preds = %bb63
- br i1 false, label %bb66, label %bb65
+ br i1 false, label %bb66, label %bb65
bb65: ; preds = %bb64
- br label %bb106
+ br label %bb106
bb66: ; preds = %bb64
- br i1 false, label %bb67, label %bb68
+ br i1 false, label %bb67, label %bb68
bb67: ; preds = %bb66
- br label %bb106
+ br label %bb106
bb68: ; preds = %bb66
- br label %bb106
+ br label %bb106
bb70: ; preds = %bb63
- br i1 false, label %bb71, label %bb79
+ br i1 false, label %bb71, label %bb79
bb71: ; preds = %bb70
- br i1 false, label %bb73, label %bb72
+ br i1 false, label %bb73, label %bb72
bb72: ; preds = %bb71
- br label %bb106
+ br label %bb106
bb73: ; preds = %bb71
- br i1 false, label %bb74, label %bb75
+ br i1 false, label %bb74, label %bb75
bb74: ; preds = %bb73
- br label %bb106
+ br label %bb106
bb75: ; preds = %bb73
- br i1 false, label %bb76, label %bb77
+ br i1 false, label %bb76, label %bb77
bb76: ; preds = %bb75
- br label %bb106
+ br label %bb106
bb77: ; preds = %bb75
- br label %bb106
+ br label %bb106
bb79: ; preds = %bb70
- br i1 false, label %bb80, label %bb86
+ br i1 false, label %bb80, label %bb86
bb80: ; preds = %bb79
- br i1 false, label %bb82, label %bb81
+ br i1 false, label %bb82, label %bb81
bb81: ; preds = %bb80
- br label %bb106
+ br label %bb106
bb82: ; preds = %bb80
- br i1 false, label %bb83, label %bb84
+ br i1 false, label %bb83, label %bb84
bb83: ; preds = %bb82
- br label %bb106
+ br label %bb106
bb84: ; preds = %bb82
- br label %bb106
+ br label %bb106
bb86: ; preds = %bb79
- br i1 false, label %bb87, label %bb93
+ br i1 false, label %bb87, label %bb93
bb87: ; preds = %bb86
- br i1 false, label %bb89, label %bb88
+ br i1 false, label %bb89, label %bb88
bb88: ; preds = %bb87
- br label %bb106
+ br label %bb106
bb89: ; preds = %bb87
- br i1 false, label %bb90, label %bb91
+ br i1 false, label %bb90, label %bb91
bb90: ; preds = %bb89
- br label %bb106
+ br label %bb106
bb91: ; preds = %bb89
- br label %bb106
+ br label %bb106
bb93: ; preds = %bb86
- br i1 false, label %bb94, label %bb95
+ br i1 false, label %bb94, label %bb95
bb94: ; preds = %bb93
- br label %bb106
+ br label %bb106
bb95: ; preds = %bb93
- br i1 false, label %bb98, label %bb97
+ br i1 false, label %bb98, label %bb97
bb97: ; preds = %bb95
- br label %bb106
+ br label %bb106
bb98: ; preds = %bb95
- br i1 false, label %bb103, label %bb1.i24
+ br i1 false, label %bb103, label %bb1.i24
bb1.i24: ; preds = %bb98
- br i1 false, label %bb99, label %bb103
+ br i1 false, label %bb99, label %bb103
bb99: ; preds = %bb1.i24
- br i1 false, label %bb101, label %bb100
+ br i1 false, label %bb101, label %bb100
bb100: ; preds = %bb99
- br label %bb102
+ br label %bb102
bb101: ; preds = %bb99
- br label %bb102
+ br label %bb102
bb102: ; preds = %bb101, %bb100
- br label %bb106
+ br label %bb106
bb103: ; preds = %bb1.i24, %bb98
- br i1 false, label %bb104, label %bb105
+ br i1 false, label %bb104, label %bb105
bb104: ; preds = %bb103
- br label %bb106
+ br label %bb106
bb105: ; preds = %bb103
- br label %bb106
+ br label %bb106
bb106: ; preds = %bb105, %bb104, %bb102, %bb97, %bb94, %bb91, %bb90, %bb88, %bb84, %bb83, %bb81, %bb77, %bb76, %bb74, %bb72, %bb68, %bb67, %bb65, %bb61, %bb60, %bb58, %bb54, %bb53, %bb51, %bb47, %bb46, %bb44, %bb42, %bb38, %bb37, %bb33, %bb32, %bb30, %bb26, %bb24, %bb22, %bb21, %bb17, %bb16, %bb12, %bb10, %bb8, %bb7, %bb5, %bb3, %bb1
- br i1 false, label %bb108, label %bb110
+ br i1 false, label %bb108, label %bb110
bb108: ; preds = %bb106, %picosat_time_stamp.exit
- br i1 false, label %bb, label %bb110
+ br i1 false, label %bb, label %bb110
bb110: ; preds = %bb108, %bb106
- br i1 false, label %bb112, label %bb171
+ br i1 false, label %bb112, label %bb171
bb112: ; preds = %bb110
- br i1 false, label %bb114, label %bb113
+ br i1 false, label %bb114, label %bb113
bb113: ; preds = %bb112
- br label %bb114
+ br label %bb114
bb114: ; preds = %bb113, %bb112
- br i1 false, label %bb.i.i35, label %bb1.i.i36
+ br i1 false, label %bb.i.i35, label %bb1.i.i36
bb.i.i35: ; preds = %bb114
- unreachable
+ unreachable
bb1.i.i36: ; preds = %bb114
- br i1 false, label %bb5.i.i.i41, label %bb6.i.i.i42
+ br i1 false, label %bb5.i.i.i41, label %bb6.i.i.i42
bb5.i.i.i41: ; preds = %bb1.i.i36
- unreachable
+ unreachable
bb6.i.i.i42: ; preds = %bb1.i.i36
- br i1 false, label %bb7.i.i.i43, label %bb8.i.i.i44
+ br i1 false, label %bb7.i.i.i43, label %bb8.i.i.i44
bb7.i.i.i43: ; preds = %bb6.i.i.i42
- br label %bb8.i.i.i44
+ br label %bb8.i.i.i44
bb8.i.i.i44: ; preds = %bb7.i.i.i43, %bb6.i.i.i42
- br i1 false, label %picosat_init.exit, label %bb14.i.i
+ br i1 false, label %picosat_init.exit, label %bb14.i.i
bb14.i.i: ; preds = %bb8.i.i.i44
- br label %picosat_init.exit
+ br label %picosat_init.exit
picosat_init.exit: ; preds = %bb14.i.i, %bb8.i.i.i44
- br i1 false, label %bb116, label %bb115
+ br i1 false, label %bb116, label %bb115
bb115: ; preds = %picosat_init.exit
- br label %bb116
+ br label %bb116
bb116: ; preds = %bb115, %picosat_init.exit
- br i1 false, label %bb119, label %bb118
+ br i1 false, label %bb119, label %bb118
bb118: ; preds = %bb116
- br label %bb119
+ br label %bb119
bb119: ; preds = %bb118, %bb116
- br i1 false, label %bb121, label %bb120
+ br i1 false, label %bb121, label %bb120
bb120: ; preds = %bb119
- br label %bb121
+ br label %bb121
bb121: ; preds = %bb120, %bb119
- br i1 false, label %bb126, label %bb122
+ br i1 false, label %bb126, label %bb122
bb122: ; preds = %bb121
- br label %bb126
+ br label %bb126
bb126: ; preds = %bb122, %bb121
- br i1 false, label %bb128, label %bb127
+ br i1 false, label %bb128, label %bb127
bb127: ; preds = %bb126
- br label %bb128
+ br label %bb128
bb128: ; preds = %bb127, %bb126
- br label %SKIP_COMMENTS.i
+ br label %SKIP_COMMENTS.i
SKIP_COMMENTS.i.loopexit: ; preds = %bb.i149, %bb.i149
- br label %SKIP_COMMENTS.i.backedge
+ br label %SKIP_COMMENTS.i.backedge
SKIP_COMMENTS.i: ; preds = %SKIP_COMMENTS.i.backedge, %bb128
- br i1 false, label %bb.i149.preheader, label %bb3.i152
+ br i1 false, label %bb.i149.preheader, label %bb3.i152
bb.i149.preheader: ; preds = %SKIP_COMMENTS.i
- br label %bb.i149
+ br label %bb.i149
bb.i149: ; preds = %bb.i149, %bb.i149.preheader
- switch i32 0, label %bb.i149 [
- i32 -1, label %SKIP_COMMENTS.i.loopexit
- i32 10, label %SKIP_COMMENTS.i.loopexit
- ]
+ switch i32 0, label %bb.i149 [
+ i32 -1, label %SKIP_COMMENTS.i.loopexit
+ i32 10, label %SKIP_COMMENTS.i.loopexit
+ ]
bb3.i152: ; preds = %SKIP_COMMENTS.i
- br i1 false, label %bb4.i153, label %SKIP_COMMENTS.i.backedge
+ br i1 false, label %bb4.i153, label %SKIP_COMMENTS.i.backedge
SKIP_COMMENTS.i.backedge: ; preds = %bb3.i152, %SKIP_COMMENTS.i.loopexit
- br label %SKIP_COMMENTS.i
+ br label %SKIP_COMMENTS.i
bb4.i153: ; preds = %bb3.i152
- br i1 false, label %bb5.i154, label %bb129
+ br i1 false, label %bb5.i154, label %bb129
bb5.i154: ; preds = %bb4.i153
- br i1 false, label %bb129, label %bb6.i155.preheader
+ br i1 false, label %bb129, label %bb6.i155.preheader
bb6.i155.preheader: ; preds = %bb5.i154
- br label %bb6.i155
+ br label %bb6.i155
bb6.i155: ; preds = %bb6.i155, %bb6.i155.preheader
- br i1 false, label %bb7.i156, label %bb6.i155
+ br i1 false, label %bb7.i156, label %bb6.i155
bb7.i156: ; preds = %bb6.i155
- br i1 false, label %bb8.i157, label %bb129
+ br i1 false, label %bb8.i157, label %bb129
bb8.i157: ; preds = %bb7.i156
- br i1 false, label %bb9.i158, label %bb129
+ br i1 false, label %bb9.i158, label %bb129
bb9.i158: ; preds = %bb8.i157
- br i1 false, label %bb10.i159, label %bb129
+ br i1 false, label %bb10.i159, label %bb129
bb10.i159: ; preds = %bb9.i158
- br i1 false, label %bb129, label %bb11.i160.preheader
+ br i1 false, label %bb129, label %bb11.i160.preheader
bb11.i160.preheader: ; preds = %bb10.i159
- br label %bb11.i160
+ br label %bb11.i160
bb11.i160: ; preds = %bb11.i160, %bb11.i160.preheader
- br i1 false, label %bb12.i161, label %bb11.i160
+ br i1 false, label %bb12.i161, label %bb11.i160
bb12.i161: ; preds = %bb11.i160
- br i1 false, label %bb129, label %bb15.i165.preheader
+ br i1 false, label %bb129, label %bb15.i165.preheader
bb15.i165.preheader: ; preds = %bb12.i161
- br label %bb15.i165
+ br label %bb15.i165
bb14.i163: ; preds = %bb15.i165
- br label %bb15.i165
+ br label %bb15.i165
bb15.i165: ; preds = %bb14.i163, %bb15.i165.preheader
- br i1 false, label %bb16.i166, label %bb14.i163
+ br i1 false, label %bb16.i166, label %bb14.i163
bb16.i166: ; preds = %bb15.i165
- br i1 false, label %bb129, label %bb17.i167.preheader
+ br i1 false, label %bb129, label %bb17.i167.preheader
bb17.i167.preheader: ; preds = %bb16.i166
- br label %bb17.i167
+ br label %bb17.i167
bb17.i167: ; preds = %bb17.i167, %bb17.i167.preheader
- br i1 false, label %bb18.i168, label %bb17.i167
+ br i1 false, label %bb18.i168, label %bb17.i167
bb18.i168: ; preds = %bb17.i167
- br i1 false, label %bb129, label %bb21.i172.preheader
+ br i1 false, label %bb129, label %bb21.i172.preheader
bb21.i172.preheader: ; preds = %bb18.i168
- br label %bb21.i172
+ br label %bb21.i172
bb20.i170: ; preds = %bb21.i172
- br label %bb21.i172
+ br label %bb21.i172
bb21.i172: ; preds = %bb20.i170, %bb21.i172.preheader
- br i1 false, label %bb22.i173, label %bb20.i170
+ br i1 false, label %bb22.i173, label %bb20.i170
bb22.i173: ; preds = %bb21.i172
- br i1 false, label %bb24.i175, label %bb129
+ br i1 false, label %bb24.i175, label %bb129
bb24.i175: ; preds = %bb22.i173
- br i1 false, label %bb26.i180, label %bb25.i176
+ br i1 false, label %bb26.i180, label %bb25.i176
bb25.i176: ; preds = %bb24.i175
- br label %bb26.i180
+ br label %bb26.i180
bb26.i180: ; preds = %bb25.i176, %bb24.i175
- br i1 false, label %bb.i.i181, label %bb3.i.i184.preheader
+ br i1 false, label %bb.i.i181, label %bb3.i.i184.preheader
bb.i.i181: ; preds = %bb26.i180
- br label %bb3.i.i184.preheader
+ br label %bb3.i.i184.preheader
bb3.i.i184.preheader: ; preds = %bb.i.i181, %bb26.i180
- br label %bb3.i.i184
+ br label %bb3.i.i184
bb2.i.i183: ; preds = %bb3.i.i184
- br label %bb3.i.i184
+ br label %bb3.i.i184
bb3.i.i184: ; preds = %bb2.i.i183, %bb3.i.i184.preheader
- br i1 false, label %bb2.i.i183, label %bb4.i.i185
+ br i1 false, label %bb2.i.i183, label %bb4.i.i185
bb4.i.i185: ; preds = %bb3.i.i184
- br i1 false, label %bb.i.i.i186, label %picosat_adjust.exit.i
+ br i1 false, label %bb.i.i.i186, label %picosat_adjust.exit.i
bb.i.i.i186: ; preds = %bb4.i.i185
- br label %picosat_adjust.exit.i
+ br label %picosat_adjust.exit.i
picosat_adjust.exit.i: ; preds = %bb.i.i.i186, %bb4.i.i185
- br i1 false, label %bb28.i188, label %bb27.i187
+ br i1 false, label %bb28.i188, label %bb27.i187
bb27.i187: ; preds = %picosat_adjust.exit.i
- br label %bb28.i188
+ br label %bb28.i188
bb28.i188: ; preds = %bb27.i187, %picosat_adjust.exit.i
- br label %READ_LITERAL.i.outer
+ br label %READ_LITERAL.i.outer
READ_LITERAL.i.outer: ; preds = %READ_LITERAL.i.outer.backedge, %bb28.i188
- br label %READ_LITERAL.i
+ br label %READ_LITERAL.i
READ_LITERAL.i.loopexit: ; preds = %bb29.i189, %bb29.i189
- br label %READ_LITERAL.i.backedge
+ br label %READ_LITERAL.i.backedge
READ_LITERAL.i: ; preds = %READ_LITERAL.i.backedge, %READ_LITERAL.i.outer
- switch i32 0, label %bb39.i199 [
- i32 99, label %bb29.i189.preheader
- i32 -1, label %bb33.i193
- ]
+ switch i32 0, label %bb39.i199 [
+ i32 99, label %bb29.i189.preheader
+ i32 -1, label %bb33.i193
+ ]
bb29.i189.preheader: ; preds = %READ_LITERAL.i
- br label %bb29.i189
+ br label %bb29.i189
bb29.i189: ; preds = %bb29.i189, %bb29.i189.preheader
- switch i32 0, label %bb29.i189 [
- i32 -1, label %READ_LITERAL.i.loopexit
- i32 10, label %READ_LITERAL.i.loopexit
- ]
+ switch i32 0, label %bb29.i189 [
+ i32 -1, label %READ_LITERAL.i.loopexit
+ i32 10, label %READ_LITERAL.i.loopexit
+ ]
bb33.i193: ; preds = %READ_LITERAL.i
- br i1 false, label %bb35.i195, label %parse.exit
+ br i1 false, label %bb35.i195, label %parse.exit
bb35.i195: ; preds = %bb33.i193
- br i1 false, label %bb38.i198, label %parse.exit
+ br i1 false, label %bb38.i198, label %parse.exit
bb38.i198: ; preds = %bb35.i195
- br label %parse.exit
+ br label %parse.exit
bb39.i199: ; preds = %READ_LITERAL.i
- br i1 false, label %bb40.i200, label %READ_LITERAL.i.backedge
+ br i1 false, label %bb40.i200, label %READ_LITERAL.i.backedge
READ_LITERAL.i.backedge: ; preds = %bb39.i199, %READ_LITERAL.i.loopexit
- br label %READ_LITERAL.i
+ br label %READ_LITERAL.i
bb40.i200: ; preds = %bb39.i199
- br i1 false, label %bb41.i201, label %bb42.i202
+ br i1 false, label %bb41.i201, label %bb42.i202
bb41.i201: ; preds = %bb40.i200
- br label %bb42.i202
+ br label %bb42.i202
bb42.i202: ; preds = %bb41.i201, %bb40.i200
- br i1 false, label %parse.exit.loopexit, label %bb46.i.preheader
+ br i1 false, label %parse.exit.loopexit, label %bb46.i.preheader
bb46.i.preheader: ; preds = %bb42.i202
- br label %bb46.i
+ br label %bb46.i
bb45.i: ; preds = %bb46.i
- br label %bb46.i
+ br label %bb46.i
bb46.i: ; preds = %bb45.i, %bb46.i.preheader
- br i1 false, label %bb47.i, label %bb45.i
+ br i1 false, label %bb47.i, label %bb45.i
bb47.i: ; preds = %bb46.i
- br i1 false, label %parse.exit.loopexit, label %bb50.i
+ br i1 false, label %parse.exit.loopexit, label %bb50.i
bb50.i: ; preds = %bb47.i
- br i1 false, label %bb55.i, label %bb51.i
+ br i1 false, label %bb55.i, label %bb51.i
bb51.i: ; preds = %bb50.i
- br i1 false, label %parse.exit.loopexit, label %bb54.i
+ br i1 false, label %parse.exit.loopexit, label %bb54.i
bb54.i: ; preds = %bb51.i
- br label %bb56.i
+ br label %bb56.i
bb55.i: ; preds = %bb50.i
- br label %bb56.i
+ br label %bb56.i
bb56.i: ; preds = %bb55.i, %bb54.i
- br i1 false, label %bb3.i11.i, label %bb.i8.i
+ br i1 false, label %bb3.i11.i, label %bb.i8.i
bb.i8.i: ; preds = %bb56.i
- br i1 false, label %bb1.i9.i, label %bb3.i11.i
+ br i1 false, label %bb1.i9.i, label %bb3.i11.i
bb1.i9.i: ; preds = %bb.i8.i
- br i1 false, label %bb3.i11.i, label %bb2.i10.i
+ br i1 false, label %bb3.i11.i, label %bb2.i10.i
bb2.i10.i: ; preds = %bb1.i9.i
- unreachable
+ unreachable
bb3.i11.i: ; preds = %bb1.i9.i, %bb.i8.i, %bb56.i
- br i1 false, label %bb7.i.i208, label %bb6.i.i207
+ br i1 false, label %bb7.i.i208, label %bb6.i.i207
bb6.i.i207: ; preds = %bb3.i11.i
- br label %READ_LITERAL.i.outer.backedge
+ br label %READ_LITERAL.i.outer.backedge
bb7.i.i208: ; preds = %bb3.i11.i
- br i1 false, label %bb53.i.i.i.i.preheader, label %bb.i.i.i.i210.preheader
+ br i1 false, label %bb53.i.i.i.i.preheader, label %bb.i.i.i.i210.preheader
bb.i.i.i.i210.preheader: ; preds = %bb7.i.i208
- br label %bb.i.i.i.i210
+ br label %bb.i.i.i.i210
bb.i.i.i.i210: ; preds = %bb.i.i.i.i210.backedge, %bb.i.i.i.i210.preheader
- br i1 false, label %bb17.i.i.i.i, label %bb18.i.i.i.i
+ br i1 false, label %bb17.i.i.i.i, label %bb18.i.i.i.i
bb17.i.i.i.i: ; preds = %bb.i.i.i.i210
- br label %bb18.i.i.i.i
+ br label %bb18.i.i.i.i
bb18.i.i.i.i: ; preds = %bb17.i.i.i.i, %bb.i.i.i.i210
- br i1 false, label %bb19.i.i.i.i, label %bb20.i.i.i.i
+ br i1 false, label %bb19.i.i.i.i, label %bb20.i.i.i.i
bb19.i.i.i.i: ; preds = %bb18.i.i.i.i
- br label %bb20.i.i.i.i
+ br label %bb20.i.i.i.i
bb20.i.i.i.i: ; preds = %bb19.i.i.i.i, %bb18.i.i.i.i
- br i1 false, label %bb21.i.i.i.i, label %bb22.i.i.i.i
+ br i1 false, label %bb21.i.i.i.i, label %bb22.i.i.i.i
bb21.i.i.i.i: ; preds = %bb20.i.i.i.i
- br label %bb22.i.i.i.i
+ br label %bb22.i.i.i.i
bb22.i.i.i.i: ; preds = %bb21.i.i.i.i, %bb20.i.i.i.i
- br label %bb23.i.i.i.i.outer
+ br label %bb23.i.i.i.i.outer
bb23.i.i.i.i.outer: ; preds = %bb28.i.i.i.i, %bb22.i.i.i.i
- br label %bb23.i.i.i.i
+ br label %bb23.i.i.i.i
bb23.i.i.i.i: ; preds = %bb23.i.i.i.i, %bb23.i.i.i.i.outer
- br i1 false, label %bb23.i.i.i.i, label %bb26.i.i.i.i.preheader
+ br i1 false, label %bb23.i.i.i.i, label %bb26.i.i.i.i.preheader
bb26.i.i.i.i.preheader: ; preds = %bb23.i.i.i.i
- br label %bb26.i.i.i.i
+ br label %bb26.i.i.i.i
bb26.i.i.i.i: ; preds = %bb26.i.i.i.i, %bb26.i.i.i.i.preheader
- br i1 false, label %bb27.i.i.i.i, label %bb26.i.i.i.i
+ br i1 false, label %bb27.i.i.i.i, label %bb26.i.i.i.i
bb27.i.i.i.i: ; preds = %bb26.i.i.i.i
- br i1 false, label %bb28.i.i.i.i, label %bb29.i.i.i.i
+ br i1 false, label %bb28.i.i.i.i, label %bb29.i.i.i.i
bb28.i.i.i.i: ; preds = %bb27.i.i.i.i
- br label %bb23.i.i.i.i.outer
+ br label %bb23.i.i.i.i.outer
bb29.i.i.i.i: ; preds = %bb27.i.i.i.i
- br i1 false, label %bb33.i.i.i.i, label %bb44.i.i.i.i
+ br i1 false, label %bb33.i.i.i.i, label %bb44.i.i.i.i
bb33.i.i.i.i: ; preds = %bb29.i.i.i.i
- br i1 false, label %bb34.i.i.i.i, label %bb38.i.i.i.i
+ br i1 false, label %bb34.i.i.i.i, label %bb38.i.i.i.i
bb34.i.i.i.i: ; preds = %bb33.i.i.i.i
- br i1 false, label %bb37.i.i.i.i, label %bb35.i.i.i.i
+ br i1 false, label %bb37.i.i.i.i, label %bb35.i.i.i.i
bb35.i.i.i.i: ; preds = %bb34.i.i.i.i
- br label %bb37.i.i.i.i
+ br label %bb37.i.i.i.i
bb37.i.i.i.i: ; preds = %bb35.i.i.i.i, %bb34.i.i.i.i
- br label %bb38.i.i.i.i
+ br label %bb38.i.i.i.i
bb38.i.i.i.i: ; preds = %bb37.i.i.i.i, %bb33.i.i.i.i
- br i1 false, label %bb39.i.i.i.i, label %bb43.i.i.i.i
+ br i1 false, label %bb39.i.i.i.i, label %bb43.i.i.i.i
bb39.i.i.i.i: ; preds = %bb38.i.i.i.i
- br i1 false, label %bb42.i.i.i.i, label %bb40.i.i.i.i
+ br i1 false, label %bb42.i.i.i.i, label %bb40.i.i.i.i
bb40.i.i.i.i: ; preds = %bb39.i.i.i.i
- br label %bb42.i.i.i.i
+ br label %bb42.i.i.i.i
bb42.i.i.i.i: ; preds = %bb40.i.i.i.i, %bb39.i.i.i.i
- br label %bb43.i.i.i.i
+ br label %bb43.i.i.i.i
bb43.i.i.i.i: ; preds = %bb42.i.i.i.i, %bb38.i.i.i.i
- br label %bb.i.i.i.i210.backedge
+ br label %bb.i.i.i.i210.backedge
bb.i.i.i.i210.backedge: ; preds = %bb47.i.i.i.i, %bb44.i.i.i.i, %bb43.i.i.i.i
- br label %bb.i.i.i.i210
+ br label %bb.i.i.i.i210
bb44.i.i.i.i: ; preds = %bb29.i.i.i.i
- br i1 false, label %bb.i.i.i.i210.backedge, label %bb46.i.i.i.i
+ br i1 false, label %bb.i.i.i.i210.backedge, label %bb46.i.i.i.i
bb46.i.i.i.i: ; preds = %bb44.i.i.i.i
- br i1 false, label %bb47.i.i.i.i, label %bb53.i.i.i.i.preheader.loopexit
+ br i1 false, label %bb47.i.i.i.i, label %bb53.i.i.i.i.preheader.loopexit
bb53.i.i.i.i.preheader.loopexit: ; preds = %bb46.i.i.i.i
- br label %bb53.i.i.i.i.preheader
+ br label %bb53.i.i.i.i.preheader
bb53.i.i.i.i.preheader: ; preds = %bb53.i.i.i.i.preheader.loopexit, %bb7.i.i208
- br label %bb53.i.i.i.i
+ br label %bb53.i.i.i.i
bb47.i.i.i.i: ; preds = %bb46.i.i.i.i
- br label %bb.i.i.i.i210.backedge
+ br label %bb.i.i.i.i210.backedge
bb50.i.i.i.i: ; preds = %bb53.i.i.i.i
- br i1 false, label %bb51.i.i.i.i, label %bb52.i.i.i.i
+ br i1 false, label %bb51.i.i.i.i, label %bb52.i.i.i.i
bb51.i.i.i.i: ; preds = %bb50.i.i.i.i
- br label %bb52.i.i.i.i
+ br label %bb52.i.i.i.i
bb52.i.i.i.i: ; preds = %bb51.i.i.i.i, %bb50.i.i.i.i
- br label %bb53.i.i.i.i
+ br label %bb53.i.i.i.i
bb53.i.i.i.i: ; preds = %bb52.i.i.i.i, %bb53.i.i.i.i.preheader
- br i1 false, label %bb50.i.i.i.i, label %bb59.i.i.i.i.preheader
+ br i1 false, label %bb50.i.i.i.i, label %bb59.i.i.i.i.preheader
bb59.i.i.i.i.preheader: ; preds = %bb53.i.i.i.i
- br label %bb59.i.i.i.i
+ br label %bb59.i.i.i.i
bb55.i.i.i.i: ; preds = %bb59.i.i.i.i
- br label %bb57.i.i.i.i
+ br label %bb57.i.i.i.i
bb56.i.i.i.i: ; preds = %bb57.i.i.i.i
- br label %bb57.i.i.i.i
+ br label %bb57.i.i.i.i
bb57.i.i.i.i: ; preds = %bb56.i.i.i.i, %bb55.i.i.i.i
- br i1 false, label %bb56.i.i.i.i, label %bb58.i.i.i.i
+ br i1 false, label %bb56.i.i.i.i, label %bb58.i.i.i.i
bb58.i.i.i.i: ; preds = %bb57.i.i.i.i
- br label %bb59.i.i.i.i
+ br label %bb59.i.i.i.i
bb59.i.i.i.i: ; preds = %bb58.i.i.i.i, %bb59.i.i.i.i.preheader
- br i1 false, label %bb60.i.i.i.i, label %bb55.i.i.i.i
+ br i1 false, label %bb60.i.i.i.i, label %bb55.i.i.i.i
bb60.i.i.i.i: ; preds = %bb59.i.i.i.i
- br label %bb69.i.i.i.i
+ br label %bb69.i.i.i.i
bb61.i.i.i.i: ; preds = %bb69.i.i.i.i
- br i1 false, label %bb68.i.i.i.i, label %bb62.i.i.i.i
+ br i1 false, label %bb68.i.i.i.i, label %bb62.i.i.i.i
bb62.i.i.i.i: ; preds = %bb61.i.i.i.i
- br i1 false, label %bb63.i.i.i.i, label %bb65.i.i.i.i
+ br i1 false, label %bb63.i.i.i.i, label %bb65.i.i.i.i
bb63.i.i.i.i: ; preds = %bb62.i.i.i.i
- br i1 false, label %bb.i.i12.i, label %bb65.i.i.i.i
+ br i1 false, label %bb.i.i12.i, label %bb65.i.i.i.i
bb65.i.i.i.i: ; preds = %bb63.i.i.i.i, %bb62.i.i.i.i
- br i1 false, label %bb.i.i12.i, label %bb67.i.i.i.i
+ br i1 false, label %bb.i.i12.i, label %bb67.i.i.i.i
bb67.i.i.i.i: ; preds = %bb65.i.i.i.i
- br label %bb68.i.i.i.i
+ br label %bb68.i.i.i.i
bb68.i.i.i.i: ; preds = %bb67.i.i.i.i, %bb61.i.i.i.i
- br label %bb69.i.i.i.i
+ br label %bb69.i.i.i.i
bb69.i.i.i.i: ; preds = %bb68.i.i.i.i, %bb60.i.i.i.i
- br i1 false, label %bb61.i.i.i.i, label %bb70.i.i.i.i
+ br i1 false, label %bb61.i.i.i.i, label %bb70.i.i.i.i
bb70.i.i.i.i: ; preds = %bb69.i.i.i.i
- br label %READ_LITERAL.i.outer.backedge
+ br label %READ_LITERAL.i.outer.backedge
bb.i.i12.i: ; preds = %bb65.i.i.i.i, %bb63.i.i.i.i
- br i1 false, label %bb1.i.i.i213, label %bb5.i.i.i218
+ br i1 false, label %bb1.i.i.i213, label %bb5.i.i.i218
bb1.i.i.i213: ; preds = %bb.i.i12.i
- br i1 false, label %bb4.i.i.i217, label %bb2.i.i.i214
+ br i1 false, label %bb4.i.i.i217, label %bb2.i.i.i214
bb2.i.i.i214: ; preds = %bb1.i.i.i213
- br label %bb4.i.i.i217
+ br label %bb4.i.i.i217
bb4.i.i.i217: ; preds = %bb2.i.i.i214, %bb1.i.i.i213
- br label %bb5.i.i.i218
+ br label %bb5.i.i.i218
bb5.i.i.i218: ; preds = %bb4.i.i.i217, %bb.i.i12.i
- br label %READ_LITERAL.i.outer.backedge
+ br label %READ_LITERAL.i.outer.backedge
READ_LITERAL.i.outer.backedge: ; preds = %bb5.i.i.i218, %bb70.i.i.i.i, %bb6.i.i207
- br label %READ_LITERAL.i.outer
+ br label %READ_LITERAL.i.outer
parse.exit.loopexit: ; preds = %bb51.i, %bb47.i, %bb42.i202
- br label %parse.exit
+ br label %parse.exit
parse.exit: ; preds = %parse.exit.loopexit, %bb38.i198, %bb35.i195, %bb33.i193
- br i1 false, label %bb130, label %bb129
+ br i1 false, label %bb130, label %bb129
bb129: ; preds = %parse.exit, %bb22.i173, %bb18.i168, %bb16.i166, %bb12.i161, %bb10.i159, %bb9.i158, %bb8.i157, %bb7.i156, %bb5.i154, %bb4.i153
- br label %bb170
+ br label %bb170
bb130: ; preds = %parse.exit
- br i1 false, label %bb143, label %bb142.preheader
+ br i1 false, label %bb143, label %bb142.preheader
bb142.preheader: ; preds = %bb130
- br label %bb142
+ br label %bb142
bb132: ; preds = %bb142
- br i1 false, label %bb137, label %bb133
+ br i1 false, label %bb137, label %bb133
bb133: ; preds = %bb132
- br i1 false, label %bb137, label %bb134
+ br i1 false, label %bb137, label %bb134
bb134: ; preds = %bb133
- br i1 false, label %bb137, label %bb135
+ br i1 false, label %bb137, label %bb135
bb135: ; preds = %bb134
- br i1 false, label %bb137, label %bb136
+ br i1 false, label %bb137, label %bb136
bb136: ; preds = %bb135
- br i1 false, label %bb137, label %bb138
+ br i1 false, label %bb137, label %bb138
bb137: ; preds = %bb136, %bb135, %bb134, %bb133, %bb132
- br label %bb141
+ br label %bb141
bb138: ; preds = %bb136
- br i1 false, label %bb139, label %bb141
+ br i1 false, label %bb139, label %bb141
bb139: ; preds = %bb138
- br i1 false, label %bb2.i126, label %picosat_assume.exit
+ br i1 false, label %bb2.i126, label %picosat_assume.exit
bb2.i126: ; preds = %bb139
- br i1 false, label %bb5.i130, label %bb3.i127
+ br i1 false, label %bb5.i130, label %bb3.i127
bb3.i127: ; preds = %bb2.i126
- br label %bb5.i130
+ br label %bb5.i130
bb5.i130: ; preds = %bb3.i127, %bb2.i126
- br label %picosat_assume.exit
+ br label %picosat_assume.exit
picosat_assume.exit: ; preds = %bb5.i130, %bb139
- br i1 false, label %bb141, label %bb140
+ br i1 false, label %bb141, label %bb140
bb140: ; preds = %picosat_assume.exit
- br label %bb141
+ br label %bb141
bb141: ; preds = %bb140, %picosat_assume.exit, %bb138, %bb137
- br label %bb142
+ br label %bb142
bb142: ; preds = %bb141, %bb142.preheader
- br i1 false, label %bb132, label %bb143.loopexit
+ br i1 false, label %bb132, label %bb143.loopexit
bb143.loopexit: ; preds = %bb142
- br label %bb143
+ br label %bb143
bb143: ; preds = %bb143.loopexit, %bb130
- br i1 false, label %bb145, label %bb144
+ br i1 false, label %bb145, label %bb144
bb144: ; preds = %bb143
- br label %bb11.i
+ br label %bb11.i
bb5.i114: ; preds = %bb11.i
- br label %bb11.i
+ br label %bb11.i
bb11.i: ; preds = %bb5.i114, %bb144
- br i1 false, label %bb12.i, label %bb5.i114
+ br i1 false, label %bb12.i, label %bb5.i114
bb12.i: ; preds = %bb11.i
- br i1 false, label %bb.i.i.i118, label %bb1.i.i.i119
+ br i1 false, label %bb.i.i.i118, label %bb1.i.i.i119
bb.i.i.i118: ; preds = %bb12.i
- br label %int2lit.exit.i
+ br label %int2lit.exit.i
bb1.i.i.i119: ; preds = %bb12.i
- br label %int2lit.exit.i
+ br label %int2lit.exit.i
int2lit.exit.i: ; preds = %bb1.i.i.i119, %bb.i.i.i118
- br label %bb19.i
+ br label %bb19.i
bb13.i: ; preds = %bb19.i
- br label %bb17.i
+ br label %bb17.i
bb14.i: ; preds = %bb17.i
- br label %bb17.i
+ br label %bb17.i
bb17.i: ; preds = %bb14.i, %bb13.i
- br i1 false, label %bb14.i, label %bb18.i
+ br i1 false, label %bb14.i, label %bb18.i
bb18.i: ; preds = %bb17.i
- br label %bb19.i
+ br label %bb19.i
bb19.i: ; preds = %bb18.i, %int2lit.exit.i
- br i1 false, label %bb20.i, label %bb13.i
+ br i1 false, label %bb20.i, label %bb13.i
bb20.i: ; preds = %bb19.i
- br label %bb33.i
+ br label %bb33.i
bb24.i: ; preds = %bb33.i
- br i1 false, label %bb29.i, label %bb25.i
+ br i1 false, label %bb29.i, label %bb25.i
bb25.i: ; preds = %bb24.i
- br label %bb27.i
+ br label %bb27.i
bb26.i: ; preds = %bb27.i
- br label %bb27.i
+ br label %bb27.i
bb27.i: ; preds = %bb26.i, %bb25.i
- br i1 false, label %bb26.i, label %bb28.i
+ br i1 false, label %bb26.i, label %bb28.i
bb28.i: ; preds = %bb27.i
- br label %bb29.i
+ br label %bb29.i
bb29.i: ; preds = %bb28.i, %bb24.i
- br label %bb33.i
+ br label %bb33.i
bb33.i: ; preds = %bb29.i, %bb20.i
- br i1 false, label %bb34.i, label %bb24.i
+ br i1 false, label %bb34.i, label %bb24.i
bb34.i: ; preds = %bb33.i
- br i1 false, label %bb.i.i58.i, label %bb1.i.i59.i
+ br i1 false, label %bb.i.i58.i, label %bb1.i.i59.i
bb.i.i58.i: ; preds = %bb34.i
- br label %int2lit.exit63.i
+ br label %int2lit.exit63.i
bb1.i.i59.i: ; preds = %bb34.i
- br label %int2lit.exit63.i
+ br label %int2lit.exit63.i
int2lit.exit63.i: ; preds = %bb1.i.i59.i, %bb.i.i58.i
- br label %bb41.i
+ br label %bb41.i
bb35.i: ; preds = %bb41.i
- br label %bb39.i
+ br label %bb39.i
bb36.i: ; preds = %bb39.i
- br i1 false, label %bb38.i, label %bb37.i
+ br i1 false, label %bb38.i, label %bb37.i
bb37.i: ; preds = %bb36.i
- br label %bb38.i
+ br label %bb38.i
bb38.i: ; preds = %bb37.i, %bb36.i
- br label %bb39.i
+ br label %bb39.i
bb39.i: ; preds = %bb38.i, %bb35.i
- br i1 false, label %bb36.i, label %bb40.i
+ br i1 false, label %bb36.i, label %bb40.i
bb40.i: ; preds = %bb39.i
- br label %bb41.i
+ br label %bb41.i
bb41.i: ; preds = %bb40.i, %int2lit.exit63.i
- br i1 false, label %bb42.i, label %bb35.i
+ br i1 false, label %bb42.i, label %bb35.i
bb42.i: ; preds = %bb41.i
- br label %bb44.i
+ br label %bb44.i
bb43.i: ; preds = %bb44.i
- br label %bb44.i
+ br label %bb44.i
bb44.i: ; preds = %bb43.i, %bb42.i
- br i1 false, label %bb43.i, label %picosat_print.exit
+ br i1 false, label %bb43.i, label %picosat_print.exit
picosat_print.exit: ; preds = %bb44.i
- br label %bb167
+ br label %bb167
bb145: ; preds = %bb143
- br i1 false, label %bb147, label %bb146
+ br i1 false, label %bb147, label %bb146
bb146: ; preds = %bb145
- br label %bb147
+ br label %bb147
bb147: ; preds = %bb146, %bb145
- br i1 false, label %bb149, label %bb148
+ br i1 false, label %bb149, label %bb148
bb148: ; preds = %bb147
- br label %bb149
+ br label %bb149
bb149: ; preds = %bb148, %bb147
- br i1 false, label %bb.i54, label %bb1.i55
+ br i1 false, label %bb.i54, label %bb1.i55
bb.i54: ; preds = %bb149
- unreachable
+ unreachable
bb1.i55: ; preds = %bb149
- br i1 false, label %bb.i.i56, label %bb1.i.i57
+ br i1 false, label %bb.i.i56, label %bb1.i.i57
bb.i.i56: ; preds = %bb1.i55
- br label %bb1.i.i57
+ br label %bb1.i.i57
bb1.i.i57: ; preds = %bb.i.i56, %bb1.i55
- br i1 false, label %bb3.i.i59, label %bb2.i.i58
+ br i1 false, label %bb3.i.i59, label %bb2.i.i58
bb2.i.i58: ; preds = %bb1.i.i57
- br label %bb3.i.i59
+ br label %bb3.i.i59
bb3.i.i59: ; preds = %bb2.i.i58, %bb1.i.i57
- br i1 false, label %bb5.i.i61, label %sat.exit.i
+ br i1 false, label %bb5.i.i61, label %sat.exit.i
bb5.i.i61: ; preds = %bb3.i.i59
- br i1 false, label %bb6.i.i65, label %bb1.i.i.i63
+ br i1 false, label %bb6.i.i65, label %bb1.i.i.i63
bb1.i.i.i63: ; preds = %bb5.i.i61
- br i1 false, label %sat.exit.i, label %bb6.i.i65
+ br i1 false, label %sat.exit.i, label %bb6.i.i65
bb6.i.i65: ; preds = %bb1.i.i.i63, %bb5.i.i61
- br i1 false, label %bb8.i.i67, label %bb7.i.i66
+ br i1 false, label %bb8.i.i67, label %bb7.i.i66
bb7.i.i66: ; preds = %bb6.i.i65
- br label %bb8.i.i67
+ br label %bb8.i.i67
bb8.i.i67: ; preds = %bb7.i.i66, %bb6.i.i65
- br i1 false, label %bb10.i.i69, label %sat.exit.i
+ br i1 false, label %bb10.i.i69, label %sat.exit.i
bb10.i.i69: ; preds = %bb8.i.i67
- br i1 false, label %bb11.i.i70, label %bb1.i61.i.i
+ br i1 false, label %bb11.i.i70, label %bb1.i61.i.i
bb1.i61.i.i: ; preds = %bb10.i.i69
- br i1 false, label %sat.exit.i, label %bb11.i.i70
+ br i1 false, label %sat.exit.i, label %bb11.i.i70
bb11.i.i70: ; preds = %bb1.i61.i.i, %bb10.i.i69
- br label %bb13.i.i71.outer
+ br label %bb13.i.i71.outer
bb13.i.i71.outer: ; preds = %bb42.i.i, %bb11.i.i70
- br label %bb13.i.i71
+ br label %bb13.i.i71
bb13.i.i71: ; preds = %bb13.i.i71.backedge, %bb13.i.i71.outer
- br i1 false, label %bb14.i.i72, label %bb15.i.i73
+ br i1 false, label %bb14.i.i72, label %bb15.i.i73
bb14.i.i72: ; preds = %bb13.i.i71
- br label %bb15.i.i73
+ br label %bb15.i.i73
bb15.i.i73: ; preds = %bb14.i.i72, %bb13.i.i71
- br i1 false, label %bb19.i.i, label %bb16.i.i
+ br i1 false, label %bb19.i.i, label %bb16.i.i
bb16.i.i: ; preds = %bb15.i.i73
- br i1 false, label %bb.i.i79.i.i, label %incincs.exit.i.i
+ br i1 false, label %bb.i.i79.i.i, label %incincs.exit.i.i
bb.i.i79.i.i: ; preds = %bb16.i.i
- br label %bb4.i.i.i85.i.i
+ br label %bb4.i.i.i85.i.i
bb.i.i.i80.i.i: ; preds = %bb4.i.i.i85.i.i
- br i1 false, label %bb3.i.i.i83.i.i, label %bb1.i.i.i81.i.i
+ br i1 false, label %bb3.i.i.i83.i.i, label %bb1.i.i.i81.i.i
bb1.i.i.i81.i.i: ; preds = %bb.i.i.i80.i.i
- br i1 false, label %bb2.i.i.i82.i.i, label %bb3.i.i.i83.i.i
+ br i1 false, label %bb2.i.i.i82.i.i, label %bb3.i.i.i83.i.i
bb2.i.i.i82.i.i: ; preds = %bb1.i.i.i81.i.i
- br label %bb3.i.i.i83.i.i
+ br label %bb3.i.i.i83.i.i
bb3.i.i.i83.i.i: ; preds = %bb2.i.i.i82.i.i, %bb1.i.i.i81.i.i, %bb.i.i.i80.i.i
- br label %bb4.i.i.i85.i.i
+ br label %bb4.i.i.i85.i.i
bb4.i.i.i85.i.i: ; preds = %bb3.i.i.i83.i.i, %bb.i.i79.i.i
- br i1 false, label %crescore.exit.i.i.i.i, label %bb.i.i.i80.i.i
+ br i1 false, label %crescore.exit.i.i.i.i, label %bb.i.i.i80.i.i
crescore.exit.i.i.i.i: ; preds = %bb4.i.i.i85.i.i
- br label %incincs.exit.i.i
+ br label %incincs.exit.i.i
incincs.exit.i.i: ; preds = %crescore.exit.i.i.i.i, %bb16.i.i
- br i1 false, label %bb13.i.i71.backedge, label %sat.exit.i.loopexit.loopexit
+ br i1 false, label %bb13.i.i71.backedge, label %sat.exit.i.loopexit.loopexit
bb13.i.i71.backedge: ; preds = %bb1.i55.i.i, %bb28.i.i, %incincs.exit.i.i
- br label %bb13.i.i71
+ br label %bb13.i.i71
bb19.i.i: ; preds = %bb15.i.i73
- br i1 false, label %bb20.i.i, label %bb1.i68.i.i
+ br i1 false, label %bb20.i.i, label %bb1.i68.i.i
bb1.i68.i.i: ; preds = %bb19.i.i
- br i1 false, label %sat.exit.i.loopexit.loopexit, label %bb20.i.i
+ br i1 false, label %sat.exit.i.loopexit.loopexit, label %bb20.i.i
bb20.i.i: ; preds = %bb1.i68.i.i, %bb19.i.i
- br i1 false, label %bb24.i.i, label %bb21.i.i
+ br i1 false, label %bb24.i.i, label %bb21.i.i
bb21.i.i: ; preds = %bb20.i.i
- br i1 false, label %bb22.i.i, label %bb24.i.i
+ br i1 false, label %bb22.i.i, label %bb24.i.i
bb22.i.i: ; preds = %bb21.i.i
- br i1 false, label %bb23.i.i, label %bb24.i.i
+ br i1 false, label %bb23.i.i, label %bb24.i.i
bb23.i.i: ; preds = %bb22.i.i
- br label %bb24.i.i
+ br label %bb24.i.i
bb24.i.i: ; preds = %bb23.i.i, %bb22.i.i, %bb21.i.i, %bb20.i.i
- br i1 false, label %bb26.i.i, label %sat.exit.i.loopexit.loopexit
+ br i1 false, label %bb26.i.i, label %sat.exit.i.loopexit.loopexit
bb26.i.i: ; preds = %bb24.i.i
- br i1 false, label %bb27.i.i, label %bb33.i.i.loopexit
+ br i1 false, label %bb27.i.i, label %bb33.i.i.loopexit
bb27.i.i: ; preds = %bb26.i.i
- br i1 false, label %bb33.i.i.loopexit, label %bb28.i.i
+ br i1 false, label %bb33.i.i.loopexit, label %bb28.i.i
bb28.i.i: ; preds = %bb27.i.i
- br i1 false, label %bb1.i55.i.i, label %bb13.i.i71.backedge
+ br i1 false, label %bb1.i55.i.i, label %bb13.i.i71.backedge
bb1.i55.i.i: ; preds = %bb28.i.i
- br i1 false, label %bb29.i.i, label %bb13.i.i71.backedge
+ br i1 false, label %bb29.i.i, label %bb13.i.i71.backedge
bb29.i.i: ; preds = %bb1.i55.i.i
- br i1 false, label %bb31.i.i, label %sat.exit.i.loopexit.loopexit2
+ br i1 false, label %bb31.i.i, label %sat.exit.i.loopexit.loopexit2
bb31.i.i: ; preds = %bb29.i.i
- br i1 false, label %bb33.i.i, label %bb1.i48.i.i
+ br i1 false, label %bb33.i.i, label %bb1.i48.i.i
bb1.i48.i.i: ; preds = %bb31.i.i
- br i1 false, label %sat.exit.i.loopexit.loopexit2, label %bb33.i.i
+ br i1 false, label %sat.exit.i.loopexit.loopexit2, label %bb33.i.i
bb33.i.i.loopexit: ; preds = %bb27.i.i, %bb26.i.i
- br label %bb33.i.i
+ br label %bb33.i.i
bb33.i.i: ; preds = %bb33.i.i.loopexit, %bb1.i48.i.i, %bb31.i.i
- br i1 false, label %bb34.i.i, label %bb35.i.i
+ br i1 false, label %bb34.i.i, label %bb35.i.i
bb34.i.i: ; preds = %bb33.i.i
- br i1 false, label %bb35.i.i, label %bb2.i44.i.i76
+ br i1 false, label %bb35.i.i, label %bb2.i44.i.i76
bb2.i44.i.i76: ; preds = %bb34.i.i
- br label %bb35.i.i
+ br label %bb35.i.i
bb35.i.i: ; preds = %bb2.i44.i.i76, %bb34.i.i, %bb33.i.i
- br i1 false, label %bb1.i37.i.i, label %bb.i35.i.i
+ br i1 false, label %bb1.i37.i.i, label %bb.i35.i.i
bb.i35.i.i: ; preds = %bb35.i.i
- br label %bb36.i.i
+ br label %bb36.i.i
bb1.i37.i.i: ; preds = %bb35.i.i
- br i1 false, label %bb37.i.i, label %bb36.i.i
+ br i1 false, label %bb37.i.i, label %bb36.i.i
bb36.i.i: ; preds = %bb1.i37.i.i, %bb.i35.i.i
- br label %bb25.i23.i.i
+ br label %bb25.i23.i.i
bb.i18.i.i: ; preds = %bb25.i23.i.i
- br i1 false, label %bb24.i22.i.i, label %bb22.i19.i.i
+ br i1 false, label %bb24.i22.i.i, label %bb22.i19.i.i
bb22.i19.i.i: ; preds = %bb.i18.i.i
- br label %bb24.i22.i.i
+ br label %bb24.i22.i.i
bb24.i22.i.i: ; preds = %bb22.i19.i.i, %bb.i18.i.i
- br label %bb25.i23.i.i
+ br label %bb25.i23.i.i
bb25.i23.i.i: ; preds = %bb24.i22.i.i, %bb36.i.i
- br i1 false, label %bb.i18.i.i, label %bb26.i24.i.i
+ br i1 false, label %bb.i18.i.i, label %bb26.i24.i.i
bb26.i24.i.i: ; preds = %bb25.i23.i.i
- br i1 false, label %bb27.i25.i.i, label %bb32.i.i.i
+ br i1 false, label %bb27.i25.i.i, label %bb32.i.i.i
bb27.i25.i.i: ; preds = %bb26.i24.i.i
- br label %bb32.i.i.i
+ br label %bb32.i.i.i
bb32.i.i.i: ; preds = %bb27.i25.i.i, %bb26.i24.i.i
- br label %bb64.i.i.i
+ br label %bb64.i.i.i
bb33.i.i.i: ; preds = %bb64.i.i.i
- br i1 false, label %bb60.i.i.i, label %bb34.i.i.i
+ br i1 false, label %bb60.i.i.i, label %bb34.i.i.i
bb34.i.i.i: ; preds = %bb33.i.i.i
- br i1 false, label %bb38.i.i.i, label %bb60.i.i.i
+ br i1 false, label %bb38.i.i.i, label %bb60.i.i.i
bb38.i.i.i: ; preds = %bb34.i.i.i
- br i1 false, label %bb39.i.i.i, label %bb48.i.i.i
+ br i1 false, label %bb39.i.i.i, label %bb48.i.i.i
bb39.i.i.i: ; preds = %bb38.i.i.i
- br i1 false, label %bb48.i.i.i, label %bb40.i.i.i
+ br i1 false, label %bb48.i.i.i, label %bb40.i.i.i
bb40.i.i.i: ; preds = %bb39.i.i.i
- br i1 false, label %bb60.i.i.i, label %bb45.i.i.i
+ br i1 false, label %bb60.i.i.i, label %bb45.i.i.i
bb45.i.i.i: ; preds = %bb40.i.i.i
- br label %bb60.i.i.i
+ br label %bb60.i.i.i
bb48.i.i.i: ; preds = %bb39.i.i.i, %bb38.i.i.i
- br i1 false, label %bb53.i.i.i, label %bb60.i.i.i
+ br i1 false, label %bb53.i.i.i, label %bb60.i.i.i
bb53.i.i.i: ; preds = %bb48.i.i.i
- br i1 false, label %bb60.i.i.i, label %bb58.i.i.i
+ br i1 false, label %bb60.i.i.i, label %bb58.i.i.i
bb58.i.i.i: ; preds = %bb53.i.i.i
- br i1 false, label %bb59.i.i.i, label %bb60.i.i.i
+ br i1 false, label %bb59.i.i.i, label %bb60.i.i.i
bb59.i.i.i: ; preds = %bb58.i.i.i
- br label %bb60.i.i.i
+ br label %bb60.i.i.i
bb60.i.i.i: ; preds = %bb59.i.i.i, %bb58.i.i.i, %bb53.i.i.i, %bb48.i.i.i, %bb45.i.i.i, %bb40.i.i.i, %bb34.i.i.i, %bb33.i.i.i
- %lcollect.i.i.i.1 = phi i32 [ %lcollect.i.i.i.2, %bb34.i.i.i ], [ %lcollect.i.i.i.2, %bb48.i.i.i ], [ %lcollect.i.i.i.2, %bb58.i.i.i ], [ %lcollect.i.i.i.2, %bb59.i.i.i ], [ %lcollect.i.i.i.2, %bb53.i.i.i ], [ %lcollect.i.i.i.2, %bb33.i.i.i ], [ %lcollect.i.i.i.2, %bb40.i.i.i ], [ 0, %bb45.i.i.i ] ; <i32> [#uses=1]
- br label %bb64.i.i.i
+ %lcollect.i.i.i.1 = phi i32 [ %lcollect.i.i.i.2, %bb34.i.i.i ], [ %lcollect.i.i.i.2, %bb48.i.i.i ], [ %lcollect.i.i.i.2, %bb58.i.i.i ], [ %lcollect.i.i.i.2, %bb59.i.i.i ], [ %lcollect.i.i.i.2, %bb53.i.i.i ], [ %lcollect.i.i.i.2, %bb33.i.i.i ], [ %lcollect.i.i.i.2, %bb40.i.i.i ], [ 0, %bb45.i.i.i ] ; <i32> [#uses=1]
+ br label %bb64.i.i.i
bb64.i.i.i: ; preds = %bb60.i.i.i, %bb32.i.i.i
- %lcollect.i.i.i.2 = phi i32 [ 0, %bb32.i.i.i ], [ %lcollect.i.i.i.1, %bb60.i.i.i ] ; <i32> [#uses=8]
- br i1 false, label %bb65.i.i.i, label %bb33.i.i.i
+ %lcollect.i.i.i.2 = phi i32 [ 0, %bb32.i.i.i ], [ %lcollect.i.i.i.1, %bb60.i.i.i ] ; <i32> [#uses=8]
+ br i1 false, label %bb65.i.i.i, label %bb33.i.i.i
bb65.i.i.i: ; preds = %bb64.i.i.i
- br i1 false, label %bb103.i.i.i.preheader, label %bb66.i.i.i.preheader
+ br i1 false, label %bb103.i.i.i.preheader, label %bb66.i.i.i.preheader
bb66.i.i.i.preheader: ; preds = %bb65.i.i.i
- br label %bb66.i.i.i
+ br label %bb66.i.i.i
bb66.i.i.i: ; preds = %bb66.i.i.i.backedge, %bb66.i.i.i.preheader
- br i1 false, label %bb67.i.i.i, label %bb68.i.i.i
+ br i1 false, label %bb67.i.i.i, label %bb68.i.i.i
bb67.i.i.i: ; preds = %bb66.i.i.i
- br label %bb68.i.i.i
+ br label %bb68.i.i.i
bb68.i.i.i: ; preds = %bb67.i.i.i, %bb66.i.i.i
- br i1 false, label %bb69.i.i.i, label %bb70.i.i.i
+ br i1 false, label %bb69.i.i.i, label %bb70.i.i.i
bb69.i.i.i: ; preds = %bb68.i.i.i
- br label %bb70.i.i.i
+ br label %bb70.i.i.i
bb70.i.i.i: ; preds = %bb69.i.i.i, %bb68.i.i.i
- br i1 false, label %bb71.i.i.i, label %bb72.i.i.i
+ br i1 false, label %bb71.i.i.i, label %bb72.i.i.i
bb71.i.i.i: ; preds = %bb70.i.i.i
- br label %bb72.i.i.i
+ br label %bb72.i.i.i
bb72.i.i.i: ; preds = %bb71.i.i.i, %bb70.i.i.i
- br label %bb73.i.i.i.outer
+ br label %bb73.i.i.i.outer
bb73.i.i.i.outer: ; preds = %bb78.i.i.i, %bb72.i.i.i
- br label %bb73.i.i.i
+ br label %bb73.i.i.i
bb73.i.i.i: ; preds = %bb73.i.i.i, %bb73.i.i.i.outer
- br i1 false, label %bb73.i.i.i, label %bb76.i.i.i.preheader
+ br i1 false, label %bb73.i.i.i, label %bb76.i.i.i.preheader
bb76.i.i.i.preheader: ; preds = %bb73.i.i.i
- br label %bb76.i.i.i
+ br label %bb76.i.i.i
bb76.i.i.i: ; preds = %bb76.i.i.i, %bb76.i.i.i.preheader
- br i1 false, label %bb77.i.i.i, label %bb76.i.i.i
+ br i1 false, label %bb77.i.i.i, label %bb76.i.i.i
bb77.i.i.i: ; preds = %bb76.i.i.i
- br i1 false, label %bb78.i.i.i, label %bb79.i.i.i
+ br i1 false, label %bb78.i.i.i, label %bb79.i.i.i
bb78.i.i.i: ; preds = %bb77.i.i.i
- br label %bb73.i.i.i.outer
+ br label %bb73.i.i.i.outer
bb79.i.i.i: ; preds = %bb77.i.i.i
- br i1 false, label %bb83.i.i.i, label %bb94.i.i.i
+ br i1 false, label %bb83.i.i.i, label %bb94.i.i.i
bb83.i.i.i: ; preds = %bb79.i.i.i
- br i1 false, label %bb84.i.i.i, label %bb88.i.i.i
+ br i1 false, label %bb84.i.i.i, label %bb88.i.i.i
bb84.i.i.i: ; preds = %bb83.i.i.i
- br i1 false, label %bb87.i.i.i, label %bb85.i.i.i
+ br i1 false, label %bb87.i.i.i, label %bb85.i.i.i
bb85.i.i.i: ; preds = %bb84.i.i.i
- br label %bb87.i.i.i
+ br label %bb87.i.i.i
bb87.i.i.i: ; preds = %bb85.i.i.i, %bb84.i.i.i
- br label %bb88.i.i.i
+ br label %bb88.i.i.i
bb88.i.i.i: ; preds = %bb87.i.i.i, %bb83.i.i.i
- br i1 false, label %bb89.i.i.i, label %bb93.i.i.i
+ br i1 false, label %bb89.i.i.i, label %bb93.i.i.i
bb89.i.i.i: ; preds = %bb88.i.i.i
- br i1 false, label %bb92.i.i.i, label %bb90.i.i.i
+ br i1 false, label %bb92.i.i.i, label %bb90.i.i.i
bb90.i.i.i: ; preds = %bb89.i.i.i
- br label %bb92.i.i.i
+ br label %bb92.i.i.i
bb92.i.i.i: ; preds = %bb90.i.i.i, %bb89.i.i.i
- br label %bb93.i.i.i
+ br label %bb93.i.i.i
bb93.i.i.i: ; preds = %bb92.i.i.i, %bb88.i.i.i
- br label %bb66.i.i.i.backedge
+ br label %bb66.i.i.i.backedge
bb66.i.i.i.backedge: ; preds = %bb97.i.i.i, %bb94.i.i.i, %bb93.i.i.i
- br label %bb66.i.i.i
+ br label %bb66.i.i.i
bb94.i.i.i: ; preds = %bb79.i.i.i
- br i1 false, label %bb66.i.i.i.backedge, label %bb96.i.i.i
+ br i1 false, label %bb66.i.i.i.backedge, label %bb96.i.i.i
bb96.i.i.i: ; preds = %bb94.i.i.i
- br i1 false, label %bb97.i.i.i, label %bb103.i.i.i.preheader.loopexit
+ br i1 false, label %bb97.i.i.i, label %bb103.i.i.i.preheader.loopexit
bb103.i.i.i.preheader.loopexit: ; preds = %bb96.i.i.i
- br label %bb103.i.i.i.preheader
+ br label %bb103.i.i.i.preheader
bb103.i.i.i.preheader: ; preds = %bb103.i.i.i.preheader.loopexit, %bb65.i.i.i
- br label %bb103.i.i.i
+ br label %bb103.i.i.i
bb97.i.i.i: ; preds = %bb96.i.i.i
- br label %bb66.i.i.i.backedge
+ br label %bb66.i.i.i.backedge
bb100.i.i.i: ; preds = %bb103.i.i.i
- br i1 false, label %bb101.i.i.i, label %bb102.i.i.i
+ br i1 false, label %bb101.i.i.i, label %bb102.i.i.i
bb101.i.i.i: ; preds = %bb100.i.i.i
- br label %bb102.i.i.i
+ br label %bb102.i.i.i
bb102.i.i.i: ; preds = %bb101.i.i.i, %bb100.i.i.i
- br label %bb103.i.i.i
+ br label %bb103.i.i.i
bb103.i.i.i: ; preds = %bb102.i.i.i, %bb103.i.i.i.preheader
- br i1 false, label %bb100.i.i.i, label %bb109.i.i.i.preheader
+ br i1 false, label %bb100.i.i.i, label %bb109.i.i.i.preheader
bb109.i.i.i.preheader: ; preds = %bb103.i.i.i
- br label %bb109.i.i.i
+ br label %bb109.i.i.i
bb105.i.i.i: ; preds = %bb109.i.i.i
- br label %bb107.i.i.i
+ br label %bb107.i.i.i
bb106.i.i.i: ; preds = %bb107.i.i.i
- br label %bb107.i.i.i
+ br label %bb107.i.i.i
bb107.i.i.i: ; preds = %bb106.i.i.i, %bb105.i.i.i
- br i1 false, label %bb106.i.i.i, label %bb108.i.i.i
+ br i1 false, label %bb106.i.i.i, label %bb108.i.i.i
bb108.i.i.i: ; preds = %bb107.i.i.i
- br label %bb109.i.i.i
+ br label %bb109.i.i.i
bb109.i.i.i: ; preds = %bb108.i.i.i, %bb109.i.i.i.preheader
- br i1 false, label %bb110.i.i.i, label %bb105.i.i.i
+ br i1 false, label %bb110.i.i.i, label %bb105.i.i.i
bb110.i.i.i: ; preds = %bb109.i.i.i
- %0 = sub i32 0, %lcollect.i.i.i.2 ; <i32> [#uses=1]
- %1 = add i32 %0, 1 ; <i32> [#uses=1]
- br label %bb113.i.i.i
+ %0 = sub i32 0, %lcollect.i.i.i.2 ; <i32> [#uses=1]
+ %1 = add i32 %0, 1 ; <i32> [#uses=1]
+ br label %bb113.i.i.i
bb111.i.i.i: ; preds = %bb113.i.i.i
- br i1 false, label %bb114.i.i.i, label %bb113.i.i.i
+ br i1 false, label %bb114.i.i.i, label %bb113.i.i.i
bb113.i.i.i: ; preds = %bb111.i.i.i, %bb110.i.i.i
- br i1 false, label %bb111.i.i.i, label %bb114.i.i.i
+ br i1 false, label %bb111.i.i.i, label %bb114.i.i.i
bb114.i.i.i: ; preds = %bb113.i.i.i, %bb111.i.i.i
- %2 = lshr i32 %1, 1 ; <i32> [#uses=2]
- br i1 false, label %bb116.i.i.i, label %bb124.i.i.i
+ %2 = lshr i32 %1, 1 ; <i32> [#uses=2]
+ br i1 false, label %bb116.i.i.i, label %bb124.i.i.i
bb116.i.i.i: ; preds = %bb114.i.i.i
- br i1 false, label %bb117.i.i.i.preheader, label %bb122.i.i.i.preheader
+ br i1 false, label %bb117.i.i.i.preheader, label %bb122.i.i.i.preheader
bb122.i.i.i.preheader: ; preds = %bb116.i.i.i
- br label %bb122.i.i.i
+ br label %bb122.i.i.i
bb117.i.i.i.preheader: ; preds = %bb116.i.i.i
- br label %bb117.i.i.i
+ br label %bb117.i.i.i
bb117.i.i.i: ; preds = %bb118.i.i.i, %bb117.i.i.i.preheader
- %target.i.i.i.1 = phi i32 [ %3, %bb118.i.i.i ], [ %2, %bb117.i.i.i.preheader ] ; <i32> [#uses=1]
- %3 = add i32 %target.i.i.i.1, 1 ; <i32> [#uses=2]
- br i1 false, label %bb118.i.i.i, label %bb124.i.i.i.loopexit
+ %target.i.i.i.1 = phi i32 [ %3, %bb118.i.i.i ], [ %2, %bb117.i.i.i.preheader ] ; <i32> [#uses=1]
+ %3 = add i32 %target.i.i.i.1, 1 ; <i32> [#uses=2]
+ br i1 false, label %bb118.i.i.i, label %bb124.i.i.i.loopexit
bb118.i.i.i: ; preds = %bb117.i.i.i
- br i1 false, label %bb117.i.i.i, label %bb124.i.i.i.loopexit
+ br i1 false, label %bb117.i.i.i, label %bb124.i.i.i.loopexit
bb122.i.i.i: ; preds = %bb123.i.i.i, %bb122.i.i.i.preheader
- %target.i.i.i.2 = phi i32 [ %4, %bb123.i.i.i ], [ %2, %bb122.i.i.i.preheader ] ; <i32> [#uses=2]
- br i1 false, label %bb124.i.i.i.loopexit1, label %bb123.i.i.i
+ %target.i.i.i.2 = phi i32 [ %4, %bb123.i.i.i ], [ %2, %bb122.i.i.i.preheader ] ; <i32> [#uses=2]
+ br i1 false, label %bb124.i.i.i.loopexit1, label %bb123.i.i.i
bb123.i.i.i: ; preds = %bb122.i.i.i
- %4 = add i32 %target.i.i.i.2, -1 ; <i32> [#uses=1]
- br i1 false, label %bb122.i.i.i, label %bb124.i.i.i.loopexit1
+ %4 = add i32 %target.i.i.i.2, -1 ; <i32> [#uses=1]
+ br i1 false, label %bb122.i.i.i, label %bb124.i.i.i.loopexit1
bb124.i.i.i.loopexit: ; preds = %bb118.i.i.i, %bb117.i.i.i
- br label %bb124.i.i.i
+ br label %bb124.i.i.i
bb124.i.i.i.loopexit1: ; preds = %bb123.i.i.i, %bb122.i.i.i
- br label %bb124.i.i.i
+ br label %bb124.i.i.i
bb124.i.i.i: ; preds = %bb124.i.i.i.loopexit1, %bb124.i.i.i.loopexit, %bb114.i.i.i
- %target.i.i.i.0 = phi i32 [ 0, %bb114.i.i.i ], [ %3, %bb124.i.i.i.loopexit ], [ %target.i.i.i.2, %bb124.i.i.i.loopexit1 ] ; <i32> [#uses=0]
- br label %bb132.i.i.i.outer
+ %target.i.i.i.0 = phi i32 [ 0, %bb114.i.i.i ], [ %3, %bb124.i.i.i.loopexit ], [ %target.i.i.i.2, %bb124.i.i.i.loopexit1 ] ; <i32> [#uses=0]
+ br label %bb132.i.i.i.outer
bb125.i.i.i: ; preds = %bb132.i.i.i
- br i1 false, label %bb132.i.i.i, label %bb130.i.i.i
+ br i1 false, label %bb132.i.i.i, label %bb130.i.i.i
bb130.i.i.i: ; preds = %bb125.i.i.i
- br label %bb132.i.i.i.outer
+ br label %bb132.i.i.i.outer
bb132.i.i.i.outer: ; preds = %bb130.i.i.i, %bb124.i.i.i
- br label %bb132.i.i.i
+ br label %bb132.i.i.i
bb132.i.i.i: ; preds = %bb132.i.i.i.outer, %bb125.i.i.i
- br i1 false, label %bb125.i.i.i, label %bb133.i.i.i
+ br i1 false, label %bb125.i.i.i, label %bb133.i.i.i
bb133.i.i.i: ; preds = %bb132.i.i.i
- br i1 false, label %bb136.i.i.i, label %bb134.i.i.i
+ br i1 false, label %bb136.i.i.i, label %bb134.i.i.i
bb134.i.i.i: ; preds = %bb133.i.i.i
- br i1 false, label %bb136.i.i.i, label %bb135.i.i.i
+ br i1 false, label %bb136.i.i.i, label %bb135.i.i.i
bb135.i.i.i: ; preds = %bb134.i.i.i
- br label %bb136.i.i.i
+ br label %bb136.i.i.i
bb136.i.i.i: ; preds = %bb135.i.i.i, %bb134.i.i.i, %bb133.i.i.i
- br i1 false, label %bb137.i.i.i, label %bb37.i.i
+ br i1 false, label %bb137.i.i.i, label %bb37.i.i
bb137.i.i.i: ; preds = %bb136.i.i.i
- br label %bb37.i.i
+ br label %bb37.i.i
bb37.i.i: ; preds = %bb137.i.i.i, %bb136.i.i.i, %bb1.i37.i.i
- br i1 false, label %bb40.i.i, label %bb38.i.i
+ br i1 false, label %bb40.i.i, label %bb38.i.i
bb38.i.i: ; preds = %bb37.i.i
- br i1 false, label %bb39.i.i, label %bb40.i.i
+ br i1 false, label %bb39.i.i, label %bb40.i.i
bb39.i.i: ; preds = %bb38.i.i
- br i1 false, label %bb17.i.i.i, label %bb3.i12.i.i
+ br i1 false, label %bb17.i.i.i, label %bb3.i12.i.i
bb3.i12.i.i: ; preds = %bb39.i.i
- br label %bb5.i14.i.i
+ br label %bb5.i14.i.i
bb5.i14.i.i: ; preds = %bb8.i.i.i79, %bb3.i12.i.i
- br i1 false, label %bb6.i15.i.i, label %bb9.i.i.i80
+ br i1 false, label %bb6.i15.i.i, label %bb9.i.i.i80
bb6.i15.i.i: ; preds = %bb5.i14.i.i
- br i1 false, label %bb7.i.i.i78, label %bb9.i.i.i80
+ br i1 false, label %bb7.i.i.i78, label %bb9.i.i.i80
bb7.i.i.i78: ; preds = %bb6.i15.i.i
- br i1 false, label %bb9.i.i.i80, label %bb8.i.i.i79
+ br i1 false, label %bb9.i.i.i80, label %bb8.i.i.i79
bb8.i.i.i79: ; preds = %bb7.i.i.i78
- br i1 false, label %bb9.i.i.i80, label %bb5.i14.i.i
+ br i1 false, label %bb9.i.i.i80, label %bb5.i14.i.i
bb9.i.i.i80: ; preds = %bb8.i.i.i79, %bb7.i.i.i78, %bb6.i15.i.i, %bb5.i14.i.i
- br i1 false, label %bb16.i.i.i, label %bb10.i.i.i81
+ br i1 false, label %bb16.i.i.i, label %bb10.i.i.i81
bb10.i.i.i81: ; preds = %bb9.i.i.i80
- br i1 false, label %bb11.i.i.i, label %bb15.i.i.i
+ br i1 false, label %bb11.i.i.i, label %bb15.i.i.i
bb11.i.i.i: ; preds = %bb10.i.i.i81
- br i1 false, label %bb16.i.i.i, label %bb15.i.i.i
+ br i1 false, label %bb16.i.i.i, label %bb15.i.i.i
bb15.i.i.i: ; preds = %bb11.i.i.i, %bb10.i.i.i81
- br label %bb16.i.i.i
+ br label %bb16.i.i.i
bb16.i.i.i: ; preds = %bb15.i.i.i, %bb11.i.i.i, %bb9.i.i.i80
- br label %bb17.i.i.i
+ br label %bb17.i.i.i
bb17.i.i.i: ; preds = %bb16.i.i.i, %bb39.i.i
- br i1 false, label %bb18.i.i.i, label %bb25.i.i.i
+ br i1 false, label %bb18.i.i.i, label %bb25.i.i.i
bb18.i.i.i: ; preds = %bb17.i.i.i
- br i1 false, label %bb24.i.i.i, label %bb23.i.i.i
+ br i1 false, label %bb24.i.i.i, label %bb23.i.i.i
bb23.i.i.i: ; preds = %bb18.i.i.i
- br label %bb24.i.i.i
+ br label %bb24.i.i.i
bb24.i.i.i: ; preds = %bb23.i.i.i, %bb18.i.i.i
- br label %bb29.i.i.i
+ br label %bb29.i.i.i
bb25.i.i.i: ; preds = %bb17.i.i.i
- br i1 false, label %bb29.i.i.i, label %bb27.i.i.i
+ br i1 false, label %bb29.i.i.i, label %bb27.i.i.i
bb27.i.i.i: ; preds = %bb25.i.i.i
- br i1 false, label %bb29.i.i.i, label %bb28.i.i.i
+ br i1 false, label %bb29.i.i.i, label %bb28.i.i.i
bb28.i.i.i: ; preds = %bb27.i.i.i
- br i1 false, label %bb29.i.i.i, label %bb.i4.i.i.i
+ br i1 false, label %bb29.i.i.i, label %bb.i4.i.i.i
bb.i4.i.i.i: ; preds = %bb28.i.i.i
- br i1 false, label %bb4.i.i16.i.i, label %bb29.i.i.i
+ br i1 false, label %bb4.i.i16.i.i, label %bb29.i.i.i
bb4.i.i16.i.i: ; preds = %bb.i4.i.i.i
- br label %bb29.i.i.i
+ br label %bb29.i.i.i
bb29.i.i.i: ; preds = %bb4.i.i16.i.i, %bb.i4.i.i.i, %bb28.i.i.i, %bb27.i.i.i, %bb25.i.i.i, %bb24.i.i.i
- br label %bb40.i.i
+ br label %bb40.i.i
bb40.i.i: ; preds = %bb29.i.i.i, %bb38.i.i, %bb37.i.i
- br i1 false, label %bb9.i.i.i.i.preheader, label %bb2.i.i.i87
+ br i1 false, label %bb9.i.i.i.i.preheader, label %bb2.i.i.i87
bb9.i.i.i.i.preheader: ; preds = %bb40.i.i
- br label %bb9.i.i.i.i
+ br label %bb9.i.i.i.i
bb.i.i.i.i84: ; preds = %bb9.i.i.i.i
- switch i8 0, label %bb8.i.i.i.i [
- i8 -1, label %bb1.i.i.i.i85
- i8 1, label %bb9.i.i.i.i
- ]
+ switch i8 0, label %bb8.i.i.i.i [
+ i8 -1, label %bb1.i.i.i.i85
+ i8 1, label %bb9.i.i.i.i
+ ]
bb1.i.i.i.i85: ; preds = %bb.i.i.i.i84
- br i1 false, label %bb5.i.i.i.i, label %bb2.i.i.i87
+ br i1 false, label %bb5.i.i.i.i, label %bb2.i.i.i87
bb5.i.i.i.i: ; preds = %bb1.i.i.i.i85
- br label %bb2.i.i.i87
+ br label %bb2.i.i.i87
bb8.i.i.i.i: ; preds = %bb.i.i.i.i84
- br i1 false, label %bb2.i.i.i87, label %bb6.i.i.i95
+ br i1 false, label %bb2.i.i.i87, label %bb6.i.i.i95
bb9.i.i.i.i: ; preds = %bb.i.i.i.i84, %bb9.i.i.i.i.preheader
- br i1 false, label %bb.i.i.i.i84, label %bb10.i.i.i.i
+ br i1 false, label %bb.i.i.i.i84, label %bb10.i.i.i.i
bb10.i.i.i.i: ; preds = %bb9.i.i.i.i
- br label %bb2.i.i.i87
+ br label %bb2.i.i.i87
bb2.i.i.i87: ; preds = %bb10.i.i.i.i, %bb8.i.i.i.i, %bb5.i.i.i.i, %bb1.i.i.i.i85, %bb40.i.i
- br i1 false, label %bb3.i.i.i88, label %decide.exit.i.i
+ br i1 false, label %bb3.i.i.i88, label %decide.exit.i.i
bb3.i.i.i88: ; preds = %bb2.i.i.i87
- br i1 false, label %bb4.i.i.i90, label %bb1.i23.i.i.i
+ br i1 false, label %bb4.i.i.i90, label %bb1.i23.i.i.i
bb1.i23.i.i.i: ; preds = %bb3.i.i.i88
- br i1 false, label %decide.exit.i.i, label %bb4.i.i.i90
+ br i1 false, label %decide.exit.i.i, label %bb4.i.i.i90
bb4.i.i.i90: ; preds = %bb1.i23.i.i.i, %bb3.i.i.i88
- br i1 false, label %bb1.i9.i.i.i, label %bb5.i.i.i94
+ br i1 false, label %bb1.i9.i.i.i, label %bb5.i.i.i94
bb1.i9.i.i.i: ; preds = %bb4.i.i.i90
- br i1 false, label %bb.i.i27.i.i.i.i, label %bb1.i.i28.i.i.i.i
+ br i1 false, label %bb.i.i27.i.i.i.i, label %bb1.i.i28.i.i.i.i
bb.i.i27.i.i.i.i: ; preds = %bb1.i9.i.i.i
- br label %int2lit.exit32.i.i.i.i
+ br label %int2lit.exit32.i.i.i.i
bb1.i.i28.i.i.i.i: ; preds = %bb1.i9.i.i.i
- br label %int2lit.exit32.i.i.i.i
+ br label %int2lit.exit32.i.i.i.i
int2lit.exit32.i.i.i.i: ; preds = %bb1.i.i28.i.i.i.i, %bb.i.i27.i.i.i.i
- br i1 false, label %bb8.i19.i.i.i, label %bb2.i.i.i.i91
+ br i1 false, label %bb8.i19.i.i.i, label %bb2.i.i.i.i91
bb2.i.i.i.i91: ; preds = %int2lit.exit32.i.i.i.i
- br label %bb4.i.i.i.i
+ br label %bb4.i.i.i.i
bb3.i.i.i.i92: ; preds = %gcd.exit.i.i.i.i
- br label %bb4.i.i.i.i
+ br label %bb4.i.i.i.i
bb4.i.i.i.i: ; preds = %bb3.i.i.i.i92, %bb2.i.i.i.i91
- br label %bb3.i.i13.i.i.i
+ br label %bb3.i.i13.i.i.i
bb2.i.i12.i.i.i: ; preds = %bb3.i.i13.i.i.i
- br label %bb3.i.i13.i.i.i
+ br label %bb3.i.i13.i.i.i
bb3.i.i13.i.i.i: ; preds = %bb2.i.i12.i.i.i, %bb4.i.i.i.i
- br i1 false, label %gcd.exit.i.i.i.i, label %bb2.i.i12.i.i.i
+ br i1 false, label %gcd.exit.i.i.i.i, label %bb2.i.i12.i.i.i
gcd.exit.i.i.i.i: ; preds = %bb3.i.i13.i.i.i
- br i1 false, label %bb5.i14.i.i.i.preheader, label %bb3.i.i.i.i92
+ br i1 false, label %bb5.i14.i.i.i.preheader, label %bb3.i.i.i.i92
bb5.i14.i.i.i.preheader: ; preds = %gcd.exit.i.i.i.i
- br label %bb5.i14.i.i.i
+ br label %bb5.i14.i.i.i
bb5.i14.i.i.i: ; preds = %int2lit.exit.i.i.i.i, %bb5.i14.i.i.i.preheader
- br i1 false, label %bb.i.i.i17.i.i.i, label %bb1.i.i.i18.i.i.i
+ br i1 false, label %bb.i.i.i17.i.i.i, label %bb1.i.i.i18.i.i.i
bb.i.i.i17.i.i.i: ; preds = %bb5.i14.i.i.i
- br label %int2lit.exit.i.i.i.i
+ br label %int2lit.exit.i.i.i.i
bb1.i.i.i18.i.i.i: ; preds = %bb5.i14.i.i.i
- br label %int2lit.exit.i.i.i.i
+ br label %int2lit.exit.i.i.i.i
int2lit.exit.i.i.i.i: ; preds = %bb1.i.i.i18.i.i.i, %bb.i.i.i17.i.i.i
- br i1 false, label %bb8.i19.i.i.i.loopexit, label %bb5.i14.i.i.i
+ br i1 false, label %bb8.i19.i.i.i.loopexit, label %bb5.i14.i.i.i
bb8.i19.i.i.i.loopexit: ; preds = %int2lit.exit.i.i.i.i
- br label %bb8.i19.i.i.i
+ br label %bb8.i19.i.i.i
bb8.i19.i.i.i: ; preds = %bb8.i19.i.i.i.loopexit, %int2lit.exit32.i.i.i.i
- br i1 false, label %bb5.i.i.i94, label %bb6.i.i.i95
+ br i1 false, label %bb5.i.i.i94, label %bb6.i.i.i95
bb5.i.i.i94: ; preds = %bb8.i19.i.i.i, %bb4.i.i.i90
- br label %bb.i2.i.i.i
+ br label %bb.i2.i.i.i
bb.i2.i.i.i: ; preds = %hpop.exit.i.i.i.i, %bb5.i.i.i94
- br i1 false, label %hpop.exit.i.i.i.i, label %bb1.i.i.i.i.i
+ br i1 false, label %hpop.exit.i.i.i.i, label %bb1.i.i.i.i.i
bb1.i.i.i.i.i: ; preds = %bb.i2.i.i.i
- br label %bb2.i.i.i.i.i
+ br label %bb2.i.i.i.i.i
bb2.i.i.i.i.i: ; preds = %bb11.i.i.i.i.i, %bb1.i.i.i.i.i
- br i1 false, label %bb3.i.i.i.i.i, label %bb12.i.i.i.i.i
+ br i1 false, label %bb3.i.i.i.i.i, label %bb12.i.i.i.i.i
bb3.i.i.i.i.i: ; preds = %bb2.i.i.i.i.i
- br i1 false, label %bb4.i.i.i.i.i, label %bb1.i.i.i.i.i.i
+ br i1 false, label %bb4.i.i.i.i.i, label %bb1.i.i.i.i.i.i
bb1.i.i.i.i.i.i: ; preds = %bb3.i.i.i.i.i
- br i1 false, label %bb8.i.i.i.i.i, label %bb3.i.i.i.i.i.i
+ br i1 false, label %bb8.i.i.i.i.i, label %bb3.i.i.i.i.i.i
bb3.i.i.i.i.i.i: ; preds = %bb1.i.i.i.i.i.i
- br i1 false, label %bb4.i.i.i.i.i, label %bb8.i.i.i.i.i
+ br i1 false, label %bb4.i.i.i.i.i, label %bb8.i.i.i.i.i
bb4.i.i.i.i.i: ; preds = %bb3.i.i.i.i.i.i, %bb3.i.i.i.i.i
- br i1 false, label %bb5.i.i.i.i.i, label %bb11.i.i.i.i.i
+ br i1 false, label %bb5.i.i.i.i.i, label %bb11.i.i.i.i.i
bb5.i.i.i.i.i: ; preds = %bb4.i.i.i.i.i
- br i1 false, label %bb6.i.i.i.i.i, label %bb1.i21.i.i.i.i.i
+ br i1 false, label %bb6.i.i.i.i.i, label %bb1.i21.i.i.i.i.i
bb1.i21.i.i.i.i.i: ; preds = %bb5.i.i.i.i.i
- br i1 false, label %bb11.i.i.i.i.i, label %bb3.i24.i.i.i.i.i
+ br i1 false, label %bb11.i.i.i.i.i, label %bb3.i24.i.i.i.i.i
bb3.i24.i.i.i.i.i: ; preds = %bb1.i21.i.i.i.i.i
- br i1 false, label %bb6.i.i.i.i.i, label %bb11.i.i.i.i.i
+ br i1 false, label %bb6.i.i.i.i.i, label %bb11.i.i.i.i.i
bb6.i.i.i.i.i: ; preds = %bb3.i24.i.i.i.i.i, %bb5.i.i.i.i.i
- br label %bb11.i.i.i.i.i
+ br label %bb11.i.i.i.i.i
bb8.i.i.i.i.i: ; preds = %bb3.i.i.i.i.i.i, %bb1.i.i.i.i.i.i
- br i1 false, label %bb9.i.i.i.i.i, label %bb12.i.i.i.i.i
+ br i1 false, label %bb9.i.i.i.i.i, label %bb12.i.i.i.i.i
bb9.i.i.i.i.i: ; preds = %bb8.i.i.i.i.i
- br i1 false, label %bb11.i.i.i.i.i, label %bb1.i8.i.i.i.i.i
+ br i1 false, label %bb11.i.i.i.i.i, label %bb1.i8.i.i.i.i.i
bb1.i8.i.i.i.i.i: ; preds = %bb9.i.i.i.i.i
- br i1 false, label %bb12.i.i.i.i.i, label %bb3.i11.i.i.i.i.i
+ br i1 false, label %bb12.i.i.i.i.i, label %bb3.i11.i.i.i.i.i
bb3.i11.i.i.i.i.i: ; preds = %bb1.i8.i.i.i.i.i
- br i1 false, label %bb11.i.i.i.i.i, label %bb12.i.i.i.i.i
+ br i1 false, label %bb11.i.i.i.i.i, label %bb12.i.i.i.i.i
bb11.i.i.i.i.i: ; preds = %bb3.i11.i.i.i.i.i, %bb9.i.i.i.i.i, %bb6.i.i.i.i.i, %bb3.i24.i.i.i.i.i, %bb1.i21.i.i.i.i.i, %bb4.i.i.i.i.i
- br label %bb2.i.i.i.i.i
+ br label %bb2.i.i.i.i.i
bb12.i.i.i.i.i: ; preds = %bb3.i11.i.i.i.i.i, %bb1.i8.i.i.i.i.i, %bb8.i.i.i.i.i, %bb2.i.i.i.i.i
- br label %hpop.exit.i.i.i.i
+ br label %hpop.exit.i.i.i.i
hpop.exit.i.i.i.i: ; preds = %bb12.i.i.i.i.i, %bb.i2.i.i.i
- br i1 false, label %sdecide.exit.i.i.i, label %bb.i2.i.i.i
+ br i1 false, label %sdecide.exit.i.i.i, label %bb.i2.i.i.i
sdecide.exit.i.i.i: ; preds = %hpop.exit.i.i.i.i
- br label %bb6.i.i.i95
+ br label %bb6.i.i.i95
bb6.i.i.i95: ; preds = %sdecide.exit.i.i.i, %bb8.i19.i.i.i, %bb8.i.i.i.i
- br label %decide.exit.i.i
+ br label %decide.exit.i.i
decide.exit.i.i: ; preds = %bb6.i.i.i95, %bb1.i23.i.i.i, %bb2.i.i.i87
- br i1 false, label %bb42.i.i, label %sat.exit.i.loopexit.loopexit2
+ br i1 false, label %bb42.i.i, label %sat.exit.i.loopexit.loopexit2
bb42.i.i: ; preds = %decide.exit.i.i
- br label %bb13.i.i71.outer
+ br label %bb13.i.i71.outer
sat.exit.i.loopexit.loopexit: ; preds = %bb24.i.i, %bb1.i68.i.i, %incincs.exit.i.i
- br label %sat.exit.i.loopexit
+ br label %sat.exit.i.loopexit
sat.exit.i.loopexit.loopexit2: ; preds = %decide.exit.i.i, %bb1.i48.i.i, %bb29.i.i
- br label %sat.exit.i.loopexit
+ br label %sat.exit.i.loopexit
sat.exit.i.loopexit: ; preds = %sat.exit.i.loopexit.loopexit2, %sat.exit.i.loopexit.loopexit
- br label %sat.exit.i
+ br label %sat.exit.i
sat.exit.i: ; preds = %sat.exit.i.loopexit, %bb1.i61.i.i, %bb8.i.i67, %bb1.i.i.i63, %bb3.i.i59
- br i1 false, label %bb7.i, label %bb2.i96
+ br i1 false, label %bb7.i, label %bb2.i96
bb2.i96: ; preds = %sat.exit.i
- switch i32 0, label %bb5.i99 [
- i32 10, label %bb4.i98
- i32 20, label %bb6.i100
- ]
+ switch i32 0, label %bb5.i99 [
+ i32 10, label %bb4.i98
+ i32 20, label %bb6.i100
+ ]
bb4.i98: ; preds = %bb2.i96
- br label %bb6.i100
+ br label %bb6.i100
bb5.i99: ; preds = %bb2.i96
- br label %bb6.i100
+ br label %bb6.i100
bb6.i100: ; preds = %bb5.i99, %bb4.i98, %bb2.i96
- br label %bb7.i
+ br label %bb7.i
bb7.i: ; preds = %bb6.i100, %sat.exit.i
- br i1 false, label %bb.i1.i, label %picosat_sat.exit
+ br i1 false, label %bb.i1.i, label %picosat_sat.exit
bb.i1.i: ; preds = %bb7.i
- br label %picosat_sat.exit
+ br label %picosat_sat.exit
picosat_sat.exit: ; preds = %bb.i1.i, %bb7.i
- switch i32 0, label %bb166 [
- i32 20, label %bb150
- i32 10, label %bb163
- ]
+ switch i32 0, label %bb166 [
+ i32 20, label %bb150
+ i32 10, label %bb163
+ ]
bb150: ; preds = %picosat_sat.exit
- br i1 false, label %bb152, label %bb151
+ br i1 false, label %bb152, label %bb151
bb151: ; preds = %bb150
- br label %bb152
+ br label %bb152
bb152: ; preds = %bb151, %bb150
- br i1 false, label %bb154, label %bb153
+ br i1 false, label %bb154, label %bb153
bb153: ; preds = %bb152
- br label %bb154
+ br label %bb154
bb154: ; preds = %bb153, %bb152
- br i1 false, label %bb157, label %bb156
+ br i1 false, label %bb157, label %bb156
bb156: ; preds = %bb154
- br label %bb157
+ br label %bb157
bb157: ; preds = %bb156, %bb154
- br i1 false, label %bb159, label %bb158
+ br i1 false, label %bb159, label %bb158
bb158: ; preds = %bb157
- br label %bb159
+ br label %bb159
bb159: ; preds = %bb158, %bb157
- br i1 false, label %bb167, label %bb160
+ br i1 false, label %bb167, label %bb160
bb160: ; preds = %bb159
- br label %bb167
+ br label %bb167
bb163: ; preds = %picosat_sat.exit
- br i1 false, label %bb167, label %bb164
+ br i1 false, label %bb167, label %bb164
bb164: ; preds = %bb163
- br label %bb4.i
+ br label %bb4.i
bb.i11: ; preds = %bb4.i
- br i1 false, label %bb.i.i12, label %bb1.i.i14
+ br i1 false, label %bb.i.i12, label %bb1.i.i14
bb.i.i12: ; preds = %bb.i11
- unreachable
+ unreachable
bb1.i.i14: ; preds = %bb.i11
- br i1 false, label %bb3.i.i16, label %bb2.i.i15
+ br i1 false, label %bb3.i.i16, label %bb2.i.i15
bb2.i.i15: ; preds = %bb1.i.i14
- unreachable
+ unreachable
bb3.i.i16: ; preds = %bb1.i.i14
- br i1 false, label %bb3.i, label %bb7.i.i
+ br i1 false, label %bb3.i, label %bb7.i.i
bb7.i.i: ; preds = %bb3.i.i16
- br i1 false, label %bb.i.i.i.i17, label %bb1.i.i.i.i18
+ br i1 false, label %bb.i.i.i.i17, label %bb1.i.i.i.i18
bb.i.i.i.i17: ; preds = %bb7.i.i
- br label %int2lit.exit.i.i
+ br label %int2lit.exit.i.i
bb1.i.i.i.i18: ; preds = %bb7.i.i
- br label %int2lit.exit.i.i
+ br label %int2lit.exit.i.i
int2lit.exit.i.i: ; preds = %bb1.i.i.i.i18, %bb.i.i.i.i17
- br i1 false, label %bb3.i, label %bb9.i.i
+ br i1 false, label %bb3.i, label %bb9.i.i
bb9.i.i: ; preds = %int2lit.exit.i.i
- br label %bb3.i
+ br label %bb3.i
bb3.i: ; preds = %bb9.i.i, %int2lit.exit.i.i, %bb3.i.i16
- br label %bb4.i
+ br label %bb4.i
bb4.i: ; preds = %bb3.i, %bb164
- br i1 false, label %bb5.i, label %bb.i11
+ br i1 false, label %bb5.i, label %bb.i11
bb5.i: ; preds = %bb4.i
- br i1 false, label %bb6.i, label %bb167
+ br i1 false, label %bb6.i, label %bb167
bb6.i: ; preds = %bb5.i
- br label %bb167
+ br label %bb167
bb166: ; preds = %picosat_sat.exit
- br label %bb167
+ br label %bb167
bb167: ; preds = %bb166, %bb6.i, %bb5.i, %bb163, %bb160, %bb159, %picosat_print.exit
- br i1 false, label %bb168, label %bb170
+ br i1 false, label %bb168, label %bb170
bb168: ; preds = %bb167
- br i1 false, label %bb170, label %bb169
+ br i1 false, label %bb170, label %bb169
bb169: ; preds = %bb168
- br i1 false, label %bb.i7, label %picosat_time_stamp.exit9
+ br i1 false, label %bb.i7, label %picosat_time_stamp.exit9
bb.i7: ; preds = %bb169
- br label %picosat_time_stamp.exit9
+ br label %picosat_time_stamp.exit9
picosat_time_stamp.exit9: ; preds = %bb.i7, %bb169
- br label %bb170
+ br label %bb170
bb170: ; preds = %picosat_time_stamp.exit9, %bb168, %bb167, %bb129
- br i1 false, label %bb.i.i3, label %picosat_leave.exit
+ br i1 false, label %bb.i.i3, label %picosat_leave.exit
bb.i.i3: ; preds = %bb170
- br label %picosat_leave.exit
+ br label %picosat_leave.exit
picosat_leave.exit: ; preds = %bb.i.i3, %bb170
- br i1 false, label %bb1.i.i, label %bb.i.i
+ br i1 false, label %bb1.i.i, label %bb.i.i
bb.i.i: ; preds = %picosat_leave.exit
- unreachable
+ unreachable
bb1.i.i: ; preds = %picosat_leave.exit
- br label %bb9.i.i.i
+ br label %bb9.i.i.i
bb3.i.i.i: ; preds = %bb9.i.i.i
- br i1 false, label %bb5.i.i.i, label %bb4.i.i.i
+ br i1 false, label %bb5.i.i.i, label %bb4.i.i.i
bb4.i.i.i: ; preds = %bb3.i.i.i
- br label %bb5.i.i.i
+ br label %bb5.i.i.i
bb5.i.i.i: ; preds = %bb4.i.i.i, %bb3.i.i.i
- br label %bb9.i.i.i
+ br label %bb9.i.i.i
bb9.i.i.i: ; preds = %bb5.i.i.i, %bb1.i.i
- br i1 false, label %bb10.i.i.i, label %bb3.i.i.i
+ br i1 false, label %bb10.i.i.i, label %bb3.i.i.i
bb10.i.i.i: ; preds = %bb9.i.i.i
- br i1 false, label %delete.exit.i.i.i, label %bb1.i.i.i.i
+ br i1 false, label %delete.exit.i.i.i, label %bb1.i.i.i.i
bb1.i.i.i.i: ; preds = %bb10.i.i.i
- br label %delete.exit.i.i.i
+ br label %delete.exit.i.i.i
delete.exit.i.i.i: ; preds = %bb1.i.i.i.i, %bb10.i.i.i
- br i1 false, label %delete_clauses.exit.i.i, label %bb1.i7.i.i.i
+ br i1 false, label %delete_clauses.exit.i.i, label %bb1.i7.i.i.i
bb1.i7.i.i.i: ; preds = %delete.exit.i.i.i
- br label %delete_clauses.exit.i.i
+ br label %delete_clauses.exit.i.i
delete_clauses.exit.i.i: ; preds = %bb1.i7.i.i.i, %delete.exit.i.i.i
- br label %bb3.i.i
+ br label %bb3.i.i
bb2.i.i: ; preds = %bb3.i.i
- br i1 false, label %lrelease.exit.i.i, label %bb1.i.i23.i.i
+ br i1 false, label %lrelease.exit.i.i, label %bb1.i.i23.i.i
bb1.i.i23.i.i: ; preds = %bb2.i.i
- br label %lrelease.exit.i.i
+ br label %lrelease.exit.i.i
lrelease.exit.i.i: ; preds = %bb1.i.i23.i.i, %bb2.i.i
- br label %bb3.i.i
+ br label %bb3.i.i
bb3.i.i: ; preds = %lrelease.exit.i.i, %delete_clauses.exit.i.i
- br i1 false, label %bb4.i.i, label %bb2.i.i
+ br i1 false, label %bb4.i.i, label %bb2.i.i
bb4.i.i: ; preds = %bb3.i.i
- br i1 false, label %delete.exit214.i.i, label %bb1.i208.i.i
+ br i1 false, label %delete.exit214.i.i, label %bb1.i208.i.i
bb1.i208.i.i: ; preds = %bb4.i.i
- br label %delete.exit214.i.i
+ br label %delete.exit214.i.i
delete.exit214.i.i: ; preds = %bb1.i208.i.i, %bb4.i.i
- br i1 false, label %delete.exit203.i.i, label %bb1.i197.i.i
+ br i1 false, label %delete.exit203.i.i, label %bb1.i197.i.i
bb1.i197.i.i: ; preds = %delete.exit214.i.i
- br label %delete.exit203.i.i
+ br label %delete.exit203.i.i
delete.exit203.i.i: ; preds = %bb1.i197.i.i, %delete.exit214.i.i
- br i1 false, label %delete.exit192.i.i, label %bb1.i186.i.i
+ br i1 false, label %delete.exit192.i.i, label %bb1.i186.i.i
bb1.i186.i.i: ; preds = %delete.exit203.i.i
- br label %delete.exit192.i.i
+ br label %delete.exit192.i.i
delete.exit192.i.i: ; preds = %bb1.i186.i.i, %delete.exit203.i.i
- br i1 false, label %delete.exit181.i.i, label %bb1.i175.i.i
+ br i1 false, label %delete.exit181.i.i, label %bb1.i175.i.i
bb1.i175.i.i: ; preds = %delete.exit192.i.i
- br label %delete.exit181.i.i
+ br label %delete.exit181.i.i
delete.exit181.i.i: ; preds = %bb1.i175.i.i, %delete.exit192.i.i
- br i1 false, label %delete.exit170.i.i, label %bb1.i164.i.i
+ br i1 false, label %delete.exit170.i.i, label %bb1.i164.i.i
bb1.i164.i.i: ; preds = %delete.exit181.i.i
- br label %delete.exit170.i.i
+ br label %delete.exit170.i.i
delete.exit170.i.i: ; preds = %bb1.i164.i.i, %delete.exit181.i.i
- br i1 false, label %delete.exit159.i.i, label %bb1.i153.i.i
+ br i1 false, label %delete.exit159.i.i, label %bb1.i153.i.i
bb1.i153.i.i: ; preds = %delete.exit170.i.i
- br label %delete.exit159.i.i
+ br label %delete.exit159.i.i
delete.exit159.i.i: ; preds = %bb1.i153.i.i, %delete.exit170.i.i
- br i1 false, label %delete.exit148.i.i, label %bb1.i142.i.i
+ br i1 false, label %delete.exit148.i.i, label %bb1.i142.i.i
bb1.i142.i.i: ; preds = %delete.exit159.i.i
- br label %delete.exit148.i.i
+ br label %delete.exit148.i.i
delete.exit148.i.i: ; preds = %bb1.i142.i.i, %delete.exit159.i.i
- br i1 false, label %delete.exit137.i.i, label %bb1.i131.i.i
+ br i1 false, label %delete.exit137.i.i, label %bb1.i131.i.i
bb1.i131.i.i: ; preds = %delete.exit148.i.i
- br label %delete.exit137.i.i
+ br label %delete.exit137.i.i
delete.exit137.i.i: ; preds = %bb1.i131.i.i, %delete.exit148.i.i
- br i1 false, label %delete.exit126.i.i, label %bb1.i120.i.i
+ br i1 false, label %delete.exit126.i.i, label %bb1.i120.i.i
bb1.i120.i.i: ; preds = %delete.exit137.i.i
- br label %delete.exit126.i.i
+ br label %delete.exit126.i.i
delete.exit126.i.i: ; preds = %bb1.i120.i.i, %delete.exit137.i.i
- br i1 false, label %delete.exit115.i.i, label %bb1.i109.i.i
+ br i1 false, label %delete.exit115.i.i, label %bb1.i109.i.i
bb1.i109.i.i: ; preds = %delete.exit126.i.i
- br label %delete.exit115.i.i
+ br label %delete.exit115.i.i
delete.exit115.i.i: ; preds = %bb1.i109.i.i, %delete.exit126.i.i
- br i1 false, label %delete.exit104.i.i, label %bb1.i98.i.i
+ br i1 false, label %delete.exit104.i.i, label %bb1.i98.i.i
bb1.i98.i.i: ; preds = %delete.exit115.i.i
- br label %delete.exit104.i.i
+ br label %delete.exit104.i.i
delete.exit104.i.i: ; preds = %bb1.i98.i.i, %delete.exit115.i.i
- br i1 false, label %delete.exit93.i.i, label %bb1.i87.i.i
+ br i1 false, label %delete.exit93.i.i, label %bb1.i87.i.i
bb1.i87.i.i: ; preds = %delete.exit104.i.i
- br label %delete.exit93.i.i
+ br label %delete.exit93.i.i
delete.exit93.i.i: ; preds = %bb1.i87.i.i, %delete.exit104.i.i
- br i1 false, label %delete.exit82.i.i, label %bb1.i76.i.i
+ br i1 false, label %delete.exit82.i.i, label %bb1.i76.i.i
bb1.i76.i.i: ; preds = %delete.exit93.i.i
- br label %delete.exit82.i.i
+ br label %delete.exit82.i.i
delete.exit82.i.i: ; preds = %bb1.i76.i.i, %delete.exit93.i.i
- br i1 false, label %delete.exit71.i.i, label %bb1.i65.i.i
+ br i1 false, label %delete.exit71.i.i, label %bb1.i65.i.i
bb1.i65.i.i: ; preds = %delete.exit82.i.i
- br label %delete.exit71.i.i
+ br label %delete.exit71.i.i
delete.exit71.i.i: ; preds = %bb1.i65.i.i, %delete.exit82.i.i
- br i1 false, label %delete.exit60.i.i, label %bb1.i54.i.i
+ br i1 false, label %delete.exit60.i.i, label %bb1.i54.i.i
bb1.i54.i.i: ; preds = %delete.exit71.i.i
- br label %delete.exit60.i.i
+ br label %delete.exit60.i.i
delete.exit60.i.i: ; preds = %bb1.i54.i.i, %delete.exit71.i.i
- br i1 false, label %delete.exit38.i.i, label %bb1.i32.i.i
+ br i1 false, label %delete.exit38.i.i, label %bb1.i32.i.i
bb1.i32.i.i: ; preds = %delete.exit60.i.i
- br label %delete.exit38.i.i
+ br label %delete.exit38.i.i
delete.exit38.i.i: ; preds = %bb1.i32.i.i, %delete.exit60.i.i
- br i1 false, label %delete.exit18.i.i, label %bb1.i12.i.i
+ br i1 false, label %delete.exit18.i.i, label %bb1.i12.i.i
bb1.i12.i.i: ; preds = %delete.exit38.i.i
- br label %delete.exit18.i.i
+ br label %delete.exit18.i.i
delete.exit18.i.i: ; preds = %bb1.i12.i.i, %delete.exit38.i.i
- br i1 false, label %picosat_reset.exit, label %bb1.i2.i.i
+ br i1 false, label %picosat_reset.exit, label %bb1.i2.i.i
bb1.i2.i.i: ; preds = %delete.exit18.i.i
- br label %picosat_reset.exit
+ br label %picosat_reset.exit
picosat_reset.exit: ; preds = %bb1.i2.i.i, %delete.exit18.i.i
- br label %bb171
+ br label %bb171
bb171: ; preds = %picosat_reset.exit, %bb110
- br i1 false, label %bb173, label %bb172
+ br i1 false, label %bb173, label %bb172
bb172: ; preds = %bb171
- br label %bb173
+ br label %bb173
bb173: ; preds = %bb172, %bb171
- br i1 false, label %bb175, label %bb174
+ br i1 false, label %bb175, label %bb174
bb174: ; preds = %bb173
- br label %bb175
+ br label %bb175
bb175: ; preds = %bb174, %bb173
- br i1 false, label %bb177, label %bb176
+ br i1 false, label %bb177, label %bb176
bb176: ; preds = %bb175
- br label %bb177
+ br label %bb177
bb177: ; preds = %bb176, %bb175
- br i1 false, label %bb179, label %bb178
+ br i1 false, label %bb179, label %bb178
bb178: ; preds = %bb177
- ret i32 0
+ ret i32 0
bb179: ; preds = %bb177
- ret i32 0
+ ret i32 0
}
define i32 @main(i32 %argc, i8** %argv) nounwind {
entry:
- br label %bb2
+ br label %bb2
bb: ; preds = %bb2
- br i1 false, label %bb3, label %bb2
+ br i1 false, label %bb3, label %bb2
bb2: ; preds = %bb, %entry
- br i1 false, label %bb5.loopexit, label %bb
+ br i1 false, label %bb5.loopexit, label %bb
bb3: ; preds = %bb
- br i1 false, label %bb5, label %bb4
+ br i1 false, label %bb5, label %bb4
bb4: ; preds = %bb3
- br label %bb5
+ br label %bb5
bb5.loopexit: ; preds = %bb2
- br label %bb5
+ br label %bb5
bb5: ; preds = %bb5.loopexit, %bb4, %bb3
- %0 = call fastcc i32 @picosat_main(i32 %argc, i8** %argv) nounwind ; <i32> [#uses=2]
- br i1 false, label %bb7, label %bb6
+ %0 = call fastcc i32 @picosat_main(i32 %argc, i8** %argv) nounwind ; <i32> [#uses=2]
+ br i1 false, label %bb7, label %bb6
bb6: ; preds = %bb5
- ret i32 %0
+ ret i32 %0
bb7: ; preds = %bb5
- ret i32 %0
+ ret i32 %0
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/pr32917.ll b/llvm/test/Transforms/ArgumentPromotion/pr32917.ll
index a2aeac081cea..34c025072f89 100644
--- a/llvm/test/Transforms/ArgumentPromotion/pr32917.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/pr32917.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; PR 32917
@@ -5,6 +6,15 @@
@a = common local_unnamed_addr global i32 0, align 4
define i32 @fn2() local_unnamed_addr {
+; CHECK-LABEL: define {{[^@]+}}@fn2() local_unnamed_addr
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @b, align 4
+; CHECK-NEXT: [[TMP2:%.*]] = sext i32 [[TMP1]] to i64
+; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to i32*
+; CHECK-NEXT: [[DOTIDX:%.*]] = getelementptr i32, i32* [[TMP3]], i64 -1
+; CHECK-NEXT: [[DOTIDX_VAL:%.*]] = load i32, i32* [[DOTIDX]], align 4
+; CHECK-NEXT: call fastcc void @fn1(i32 [[DOTIDX_VAL]])
+; CHECK-NEXT: ret i32 undef
+;
%1 = load i32, i32* @b, align 4
%2 = sext i32 %1 to i64
%3 = inttoptr i64 %2 to i32*
@@ -13,11 +23,13 @@ define i32 @fn2() local_unnamed_addr {
}
define internal fastcc void @fn1(i32* nocapture readonly) unnamed_addr {
+; CHECK-LABEL: define {{[^@]+}}@fn1
+; CHECK-SAME: (i32 [[DOT18446744073709551615_VAL:%.*]]) unnamed_addr
+; CHECK-NEXT: store i32 [[DOT18446744073709551615_VAL]], i32* @a, align 4
+; CHECK-NEXT: ret void
+;
%2 = getelementptr inbounds i32, i32* %0, i64 -1
%3 = load i32, i32* %2, align 4
store i32 %3, i32* @a, align 4
ret void
}
-
-; CHECK: getelementptr {{.*}} -1
-; CHECK-NOT: getelementptr {{.*}} 4294967295
diff --git a/llvm/test/Transforms/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll b/llvm/test/Transforms/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
index ad22bed035a7..4c2503d8b0cc 100644
--- a/llvm/test/Transforms/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
@@ -1,18 +1,29 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt -argpromotion -verify -dse -S %s -o - | FileCheck %s
; Fix for PR33641. ArgumentPromotion removed the argument to bar but left the call to
; dbg.value which still used the removed argument.
+; The %p argument should be removed, and the use of it in dbg.value should be
+; changed to undef.
+
%p_t = type i16*
%fun_t = type void (%p_t)*
define void @foo() {
+; CHECK-LABEL: define {{[^@]+}}@foo()
+; CHECK-NEXT: ret void
+;
%tmp = alloca %fun_t
store %fun_t @bar, %fun_t* %tmp
ret void
}
define internal void @bar(%p_t %p) {
+; CHECK-LABEL: define {{[^@]+}}@bar()
+; CHECK-NEXT: call void @llvm.dbg.value(metadata i16* undef, metadata !3, metadata !DIExpression()), !dbg !5
+; CHECK-NEXT: ret void
+;
call void @llvm.dbg.value(metadata %p_t %p, metadata !4, metadata !5), !dbg !6
ret void
}
@@ -29,10 +40,3 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!4 = !DILocalVariable(name: "p", scope: !3)
!5 = !DIExpression()
!6 = !DILocation(line: 1, column: 1, scope: !3)
-
-; The %p argument should be removed, and the use of it in dbg.value should be
-; changed to undef.
-; CHECK: define internal void @bar() {
-; CHECK-NEXT: call void @llvm.dbg.value(metadata i16* undef
-; CHECK-NEXT: ret void
-; CHECK-NEXT: }
diff --git a/llvm/test/Transforms/ArgumentPromotion/profile.ll b/llvm/test/Transforms/ArgumentPromotion/profile.ll
index f667f9ea2c2a..f4bceb3eb913 100644
--- a/llvm/test/Transforms/ArgumentPromotion/profile.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/profile.ll
@@ -1,17 +1,26 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt -argpromotion -mem2reg -S < %s | FileCheck %s
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
; Checks if !prof metadata is corret in deadargelim.
define void @caller() #0 {
+; CHECK-LABEL: define {{[^@]+}}@caller()
+; CHECK-NEXT: call void @promote_i32_ptr(i32 42), !prof !0
+; CHECK-NEXT: ret void
+;
%x = alloca i32
store i32 42, i32* %x
call void @promote_i32_ptr(i32* %x), !prof !0
-; CHECK: call void @promote_i32_ptr(i32 42), !prof ![[PROF:[0-9]]]
ret void
}
define internal void @promote_i32_ptr(i32* %xp) {
+; CHECK-LABEL: define {{[^@]+}}@promote_i32_ptr
+; CHECK-SAME: (i32 [[XP_VAL:%.*]])
+; CHECK-NEXT: call void @use_i32(i32 [[XP_VAL]])
+; CHECK-NEXT: ret void
+;
%x = load i32, i32* %xp
call void @use_i32(i32 %x)
ret void
@@ -19,5 +28,4 @@ define internal void @promote_i32_ptr(i32* %xp) {
declare void @use_i32(i32)
-; CHECK: ![[PROF]] = !{!"branch_weights", i32 30}
!0 = !{!"branch_weights", i32 30}
diff --git a/llvm/test/Transforms/ArgumentPromotion/reserve-tbaa.ll b/llvm/test/Transforms/ArgumentPromotion/reserve-tbaa.ll
index 3a3aa44b2a98..ed76f59cb038 100644
--- a/llvm/test/Transforms/ArgumentPromotion/reserve-tbaa.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/reserve-tbaa.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
@@ -14,6 +15,14 @@
@d = global i8 0, align 1
define internal fastcc void @fn(i32* nocapture readonly %p1, i64* nocapture readonly %p2) {
+; CHECK-LABEL: define {{[^@]+}}@fn
+; CHECK-SAME: (i32 [[P1_VAL:%.*]], i64 [[P2_VAL:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[CONV:%.*]] = trunc i64 [[P2_VAL]] to i32
+; CHECK-NEXT: [[CONV1:%.*]] = trunc i32 [[P1_VAL]] to i8
+; CHECK-NEXT: store i8 [[CONV1]], i8* @d, align 1, !tbaa !0
+; CHECK-NEXT: ret void
+;
entry:
%0 = load i64, i64* %p2, align 8, !tbaa !1
%conv = trunc i64 %0 to i32
@@ -24,11 +33,18 @@ entry:
}
define i32 @main() {
+; CHECK-LABEL: define {{[^@]+}}@main()
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = load i32**, i32*** @e, align 8, !tbaa !3
+; CHECK-NEXT: store i32* @g, i32** [[TMP0]], align 8, !tbaa !3
+; CHECK-NEXT: [[TMP1:%.*]] = load i32*, i32** @a, align 8, !tbaa !3
+; CHECK-NEXT: store i32 1, i32* [[TMP1]], align 4, !tbaa !5
+; CHECK-NEXT: [[G_VAL:%.*]] = load i32, i32* @g, align 4, !tbaa !5
+; CHECK-NEXT: [[C_VAL:%.*]] = load i64, i64* @c, align 8, !tbaa !7
+; CHECK-NEXT: call fastcc void @fn(i32 [[G_VAL]], i64 [[C_VAL]])
+; CHECK-NEXT: ret i32 0
+;
entry:
-; CHECK-LABEL: main
-; CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa ![[I32:[0-9]+]]
-; CHECK: %g.val = load i32, i32* @g, align 4, !tbaa ![[I32]]
-; CHECK: %c.val = load i64, i64* @c, align 8, !tbaa ![[LONG:[0-9]+]]
%0 = load i32**, i32*** @e, align 8, !tbaa !8
store i32* @g, i32** %0, align 8, !tbaa !8
%1 = load i32*, i32** @a, align 8, !tbaa !8
@@ -47,7 +63,4 @@ entry:
!7 = !{!3, !3, i64 0}
!8 = !{!9, !9, i64 0}
!9 = !{!"any pointer", !3, i64 0}
-; CHECK: ![[I32]] = !{![[I32_TYPE:[0-9]+]], ![[I32_TYPE]], i64 0}
-; CHECK: ![[I32_TYPE]] = !{!"int", !{{.*}}, i64 0}
-; CHECK: ![[LONG]] = !{![[LONG_TYPE:[0-9]+]], ![[LONG_TYPE]], i64 0}
-; CHECK: ![[LONG_TYPE]] = !{!"long", !{{.*}}, i64 0}
+
diff --git a/llvm/test/Transforms/ArgumentPromotion/sret.ll b/llvm/test/Transforms/ArgumentPromotion/sret.ll
index 55fc036f1775..c4328e41bb26 100644
--- a/llvm/test/Transforms/ArgumentPromotion/sret.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/sret.ll
@@ -1,29 +1,40 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc"
-; CHECK: define internal void @add(i32 %[[THIS1:.*]], i32 %[[THIS2:.*]], i32* noalias %[[SR:.*]])
define internal void @add({i32, i32}* %this, i32* sret %r) {
+; CHECK-LABEL: define {{[^@]+}}@add
+; CHECK-SAME: (i32 [[THIS_0_0_VAL:%.*]], i32 [[THIS_0_1_VAL:%.*]], i32* noalias [[R:%.*]])
+; CHECK-NEXT: [[AB:%.*]] = add i32 [[THIS_0_0_VAL]], [[THIS_0_1_VAL]]
+; CHECK-NEXT: store i32 [[AB]], i32* [[R]]
+; CHECK-NEXT: ret void
+;
%ap = getelementptr {i32, i32}, {i32, i32}* %this, i32 0, i32 0
%bp = getelementptr {i32, i32}, {i32, i32}* %this, i32 0, i32 1
%a = load i32, i32* %ap
%b = load i32, i32* %bp
- ; CHECK: %[[AB:.*]] = add i32 %[[THIS1]], %[[THIS2]]
%ab = add i32 %a, %b
- ; CHECK: store i32 %[[AB]], i32* %[[SR]]
store i32 %ab, i32* %r
ret void
}
-; CHECK: define void @f()
define void @f() {
- ; CHECK: %[[R:.*]] = alloca i32
+; CHECK-LABEL: define {{[^@]+}}@f()
+; CHECK-NEXT: [[R:%.*]] = alloca i32
+; CHECK-NEXT: [[PAIR:%.*]] = alloca { i32, i32 }
+; CHECK-NEXT: [[PAIR_IDX:%.*]] = getelementptr { i32, i32 }, { i32, i32 }* [[PAIR]], i64 0, i32 0
+; CHECK-NEXT: [[PAIR_IDX_VAL:%.*]] = load i32, i32* [[PAIR_IDX]]
+; CHECK-NEXT: [[PAIR_IDX1:%.*]] = getelementptr { i32, i32 }, { i32, i32 }* [[PAIR]], i64 0, i32 1
+; CHECK-NEXT: [[PAIR_IDX1_VAL:%.*]] = load i32, i32* [[PAIR_IDX1]]
+; CHECK-NEXT: call void @add(i32 [[PAIR_IDX_VAL]], i32 [[PAIR_IDX1_VAL]], i32* noalias [[R]])
+; CHECK-NEXT: ret void
+;
%r = alloca i32
%pair = alloca {i32, i32}
- ; CHECK: call void @add(i32 %{{.*}}, i32 %{{.*}}, i32* noalias %[[R]])
call void @add({i32, i32}* %pair, i32* sret %r)
ret void
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/tail.ll b/llvm/test/Transforms/ArgumentPromotion/tail.ll
index 93de60afe915..f4bb06a6e4ef 100644
--- a/llvm/test/Transforms/ArgumentPromotion/tail.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/tail.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt %s -argpromotion -S -o - | FileCheck %s
; RUN: opt %s -passes=argpromotion -S -o - | FileCheck %s
; PR14710
@@ -9,15 +10,30 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
declare i8* @foo(%pair*)
define internal void @bar(%pair* byval %Data) {
-; CHECK: define internal void @bar(i32 %Data.0, i32 %Data.1)
-; CHECK: %Data = alloca %pair
-; CHECK-NOT: tail
-; CHECK: call i8* @foo(%pair* %Data)
+; CHECK-LABEL: define {{[^@]+}}@bar
+; CHECK-SAME: (i32 [[DATA_0:%.*]], i32 [[DATA_1:%.*]])
+; CHECK-NEXT: [[DATA:%.*]] = alloca [[PAIR:%.*]]
+; CHECK-NEXT: [[DOT0:%.*]] = getelementptr [[PAIR]], %pair* [[DATA]], i32 0, i32 0
+; CHECK-NEXT: store i32 [[DATA_0]], i32* [[DOT0]]
+; CHECK-NEXT: [[DOT1:%.*]] = getelementptr [[PAIR]], %pair* [[DATA]], i32 0, i32 1
+; CHECK-NEXT: store i32 [[DATA_1]], i32* [[DOT1]]
+; CHECK-NEXT: [[TMP1:%.*]] = call i8* @foo(%pair* [[DATA]])
+; CHECK-NEXT: ret void
+;
tail call i8* @foo(%pair* %Data)
ret void
}
define void @zed(%pair* byval %Data) {
+; CHECK-LABEL: define {{[^@]+}}@zed
+; CHECK-SAME: (%pair* byval [[DATA:%.*]])
+; CHECK-NEXT: [[DATA_0:%.*]] = getelementptr [[PAIR:%.*]], %pair* [[DATA]], i32 0, i32 0
+; CHECK-NEXT: [[DATA_0_VAL:%.*]] = load i32, i32* [[DATA_0]]
+; CHECK-NEXT: [[DATA_1:%.*]] = getelementptr [[PAIR]], %pair* [[DATA]], i32 0, i32 1
+; CHECK-NEXT: [[DATA_1_VAL:%.*]] = load i32, i32* [[DATA_1]]
+; CHECK-NEXT: call void @bar(i32 [[DATA_0_VAL]], i32 [[DATA_1_VAL]])
+; CHECK-NEXT: ret void
+;
call void @bar(%pair* byval %Data)
ret void
}
diff --git a/llvm/test/Transforms/ArgumentPromotion/variadic.ll b/llvm/test/Transforms/ArgumentPromotion/variadic.ll
index 034f853883fd..2b35c5aceb92 100644
--- a/llvm/test/Transforms/ArgumentPromotion/variadic.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/variadic.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt < %s -argpromotion -S | FileCheck %s
; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
@@ -15,6 +16,12 @@ target triple = "x86_64-unknown-linux-gnu"
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readnone %argv) #0 {
+; CHECK-LABEL: define {{[^@]+}}@main
+; CHECK-SAME: (i32 [[ARGC:%.*]], i8** nocapture readnone [[ARGV:%.*]])
+; CHECK-NEXT: entry:
+; CHECK-NEXT: tail call void (i8*, i8*, i8*, i8*, i8*, ...) @callee_t0f(i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, %struct.tt0* byval align 8 @t45)
+; CHECK-NEXT: ret i32 0
+;
entry:
tail call void (i8*, i8*, i8*, i8*, i8*, ...) @callee_t0f(i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, %struct.tt0* byval align 8 @t45)
ret i32 0
@@ -22,8 +29,11 @@ entry:
; Function Attrs: nounwind uwtable
define internal void @callee_t0f(i8* nocapture readnone %tp13, i8* nocapture readnone %tp14, i8* nocapture readnone %tp15, i8* nocapture readnone %tp16, i8* nocapture readnone %tp17, ...) {
+; CHECK-LABEL: define {{[^@]+}}@callee_t0f
+; CHECK-SAME: (i8* nocapture readnone [[TP13:%.*]], i8* nocapture readnone [[TP14:%.*]], i8* nocapture readnone [[TP15:%.*]], i8* nocapture readnone [[TP16:%.*]], i8* nocapture readnone [[TP17:%.*]], ...)
+; CHECK-NEXT: entry:
+; CHECK-NEXT: ret void
+;
entry:
ret void
}
-
-; CHECK-LABEL: define internal void @callee_t0f(i8* nocapture readnone %tp13, i8* nocapture readnone %tp14, i8* nocapture readnone %tp15, i8* nocapture readnone %tp16, i8* nocapture readnone %tp17, ...)
More information about the llvm-commits
mailing list