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