@@ -316,10 +316,80 @@ out:
316316 ret void
317317}
318318
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+
319385!0 = !{ i8 0 , i8 1 }
320386!1 = !{ i8 3 , i8 5 }
321387!2 = !{}
322388!3 = !{ i8 7 , i8 9 }
389+ !4 = !{i32 5 , i32 6 }
390+ !5 = !{i32 5 , i32 7 }
391+ !6 = !{i32 4 , i32 8 }
392+
323393;.
324394; CHECK: [[RNG0]] = !{i8 0, i8 1, i8 3, i8 5}
325395; CHECK: [[RNG1]] = !{i8 0, i8 1, i8 3, i8 5, i8 7, i8 9}
0 commit comments