You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.1 KiB
56 lines
1.1 KiB
4 months ago
|
// RUN: %clang_cc1 -emit-llvm -triple x86_64-pc-linux-gnu %s -o - -std=c++11 | FileCheck %s
|
||
|
|
||
|
volatile int g1;
|
||
|
struct S {
|
||
|
volatile int a;
|
||
|
} g2;
|
||
|
|
||
|
volatile int& refcall();
|
||
|
|
||
|
// CHECK: define void @_Z2f1PViPV1S
|
||
|
void f1(volatile int *x, volatile S* s) {
|
||
|
// We should perform the load in these cases.
|
||
|
// CHECK: load volatile i32, i32*
|
||
|
(*x);
|
||
|
// CHECK: load volatile i32, i32*
|
||
|
__extension__ g1;
|
||
|
// CHECK: load volatile i32, i32*
|
||
|
s->a;
|
||
|
// CHECK: load volatile i32, i32*
|
||
|
g2.a;
|
||
|
// CHECK: load volatile i32, i32*
|
||
|
s->*(&S::a);
|
||
|
// CHECK: load volatile i32, i32*
|
||
|
// CHECK: load volatile i32, i32*
|
||
|
x[0], 1 ? x[0] : *x;
|
||
|
|
||
|
// CHECK: load volatile i32, i32*
|
||
|
// CHECK: load volatile i32, i32*
|
||
|
// CHECK: load volatile i32, i32*
|
||
|
*x ?: *x;
|
||
|
|
||
|
// CHECK: load volatile i32, i32*
|
||
|
({ *x; });
|
||
|
|
||
|
// CHECK-NOT: load volatile
|
||
|
// CHECK: ret
|
||
|
}
|
||
|
|
||
|
// CHECK: define void @_Z2f2PVi
|
||
|
// CHECK-NOT: load volatile
|
||
|
// CHECK: ret
|
||
|
void f2(volatile int *x) {
|
||
|
// We shouldn't perform the load in these cases.
|
||
|
refcall();
|
||
|
1 ? refcall() : *x;
|
||
|
}
|
||
|
|
||
|
// CHECK: define void @_Z2f3v()
|
||
|
// CHECK-NOT: load
|
||
|
// CHECK-NOT: memcpy
|
||
|
|
||
|
void f3(void) {
|
||
|
volatile char a[10];
|
||
|
a;
|
||
|
}
|