@@ -316,10 +316,80 @@ out:
316
316
ret void
317
317
}
318
318
319
+ define void @hoist_noalias_addrspace_both (i1 %c , ptr %p , i64 %val ) {
320
+ ; CHECK-LABEL: @hoist_noalias_addrspace_both(
321
+ ; CHECK-NEXT: if:
322
+ ; CHECK-NEXT: [[T:%.*]] = atomicrmw add ptr [[P:%.*]], i64 [[VAL:%.*]] seq_cst, align 8
323
+ ; CHECK-NEXT: ret void
324
+ ;
325
+ if:
326
+ br i1 %c , label %then , label %else
327
+
328
+ then:
329
+ %t = atomicrmw add ptr %p , i64 %val seq_cst , !noalias.addrspace !4
330
+ br label %out
331
+
332
+ else:
333
+ %e = atomicrmw add ptr %p , i64 %val seq_cst , !noalias.addrspace !4
334
+ br label %out
335
+
336
+ out:
337
+ ret void
338
+ }
339
+
340
+ define void @hoist_noalias_addrspace_one (i1 %c , ptr %p , i64 %val ) {
341
+ ; CHECK-LABEL: @hoist_noalias_addrspace_one(
342
+ ; CHECK-NEXT: if:
343
+ ; CHECK-NEXT: [[T:%.*]] = atomicrmw add ptr [[P:%.*]], i64 [[VAL:%.*]] seq_cst, align 8
344
+ ; CHECK-NEXT: ret void
345
+ ;
346
+ if:
347
+ br i1 %c , label %then , label %else
348
+
349
+ then:
350
+ %t = atomicrmw add ptr %p , i64 %val seq_cst , !noalias.addrspace !4
351
+ br label %out
352
+
353
+ else:
354
+ %e = atomicrmw add ptr %p , i64 %val seq_cst
355
+ br label %out
356
+
357
+ out:
358
+ ret void
359
+ }
360
+
361
+ define void @hoist_noalias_addrspace_switch (i64 %i , ptr %p , i64 %val ) {
362
+ ; CHECK-LABEL: @hoist_noalias_addrspace_switch(
363
+ ; CHECK-NEXT: out:
364
+ ; CHECK-NEXT: [[T:%.*]] = atomicrmw add ptr [[P:%.*]], i64 [[VAL:%.*]] seq_cst, align 8
365
+ ; CHECK-NEXT: ret void
366
+ ;
367
+ switch i64 %i , label %bb0 [
368
+ i64 1 , label %bb1
369
+ i64 2 , label %bb2
370
+ ]
371
+ bb0:
372
+ %t = atomicrmw add ptr %p , i64 %val seq_cst , !noalias.addrspace !4
373
+ br label %out
374
+ bb1:
375
+ %e = atomicrmw add ptr %p , i64 %val seq_cst , !noalias.addrspace !5
376
+ br label %out
377
+ bb2:
378
+ %f = atomicrmw add ptr %p , i64 %val seq_cst , !noalias.addrspace !6
379
+ br label %out
380
+ out:
381
+ ret void
382
+ }
383
+
384
+
319
385
!0 = !{ i8 0 , i8 1 }
320
386
!1 = !{ i8 3 , i8 5 }
321
387
!2 = !{}
322
388
!3 = !{ i8 7 , i8 9 }
389
+ !4 = !{i32 5 , i32 6 }
390
+ !5 = !{i32 5 , i32 7 }
391
+ !6 = !{i32 4 , i32 8 }
392
+
323
393
;.
324
394
; CHECK: [[RNG0]] = !{i8 0, i8 1, i8 3, i8 5}
325
395
; CHECK: [[RNG1]] = !{i8 0, i8 1, i8 3, i8 5, i8 7, i8 9}
0 commit comments