47 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 52// 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_CST5// 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_REL8// RUN: %clang_cc1 -emit-llvm -fopenmp -triple=x86_64-unknown-linux-gnu \9// RUN: -DORDERING=relaxed -o - %s \10// RUN: | FileCheck %s --check-prefix=RELAXED11 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 818// SEQ_CST-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 819// SEQ_CST-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 820// SEQ_CST-NEXT: [[TMP1:%.*]] = atomicrmw add ptr [[TMP0]], i32 1 seq_cst, align 421// SEQ_CST-NEXT: call void @__kmpc_flush(ptr @[[GLOB1:[0-9]+]])22// SEQ_CST-NEXT: ret void23//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 828// ACQ_REL-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 829// ACQ_REL-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 830// ACQ_REL-NEXT: [[TMP1:%.*]] = atomicrmw add ptr [[TMP0]], i32 1 release, align 431// ACQ_REL-NEXT: call void @__kmpc_flush(ptr @[[GLOB1:[0-9]+]])32// ACQ_REL-NEXT: ret void33//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 838// RELAXED-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 839// RELAXED-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 840// RELAXED-NEXT: [[TMP1:%.*]] = atomicrmw add ptr [[TMP0]], i32 1 monotonic, align 441// RELAXED-NEXT: ret void42//43void foo(int *x) {44 #pragma omp atomic update45 *x = *x + 1;46}47