|
| 1 | +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 |
| 2 | +// RUN: %clang_cc1 -emit-llvm -fopenmp -triple=x86_64-unknown-linux-gnu \ |
| 3 | +// RUN: -DORDERING=seq_cst -o - %s \ |
| 4 | +// RUN: | FileCheck %s --check-prefix=SEQ_CST |
| 5 | +// RUN: %clang_cc1 -emit-llvm -fopenmp -triple=x86_64-unknown-linux-gnu \ |
| 6 | +// RUN: -DORDERING=acq_rel -o - %s \ |
| 7 | +// RUN: | FileCheck %s --check-prefix=ACQ_REL |
| 8 | +// RUN: %clang_cc1 -emit-llvm -fopenmp -triple=x86_64-unknown-linux-gnu \ |
| 9 | +// RUN: -DORDERING=relaxed -o - %s \ |
| 10 | +// RUN: | FileCheck %s --check-prefix=RELAXED |
| 11 | + |
| 12 | +#pragma omp requires atomic_default_mem_order(ORDERING) |
| 13 | + |
| 14 | +// SEQ_CST-LABEL: define dso_local void @_Z3fooPi( |
| 15 | +// SEQ_CST-SAME: ptr noundef [[X:%.*]]) #[[ATTR0:[0-9]+]] { |
| 16 | +// SEQ_CST-NEXT: [[ENTRY:.*:]] |
| 17 | +// SEQ_CST-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8 |
| 18 | +// SEQ_CST-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8 |
| 19 | +// SEQ_CST-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8 |
| 20 | +// SEQ_CST-NEXT: [[TMP1:%.*]] = atomicrmw add ptr [[TMP0]], i32 1 seq_cst, align 4 |
| 21 | +// SEQ_CST-NEXT: call void @__kmpc_flush(ptr @[[GLOB1:[0-9]+]]) |
| 22 | +// SEQ_CST-NEXT: ret void |
| 23 | +// |
| 24 | +// ACQ_REL-LABEL: define dso_local void @_Z3fooPi( |
| 25 | +// ACQ_REL-SAME: ptr noundef [[X:%.*]]) #[[ATTR0:[0-9]+]] { |
| 26 | +// ACQ_REL-NEXT: [[ENTRY:.*:]] |
| 27 | +// ACQ_REL-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8 |
| 28 | +// ACQ_REL-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8 |
| 29 | +// ACQ_REL-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8 |
| 30 | +// ACQ_REL-NEXT: [[TMP1:%.*]] = atomicrmw add ptr [[TMP0]], i32 1 release, align 4 |
| 31 | +// ACQ_REL-NEXT: call void @__kmpc_flush(ptr @[[GLOB1:[0-9]+]]) |
| 32 | +// ACQ_REL-NEXT: ret void |
| 33 | +// |
| 34 | +// RELAXED-LABEL: define dso_local void @_Z3fooPi( |
| 35 | +// RELAXED-SAME: ptr noundef [[X:%.*]]) #[[ATTR0:[0-9]+]] { |
| 36 | +// RELAXED-NEXT: [[ENTRY:.*:]] |
| 37 | +// RELAXED-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8 |
| 38 | +// RELAXED-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8 |
| 39 | +// RELAXED-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8 |
| 40 | +// RELAXED-NEXT: [[TMP1:%.*]] = atomicrmw add ptr [[TMP0]], i32 1 monotonic, align 4 |
| 41 | +// RELAXED-NEXT: ret void |
| 42 | +// |
| 43 | +void foo(int *x) { |
| 44 | + #pragma omp atomic update |
| 45 | + *x = *x + 1; |
| 46 | +} |
0 commit comments