git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174627 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Tim Northover 2013-02-07 15:39:16 +00:00
Родитель e8d3cf009f
Коммит 51dbecf89c
1 изменённых файлов: 37 добавлений и 3 удалений

Просмотреть файл

@ -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
} }