Index: tests_lit/llvm2ice_tests/nacl-atomic-errors.ll |
diff --git a/tests_lit/llvm2ice_tests/nacl-atomic-errors.ll b/tests_lit/llvm2ice_tests/nacl-atomic-errors.ll |
index 92de7aac5fa8c50cabbdfa0259c88221fe5562e0..4c65d38efff5fb6bb5b9fa4a3730a1f91dae931a 100644 |
--- a/tests_lit/llvm2ice_tests/nacl-atomic-errors.ll |
+++ b/tests_lit/llvm2ice_tests/nacl-atomic-errors.ll |
@@ -19,8 +19,8 @@ declare void @llvm.nacl.atomic.fence(i32) |
declare i1 @llvm.nacl.atomic.is.lock.free(i32, i8*) |
;;; Load |
-;;; Check unexpected memory order parameter (only sequential |
-;;; consistency == 6 is currently allowed). |
+;;; Check unexpected memory order parameter (release=4 and acq_rel=5 |
+;;; are disallowed). |
define i32 @error_atomic_load_8(i32 %iptr) { |
entry: |
@@ -34,7 +34,7 @@ entry: |
define i32 @error_atomic_load_16(i32 %iptr) { |
entry: |
%ptr = inttoptr i32 %iptr to i16* |
- %i = call i16 @llvm.nacl.atomic.load.i16(i16* %ptr, i32 1) |
+ %i = call i16 @llvm.nacl.atomic.load.i16(i16* %ptr, i32 4) |
%r = zext i16 %i to i32 |
ret i32 %r |
} |
@@ -43,13 +43,14 @@ entry: |
define i64 @error_atomic_load_64(i32 %iptr) { |
entry: |
%ptr = inttoptr i32 %iptr to i64* |
- %r = call i64 @llvm.nacl.atomic.load.i64(i64* %ptr, i32 2) |
+ %r = call i64 @llvm.nacl.atomic.load.i64(i64* %ptr, i32 5) |
ret i64 %r |
} |
; CHECK: Unexpected memory ordering for AtomicLoad |
;;; Store |
+;;; consume=2, acquire=3, acq_rel=5 are disallowed |
define void @error_atomic_store_32(i32 %iptr, i32 %v) { |
entry: |
@@ -70,19 +71,20 @@ entry: |
define void @error_atomic_store_64_const(i32 %iptr) { |
entry: |
%ptr = inttoptr i32 %iptr to i64* |
- call void @llvm.nacl.atomic.store.i64(i64 12345678901234, i64* %ptr, i32 4) |
+ call void @llvm.nacl.atomic.store.i64(i64 12345678901234, i64* %ptr, i32 5) |
ret void |
} |
; CHECK: Unexpected memory ordering for AtomicStore |
;;; RMW |
;;; Test atomic memory order and operation. |
+;;; All modes 1:6 allowed. |
JF
2015/03/17 16:58:53
In C++ they are, but not in PNaCl.
Jim Stichnoth
2015/03/17 18:42:04
Done.
|
define i32 @error_atomic_rmw_add_8(i32 %iptr, i32 %v) { |
entry: |
%trunc = trunc i32 %v to i8 |
%ptr = inttoptr i32 %iptr to i8* |
- %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 1, i8* %ptr, i8 %trunc, i32 5) |
+ %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 1, i8* %ptr, i8 %trunc, i32 0) |
%a_ext = zext i8 %a to i32 |
ret i32 %a_ext |
} |
@@ -91,7 +93,7 @@ entry: |
define i64 @error_atomic_rmw_add_64(i32 %iptr, i64 %v) { |
entry: |
%ptr = inttoptr i32 %iptr to i64* |
- %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 1, i64* %ptr, i64 %v, i32 4) |
+ %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 1, i64* %ptr, i64 %v, i32 7) |
ret i64 %a |
} |
; CHECK: Unexpected memory ordering for AtomicRMW |
@@ -131,7 +133,7 @@ entry: |
i32 %desired, i32 0, i32 6) |
ret i32 %old |
} |
-; CHECK: Unexpected memory ordering (success) for AtomicCmpxchg |
+; CHECK: Unexpected memory ordering for AtomicCmpxchg |
define i32 @error_atomic_cmpxchg_32_failure(i32 %iptr, i32 %expected, i32 %desired) { |
entry: |
@@ -140,22 +142,22 @@ entry: |
i32 %desired, i32 6, i32 0) |
ret i32 %old |
} |
-; CHECK: Unexpected memory ordering (failure) for AtomicCmpxchg |
+; CHECK: Unexpected memory ordering for AtomicCmpxchg |
define i64 @error_atomic_cmpxchg_64_failure(i32 %iptr, i64 %expected, i64 %desired) { |
entry: |
%ptr = inttoptr i32 %iptr to i64* |
%old = call i64 @llvm.nacl.atomic.cmpxchg.i64(i64* %ptr, i64 %expected, |
- i64 %desired, i32 6, i32 3) |
+ i64 %desired, i32 4, i32 1) |
ret i64 %old |
} |
-; CHECK: Unexpected memory ordering (failure) for AtomicCmpxchg |
+; CHECK: Unexpected memory ordering for AtomicCmpxchg |
;;; Fence and is-lock-free. |
define void @error_atomic_fence() { |
entry: |
- call void @llvm.nacl.atomic.fence(i32 1) |
+ call void @llvm.nacl.atomic.fence(i32 0) |
ret void |
} |
; CHECK: Unexpected memory ordering for AtomicFence |