@@ -381,6 +381,28 @@ out:
381381 ret void
382382}
383383
384+ define void @hoist_noalias_addrspace_switch_multiple (i64 %i , ptr %p , i64 %val ) {
385+ ; CHECK-LABEL: @hoist_noalias_addrspace_switch_multiple(
386+ ; CHECK-NEXT: out:
387+ ; CHECK-NEXT: [[T:%.*]] = atomicrmw add ptr [[P:%.*]], i64 [[VAL:%.*]] seq_cst, align 8, !noalias.addrspace [[META9:![0-9]+]]
388+ ; CHECK-NEXT: ret void
389+ ;
390+ switch i64 %i , label %bb0 [
391+ i64 1 , label %bb1
392+ i64 2 , label %bb2
393+ ]
394+ bb0:
395+ %t = atomicrmw add ptr %p , i64 %val seq_cst , !noalias.addrspace !7
396+ br label %out
397+ bb1:
398+ %e = atomicrmw add ptr %p , i64 %val seq_cst , !noalias.addrspace !8
399+ br label %out
400+ bb2:
401+ %f = atomicrmw add ptr %p , i64 %val seq_cst , !noalias.addrspace !9
402+ br label %out
403+ out:
404+ ret void
405+ }
384406
385407!0 = !{ i8 0 , i8 1 }
386408!1 = !{ i8 3 , i8 5 }
389411!4 = !{i32 5 , i32 6 }
390412!5 = !{i32 5 , i32 7 }
391413!6 = !{i32 4 , i32 8 }
414+ !7 = !{i32 4 , i32 8 , i32 20 , i32 31 }
415+ !8 = !{i32 2 , i32 5 }
416+ !9 = !{i32 2 , i32 5 , i32 22 , i32 42 , i32 45 , i32 50 }
392417
393418;.
394419; CHECK: [[RNG0]] = !{i8 0, i8 1, i8 3, i8 5}
400425; CHECK: [[META6]] = !{float 2.500000e+00}
401426; CHECK: [[META7]] = !{i32 5, i32 6}
402427; CHECK: [[META8]] = !{i32 4, i32 8}
428+ ; CHECK: [[META9]] = !{i32 2, i32 8, i32 20, i32 42, i32 45, i32 50}
403429;.
0 commit comments