llvm-project/clang/test/CodeGen/2008-03-05-syncPtr.c
James Y Knight 8043d5a964 NFC: update clang tests to check ordering and alignment for atomicrmw/cmpxchg.
The ability to specify alignment was recently added, and it's an
important property which we should ensure is set as expected by
Clang. (Especially before making further changes to Clang's code in
this area.) But, because it's on the end of the lines, the existing
tests all ignore it.

Therefore, update all the tests to also verify the expected alignment
for atomicrmw and cmpxchg. While I was in there, I also updated uses
of 'load atomic' and 'store atomic', and added the memory ordering,
where that was missing.
2021-02-11 17:35:09 -05:00

41 lines
1011 B
C

// RUN: %clang_cc1 -triple x86_64-apple-darwin %s -emit-llvm -o - | FileCheck %s
int* foo(int** a, int* b, int* c) {
return __sync_val_compare_and_swap (a, b, c);
}
// CHECK-LABEL: define{{.*}} i32* @foo
// CHECK: cmpxchg {{.*}}, align 8
int foo2(int** a, int* b, int* c) {
return __sync_bool_compare_and_swap (a, b, c);
}
// CHECK-LABEL: define{{.*}} i32 @foo2
// CHECK: cmpxchg {{.*}}, align 8
int* foo3(int** a, int b) {
return __sync_fetch_and_add (a, b);
}
// CHECK-LABEL: define{{.*}} i32* @foo3
// CHECK: atomicrmw add {{.*}}, align 8
int* foo4(int** a, int b) {
return __sync_fetch_and_sub (a, b);
}
// CHECK-LABEL: define{{.*}} i32* @foo4
// CHECK: atomicrmw sub {{.*}}, align 8
int* foo5(int** a, int* b) {
return __sync_lock_test_and_set (a, b);
}
// CHECK-LABEL: define{{.*}} i32* @foo5
// CHECK: atomicrmw xchg {{.*}}, align 8
int* foo6(int** a, int*** b) {
return __sync_lock_test_and_set (a, b);
}
// CHECK-LABEL: define{{.*}} i32* @foo6
// CHECK: atomicrmw xchg {{.*}}, align 8