xref: /llvm-project/llvm/test/Transforms/LoopVectorize/noalias-scope-decl.ll (revision 7d7577256b76e4293f455b8093504d5f7044ab4b)
1be51fa45SRoman Lebedev; RUN: opt < %s -passes=loop-vectorize -force-vector-width=4 -force-vector-interleave=2  -S | FileCheck %s
2121cac01SJeroen Dobbelaere
3*7d757725SNikita Popovdefine void @test1(ptr noalias nocapture %a, ptr noalias nocapture readonly %b) {
4121cac01SJeroen Dobbelaereentry:
5121cac01SJeroen Dobbelaere  br label %for.body
6121cac01SJeroen Dobbelaere
7872f7000SDávid Bolvanský; CHECK-LABEL: @test1
8872f7000SDávid Bolvanský; CHECK: vector.body:
9872f7000SDávid Bolvanský; CHECK: @llvm.experimental.noalias.scope.decl
10872f7000SDávid Bolvanský; CHECK-NOT: @llvm.experimental.noalias.scope.decl
11872f7000SDávid Bolvanský; CHECK: for.body:
12872f7000SDávid Bolvanský; CHECK: @llvm.experimental.noalias.scope.decl
13872f7000SDávid Bolvanský; CHECK-NOT: @llvm.experimental.noalias.scope.decl
14872f7000SDávid Bolvanský; CHECK: ret void
15121cac01SJeroen Dobbelaere
16121cac01SJeroen Dobbelaerefor.body:                                         ; preds = %for.body, %entry
17121cac01SJeroen Dobbelaere  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
18*7d757725SNikita Popov  %arrayidx = getelementptr inbounds float, ptr %b, i64 %indvars.iv
19*7d757725SNikita Popov  %0 = load float, ptr %arrayidx, align 4
20121cac01SJeroen Dobbelaere  %cmp1 = fcmp ogt float %0, 1.000000e+02
21121cac01SJeroen Dobbelaere  tail call void @llvm.experimental.noalias.scope.decl(metadata !0)
22121cac01SJeroen Dobbelaere  %add = fadd float %0, 1.000000e+00
23*7d757725SNikita Popov  %arrayidx5 = getelementptr inbounds float, ptr %a, i64 %indvars.iv
24*7d757725SNikita Popov  store float %add, ptr %arrayidx5, align 4
25121cac01SJeroen Dobbelaere  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
26121cac01SJeroen Dobbelaere  %exitcond = icmp eq i64 %indvars.iv, 1599
27121cac01SJeroen Dobbelaere  br i1 %exitcond, label %for.end, label %for.body
28121cac01SJeroen Dobbelaere
29121cac01SJeroen Dobbelaerefor.end:                                          ; preds = %for.body
30121cac01SJeroen Dobbelaere  ret void
31121cac01SJeroen Dobbelaere}
32121cac01SJeroen Dobbelaere
33121cac01SJeroen Dobbelaeredeclare void @llvm.experimental.noalias.scope.decl(metadata)
34121cac01SJeroen Dobbelaere
35*7d757725SNikita Popov%struct.data = type { ptr, ptr }
36121cac01SJeroen Dobbelaere
37*7d757725SNikita Popovdefine void @test2(ptr nocapture readonly %d) {
38121cac01SJeroen Dobbelaereentry:
39*7d757725SNikita Popov  %b = getelementptr inbounds %struct.data, ptr %d, i64 0, i32 1
40*7d757725SNikita Popov  %0 = load ptr, ptr %b, align 8
41*7d757725SNikita Popov  %ptrint = ptrtoint ptr %0 to i64
42121cac01SJeroen Dobbelaere  %maskedptr = and i64 %ptrint, 31
43121cac01SJeroen Dobbelaere  %maskcond = icmp eq i64 %maskedptr, 0
44*7d757725SNikita Popov  %1 = load ptr, ptr %d, align 8
45*7d757725SNikita Popov  %ptrint2 = ptrtoint ptr %1 to i64
46121cac01SJeroen Dobbelaere  %maskedptr3 = and i64 %ptrint2, 31
47121cac01SJeroen Dobbelaere  %maskcond4 = icmp eq i64 %maskedptr3, 0
48121cac01SJeroen Dobbelaere  br label %for.body
49121cac01SJeroen Dobbelaere
50872f7000SDávid Bolvanský; CHECK-LABEL: @test2
51872f7000SDávid Bolvanský; CHECK: vector.body:
52872f7000SDávid Bolvanský; CHECK: @llvm.experimental.noalias.scope.decl(metadata [[SCOPE0_LIST:!.*]])
53872f7000SDávid Bolvanský; CHECK: @llvm.experimental.noalias.scope.decl(metadata [[SCOPE4_LIST:!.*]])
54872f7000SDávid Bolvanský; CHECK-NOT: @llvm.experimental.noalias.scope.decl
55872f7000SDávid Bolvanský; CHECK: for.body:
56872f7000SDávid Bolvanský; CHECK: @llvm.experimental.noalias.scope.decl(metadata [[SCOPE0_LIST]])
57872f7000SDávid Bolvanský; CHECK: @llvm.experimental.noalias.scope.decl(metadata [[SCOPE4_LIST]])
58872f7000SDávid Bolvanský; CHECK-NOT: @llvm.experimental.noalias.scope.decl
59872f7000SDávid Bolvanský; CHECK: ret void
60121cac01SJeroen Dobbelaere
61121cac01SJeroen Dobbelaerefor.body:                                         ; preds = %for.body, %entry
62121cac01SJeroen Dobbelaere  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
63121cac01SJeroen Dobbelaere  tail call void @llvm.experimental.noalias.scope.decl(metadata !0)
64*7d757725SNikita Popov  %arrayidx = getelementptr inbounds float, ptr %0, i64 %indvars.iv
65*7d757725SNikita Popov  %2 = load float, ptr %arrayidx, align 4
66121cac01SJeroen Dobbelaere  %add = fadd float %2, 1.000000e+00
67121cac01SJeroen Dobbelaere  tail call void @llvm.experimental.noalias.scope.decl(metadata !4)
68*7d757725SNikita Popov  %arrayidx5 = getelementptr inbounds float, ptr %1, i64 %indvars.iv
69*7d757725SNikita Popov  store float %add, ptr %arrayidx5, align 4
70121cac01SJeroen Dobbelaere  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
71121cac01SJeroen Dobbelaere  %exitcond = icmp eq i64 %indvars.iv, 1599
72121cac01SJeroen Dobbelaere  br i1 %exitcond, label %for.end, label %for.body
73121cac01SJeroen Dobbelaere
74121cac01SJeroen Dobbelaerefor.end:                                          ; preds = %for.body
75121cac01SJeroen Dobbelaere  ret void
76121cac01SJeroen Dobbelaere}
77121cac01SJeroen Dobbelaere
78*7d757725SNikita Popovdefine void @predicated_noalias_scope_decl(ptr noalias nocapture readonly %a, ptr noalias nocapture %b, i32 %n) {
79872f7000SDávid Bolvanský
80121cac01SJeroen Dobbelaere; Check that the vector.body still contains a llvm.experimental.noalias.scope.decl
81872f7000SDávid Bolvanský
82121cac01SJeroen Dobbelaere; CHECK-LABEL: @predicated_noalias_scope_decl(
83121cac01SJeroen Dobbelaere; CHECK:   vector.body:
84872f7000SDávid Bolvanský; CHECK:   call void @llvm.experimental.noalias.scope.decl
85872f7000SDávid Bolvanský; CHECK-NOT: @llvm.experimental.noalias.scope.decl
86121cac01SJeroen Dobbelaere; CHECK:   scalar.ph:
87872f7000SDávid Bolvanský; CHECK-NOT: @llvm.experimental.noalias.scope.decl
88121cac01SJeroen Dobbelaere; CHECK:   if.else:
89872f7000SDávid Bolvanský; CHECK:   call void @llvm.experimental.noalias.scope.decl
90872f7000SDávid Bolvanský; CHECK-NOT: @llvm.experimental.noalias.scope.decl
91872f7000SDávid Bolvanský; CHECK: }
92121cac01SJeroen Dobbelaere
93121cac01SJeroen Dobbelaereentry:
94121cac01SJeroen Dobbelaere  %cmp15 = icmp eq i32 %n, 0
95121cac01SJeroen Dobbelaere  br i1 %cmp15, label %for.cond.cleanup, label %for.body.preheader
96121cac01SJeroen Dobbelaere
97121cac01SJeroen Dobbelaerefor.body.preheader:                               ; preds = %entry
98121cac01SJeroen Dobbelaere  %0 = zext i32 %n to i64
99121cac01SJeroen Dobbelaere  br label %for.body
100121cac01SJeroen Dobbelaere
101121cac01SJeroen Dobbelaerefor.cond.cleanup.loopexit:                        ; preds = %if.end5
102121cac01SJeroen Dobbelaere  br label %for.cond.cleanup
103121cac01SJeroen Dobbelaere
104121cac01SJeroen Dobbelaerefor.cond.cleanup:                                 ; preds = %for.cond.cleanup.loopexit, %entry
105121cac01SJeroen Dobbelaere  ret void
106121cac01SJeroen Dobbelaere
107121cac01SJeroen Dobbelaerefor.body:                                         ; preds = %for.body.preheader, %if.end5
108121cac01SJeroen Dobbelaere  %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %if.end5 ]
109121cac01SJeroen Dobbelaere  %cmp1 = icmp ult i64 %indvars.iv, 495616
110121cac01SJeroen Dobbelaere  br i1 %cmp1, label %if.end5, label %if.else
111121cac01SJeroen Dobbelaere
112121cac01SJeroen Dobbelaereif.else:                                          ; preds = %for.body
113121cac01SJeroen Dobbelaere  %cmp2 = icmp ult i64 %indvars.iv, 991232
114121cac01SJeroen Dobbelaere  tail call void @llvm.experimental.noalias.scope.decl(metadata !0)
115121cac01SJeroen Dobbelaere  br label %if.end5
116121cac01SJeroen Dobbelaere
117121cac01SJeroen Dobbelaereif.end5:                                          ; preds = %for.body, %if.else
118121cac01SJeroen Dobbelaere  %x.0 = phi float [ 4.200000e+01, %if.else ], [ 2.300000e+01, %for.body ]
119*7d757725SNikita Popov  %arrayidx = getelementptr inbounds float, ptr %a, i64 %indvars.iv
120*7d757725SNikita Popov  %1 = load float, ptr %arrayidx, align 4
121121cac01SJeroen Dobbelaere  %mul = fmul float %x.0, %1
122*7d757725SNikita Popov  %arrayidx7 = getelementptr inbounds float, ptr %b, i64 %indvars.iv
123*7d757725SNikita Popov  store float %mul, ptr %arrayidx7, align 4
124121cac01SJeroen Dobbelaere  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
125121cac01SJeroen Dobbelaere  %cmp = icmp eq i64 %indvars.iv.next, %0
126121cac01SJeroen Dobbelaere  br i1 %cmp, label %for.cond.cleanup.loopexit, label %for.body
127121cac01SJeroen Dobbelaere}
128121cac01SJeroen Dobbelaere
129121cac01SJeroen Dobbelaere!0 = !{ !1 }
130121cac01SJeroen Dobbelaere!1 = distinct !{ !1, !2 }
131121cac01SJeroen Dobbelaere!2 = distinct !{ !2 }
132121cac01SJeroen Dobbelaere!3 = distinct !{ !3, !2 }
133121cac01SJeroen Dobbelaere!4 = !{ !3 }
134121cac01SJeroen Dobbelaere
135872f7000SDávid Bolvanský; CHECK: [[SCOPE0_LIST]] = !{[[SCOPE0:!.*]]}
136872f7000SDávid Bolvanský; CHECK: [[SCOPE0]] = distinct !{[[SCOPE0]], [[SCOPE0_DOM:!.*]]}
137872f7000SDávid Bolvanský; CHECK: [[SCOPE0_DOM]] = distinct !{[[SCOPE0_DOM]]}
138872f7000SDávid Bolvanský; CHECK: [[SCOPE4_LIST]] = !{[[SCOPE4:!.*]]}
139872f7000SDávid Bolvanský; CHECK: [[SCOPE4]] = distinct !{[[SCOPE4]], [[SCOPE0_DOM]]}
140