mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-29 12:56:07 +00:00

These are supposed to produce the same as normal volatile pointer loads/stores. When -volatile:ms is specified, normal volatile pointers are forced to have atomic semantics (as is the default on x86 in MSVC mode). In that case, these builtins should still produce non-atomic volatile loads/stores without acquire/release semantics, which the new test verifies. These are only available on ARM (and on AArch64, although clang doesn't support AArch64/Windows yet). This implements what is missing for PR30394, making it possible to compile C++ for ARM in MSVC mode with MSVC headers. Differential Revision: https://reviews.llvm.org/D24986 llvm-svn: 282900
14 lines
411 B
C
14 lines
411 B
C
// REQUIRES: arm-registered-target
|
|
// RUN: %clang_cc1 -triple thumbv7-win32 -emit-llvm -fms-extensions -fms-volatile -o - < %s | FileCheck %s
|
|
|
|
void test1(int volatile *p, int v) {
|
|
__iso_volatile_store32(p, v);
|
|
// CHECK-LABEL: @test1
|
|
// CHECK: store volatile {{.*}}, {{.*}}
|
|
}
|
|
int test2(const int volatile *p) {
|
|
return __iso_volatile_load32(p);
|
|
// CHECK-LABEL: @test2
|
|
// CHECK: load volatile {{.*}}
|
|
}
|