|
8 | 8 |
|
9 | 9 | @A = external dso_local global [100 x i32], align 4
|
10 | 10 |
|
11 |
| - define void @cant_sink_adds_call_in_block(i8* nocapture readonly %input, %struct.A* %a) { |
| 11 | + define void @cant_sink_adds_call_in_block(ptr nocapture readonly %input, ptr %a) { |
12 | 12 | bb:
|
13 |
| - %i = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 1 |
14 |
| - %i1 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 2 |
15 |
| - %i2 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 3 |
16 |
| - %i3 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 4 |
17 |
| - %i4 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 5 |
18 |
| - %scevgep = getelementptr i8, i8* %input, i64 1 |
| 13 | + %i = getelementptr inbounds %struct.A, ptr %a, i64 0, i32 1 |
| 14 | + %i1 = getelementptr inbounds %struct.A, ptr %a, i64 0, i32 2 |
| 15 | + %i2 = getelementptr inbounds %struct.A, ptr %a, i64 0, i32 3 |
| 16 | + %i3 = getelementptr inbounds %struct.A, ptr %a, i64 0, i32 4 |
| 17 | + %i4 = getelementptr inbounds %struct.A, ptr %a, i64 0, i32 5 |
| 18 | + %scevgep = getelementptr i8, ptr %input, i64 1 |
19 | 19 | br label %.backedge
|
20 | 20 |
|
21 | 21 | .backedge: ; preds = %.backedge.backedge, %bb
|
22 |
| - %lsr.iv = phi i8* [ %scevgep1, %.backedge.backedge ], [ %scevgep, %bb ] |
23 |
| - %i5 = load i8, i8* %lsr.iv, align 1 |
| 22 | + %lsr.iv = phi ptr [ %scevgep1, %.backedge.backedge ], [ %scevgep, %bb ] |
| 23 | + %i5 = load i8, ptr %lsr.iv, align 1 |
24 | 24 | %i6 = zext i8 %i5 to i32
|
25 | 25 | switch i32 %i6, label %.backedge.backedge [
|
26 | 26 | i32 0, label %bb7
|
|
32 | 32 | ]
|
33 | 33 |
|
34 | 34 | bb7: ; preds = %.backedge
|
35 |
| - %i8 = bitcast %struct.A* %a to i32* |
36 |
| - tail call void @_Z6assignPj(i32* %i8) |
| 35 | + tail call void @_Z6assignPj(ptr %a) |
37 | 36 | br label %.backedge.backedge
|
38 | 37 |
|
39 | 38 | bb9: ; preds = %.backedge
|
40 |
| - tail call void @_Z6assignPj(i32* %i) |
| 39 | + tail call void @_Z6assignPj(ptr %i) |
41 | 40 | br label %.backedge.backedge
|
42 | 41 |
|
43 | 42 | bb10: ; preds = %.backedge
|
44 |
| - tail call void @_Z6assignPj(i32* %i1) |
| 43 | + tail call void @_Z6assignPj(ptr %i1) |
45 | 44 | br label %.backedge.backedge
|
46 | 45 |
|
47 | 46 | bb11: ; preds = %.backedge
|
48 |
| - tail call void @_Z6assignPj(i32* %i2) |
| 47 | + tail call void @_Z6assignPj(ptr %i2) |
49 | 48 | br label %.backedge.backedge
|
50 | 49 |
|
51 | 50 | bb12: ; preds = %.backedge
|
52 |
| - tail call void @_Z6assignPj(i32* %i3) |
| 51 | + tail call void @_Z6assignPj(ptr %i3) |
53 | 52 | br label %.backedge.backedge
|
54 | 53 |
|
55 | 54 | bb13: ; preds = %.backedge
|
56 |
| - tail call void @_Z6assignPj(i32* %i4) |
| 55 | + tail call void @_Z6assignPj(ptr %i4) |
57 | 56 | br label %.backedge.backedge
|
58 | 57 |
|
59 | 58 | .backedge.backedge: ; preds = %bb13, %bb12, %bb11, %bb10, %bb9, %bb7, %.backedge
|
60 |
| - %scevgep1 = getelementptr i8, i8* %lsr.iv, i64 1 |
| 59 | + %scevgep1 = getelementptr i8, ptr %lsr.iv, i64 1 |
61 | 60 | br label %.backedge
|
62 | 61 | }
|
63 | 62 |
|
|
67 | 66 | br i1 %cmp63, label %for.body.preheader, label %for.cond.cleanup
|
68 | 67 |
|
69 | 68 | for.body.preheader: ; preds = %entry
|
70 |
| - %i = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @A, i64 0, i64 0), align 4 |
| 69 | + %i = load i32, ptr @A, align 4 |
71 | 70 | %call0 = tail call i32 @use(i32 %n)
|
72 | 71 | br label %for.body
|
73 | 72 |
|
|
90 | 89 | br i1 %cmp63, label %for.body.preheader, label %for.cond.cleanup
|
91 | 90 |
|
92 | 91 | for.body.preheader: ; preds = %entry
|
93 |
| - %i = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @A, i64 0, i64 0), align 4 |
| 92 | + %i = load i32, ptr @A, align 4 |
94 | 93 | %call0 = tail call i32 @use(i32 %i)
|
95 | 94 | br label %for.body
|
96 | 95 |
|
|
113 | 112 | br i1 %cmp63, label %for.body.preheader, label %for.cond.cleanup
|
114 | 113 |
|
115 | 114 | for.body.preheader: ; preds = %entry
|
116 |
| - %i = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @A, i64 0, i64 0), align 4 |
| 115 | + %i = load i32, ptr @A, align 4 |
117 | 116 | br label %for.body
|
118 | 117 |
|
119 | 118 | for.cond.cleanup: ; preds = %for.body, %entry
|
|
137 | 136 | br i1 %cmp63, label %for.body.preheader, label %for.cond.cleanup
|
138 | 137 |
|
139 | 138 | for.body.preheader: ; preds = %entry
|
140 |
| - %i = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @A, i64 0, i64 0), align 4 |
| 139 | + %i = load i32, ptr @A, align 4 |
141 | 140 | br label %for.body
|
142 | 141 |
|
143 | 142 | for.cond.cleanup: ; preds = %for.body, %entry
|
|
153 | 152 | br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
|
154 | 153 | }
|
155 | 154 |
|
156 |
| - define dso_local void @sink_add(i32* noalias nocapture readonly %read, i32* noalias nocapture %write, i32 %n) local_unnamed_addr { |
| 155 | + define dso_local void @sink_add(ptr noalias nocapture readonly %read, ptr noalias nocapture %write, i32 %n) local_unnamed_addr { |
157 | 156 | entry:
|
158 |
| - %i = load i32, i32* %read, align 4, !tbaa !0 |
| 157 | + %i = load i32, ptr %read, align 4, !tbaa !0 |
159 | 158 | %cmp10 = icmp sgt i32 %n, 0
|
160 | 159 | br i1 %cmp10, label %for.body.preheader, label %for.cond.cleanup
|
161 | 160 |
|
|
165 | 164 |
|
166 | 165 | for.cond.cleanup: ; preds = %for.body, %entry
|
167 | 166 | %sum.0.lcssa = phi i32 [ %n, %entry ], [ %div, %for.body ]
|
168 |
| - store i32 %sum.0.lcssa, i32* %write, align 4, !tbaa !0 |
| 167 | + store i32 %sum.0.lcssa, ptr %write, align 4, !tbaa !0 |
169 | 168 | ret void
|
170 | 169 |
|
171 | 170 | for.body: ; preds = %for.body, %for.body.preheader
|
|
179 | 178 | br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
|
180 | 179 | }
|
181 | 180 |
|
182 |
| - define dso_local void @store_after_add(i32* noalias nocapture readonly %read, i32* noalias nocapture %write, i32* nocapture %store, i32 %n) local_unnamed_addr { |
| 181 | + define dso_local void @store_after_add(ptr noalias nocapture readonly %read, ptr noalias nocapture %write, ptr nocapture %store, i32 %n) local_unnamed_addr { |
183 | 182 | entry:
|
184 |
| - %i = load i32, i32* %read, align 4, !tbaa !0 |
| 183 | + %i = load i32, ptr %read, align 4, !tbaa !0 |
185 | 184 | %cmp10 = icmp sgt i32 %n, 0
|
186 | 185 | br i1 %cmp10, label %for.body.preheader, label %for.cond.cleanup
|
187 | 186 |
|
188 | 187 | for.body.preheader: ; preds = %entry
|
189 | 188 | %i1 = add i32 %i, 42
|
190 |
| - store i32 43, i32* %store, align 4, !tbaa !0 |
| 189 | + store i32 43, ptr %store, align 4, !tbaa !0 |
191 | 190 | br label %for.body
|
192 | 191 |
|
193 | 192 | for.cond.cleanup: ; preds = %for.body, %entry
|
194 | 193 | %sum.0.lcssa = phi i32 [ %n, %entry ], [ %div, %for.body ]
|
195 |
| - store i32 %sum.0.lcssa, i32* %write, align 4, !tbaa !0 |
| 194 | + store i32 %sum.0.lcssa, ptr %write, align 4, !tbaa !0 |
196 | 195 | ret void
|
197 | 196 |
|
198 | 197 | for.body: ; preds = %for.body, %for.body.preheader
|
|
206 | 205 | br i1 %exitcond.not, label %for.cond.cleanup, label %for.body, !llvm.loop !4
|
207 | 206 | }
|
208 | 207 |
|
209 |
| - define dso_local void @aliased_store_after_add(i32* noalias nocapture readonly %read, i32* noalias nocapture %write, i32* nocapture %store, i32 %n) local_unnamed_addr { |
| 208 | + define dso_local void @aliased_store_after_add(ptr noalias nocapture readonly %read, ptr noalias nocapture %write, ptr nocapture %store, i32 %n) local_unnamed_addr { |
210 | 209 | entry:
|
211 |
| - %i = load i32, i32* %read, align 4, !tbaa !0 |
| 210 | + %i = load i32, ptr %read, align 4, !tbaa !0 |
212 | 211 | %cmp10 = icmp sgt i32 %n, 0
|
213 | 212 | br i1 %cmp10, label %for.body.preheader, label %for.cond.cleanup
|
214 | 213 |
|
215 | 214 | for.body.preheader: ; preds = %entry
|
216 | 215 | %i1 = add i32 %i, 42
|
217 |
| - store i32 43, i32* %read, align 4, !tbaa !0 |
| 216 | + store i32 43, ptr %read, align 4, !tbaa !0 |
218 | 217 | br label %for.body
|
219 | 218 |
|
220 | 219 | for.cond.cleanup: ; preds = %for.body, %entry
|
221 | 220 | %sum.0.lcssa = phi i32 [ %n, %entry ], [ %div, %for.body ]
|
222 |
| - store i32 %sum.0.lcssa, i32* %write, align 4, !tbaa !0 |
| 221 | + store i32 %sum.0.lcssa, ptr %write, align 4, !tbaa !0 |
223 | 222 | ret void
|
224 | 223 |
|
225 | 224 | for.body: ; preds = %for.body, %for.body.preheader
|
|
235 | 234 |
|
236 | 235 | declare i32 @use(i32)
|
237 | 236 |
|
238 |
| - declare void @_Z6assignPj(i32*) |
| 237 | + declare void @_Z6assignPj(ptr) |
239 | 238 |
|
240 | 239 | !0 = !{!1, !1, i64 0}
|
241 | 240 | !1 = !{!"int", !2, i64 0}
|
@@ -581,7 +580,7 @@ body: |
|
581 | 580 | ; CHECK-NEXT: successors: %bb.3(0x80000000)
|
582 | 581 | ; CHECK-NEXT: {{ $}}
|
583 | 582 | ; CHECK-NEXT: [[ADRP:%[0-9]+]]:gpr64common = ADRP target-flags(aarch64-page) @A
|
584 |
| - ; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui killed [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from `i32* getelementptr inbounds ([100 x i32], [100 x i32]* @A, i64 0, i64 0)`) |
| 583 | + ; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui killed [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from @A) |
585 | 584 | ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
|
586 | 585 | ; CHECK-NEXT: $w0 = COPY [[COPY]]
|
587 | 586 | ; CHECK-NEXT: BL @use, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
|
@@ -617,7 +616,7 @@ body: |
|
617 | 616 | successors: %bb.3(0x80000000)
|
618 | 617 |
|
619 | 618 | %8:gpr64common = ADRP target-flags(aarch64-page) @A
|
620 |
| - %9:gpr32 = LDRWui killed %8, target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from `i32* getelementptr inbounds ([100 x i32], [100 x i32]* @A, i64 0, i64 0)`) |
| 619 | + %9:gpr32 = LDRWui killed %8, target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from @A) |
621 | 620 | ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
|
622 | 621 | $w0 = COPY %6
|
623 | 622 | BL @use, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
|
@@ -708,7 +707,7 @@ body: |
|
708 | 707 | ; CHECK-NEXT: successors: %bb.3(0x80000000)
|
709 | 708 | ; CHECK-NEXT: {{ $}}
|
710 | 709 | ; CHECK-NEXT: [[ADRP:%[0-9]+]]:gpr64common = ADRP target-flags(aarch64-page) @A
|
711 |
| - ; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui killed [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from `i32* getelementptr inbounds ([100 x i32], [100 x i32]* @A, i64 0, i64 0)`) |
| 710 | + ; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui killed [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from @A) |
712 | 711 | ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
|
713 | 712 | ; CHECK-NEXT: $w0 = COPY [[LDRWui]]
|
714 | 713 | ; CHECK-NEXT: BL @use, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
|
@@ -744,7 +743,7 @@ body: |
|
744 | 743 | successors: %bb.3(0x80000000)
|
745 | 744 |
|
746 | 745 | %8:gpr64common = ADRP target-flags(aarch64-page) @A
|
747 |
| - %9:gpr32 = LDRWui killed %8, target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from `i32* getelementptr inbounds ([100 x i32], [100 x i32]* @A, i64 0, i64 0)`) |
| 746 | + %9:gpr32 = LDRWui killed %8, target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from @A) |
748 | 747 | ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
|
749 | 748 | $w0 = COPY %9
|
750 | 749 | BL @use, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
|
@@ -844,7 +843,7 @@ body: |
|
844 | 843 | ; CHECK-NEXT: successors: %bb.3(0x80000000)
|
845 | 844 | ; CHECK-NEXT: {{ $}}
|
846 | 845 | ; CHECK-NEXT: [[ADRP:%[0-9]+]]:gpr64common = ADRP target-flags(aarch64-page) @A
|
847 |
| - ; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui killed [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from `i32* getelementptr inbounds ([100 x i32], [100 x i32]* @A, i64 0, i64 0)`) |
| 846 | + ; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui killed [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from @A) |
848 | 847 | ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr32all = COPY [[LDRWui]]
|
849 | 848 | ; CHECK-NEXT: B %bb.3
|
850 | 849 | ; CHECK-NEXT: {{ $}}
|
@@ -887,7 +886,7 @@ body: |
|
887 | 886 | successors: %bb.3(0x80000000)
|
888 | 887 |
|
889 | 888 | %11:gpr64common = ADRP target-flags(aarch64-page) @A
|
890 |
| - %12:gpr32 = LDRWui killed %11, target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from `i32* getelementptr inbounds ([100 x i32], [100 x i32]* @A, i64 0, i64 0)`) |
| 889 | + %12:gpr32 = LDRWui killed %11, target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from @A) |
891 | 890 | %0:gpr32all = COPY %12
|
892 | 891 | B %bb.3
|
893 | 892 |
|
@@ -978,7 +977,7 @@ body: |
|
978 | 977 | ; CHECK-NEXT: successors: %bb.3(0x80000000)
|
979 | 978 | ; CHECK-NEXT: {{ $}}
|
980 | 979 | ; CHECK-NEXT: [[ADRP:%[0-9]+]]:gpr64common = ADRP target-flags(aarch64-page) @A
|
981 |
| - ; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui killed [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from `i32* getelementptr inbounds ([100 x i32], [100 x i32]* @A, i64 0, i64 0)`) |
| 980 | + ; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui killed [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from @A) |
982 | 981 | ; CHECK-NEXT: B %bb.3
|
983 | 982 | ; CHECK-NEXT: {{ $}}
|
984 | 983 | ; CHECK-NEXT: bb.2.for.cond.cleanup:
|
@@ -1010,7 +1009,7 @@ body: |
|
1010 | 1009 | successors: %bb.3(0x80000000)
|
1011 | 1010 |
|
1012 | 1011 | %8:gpr64common = ADRP target-flags(aarch64-page) @A
|
1013 |
| - %9:gpr32 = LDRWui killed %8, target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from `i32* getelementptr inbounds ([100 x i32], [100 x i32]* @A, i64 0, i64 0)`) |
| 1012 | + %9:gpr32 = LDRWui killed %8, target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from @A) |
1014 | 1013 | B %bb.3
|
1015 | 1014 |
|
1016 | 1015 | bb.2.for.cond.cleanup:
|
|
0 commit comments