| ; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s |
| |
| ; CHECK: It should have at least one range! |
| ; CHECK-NEXT: !0 = !{} |
| define i64 @noalias_addrspace__empty(ptr %ptr, i64 %val) { |
| %ret = atomicrmw add ptr %ptr, i64 %val seq_cst, !noalias.addrspace !0 |
| ret i64 %ret |
| } |
| |
| ; CHECK: Unfinished range! |
| ; CHECK-NEXT: !1 = !{i32 0} |
| define i64 @noalias_addrspace__single_field(ptr %ptr, i64 %val) { |
| %ret = atomicrmw add ptr %ptr, i64 %val seq_cst, !noalias.addrspace !1 |
| ret i64 %ret |
| } |
| |
| ; CHECK: Range must not be empty! |
| ; CHECK-NEXT: !2 = !{i32 0, i32 0} |
| define i64 @noalias_addrspace__0_0(ptr %ptr, i64 %val) { |
| %ret = atomicrmw add ptr %ptr, i64 %val seq_cst, !noalias.addrspace !2 |
| ret i64 %ret |
| } |
| |
| ; CHECK: noalias.addrspace type must be i32! |
| ; CHECK-NEXT: %ret = atomicrmw add ptr %ptr, i64 %val seq_cst, align 8, !noalias.addrspace !3 |
| define i64 @noalias_addrspace__i64(ptr %ptr, i64 %val) { |
| %ret = atomicrmw add ptr %ptr, i64 %val seq_cst, !noalias.addrspace !3 |
| ret i64 %ret |
| } |
| |
| ; CHECK: The lower limit must be an integer! |
| define i64 @noalias_addrspace__fp(ptr %ptr, i64 %val) { |
| %ret = atomicrmw add ptr %ptr, i64 %val seq_cst, !noalias.addrspace !4 |
| ret i64 %ret |
| } |
| |
| ; CHECK: The lower limit must be an integer! |
| define i64 @noalias_addrspace__ptr(ptr %ptr, i64 %val) { |
| %ret = atomicrmw add ptr %ptr, i64 %val seq_cst, !noalias.addrspace !5 |
| ret i64 %ret |
| } |
| |
| ; CHECK: The lower limit must be an integer! |
| define i64 @noalias_addrspace__nonconstant(ptr %ptr, i64 %val) { |
| %ret = atomicrmw add ptr %ptr, i64 %val seq_cst, !noalias.addrspace !6 |
| ret i64 %ret |
| } |
| |
| @gv0 = global i32 0 |
| @gv1 = global i32 1 |
| |
| !0 = !{} |
| !1 = !{i32 0} |
| !2 = !{i32 0, i32 0} |
| !3 = !{i64 1, i64 5} |
| !4 = !{float 0.0, float 2.0} |
| !5 = !{ptr null, ptr addrspace(1) null} |
| !6 = !{i32 ptrtoint (ptr @gv0 to i32), i32 ptrtoint (ptr @gv1 to i32) } |
| |
| |