|
50 | 50 | define void @ScalableVectorTestFullyOverlapping(ptr %arg, i32 %i) vscale_range(1, 2) { |
51 | 51 | ; CHECK-LABEL: @ScalableVectorTestFullyOverlapping( |
52 | 52 | ; CHECK-NEXT: bb: |
53 | | -; CHECK-NEXT: [[I7:%.*]] = add nuw nsw i32 [[I:%.*]], 1 |
54 | | -; CHECK-NEXT: [[I8:%.*]] = zext i32 [[I7]] to i64 |
55 | | -; CHECK-NEXT: [[I9:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[I8]] |
56 | | -; CHECK-NEXT: store float 0.000000e+00, ptr [[I9]], align 4 |
57 | | -; CHECK-NEXT: [[I2:%.*]] = zext i32 [[I]] to i64 |
58 | | -; CHECK-NEXT: [[I3:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[I2]] |
59 | | -; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[I3]], align 8 |
| 53 | +; CHECK-NEXT: [[I_1:%.*]] = add nuw nsw i32 [[I:%.*]], 1 |
| 54 | +; CHECK-NEXT: [[EXT_I_1:%.*]] = zext i32 [[I_1]] to i64 |
| 55 | +; CHECK-NEXT: [[GEP_ARG_I_1:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[EXT_I_1]] |
| 56 | +; CHECK-NEXT: store float 0.000000e+00, ptr [[GEP_ARG_I_1]], align 4 |
| 57 | +; CHECK-NEXT: [[EXT_I:%.*]] = zext i32 [[I]] to i64 |
| 58 | +; CHECK-NEXT: [[GEP_ARG_I:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[EXT_I]] |
| 59 | +; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[GEP_ARG_I]], align 8 |
60 | 60 | ; CHECK-NEXT: ret void |
61 | 61 | ; |
62 | 62 | bb: |
63 | | - %i7 = add nuw nsw i32 %i, 1 |
64 | | - %i8 = zext i32 %i7 to i64 |
65 | | - %i9 = getelementptr inbounds float, ptr %arg, i64 %i8 |
66 | | - store float 0.0, ptr %i9 |
67 | | - %i2 = zext i32 %i to i64 |
68 | | - %i3 = getelementptr inbounds float, ptr %arg, i64 %i2 |
69 | | - store <vscale x 2 x float> zeroinitializer, ptr %i3 |
| 63 | + %i.1 = add nuw nsw i32 %i, 1 |
| 64 | + %ext.i.1 = zext i32 %i.1 to i64 |
| 65 | + %gep.arg.i.1 = getelementptr inbounds float, ptr %arg, i64 %ext.i.1 |
| 66 | + store float 0.0, ptr %gep.arg.i.1 |
| 67 | + %ext.i = zext i32 %i to i64 |
| 68 | + %gep.arg.i = getelementptr inbounds float, ptr %arg, i64 %ext.i |
| 69 | + store <vscale x 2 x float> zeroinitializer, ptr %gep.arg.i |
70 | 70 | ret void |
71 | 71 | } |
72 | 72 |
|
73 | 73 | define void @ScalableVectorTestFullyOverlapping2(ptr %arg, i32 %i) { |
74 | 74 | ; CHECK-LABEL: @ScalableVectorTestFullyOverlapping2( |
75 | 75 | ; CHECK-NEXT: bb: |
76 | | -; CHECK-NEXT: [[I7:%.*]] = add nuw nsw i32 [[I:%.*]], 1 |
77 | | -; CHECK-NEXT: [[I8:%.*]] = zext i32 [[I7]] to i64 |
78 | | -; CHECK-NEXT: [[I9:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[I8]] |
79 | | -; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[I9]], align 8 |
80 | | -; CHECK-NEXT: [[I2:%.*]] = zext i32 [[I]] to i64 |
81 | | -; CHECK-NEXT: [[I3:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[I2]] |
82 | | -; CHECK-NEXT: store <vscale x 4 x float> zeroinitializer, ptr [[I3]], align 16 |
| 76 | +; CHECK-NEXT: [[I_1:%.*]] = add nuw nsw i32 [[I:%.*]], 1 |
| 77 | +; CHECK-NEXT: [[EXT_I_1:%.*]] = zext i32 [[I_1]] to i64 |
| 78 | +; CHECK-NEXT: [[GEP_ARG_I_1:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[EXT_I_1]] |
| 79 | +; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[GEP_ARG_I_1]], align 8 |
| 80 | +; CHECK-NEXT: [[EXT_I:%.*]] = zext i32 [[I]] to i64 |
| 81 | +; CHECK-NEXT: [[GEP_ARG_I:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[EXT_I]] |
| 82 | +; CHECK-NEXT: store <vscale x 4 x float> zeroinitializer, ptr [[GEP_ARG_I]], align 16 |
83 | 83 | ; CHECK-NEXT: ret void |
84 | 84 | ; |
85 | 85 | bb: |
86 | | - %i7 = add nuw nsw i32 %i, 1 |
87 | | - %i8 = zext i32 %i7 to i64 |
88 | | - %i9 = getelementptr inbounds float, ptr %arg, i64 %i8 |
89 | | - store <vscale x 2 x float> zeroinitializer, ptr %i9 |
90 | | - %i2 = zext i32 %i to i64 |
91 | | - %i3 = getelementptr inbounds float, ptr %arg, i64 %i2 |
92 | | - store <vscale x 4 x float> zeroinitializer, ptr %i3 |
| 86 | + %i.1 = add nuw nsw i32 %i, 1 |
| 87 | + %ext.i.1 = zext i32 %i.1 to i64 |
| 88 | + %gep.arg.i.1 = getelementptr inbounds float, ptr %arg, i64 %ext.i.1 |
| 89 | + store <vscale x 2 x float> zeroinitializer, ptr %gep.arg.i.1 |
| 90 | + %ext.i = zext i32 %i to i64 |
| 91 | + %gep.arg.i = getelementptr inbounds float, ptr %arg, i64 %ext.i |
| 92 | + store <vscale x 4 x float> zeroinitializer, ptr %gep.arg.i |
93 | 93 | ret void |
94 | 94 | } |
95 | 95 |
|
96 | 96 | define void @ScalableVectorTestNonOverlapping(ptr %arg, i32 %i) vscale_range(1, 2) { |
97 | 97 | ; CHECK-LABEL: @ScalableVectorTestNonOverlapping( |
98 | 98 | ; CHECK-NEXT: bb: |
99 | | -; CHECK-NEXT: [[I7:%.*]] = add nuw nsw i32 [[I:%.*]], 10 |
100 | | -; CHECK-NEXT: [[I8:%.*]] = zext i32 [[I7]] to i64 |
101 | | -; CHECK-NEXT: [[I9:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[I8]] |
102 | | -; CHECK-NEXT: store float 0.000000e+00, ptr [[I9]], align 4 |
103 | | -; CHECK-NEXT: [[I2:%.*]] = zext i32 [[I]] to i64 |
104 | | -; CHECK-NEXT: [[I3:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[I2]] |
105 | | -; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[I3]], align 8 |
| 99 | +; CHECK-NEXT: [[I_10:%.*]] = add nuw nsw i32 [[I:%.*]], 10 |
| 100 | +; CHECK-NEXT: [[EXT_I_10:%.*]] = zext i32 [[I_10]] to i64 |
| 101 | +; CHECK-NEXT: [[GEP_ARG_I_10:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[EXT_I_10]] |
| 102 | +; CHECK-NEXT: store float 0.000000e+00, ptr [[GEP_ARG_I_10]], align 4 |
| 103 | +; CHECK-NEXT: [[EXT_I:%.*]] = zext i32 [[I]] to i64 |
| 104 | +; CHECK-NEXT: [[GEP_ARG_I:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[EXT_I]] |
| 105 | +; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[GEP_ARG_I]], align 8 |
106 | 106 | ; CHECK-NEXT: ret void |
107 | 107 | ; |
108 | 108 | bb: |
109 | | - %i7 = add nuw nsw i32 %i, 10 |
110 | | - %i8 = zext i32 %i7 to i64 |
111 | | - %i9 = getelementptr inbounds float, ptr %arg, i64 %i8 |
112 | | - store float 0.0, ptr %i9 |
113 | | - %i2 = zext i32 %i to i64 |
114 | | - %i3 = getelementptr inbounds float, ptr %arg, i64 %i2 |
115 | | - store <vscale x 2 x float> zeroinitializer, ptr %i3 |
| 109 | + %i.10 = add nuw nsw i32 %i, 10 |
| 110 | + %ext.i.10 = zext i32 %i.10 to i64 |
| 111 | + %gep.arg.i.10 = getelementptr inbounds float, ptr %arg, i64 %ext.i.10 |
| 112 | + store float 0.0, ptr %gep.arg.i.10 |
| 113 | + %ext.i = zext i32 %i to i64 |
| 114 | + %gep.arg.i = getelementptr inbounds float, ptr %arg, i64 %ext.i |
| 115 | + store <vscale x 2 x float> zeroinitializer, ptr %gep.arg.i |
116 | 116 | ret void |
117 | 117 | } |
118 | 118 |
|
119 | 119 | define void @ScalableVectorTestNonOverlapping2(ptr %arg, i32 %i) vscale_range(1, 2) { |
120 | 120 | ; CHECK-LABEL: @ScalableVectorTestNonOverlapping2( |
121 | 121 | ; CHECK-NEXT: bb: |
122 | | -; CHECK-NEXT: [[I7:%.*]] = add nuw nsw i32 [[I:%.*]], 10 |
123 | | -; CHECK-NEXT: [[I8:%.*]] = zext i32 [[I7]] to i64 |
124 | | -; CHECK-NEXT: [[I9:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[I8]] |
125 | | -; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[I9]], align 8 |
126 | | -; CHECK-NEXT: [[I2:%.*]] = zext i32 [[I]] to i64 |
127 | | -; CHECK-NEXT: [[I3:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[I2]] |
128 | | -; CHECK-NEXT: store <vscale x 4 x float> zeroinitializer, ptr [[I3]], align 16 |
| 122 | +; CHECK-NEXT: [[I_10:%.*]] = add nuw nsw i32 [[I:%.*]], 10 |
| 123 | +; CHECK-NEXT: [[EXT_I_10:%.*]] = zext i32 [[I_10]] to i64 |
| 124 | +; CHECK-NEXT: [[GEP_ARG_I_10:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[EXT_I_10]] |
| 125 | +; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[GEP_ARG_I_10]], align 8 |
| 126 | +; CHECK-NEXT: [[EXT_I:%.*]] = zext i32 [[I]] to i64 |
| 127 | +; CHECK-NEXT: [[GEP_ARG_I:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[EXT_I]] |
| 128 | +; CHECK-NEXT: store <vscale x 4 x float> zeroinitializer, ptr [[GEP_ARG_I]], align 16 |
129 | 129 | ; CHECK-NEXT: ret void |
130 | 130 | ; |
131 | 131 | bb: |
132 | | - %i7 = add nuw nsw i32 %i, 10 |
133 | | - %i8 = zext i32 %i7 to i64 |
134 | | - %i9 = getelementptr inbounds float, ptr %arg, i64 %i8 |
135 | | - store <vscale x 2 x float> zeroinitializer, ptr %i9 |
136 | | - %i2 = zext i32 %i to i64 |
137 | | - %i3 = getelementptr inbounds float, ptr %arg, i64 %i2 |
138 | | - store <vscale x 4 x float> zeroinitializer, ptr %i3 |
| 132 | + %i.10 = add nuw nsw i32 %i, 10 |
| 133 | + %ext.i.10 = zext i32 %i.10 to i64 |
| 134 | + %gep.arg.i.10 = getelementptr inbounds float, ptr %arg, i64 %ext.i.10 |
| 135 | + store <vscale x 2 x float> zeroinitializer, ptr %gep.arg.i.10 |
| 136 | + %ext.i = zext i32 %i to i64 |
| 137 | + %gep.arg.i = getelementptr inbounds float, ptr %arg, i64 %ext.i |
| 138 | + store <vscale x 4 x float> zeroinitializer, ptr %gep.arg.i |
139 | 139 | ret void |
140 | 140 | } |
141 | 141 |
|
@@ -196,23 +196,23 @@ define void @ScalableVectorTestPartiallyOverlapping(ptr %arg, i32 %i) { |
196 | 196 | ; |
197 | 197 | ; CHECK-LABEL: @ScalableVectorTestPartiallyOverlapping( |
198 | 198 | ; CHECK-NEXT: bb: |
199 | | -; CHECK-NEXT: [[I2:%.*]] = zext i32 [[I:%.*]] to i64 |
200 | | -; CHECK-NEXT: [[I3:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[I2]] |
201 | | -; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[I3]], align 8 |
202 | | -; CHECK-NEXT: [[I5:%.*]] = add nuw nsw i32 [[I]], 1 |
203 | | -; CHECK-NEXT: [[I6:%.*]] = zext i32 [[I5]] to i64 |
204 | | -; CHECK-NEXT: [[I7:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[I6]] |
205 | | -; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[I7]], align 8 |
| 199 | +; CHECK-NEXT: [[EXT_I:%.*]] = zext i32 [[I:%.*]] to i64 |
| 200 | +; CHECK-NEXT: [[GEP_ARG_I:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[EXT_I]] |
| 201 | +; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[GEP_ARG_I]], align 8 |
| 202 | +; CHECK-NEXT: [[I_1:%.*]] = add nuw nsw i32 [[I]], 1 |
| 203 | +; CHECK-NEXT: [[EXT_I_1:%.*]] = zext i32 [[I_1]] to i64 |
| 204 | +; CHECK-NEXT: [[GEP_ARG_I_1:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[EXT_I_1]] |
| 205 | +; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[GEP_ARG_I_1]], align 8 |
206 | 206 | ; CHECK-NEXT: ret void |
207 | 207 | ; |
208 | 208 | bb: |
209 | | - %i2 = zext i32 %i to i64 |
210 | | - %i3 = getelementptr inbounds float, ptr %arg, i64 %i2 |
211 | | - store <vscale x 2 x float> zeroinitializer, ptr %i3 |
212 | | - %i5 = add nuw nsw i32 %i, 1 |
213 | | - %i6 = zext i32 %i5 to i64 |
214 | | - %i7 = getelementptr inbounds float, ptr %arg, i64 %i6 |
215 | | - store <vscale x 2 x float> zeroinitializer, ptr %i7 |
| 209 | + %ext.i = zext i32 %i to i64 |
| 210 | + %gep.arg.i = getelementptr inbounds float, ptr %arg, i64 %ext.i |
| 211 | + store <vscale x 2 x float> zeroinitializer, ptr %gep.arg.i |
| 212 | + %i.1 = add nuw nsw i32 %i, 1 |
| 213 | + %ext.i.1 = zext i32 %i.1 to i64 |
| 214 | + %gep.arg.i.1 = getelementptr inbounds float, ptr %arg, i64 %ext.i.1 |
| 215 | + store <vscale x 2 x float> zeroinitializer, ptr %gep.arg.i.1 |
216 | 216 | ret void |
217 | 217 | } |
218 | 218 |
|
0 commit comments