111 lines · plain
1; RUN: llvm-as < %s | llvm-dis | FileCheck %s2 3define i64 @atomicrmw_noalias_addrspace__0_1(ptr %ptr, i64 %val) {4; CHECK-LABEL: define i64 @atomicrmw_noalias_addrspace__0_1(5; CHECK-SAME: ptr [[PTR:%.*]], i64 [[VAL:%.*]]) {6; CHECK-NEXT: [[RET:%.*]] = atomicrmw add ptr [[PTR]], i64 [[VAL]] seq_cst, align 8, !noalias.addrspace [[META0:![0-9]+]]7; CHECK-NEXT: ret i64 [[RET]]8;9 %ret = atomicrmw add ptr %ptr, i64 %val seq_cst, align 8, !noalias.addrspace !010 ret i64 %ret11}12 13define i64 @atomicrmw_noalias_addrspace__0_2(ptr %ptr, i64 %val) {14; CHECK-LABEL: define i64 @atomicrmw_noalias_addrspace__0_2(15; CHECK-SAME: ptr [[PTR:%.*]], i64 [[VAL:%.*]]) {16; CHECK-NEXT: [[RET:%.*]] = atomicrmw add ptr [[PTR]], i64 [[VAL]] seq_cst, align 8, !noalias.addrspace [[META1:![0-9]+]]17; CHECK-NEXT: ret i64 [[RET]]18;19 %ret = atomicrmw add ptr %ptr, i64 %val seq_cst, align 8, !noalias.addrspace !120 ret i64 %ret21}22 23define i64 @atomicrmw_noalias_addrspace__1_3(ptr %ptr, i64 %val) {24; CHECK-LABEL: define i64 @atomicrmw_noalias_addrspace__1_3(25; CHECK-SAME: ptr [[PTR:%.*]], i64 [[VAL:%.*]]) {26; CHECK-NEXT: [[RET:%.*]] = atomicrmw add ptr [[PTR]], i64 [[VAL]] seq_cst, align 8, !noalias.addrspace [[META2:![0-9]+]]27; CHECK-NEXT: ret i64 [[RET]]28;29 %ret = atomicrmw add ptr %ptr, i64 %val seq_cst, align 8, !noalias.addrspace !230 ret i64 %ret31}32 33define i64 @atomicrmw_noalias_addrspace__multiple_ranges(ptr %ptr, i64 %val) {34; CHECK-LABEL: define i64 @atomicrmw_noalias_addrspace__multiple_ranges(35; CHECK-SAME: ptr [[PTR:%.*]], i64 [[VAL:%.*]]) {36; CHECK-NEXT: [[RET:%.*]] = atomicrmw add ptr [[PTR]], i64 [[VAL]] seq_cst, align 8, !noalias.addrspace [[META3:![0-9]+]]37; CHECK-NEXT: ret i64 [[RET]]38;39 %ret = atomicrmw add ptr %ptr, i64 %val seq_cst, align 8, !noalias.addrspace !340 ret i64 %ret41}42 43define i64 @load_noalias_addrspace__5_6(ptr %ptr) {44; CHECK-LABEL: define i64 @load_noalias_addrspace__5_6(45; CHECK-SAME: ptr [[PTR:%.*]]) {46; CHECK-NEXT: [[RET:%.*]] = load i64, ptr [[PTR]], align 4, !noalias.addrspace [[META4:![0-9]+]]47; CHECK-NEXT: ret i64 [[RET]]48;49 %ret = load i64, ptr %ptr, align 4, !noalias.addrspace !450 ret i64 %ret51}52 53define void @store_noalias_addrspace__5_6(ptr %ptr, i64 %val) {54; CHECK-LABEL: define void @store_noalias_addrspace__5_6(55; CHECK-SAME: ptr [[PTR:%.*]], i64 [[VAL:%.*]]) {56; CHECK-NEXT: store i64 [[VAL]], ptr [[PTR]], align 4, !noalias.addrspace [[META4]]57; CHECK-NEXT: ret void58;59 store i64 %val, ptr %ptr, align 4, !noalias.addrspace !460 ret void61}62 63define { i64, i1 } @cmpxchg_noalias_addrspace__5_6(ptr %ptr, i64 %val0, i64 %val1) {64; CHECK-LABEL: define { i64, i1 } @cmpxchg_noalias_addrspace__5_6(65; CHECK-SAME: ptr [[PTR:%.*]], i64 [[VAL0:%.*]], i64 [[VAL1:%.*]]) {66; CHECK-NEXT: [[RET:%.*]] = cmpxchg ptr [[PTR]], i64 [[VAL0]], i64 [[VAL1]] monotonic monotonic, align 8, !noalias.addrspace [[META4]]67; CHECK-NEXT: ret { i64, i1 } [[RET]]68;69 %ret = cmpxchg ptr %ptr, i64 %val0, i64 %val1 monotonic monotonic, align 8, !noalias.addrspace !470 ret { i64, i1 } %ret71}72 73declare void @foo()74 75define void @call_noalias_addrspace__5_6(ptr %ptr) {76; CHECK-LABEL: define void @call_noalias_addrspace__5_6(77; CHECK-SAME: ptr [[PTR:%.*]]) {78; CHECK-NEXT: call void @foo(), !noalias.addrspace [[META4]]79; CHECK-NEXT: ret void80;81 call void @foo(), !noalias.addrspace !482 ret void83}84 85define void @call_memcpy_intrinsic_addrspace__5_6(ptr %dst, ptr %src, i64 %size) {86; CHECK-LABEL: define void @call_memcpy_intrinsic_addrspace__5_6(87; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[SIZE:%.*]]) {88; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST]], ptr [[SRC]], i64 [[SIZE]], i1 false), !noalias.addrspace [[META4]]89; CHECK-NEXT: ret void90;91 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %size, i1 false), !noalias.addrspace !492 ret void93}94 95declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #096 97attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }98 99!0 = !{i32 0, i32 1}100!1 = !{i32 0, i32 2}101!2 = !{i32 1, i32 3}102!3 = !{i32 4, i32 6, i32 10, i32 55}103!4 = !{i32 5, i32 6}104;.105; CHECK: [[META0]] = !{i32 0, i32 1}106; CHECK: [[META1]] = !{i32 0, i32 2}107; CHECK: [[META2]] = !{i32 1, i32 3}108; CHECK: [[META3]] = !{i32 4, i32 6, i32 10, i32 55}109; CHECK: [[META4]] = !{i32 5, i32 6}110;.111