зеркало из https://github.com/microsoft/clang-1.git
FileCheckize volatile test
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174627 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
e8d3cf009f
Коммит
51dbecf89c
|
@ -1,6 +1,4 @@
|
||||||
// RUN: %clang_cc1 -emit-llvm < %s -o %t
|
// RUN: %clang_cc1 -emit-llvm < %s | FileCheck %s
|
||||||
// RUN: grep volatile %t | count 28
|
|
||||||
// RUN: grep "memcpy.*, i1 true" %t | count 6
|
|
||||||
|
|
||||||
// The number 28 comes from the current codegen for volatile loads;
|
// The number 28 comes from the current codegen for volatile loads;
|
||||||
// if this number changes, it's not necessarily something wrong, but
|
// if this number changes, it's not necessarily something wrong, but
|
||||||
|
@ -47,54 +45,90 @@ int main() {
|
||||||
// load
|
// load
|
||||||
i=S;
|
i=S;
|
||||||
i=vS;
|
i=vS;
|
||||||
|
// CHECK: load volatile
|
||||||
i=*pS;
|
i=*pS;
|
||||||
i=*pvS;
|
i=*pvS;
|
||||||
|
// CHECK: load volatile
|
||||||
i=A[2];
|
i=A[2];
|
||||||
i=vA[2];
|
i=vA[2];
|
||||||
|
// CHECK: load volatile
|
||||||
i=F.x;
|
i=F.x;
|
||||||
i=vF.x;
|
i=vF.x;
|
||||||
|
// CHECK: load volatile
|
||||||
i=F2.x;
|
i=F2.x;
|
||||||
i=vF2.x;
|
i=vF2.x;
|
||||||
|
// CHECK: load volatile
|
||||||
i=vpF2->x;
|
i=vpF2->x;
|
||||||
|
// CHECK: load volatile
|
||||||
i=F3.x.y;
|
i=F3.x.y;
|
||||||
i=vF3.x.y;
|
i=vF3.x.y;
|
||||||
|
// CHECK: load volatile
|
||||||
i=BF.x;
|
i=BF.x;
|
||||||
i=vBF.x;
|
i=vBF.x;
|
||||||
|
// CHECK: load volatile
|
||||||
i=V[3];
|
i=V[3];
|
||||||
i=vV[3];
|
i=vV[3];
|
||||||
|
// CHECK: load volatile
|
||||||
i=VE.yx[1];
|
i=VE.yx[1];
|
||||||
i=vVE.zy[1];
|
i=vVE.zy[1];
|
||||||
|
// CHECK: load volatile
|
||||||
i = aggFct().x; // Note: not volatile
|
i = aggFct().x; // Note: not volatile
|
||||||
i=vtS;
|
i=vtS;
|
||||||
|
// CHECK: load volatile
|
||||||
|
|
||||||
|
|
||||||
// store
|
// store
|
||||||
S=i;
|
S=i;
|
||||||
vS=i;
|
vS=i;
|
||||||
|
// CHECK: store volatile
|
||||||
*pS=i;
|
*pS=i;
|
||||||
*pvS=i;
|
*pvS=i;
|
||||||
|
// CHECK: store volatile
|
||||||
A[2]=i;
|
A[2]=i;
|
||||||
vA[2]=i;
|
vA[2]=i;
|
||||||
|
// CHECK: store volatile
|
||||||
F.x=i;
|
F.x=i;
|
||||||
vF.x=i;
|
vF.x=i;
|
||||||
|
// CHECK: store volatile
|
||||||
F2.x=i;
|
F2.x=i;
|
||||||
vF2.x=i;
|
vF2.x=i;
|
||||||
|
// CHECK: store volatile
|
||||||
vpF2->x=i;
|
vpF2->x=i;
|
||||||
|
// CHECK: store volatile
|
||||||
vF3.x.y=i;
|
vF3.x.y=i;
|
||||||
|
// CHECK: store volatile
|
||||||
BF.x=i;
|
BF.x=i;
|
||||||
vBF.x=i;
|
vBF.x=i;
|
||||||
|
// CHECK: store volatile
|
||||||
V[3]=i;
|
V[3]=i;
|
||||||
vV[3]=i;
|
vV[3]=i;
|
||||||
|
// CHECK: store volatile
|
||||||
vtS=i;
|
vtS=i;
|
||||||
|
// CHECK: store volatile
|
||||||
|
|
||||||
// other ops:
|
// other ops:
|
||||||
++S;
|
++S;
|
||||||
++vS;
|
++vS;
|
||||||
|
// CHECK: load volatile
|
||||||
|
// CHECK: store volatile
|
||||||
i+=S;
|
i+=S;
|
||||||
i+=vS;
|
i+=vS;
|
||||||
|
// CHECK: load volatile
|
||||||
++vtS;
|
++vtS;
|
||||||
|
// CHECK: load volatile
|
||||||
|
// CHECK: store volatile
|
||||||
(void)vF2;
|
(void)vF2;
|
||||||
|
// From vF2 to a temporary
|
||||||
|
// CHECK: call void @llvm.memcpy{{.*}} i1 true
|
||||||
vF2 = vF2;
|
vF2 = vF2;
|
||||||
|
// vF2 to itself
|
||||||
|
// CHECK: call void @llvm.memcpy{{.*}} i1 true
|
||||||
vF2 = vF2 = vF2;
|
vF2 = vF2 = vF2;
|
||||||
|
// vF2 to itself twice
|
||||||
|
// CHECK: call void @llvm.memcpy{{.*}} i1 true
|
||||||
|
// CHECK: call void @llvm.memcpy{{.*}} i1 true
|
||||||
vF2 = (vF2, vF2);
|
vF2 = (vF2, vF2);
|
||||||
|
// vF2 to a temporary, then vF2 to itself
|
||||||
|
// CHECK: call void @llvm.memcpy{{.*}} i1 true
|
||||||
|
// CHECK: call void @llvm.memcpy{{.*}} i1 true
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче