@@ -124,7 +124,7 @@ define i32 @imm_cost_too_large_cost_of_2() {
124
124
; CHECK-NEXT: [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1
125
125
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[GV2]](p0) :: (dereferenceable load (s32) from @var1)
126
126
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2228259
127
- ; CHECK-NEXT: [[OPAQUE :%[0-9]+]]:_(s32) = G_CONSTANT_FOLD_BARRIER [[C1]]
127
+ ; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER :%[0-9]+]]:_(s32) = G_CONSTANT_FOLD_BARRIER [[C1]]
128
128
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
129
129
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[LOAD]](s32), [[C2]]
130
130
; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.4
@@ -134,19 +134,19 @@ define i32 @imm_cost_too_large_cost_of_2() {
134
134
; CHECK-NEXT: successors: %bb.3(0x80000000)
135
135
; CHECK-NEXT: {{ $}}
136
136
; CHECK-NEXT: [[GV3:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2
137
- ; CHECK-NEXT: G_STORE [[OPAQUE ]](s32), [[GV3]](p0) :: (store (s32) into @var2)
137
+ ; CHECK-NEXT: G_STORE [[CONSTANT_FOLD_BARRIER ]](s32), [[GV3]](p0) :: (store (s32) into @var2)
138
138
; CHECK-NEXT: G_BR %bb.3
139
139
; CHECK-NEXT: {{ $}}
140
140
; CHECK-NEXT: bb.3.if.then2:
141
141
; CHECK-NEXT: successors: %bb.4(0x80000000)
142
142
; CHECK-NEXT: {{ $}}
143
143
; CHECK-NEXT: [[GV4:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1
144
- ; CHECK-NEXT: G_STORE [[OPAQUE ]](s32), [[GV4]](p0) :: (store (s32) into @var1)
144
+ ; CHECK-NEXT: G_STORE [[CONSTANT_FOLD_BARRIER ]](s32), [[GV4]](p0) :: (store (s32) into @var1)
145
145
; CHECK-NEXT: G_BR %bb.4
146
146
; CHECK-NEXT: {{ $}}
147
147
; CHECK-NEXT: bb.4.if.end:
148
148
; CHECK-NEXT: [[GV5:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3
149
- ; CHECK-NEXT: G_STORE [[OPAQUE ]](s32), [[GV5]](p0) :: (store (s32) into @var3)
149
+ ; CHECK-NEXT: G_STORE [[CONSTANT_FOLD_BARRIER ]](s32), [[GV5]](p0) :: (store (s32) into @var3)
150
150
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
151
151
; CHECK-NEXT: $w0 = COPY [[C3]](s32)
152
152
; CHECK-NEXT: RET_ReallyLR implicit $w0
@@ -180,7 +180,7 @@ define i64 @imm_cost_too_large_cost_of_4() {
180
180
; CHECK-NEXT: [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1_64
181
181
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV2]](p0) :: (dereferenceable load (s64) from @var1_64, align 4)
182
182
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -2228259
183
- ; CHECK-NEXT: [[OPAQUE :%[0-9]+]]:_(s64) = G_CONSTANT_FOLD_BARRIER [[C1]]
183
+ ; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER :%[0-9]+]]:_(s64) = G_CONSTANT_FOLD_BARRIER [[C1]]
184
184
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
185
185
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[LOAD]](s64), [[C2]]
186
186
; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.4
@@ -190,19 +190,19 @@ define i64 @imm_cost_too_large_cost_of_4() {
190
190
; CHECK-NEXT: successors: %bb.3(0x80000000)
191
191
; CHECK-NEXT: {{ $}}
192
192
; CHECK-NEXT: [[GV3:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2_64
193
- ; CHECK-NEXT: G_STORE [[OPAQUE ]](s64), [[GV3]](p0) :: (store (s64) into @var2_64)
193
+ ; CHECK-NEXT: G_STORE [[CONSTANT_FOLD_BARRIER ]](s64), [[GV3]](p0) :: (store (s64) into @var2_64)
194
194
; CHECK-NEXT: G_BR %bb.3
195
195
; CHECK-NEXT: {{ $}}
196
196
; CHECK-NEXT: bb.3.if.then2:
197
197
; CHECK-NEXT: successors: %bb.4(0x80000000)
198
198
; CHECK-NEXT: {{ $}}
199
199
; CHECK-NEXT: [[GV4:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1_64
200
- ; CHECK-NEXT: G_STORE [[OPAQUE ]](s64), [[GV4]](p0) :: (store (s64) into @var1_64)
200
+ ; CHECK-NEXT: G_STORE [[CONSTANT_FOLD_BARRIER ]](s64), [[GV4]](p0) :: (store (s64) into @var1_64)
201
201
; CHECK-NEXT: G_BR %bb.4
202
202
; CHECK-NEXT: {{ $}}
203
203
; CHECK-NEXT: bb.4.if.end:
204
204
; CHECK-NEXT: [[GV5:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3_64
205
- ; CHECK-NEXT: G_STORE [[OPAQUE ]](s64), [[GV5]](p0) :: (store (s64) into @var3_64)
205
+ ; CHECK-NEXT: G_STORE [[CONSTANT_FOLD_BARRIER ]](s64), [[GV5]](p0) :: (store (s64) into @var3_64)
206
206
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
207
207
; CHECK-NEXT: $x0 = COPY [[C3]](s64)
208
208
; CHECK-NEXT: RET_ReallyLR implicit $x0
@@ -225,6 +225,119 @@ if.end:
225
225
ret i64 0
226
226
}
227
227
228
+ define i64 @f64_imm_cost_too_high (double %a ) {
229
+ ; CHECK-LABEL: name: f64_imm_cost_too_high
230
+ ; CHECK: bb.1.entry:
231
+ ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.4(0x40000000)
232
+ ; CHECK-NEXT: liveins: $d0
233
+ ; CHECK-NEXT: {{ $}}
234
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 1.000000e-02
235
+ ; CHECK-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2_64
236
+ ; CHECK-NEXT: [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3_64
237
+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
238
+ ; CHECK-NEXT: [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1_64
239
+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV2]](p0) :: (dereferenceable load (s64) from @var1_64, align 4)
240
+ ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
241
+ ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[LOAD]](s64), [[C2]]
242
+ ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.4
243
+ ; CHECK-NEXT: G_BR %bb.2
244
+ ; CHECK-NEXT: {{ $}}
245
+ ; CHECK-NEXT: bb.2.if.then:
246
+ ; CHECK-NEXT: successors: %bb.3(0x80000000)
247
+ ; CHECK-NEXT: {{ $}}
248
+ ; CHECK-NEXT: [[GV3:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2_64
249
+ ; CHECK-NEXT: G_STORE [[C]](s64), [[GV3]](p0) :: (store (s64) into @var2_64)
250
+ ; CHECK-NEXT: G_BR %bb.3
251
+ ; CHECK-NEXT: {{ $}}
252
+ ; CHECK-NEXT: bb.3.if.then2:
253
+ ; CHECK-NEXT: successors: %bb.4(0x80000000)
254
+ ; CHECK-NEXT: {{ $}}
255
+ ; CHECK-NEXT: [[GV4:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1_64
256
+ ; CHECK-NEXT: G_STORE [[C]](s64), [[GV4]](p0) :: (store (s64) into @var1_64)
257
+ ; CHECK-NEXT: G_BR %bb.4
258
+ ; CHECK-NEXT: {{ $}}
259
+ ; CHECK-NEXT: bb.4.if.end:
260
+ ; CHECK-NEXT: [[GV5:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3_64
261
+ ; CHECK-NEXT: G_STORE [[C]](s64), [[GV5]](p0) :: (store (s64) into @var3_64)
262
+ ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
263
+ ; CHECK-NEXT: $x0 = COPY [[C3]](s64)
264
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
265
+ entry:
266
+ %0 = load i64 , ptr @var1_64 , align 4
267
+ %cmp = icmp eq i64 %0 , 1
268
+ br i1 %cmp , label %if.then , label %if.end
269
+
270
+ if.then:
271
+ store double 1.000000e-02 , ptr @var2_64
272
+ br label %if.then2
273
+
274
+ if.then2:
275
+ store double 1.000000e-02 , ptr @var1_64
276
+ br label %if.end
277
+
278
+ if.end:
279
+ store double 1.000000e-02 , ptr @var3_64
280
+ ret i64 0
281
+ }
282
+
283
+ define i64 @f64_imm_cheap (double %a ) {
284
+ ; CHECK-LABEL: name: f64_imm_cheap
285
+ ; CHECK: bb.1.entry:
286
+ ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.4(0x40000000)
287
+ ; CHECK-NEXT: liveins: $d0
288
+ ; CHECK-NEXT: {{ $}}
289
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00
290
+ ; CHECK-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2_64
291
+ ; CHECK-NEXT: [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3_64
292
+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
293
+ ; CHECK-NEXT: [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1_64
294
+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV2]](p0) :: (dereferenceable load (s64) from @var1_64, align 4)
295
+ ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
296
+ ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[LOAD]](s64), [[C2]]
297
+ ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.4
298
+ ; CHECK-NEXT: G_BR %bb.2
299
+ ; CHECK-NEXT: {{ $}}
300
+ ; CHECK-NEXT: bb.2.if.then:
301
+ ; CHECK-NEXT: successors: %bb.3(0x80000000)
302
+ ; CHECK-NEXT: {{ $}}
303
+ ; CHECK-NEXT: [[GV3:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2_64
304
+ ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00
305
+ ; CHECK-NEXT: G_STORE [[C3]](s64), [[GV3]](p0) :: (store (s64) into @var2_64)
306
+ ; CHECK-NEXT: G_BR %bb.3
307
+ ; CHECK-NEXT: {{ $}}
308
+ ; CHECK-NEXT: bb.3.if.then2:
309
+ ; CHECK-NEXT: successors: %bb.4(0x80000000)
310
+ ; CHECK-NEXT: {{ $}}
311
+ ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00
312
+ ; CHECK-NEXT: [[GV4:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1_64
313
+ ; CHECK-NEXT: G_STORE [[C4]](s64), [[GV4]](p0) :: (store (s64) into @var1_64)
314
+ ; CHECK-NEXT: G_BR %bb.4
315
+ ; CHECK-NEXT: {{ $}}
316
+ ; CHECK-NEXT: bb.4.if.end:
317
+ ; CHECK-NEXT: [[GV5:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3_64
318
+ ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00
319
+ ; CHECK-NEXT: G_STORE [[C5]](s64), [[GV5]](p0) :: (store (s64) into @var3_64)
320
+ ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
321
+ ; CHECK-NEXT: $x0 = COPY [[C6]](s64)
322
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
323
+ entry:
324
+ %0 = load i64 , ptr @var1_64 , align 4
325
+ %cmp = icmp eq i64 %0 , 1
326
+ br i1 %cmp , label %if.then , label %if.end
327
+
328
+ if.then:
329
+ store double 0 .0 , ptr @var2_64
330
+ br label %if.then2
331
+
332
+ if.then2:
333
+ store double 0 .0 , ptr @var1_64
334
+ br label %if.end
335
+
336
+ if.end:
337
+ store double 0 .0 , ptr @var3_64
338
+ ret i64 0
339
+ }
340
+
228
341
@var1_64 = common global i64 0 , align 4
229
342
@var2_64 = common global i64 0 , align 4
230
343
@var3_64 = common global i64 0 , align 4
0 commit comments