1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -triple=%itanium_abi_triple -emit-llvm < %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-IT
2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -triple=%ms_abi_triple -emit-llvm < %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-MS
31e692ace08959399794363e77499b73da5494af9Eli Friedman
41e692ace08959399794363e77499b73da5494af9Eli Friedmanint S;
51e692ace08959399794363e77499b73da5494af9Eli Friedmanvolatile int vS;
61e692ace08959399794363e77499b73da5494af9Eli Friedman
71e692ace08959399794363e77499b73da5494af9Eli Friedmanint* pS;
81e692ace08959399794363e77499b73da5494af9Eli Friedmanvolatile int* pvS;
91e692ace08959399794363e77499b73da5494af9Eli Friedman
101e692ace08959399794363e77499b73da5494af9Eli Friedmanint A[10];
111e692ace08959399794363e77499b73da5494af9Eli Friedmanvolatile int vA[10];
121e692ace08959399794363e77499b73da5494af9Eli Friedman
131e692ace08959399794363e77499b73da5494af9Eli Friedmanstruct { int x; } F;
141e692ace08959399794363e77499b73da5494af9Eli Friedmanstruct { volatile int x; } vF;
151e692ace08959399794363e77499b73da5494af9Eli Friedman
161e692ace08959399794363e77499b73da5494af9Eli Friedmanstruct { int x; } F2;
171e692ace08959399794363e77499b73da5494af9Eli Friedmanvolatile struct { int x; } vF2;
181e692ace08959399794363e77499b73da5494af9Eli Friedmanvolatile struct { int x; } *vpF2;
191e692ace08959399794363e77499b73da5494af9Eli Friedman
201e692ace08959399794363e77499b73da5494af9Eli Friedmanstruct { struct { int y; } x; } F3;
211e692ace08959399794363e77499b73da5494af9Eli Friedmanvolatile struct { struct { int y; } x; } vF3;
221e692ace08959399794363e77499b73da5494af9Eli Friedman
231e692ace08959399794363e77499b73da5494af9Eli Friedmanstruct { int x:3; } BF;
241e692ace08959399794363e77499b73da5494af9Eli Friedmanstruct { volatile int x:3; } vBF;
251e692ace08959399794363e77499b73da5494af9Eli Friedman
261e692ace08959399794363e77499b73da5494af9Eli Friedmantypedef int v4si __attribute__ ((vector_size (16)));
271e692ace08959399794363e77499b73da5494af9Eli Friedmanv4si V;
281e692ace08959399794363e77499b73da5494af9Eli Friedmanvolatile v4si vV;
291e692ace08959399794363e77499b73da5494af9Eli Friedman
301e692ace08959399794363e77499b73da5494af9Eli Friedmantypedef __attribute__(( ext_vector_type(4) )) int extv4;
311e692ace08959399794363e77499b73da5494af9Eli Friedmanextv4 VE;
321e692ace08959399794363e77499b73da5494af9Eli Friedmanvolatile extv4 vVE;
331e692ace08959399794363e77499b73da5494af9Eli Friedman
341e692ace08959399794363e77499b73da5494af9Eli Friedmanvolatile struct {int x;} aggFct(void);
351e692ace08959399794363e77499b73da5494af9Eli Friedman
36cb9b010c346911fbefc49f8488dad8e090a0b5d4Mike Stumptypedef volatile int volatile_int;
37cb9b010c346911fbefc49f8488dad8e090a0b5d4Mike Stumpvolatile_int vtS;
38cb9b010c346911fbefc49f8488dad8e090a0b5d4Mike Stump
3913591ed054d1b2d6d392151ba05cbc883e640648John McCallint main() {
401e692ace08959399794363e77499b73da5494af9Eli Friedman  int i;
41026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: [[I:%[a-zA-Z0-9_.]+]] = alloca i32
421e692ace08959399794363e77499b73da5494af9Eli Friedman  // load
431e692ace08959399794363e77499b73da5494af9Eli Friedman  i=S;
443ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* @S
45026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
461e692ace08959399794363e77499b73da5494af9Eli Friedman  i=vS;
473ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile i32, i32* @vS
48026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
491e692ace08959399794363e77499b73da5494af9Eli Friedman  i=*pS;
503ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[PS_VAL:%[a-zA-Z0-9_.]+]] = load i32*, i32** @pS
513ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[PS_VAL]]
52026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
531e692ace08959399794363e77499b73da5494af9Eli Friedman  i=*pvS;
543ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[PVS_VAL:%[a-zA-Z0-9_.]+]] = load i32*, i32** @pvS
553ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile i32, i32* [[PVS_VAL]]
56026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
571e692ace08959399794363e77499b73da5494af9Eli Friedman  i=A[2];
583ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* getelementptr {{.*}} @A
59026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
601e692ace08959399794363e77499b73da5494af9Eli Friedman  i=vA[2];
613ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile i32, i32* getelementptr {{.*}} @vA
62026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
631e692ace08959399794363e77499b73da5494af9Eli Friedman  i=F.x;
643ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* getelementptr {{.*}} @F
65026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
661e692ace08959399794363e77499b73da5494af9Eli Friedman  i=vF.x;
673ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile i32, i32* getelementptr {{.*}} @vF
68026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
691e692ace08959399794363e77499b73da5494af9Eli Friedman  i=F2.x;
703ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* getelementptr {{.*}} @F2
71026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
721e692ace08959399794363e77499b73da5494af9Eli Friedman  i=vF2.x;
733ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile i32, i32* getelementptr {{.*}} @vF2
74026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
751e692ace08959399794363e77499b73da5494af9Eli Friedman  i=vpF2->x;
763ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[VPF2_VAL:%[a-zA-Z0-9_.]+]] = load {{%[a-zA-Z0-9_.]+}}*, {{%[a-zA-Z0-9_.]+}}** @vpF2
77026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: [[ELT:%[a-zA-Z0-9_.]+]] = getelementptr {{.*}} [[VPF2_VAL]]
783ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile i32, i32* [[ELT]]
79026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
801e692ace08959399794363e77499b73da5494af9Eli Friedman  i=F3.x.y;
813ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* getelementptr {{.*}} @F3
82026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
831e692ace08959399794363e77499b73da5494af9Eli Friedman  i=vF3.x.y;
843ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile i32, i32* getelementptr {{.*}} @vF3
85026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
861e692ace08959399794363e77499b73da5494af9Eli Friedman  i=BF.x;
873ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK-IT: load i8, i8* getelementptr {{.*}} @BF
883ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK-MS: load i32, i32* getelementptr {{.*}} @BF
89026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
901e692ace08959399794363e77499b73da5494af9Eli Friedman  i=vBF.x;
913ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK-IT: load volatile i8, i8* getelementptr {{.*}} @vBF
923ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK-MS: load volatile i32, i32* getelementptr {{.*}} @vBF
93026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
941e692ace08959399794363e77499b73da5494af9Eli Friedman  i=V[3];
953ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load <4 x i32>, <4 x i32>* @V
96026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
971e692ace08959399794363e77499b73da5494af9Eli Friedman  i=vV[3];
983ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile <4 x i32>, <4 x i32>* @vV
99026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
1001e692ace08959399794363e77499b73da5494af9Eli Friedman  i=VE.yx[1];
1013ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load <4 x i32>, <4 x i32>* @VE
102026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
1031e692ace08959399794363e77499b73da5494af9Eli Friedman  i=vVE.zy[1];
1043ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile <4 x i32>, <4 x i32>* @vVE
105026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
1065291c3cec0dbe8ad1d8e7e67e93af2b1586d5400Douglas Gregor  i = aggFct().x; // Note: not volatile
107026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover  // N.b. Aggregate return is extremely target specific, all we can
108026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover  // really say here is that there probably shouldn't be a volatile
109026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover  // load.
110026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK-NOT: load volatile
111026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
112cb9b010c346911fbefc49f8488dad8e090a0b5d4Mike Stump  i=vtS;
1133ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile i32, i32* @vtS
114026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
1151e692ace08959399794363e77499b73da5494af9Eli Friedman
1161e692ace08959399794363e77499b73da5494af9Eli Friedman
1171e692ace08959399794363e77499b73da5494af9Eli Friedman  // store
1181e692ace08959399794363e77499b73da5494af9Eli Friedman  S=i;
1193ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
120026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* @S
1211e692ace08959399794363e77499b73da5494af9Eli Friedman  vS=i;
1223ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
123026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store volatile i32 {{.*}}, i32* @vS
1241e692ace08959399794363e77499b73da5494af9Eli Friedman  *pS=i;
1253ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
1263ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[PS_VAL:%[a-zA-Z0-9_.]+]] = load i32*, i32** @pS
127026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[PS_VAL]]
1281e692ace08959399794363e77499b73da5494af9Eli Friedman  *pvS=i;
1293ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
1303ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[PVS_VAL:%[a-zA-Z0-9_.]+]] = load i32*, i32** @pvS
131026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store volatile i32 {{.*}}, i32* [[PVS_VAL]]
1321e692ace08959399794363e77499b73da5494af9Eli Friedman  A[2]=i;
1333ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
134026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* getelementptr {{.*}} @A
1351e692ace08959399794363e77499b73da5494af9Eli Friedman  vA[2]=i;
1363ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
137026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store volatile i32 {{.*}}, i32* getelementptr {{.*}} @vA
1381e692ace08959399794363e77499b73da5494af9Eli Friedman  F.x=i;
1393ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
140026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* getelementptr {{.*}} @F
1411e692ace08959399794363e77499b73da5494af9Eli Friedman  vF.x=i;
1423ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
143026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store volatile i32 {{.*}}, i32* getelementptr {{.*}} @vF
1441e692ace08959399794363e77499b73da5494af9Eli Friedman  F2.x=i;
1453ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
146026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* getelementptr {{.*}} @F2
1471e692ace08959399794363e77499b73da5494af9Eli Friedman  vF2.x=i;
1483ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
149026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store volatile i32 {{.*}}, i32* getelementptr {{.*}} @vF2
1501e692ace08959399794363e77499b73da5494af9Eli Friedman  vpF2->x=i;
1513ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
1523ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[VPF2_VAL:%[a-zA-Z0-9_.]+]] = load {{%[a-zA-Z0-9._]+}}*, {{%[a-zA-Z0-9._]+}}** @vpF2
153026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: [[ELT:%[a-zA-Z0-9_.]+]] = getelementptr {{.*}} [[VPF2_VAL]]
154026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store volatile i32 {{.*}}, i32* [[ELT]]
1551e692ace08959399794363e77499b73da5494af9Eli Friedman  vF3.x.y=i;
1563ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
157026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store volatile i32 {{.*}}, i32* getelementptr {{.*}} @vF3
1581e692ace08959399794363e77499b73da5494af9Eli Friedman  BF.x=i;
1593ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
1603ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK-IT: load i8, i8* getelementptr {{.*}} @BF
1613ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK-MS: load i32, i32* getelementptr {{.*}} @BF
162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-IT: store i8 {{.*}}, i8* getelementptr {{.*}} @BF
163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-MS: store i32 {{.*}}, i32* getelementptr {{.*}} @BF
164ed3849b456d64d124bddc7ac044f3ce590bd9d69Daniel Dunbar  vBF.x=i;
1653ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
1663ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK-IT: load volatile i8, i8* getelementptr {{.*}} @vBF
1673ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK-MS: load volatile i32, i32* getelementptr {{.*}} @vBF
168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-IT: store volatile i8 {{.*}}, i8* getelementptr {{.*}} @vBF
169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-MS: store volatile i32 {{.*}}, i32* getelementptr {{.*}} @vBF
1701e692ace08959399794363e77499b73da5494af9Eli Friedman  V[3]=i;
1713ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
1723ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load <4 x i32>, <4 x i32>* @V
173026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store <4 x i32> {{.*}}, <4 x i32>* @V
1741e692ace08959399794363e77499b73da5494af9Eli Friedman  vV[3]=i;
1753ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
1763ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile <4 x i32>, <4 x i32>* @vV
177026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store volatile <4 x i32> {{.*}}, <4 x i32>* @vV
178cb9b010c346911fbefc49f8488dad8e090a0b5d4Mike Stump  vtS=i;
1793ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
180026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store volatile i32 {{.*}}, i32* @vtS
1811e692ace08959399794363e77499b73da5494af9Eli Friedman
1821e692ace08959399794363e77499b73da5494af9Eli Friedman  // other ops:
1831e692ace08959399794363e77499b73da5494af9Eli Friedman  ++S;
1843ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* @S
185026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* @S
1861e692ace08959399794363e77499b73da5494af9Eli Friedman  ++vS;
1873ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile i32, i32* @vS
188026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store volatile i32 {{.*}}, i32* @vS
1891e692ace08959399794363e77499b73da5494af9Eli Friedman  i+=S;
1903ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* @S
1913ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
192026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
1931e692ace08959399794363e77499b73da5494af9Eli Friedman  i+=vS;
1943ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile i32, i32* @vS
1953ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load i32, i32* [[I]]
196026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store i32 {{.*}}, i32* [[I]]
197cb9b010c346911fbefc49f8488dad8e090a0b5d4Mike Stump  ++vtS;
1983ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load volatile i32, i32* @vtS
199026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: store volatile i32 {{.*}}, i32* @vtS
20049d1cd5a09ed3df353371fd7f206674a85e0fb45Mike Stump  (void)vF2;
20151dbecf89c8cc453964a3d831ceea3bca1a25cb5Tim Northover  // From vF2 to a temporary
202026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: call void @llvm.memcpy.{{.*}}(i8* %{{.*}}, i8* {{.*}} @vF2 {{.*}}, i1 true)
20349d1cd5a09ed3df353371fd7f206674a85e0fb45Mike Stump  vF2 = vF2;
20451dbecf89c8cc453964a3d831ceea3bca1a25cb5Tim Northover  // vF2 to itself
205026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: call void @llvm.memcpy.{{.*}}(i8* {{.*@vF2.*}}, i8* {{.*@vF2.*}}, i1 true)
20649d1cd5a09ed3df353371fd7f206674a85e0fb45Mike Stump  vF2 = vF2 = vF2;
20751dbecf89c8cc453964a3d831ceea3bca1a25cb5Tim Northover  // vF2 to itself twice
208026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: call void @llvm.memcpy.{{.*}}(i8* {{.*@vF2.*}}, i8* {{.*@vF2.*}}, i1 true)
209026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: call void @llvm.memcpy.{{.*}}(i8* {{.*@vF2.*}}, i8* {{.*@vF2.*}}, i1 true)
2108028bfaa96f3dbe224cc3766a04e9a68f22e4a64Argyrios Kyrtzidis  vF2 = (vF2, vF2);
21151dbecf89c8cc453964a3d831ceea3bca1a25cb5Tim Northover  // vF2 to a temporary, then vF2 to itself
212026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: call void @llvm.memcpy.{{.*}}(i8* %{{.*}}, i8* {{.*@vF2.*}}, i1 true)
213026ce82649a872c0f5e8ea039341644f25ae53a7Tim Northover// CHECK: call void @llvm.memcpy.{{.*}}(i8* {{.*@vF2.*}}, i8* {{.*@vF2.*}}, i1 true)
2141e692ace08959399794363e77499b73da5494af9Eli Friedman}
215