blob: 87cb5ff4eb4f5d282dd412737eca709b402550d2 [file] [log] [blame]
Mike Stumpb27442c2009-05-26 22:03:21 +00001// RUN: clang-cc -emit-llvm < %s -o %t &&
2// RUN: grep volatile %t | count 25 &&
Mike Stump73b290d2009-05-26 23:10:55 +00003// RUN: grep memcpy %t | count 7
Eli Friedman2e630542008-06-13 23:01:12 +00004
Mike Stumpc30814e2009-05-26 23:35:31 +00005// The number 25 comes from the current codegen for volatile loads;
Eli Friedman2e630542008-06-13 23:01:12 +00006// if this number changes, it's not necessarily something wrong, but
7// something has changed to affect volatile load/store codegen
8
9int S;
10volatile int vS;
11
12int* pS;
13volatile int* pvS;
14
15int A[10];
16volatile int vA[10];
17
18struct { int x; } F;
19struct { volatile int x; } vF;
20
21struct { int x; } F2;
22volatile struct { int x; } vF2;
23volatile struct { int x; } *vpF2;
24
25struct { struct { int y; } x; } F3;
26volatile struct { struct { int y; } x; } vF3;
27
28struct { int x:3; } BF;
29struct { volatile int x:3; } vBF;
30
31typedef int v4si __attribute__ ((vector_size (16)));
32v4si V;
33volatile v4si vV;
34
35typedef __attribute__(( ext_vector_type(4) )) int extv4;
36extv4 VE;
37volatile extv4 vVE;
38
39volatile struct {int x;} aggFct(void);
40
John McCall43d28052009-07-25 04:36:53 +000041int main() {
Eli Friedman2e630542008-06-13 23:01:12 +000042 int i;
43
44 // load
45 i=S;
46 i=vS;
47 i=*pS;
48 i=*pvS;
49 i=A[2];
50 i=vA[2];
51 i=F.x;
52 i=vF.x;
53 i=F2.x;
54 i=vF2.x;
55 i=vpF2->x;
56 i=F3.x.y;
57 i=vF3.x.y;
58 i=BF.x;
59 i=vBF.x;
60 i=V[3];
61 i=vV[3];
62 i=VE.yx[1];
63 i=vVE.zy[1];
64 i = aggFct().x;
65
66
67 // store
68 S=i;
69 vS=i;
70 *pS=i;
71 *pvS=i;
72 A[2]=i;
73 vA[2]=i;
74 F.x=i;
75 vF.x=i;
76 F2.x=i;
77 vF2.x=i;
78 vpF2->x=i;
79 vF3.x.y=i;
80 BF.x=i;
Daniel Dunbar2668dd12008-11-19 09:36:46 +000081 vBF.x=i;
Eli Friedman2e630542008-06-13 23:01:12 +000082 V[3]=i;
83 vV[3]=i;
84
85 // other ops:
86 ++S;
87 ++vS;
88 i+=S;
89 i+=vS;
Mike Stumpb27442c2009-05-26 22:03:21 +000090 (void)vF2;
91 vF2 = vF2;
92 vF2 = vF2 = vF2;
Mike Stump73b290d2009-05-26 23:10:55 +000093 vF2 = (vF2, vF2);
Eli Friedman2e630542008-06-13 23:01:12 +000094}