1- ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
1+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --filter "br" --filter "^.*:"
22; RUN: opt -passes="print<block-freq>,loop-vectorize" -force-vector-width=4 -force-vector-interleave=1 -S < %s | FileCheck %s
33; RUN: opt -passes="print<block-freq>,loop-vectorize" -force-vector-width=4 -force-vector-interleave=4 -S < %s | FileCheck %s -check-prefix=CHECK-MASKED
44
55target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
66
7- @a = dso_local global [1024 x i32 ] zeroinitializer , align 16
8- @b = dso_local global [1024 x i32 ] zeroinitializer , align 16
7+ @a = global [1024 x i32 ] zeroinitializer , align 16
8+ @b = global [1024 x i32 ] zeroinitializer , align 16
99
1010; Check correctness of profile info for vectorization without epilog.
1111; Function Attrs: nofree norecurse nounwind uwtable
12- define dso_local void @_Z3foov () local_unnamed_addr # 0 {
12+ define void @_Z3foov () {
1313; CHECK-LABEL: @_Z3foov(
14- ; CHECK: [[VECTOR_BODY:vector\.body]]:
15- ; CHECK: br i1 [[TMP:%.*]], label [[MIDDLE_BLOCK:%.*]], label %[[VECTOR_BODY]], !prof [[LP1_255:\!.*]],
16- ; CHECK: [[FOR_BODY:for\.body]]:
17- ; CHECK: br i1 [[EXITCOND:%.*]], label [[FOR_END_LOOPEXIT:%.*]], label %[[FOR_BODY]], !prof [[LP0_0:\!.*]],
18- ; CHECK-MASKED: [[VECTOR_BODY:vector\.body]]:
19- ; CHECK-MASKED: br i1 [[TMP:%.*]], label [[MIDDLE_BLOCK:%.*]], label %[[VECTOR_BODY]], !prof [[LP1_63:\!.*]],
20- ; CHECK-MASKED: [[FOR_BODY:for\.body]]:
21- ; CHECK-MASKED: br i1 [[EXITCOND:%.*]], label [[FOR_END_LOOPEXIT:%.*]], label %[[FOR_BODY]], !prof [[LP0_0:\!.*]],
14+ ; CHECK: entry:
15+ ; CHECK: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]], !prof [[PROF0:![0-9]+]]
16+ ; CHECK: vector.ph:
17+ ; CHECK: br label [[VECTOR_BODY:%.*]]
18+ ; CHECK: vector.body:
19+ ; CHECK: br i1 [[TMP6:%.*]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !prof [[PROF1:![0-9]+]], !llvm.loop [[LOOP2:![0-9]+]]
20+ ; CHECK: middle.block:
21+ ; CHECK: br i1 true, label [[FOR_COND_CLEANUP:%.*]], label [[SCALAR_PH]], !prof [[PROF5:![0-9]+]]
22+ ; CHECK: scalar.ph:
23+ ; CHECK: br label [[FOR_BODY:%.*]]
24+ ; CHECK: for.cond.cleanup:
25+ ; CHECK: for.body:
26+ ; CHECK: br i1 [[EXITCOND:%.*]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]], !prof [[PROF6:![0-9]+]], !llvm.loop [[LOOP7:![0-9]+]]
27+ ;
28+ ; CHECK-MASKED-LABEL: @_Z3foov(
29+ ; CHECK-MASKED: entry:
30+ ; CHECK-MASKED: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]], !prof [[PROF0:![0-9]+]]
31+ ; CHECK-MASKED: vector.ph:
32+ ; CHECK-MASKED: br label [[VECTOR_BODY:%.*]]
33+ ; CHECK-MASKED: vector.body:
34+ ; CHECK-MASKED: br i1 [[TMP18:%.*]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !prof [[PROF1:![0-9]+]], !llvm.loop [[LOOP2:![0-9]+]]
35+ ; CHECK-MASKED: middle.block:
36+ ; CHECK-MASKED: br i1 true, label [[FOR_COND_CLEANUP:%.*]], label [[SCALAR_PH]], !prof [[PROF5:![0-9]+]]
37+ ; CHECK-MASKED: scalar.ph:
38+ ; CHECK-MASKED: br label [[FOR_BODY:%.*]]
39+ ; CHECK-MASKED: for.cond.cleanup:
40+ ; CHECK-MASKED: for.body:
41+ ; CHECK-MASKED: br i1 [[EXITCOND:%.*]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]], !prof [[PROF6:![0-9]+]], !llvm.loop [[LOOP7:![0-9]+]]
2242;
2343entry:
2444 br label %for.body
@@ -27,32 +47,52 @@ for.cond.cleanup: ; preds = %for.body
2747 ret void
2848
2949for.body: ; preds = %for.body, %entry
30- %indvars. iv = phi i64 [ 0 , %entry ], [ %indvars. iv.next , %for.body ]
31- %arrayidx = getelementptr inbounds [1024 x i32 ], ptr @b , i64 0 , i64 %indvars. iv
32- %0 = load i32 , ptr %arrayidx , align 4 , !tbaa !2
33- %1 = trunc i64 %indvars. iv to i32
50+ %iv = phi i64 [ 0 , %entry ], [ %iv.next , %for.body ]
51+ %arrayidx = getelementptr inbounds [1024 x i32 ], ptr @b , i64 0 , i64 %iv
52+ %0 = load i32 , ptr %arrayidx , align 4
53+ %1 = trunc i64 %iv to i32
3454 %mul = mul nsw i32 %0 , %1
35- %arrayidx2 = getelementptr inbounds [1024 x i32 ], ptr @a , i64 0 , i64 %indvars. iv
36- %2 = load i32 , ptr %arrayidx2 , align 4 , !tbaa !2
55+ %arrayidx2 = getelementptr inbounds [1024 x i32 ], ptr @a , i64 0 , i64 %iv
56+ %2 = load i32 , ptr %arrayidx2 , align 4
3757 %add = add nsw i32 %2 , %mul
38- store i32 %add , ptr %arrayidx2 , align 4 , !tbaa !2
39- %indvars. iv.next = add nuw nsw i64 %indvars. iv , 1
40- %exitcond = icmp eq i64 %indvars. iv.next , 1024
58+ store i32 %add , ptr %arrayidx2 , align 4
59+ %iv.next = add nuw nsw i64 %iv , 1
60+ %exitcond = icmp eq i64 %iv.next , 1024
4161 br i1 %exitcond , label %for.cond.cleanup , label %for.body , !prof !6
4262}
4363
4464; Check correctness of profile info for vectorization with epilog.
4565; Function Attrs: nofree norecurse nounwind uwtable
46- define dso_local void @_Z3foo2v () local_unnamed_addr # 0 {
66+ define void @_Z3foo2v () {
4767; CHECK-LABEL: @_Z3foo2v(
48- ; CHECK: [[VECTOR_BODY:vector\.body]]:
49- ; CHECK: br i1 [[TMP:%.*]], label [[MIDDLE_BLOCK:%.*]], label %[[VECTOR_BODY]], !prof [[LP1_255:\!.*]],
50- ; CHECK: [[FOR_BODY:for\.body]]:
51- ; CHECK: br i1 [[EXITCOND:%.*]], label [[FOR_END_LOOPEXIT:%.*]], label %[[FOR_BODY]], !prof [[LP1_2:\!.*]],
52- ; CHECK-MASKED: [[VECTOR_BODY:vector\.body]]:
53- ; CHECK-MASKED: br i1 [[TMP:%.*]], label [[MIDDLE_BLOCK:%.*]], label %[[VECTOR_BODY]], !prof [[LP1_63:\!.*]],
54- ; CHECK-MASKED: [[FOR_BODY:for\.body]]:
55- ; CHECK-MASKED: br i1 [[EXITCOND:%.*]], label [[FOR_END_LOOPEXIT:%.*]], label %[[FOR_BODY]], !prof [[LP1_2:\!.*]],
68+ ; CHECK: entry:
69+ ; CHECK: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]], !prof [[PROF0]]
70+ ; CHECK: vector.ph:
71+ ; CHECK: br label [[VECTOR_BODY:%.*]]
72+ ; CHECK: vector.body:
73+ ; CHECK: br i1 [[TMP6:%.*]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !prof [[PROF1]], !llvm.loop [[LOOP8:![0-9]+]]
74+ ; CHECK: middle.block:
75+ ; CHECK: br i1 false, label [[FOR_COND_CLEANUP:%.*]], label [[SCALAR_PH]], !prof [[PROF5]]
76+ ; CHECK: scalar.ph:
77+ ; CHECK: br label [[FOR_BODY:%.*]]
78+ ; CHECK: for.cond.cleanup:
79+ ; CHECK: for.body:
80+ ; CHECK: br i1 [[EXITCOND:%.*]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]], !prof [[PROF9:![0-9]+]], !llvm.loop [[LOOP10:![0-9]+]]
81+ ;
82+ ; CHECK-MASKED-LABEL: @_Z3foo2v(
83+ ; CHECK-MASKED: entry:
84+ ; CHECK-MASKED: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]], !prof [[PROF0]]
85+ ; CHECK-MASKED: vector.ph:
86+ ; CHECK-MASKED: br label [[VECTOR_BODY:%.*]]
87+ ; CHECK-MASKED: vector.body:
88+ ; CHECK-MASKED: br i1 [[TMP18:%.*]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !prof [[PROF1]], !llvm.loop [[LOOP8:![0-9]+]]
89+ ; CHECK-MASKED: middle.block:
90+ ; CHECK-MASKED: br i1 false, label [[FOR_COND_CLEANUP:%.*]], label [[SCALAR_PH]], !prof [[PROF5]]
91+ ; CHECK-MASKED: scalar.ph:
92+ ; CHECK-MASKED: br label [[FOR_BODY:%.*]]
93+ ; CHECK-MASKED: for.cond.cleanup:
94+ ; CHECK-MASKED: for.body:
95+ ; CHECK-MASKED: br i1 [[EXITCOND:%.*]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]], !prof [[PROF9:![0-9]+]], !llvm.loop [[LOOP10:![0-9]+]]
5696;
5797entry:
5898 br label %for.body
@@ -61,36 +101,20 @@ for.cond.cleanup: ; preds = %for.body
61101 ret void
62102
63103for.body: ; preds = %for.body, %entry
64- %indvars. iv = phi i64 [ 0 , %entry ], [ %indvars. iv.next , %for.body ]
65- %arrayidx = getelementptr inbounds [1024 x i32 ], ptr @b , i64 0 , i64 %indvars. iv
66- %0 = load i32 , ptr %arrayidx , align 4 , !tbaa !2
67- %1 = trunc i64 %indvars. iv to i32
104+ %iv = phi i64 [ 0 , %entry ], [ %iv.next , %for.body ]
105+ %arrayidx = getelementptr inbounds [1024 x i32 ], ptr @b , i64 0 , i64 %iv
106+ %0 = load i32 , ptr %arrayidx , align 4
107+ %1 = trunc i64 %iv to i32
68108 %mul = mul nsw i32 %0 , %1
69- %arrayidx2 = getelementptr inbounds [1024 x i32 ], ptr @a , i64 0 , i64 %indvars. iv
70- %2 = load i32 , ptr %arrayidx2 , align 4 , !tbaa !2
109+ %arrayidx2 = getelementptr inbounds [1024 x i32 ], ptr @a , i64 0 , i64 %iv
110+ %2 = load i32 , ptr %arrayidx2 , align 4
71111 %add = add nsw i32 %2 , %mul
72- store i32 %add , ptr %arrayidx2 , align 4 , !tbaa !2
73- %indvars. iv.next = add nuw nsw i64 %indvars. iv , 1
74- %exitcond = icmp eq i64 %indvars. iv.next , 1027
112+ store i32 %add , ptr %arrayidx2 , align 4
113+ %iv.next = add nuw nsw i64 %iv , 1
114+ %exitcond = icmp eq i64 %iv.next , 1027
75115 br i1 %exitcond , label %for.cond.cleanup , label %for.body , !prof !7
76116}
77117
78- attributes #0 = { "use-soft-float" ="false" }
79-
80- !llvm.module.flags = !{!0 }
81- !llvm.ident = !{!1 }
82-
83- ; CHECK: [[LP1_255]] = !{!"branch_weights", i32 1, i32 255}
84- ; CHECK: [[LP0_0]] = !{!"branch_weights", i32 0, i32 0}
85- ; CHECK-MASKED: [[LP1_63]] = !{!"branch_weights", i32 1, i32 63}
86- ; CHECK-MASKED: [[LP0_0]] = !{!"branch_weights", i32 0, i32 0}
87- ; CHECK: [[LP1_2]] = !{!"branch_weights", i32 1, i32 2}
88118
89- !0 = !{i32 1 , !"wchar_size" , i32 4 }
90- !1 = !{!"clang version 10.0.0 (https://github.com/llvm/llvm-project c292b5b5e059e6ce3e6449e6827ef7e1037c21c4)" }
91- !2 = !{!3 , !3 , i64 0 }
92- !3 = !{!"int" , !4 , i64 0 }
93- !4 = !{!"omnipotent char" , !5 , i64 0 }
94- !5 = !{!"Simple C++ TBAA" }
95119!6 = !{!"branch_weights" , i32 1 , i32 1023 }
96120!7 = !{!"branch_weights" , i32 1 , i32 1026 }
0 commit comments