1b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -x c -emit-llvm %s -o - | FileCheck %s 2b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -fopenmp -x c -triple x86_64-apple-darwin10 -emit-pch -o %t %s 3b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -fopenmp -x c -triple x86_64-apple-darwin10 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s 40e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-no-diagnostics 587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// REQUIRES: x86-registered-target 60e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#ifndef HEADER 70e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#define HEADER 80e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 90e2c34f92f00628d48968dfea096d36381f494cbStephen Hines_Bool bv, bx; 100e2c34f92f00628d48968dfea096d36381f494cbStephen Hineschar cv, cx; 110e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesunsigned char ucv, ucx; 120e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesshort sv, sx; 130e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesunsigned short usv, usx; 140e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesint iv, ix; 150e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesunsigned int uiv, uix; 160e2c34f92f00628d48968dfea096d36381f494cbStephen Hineslong lv, lx; 170e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesunsigned long ulv, ulx; 180e2c34f92f00628d48968dfea096d36381f494cbStephen Hineslong long llv, llx; 190e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesunsigned long long ullv, ullx; 200e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesfloat fv, fx; 210e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesdouble dv, dx; 220e2c34f92f00628d48968dfea096d36381f494cbStephen Hineslong double ldv, ldx; 230e2c34f92f00628d48968dfea096d36381f494cbStephen Hines_Complex int civ, cix; 240e2c34f92f00628d48968dfea096d36381f494cbStephen Hines_Complex float cfv, cfx; 250e2c34f92f00628d48968dfea096d36381f494cbStephen Hines_Complex double cdv, cdx; 260e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 270e2c34f92f00628d48968dfea096d36381f494cbStephen Hinestypedef int int4 __attribute__((__vector_size__(16))); 280e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesint4 int4x; 290e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 300e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct BitFields { 310e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int : 32; 320e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int a : 31; 330e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} bfx; 340e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 350e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct BitFields_packed { 360e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int : 32; 370e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int a : 31; 380e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} __attribute__ ((__packed__)) bfx_packed; 390e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 400e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct BitFields2 { 410e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int : 31; 420e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int a : 1; 430e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} bfx2; 440e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 450e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct BitFields2_packed { 460e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int : 31; 470e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int a : 1; 480e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} __attribute__ ((__packed__)) bfx2_packed; 490e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 500e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct BitFields3 { 510e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int : 11; 520e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int a : 14; 530e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} bfx3; 540e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 550e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct BitFields3_packed { 560e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int : 11; 570e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int a : 14; 580e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} __attribute__ ((__packed__)) bfx3_packed; 590e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 600e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct BitFields4 { 610e2c34f92f00628d48968dfea096d36381f494cbStephen Hines short : 16; 620e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int a: 1; 630e2c34f92f00628d48968dfea096d36381f494cbStephen Hines long b : 7; 640e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} bfx4; 650e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 660e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct BitFields4_packed { 670e2c34f92f00628d48968dfea096d36381f494cbStephen Hines short : 16; 680e2c34f92f00628d48968dfea096d36381f494cbStephen Hines int a: 1; 690e2c34f92f00628d48968dfea096d36381f494cbStephen Hines long b : 7; 700e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} __attribute__ ((__packed__)) bfx4_packed; 710e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 720e2c34f92f00628d48968dfea096d36381f494cbStephen Hinestypedef float float2 __attribute__((ext_vector_type(2))); 730e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesfloat2 float2x; 740e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 7587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// Register "0" is currently an invalid register for global register variables. 7687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// Use "esp" instead of "0". 7787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// register int rix __asm__("0"); 7887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarregister int rix __asm__("esp"); 790e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 800e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesint main() { 813ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i8, i8* 820e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i8 830e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 840e2c34f92f00628d48968dfea096d36381f494cbStephen Hines bv = bx; 853ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i8, i8* 860e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i8 870e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 880e2c34f92f00628d48968dfea096d36381f494cbStephen Hines cv = cx; 893ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i8, i8* 900e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i8 910e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 920e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ucv = ucx; 933ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i16, i16* 940e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i16 950e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 960e2c34f92f00628d48968dfea096d36381f494cbStephen Hines sv = sx; 973ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i16, i16* 980e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i16 990e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1000e2c34f92f00628d48968dfea096d36381f494cbStephen Hines usv = usx; 1013ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i32, i32* 1020e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i32 1030e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1040e2c34f92f00628d48968dfea096d36381f494cbStephen Hines iv = ix; 1053ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i32, i32* 1060e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i32 1070e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1080e2c34f92f00628d48968dfea096d36381f494cbStephen Hines uiv = uix; 1093ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i64, i64* 1100e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i64 1110e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1120e2c34f92f00628d48968dfea096d36381f494cbStephen Hines lv = lx; 1133ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i64, i64* 1140e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i64 1150e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1160e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ulv = ulx; 1173ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i64, i64* 1180e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i64 1190e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1200e2c34f92f00628d48968dfea096d36381f494cbStephen Hines llv = llx; 1213ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i64, i64* 1220e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i64 1230e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1240e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ullv = ullx; 1253ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i32, i32* bitcast (float* 1260e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: bitcast i32 {{.*}} to float 1270e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store float 1280e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1290e2c34f92f00628d48968dfea096d36381f494cbStephen Hines fv = fx; 1303ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i64, i64* bitcast (double* 1310e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: bitcast i64 {{.*}} to double 1320e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store double 1330e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1340e2c34f92f00628d48968dfea096d36381f494cbStephen Hines dv = dx; 1353ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load atomic i128, i128* bitcast (x86_fp80* 1360e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[BITCAST:%.+]] = bitcast x86_fp80* [[LDTEMP:%.*]] to i128* 1370e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i128 [[LD]], i128* [[BITCAST]] 1383ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load x86_fp80, x86_fp80* [[LDTEMP]] 1390e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store x86_fp80 [[LD]] 1400e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1410e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ldv = ldx; 1420e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: call{{.*}} void @__atomic_load(i64 8, 1430e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i32 1440e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i32 1450e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1460e2c34f92f00628d48968dfea096d36381f494cbStephen Hines civ = cix; 1470e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: call{{.*}} void @__atomic_load(i64 8, 1480e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store float 1490e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store float 1500e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1510e2c34f92f00628d48968dfea096d36381f494cbStephen Hines cfv = cfx; 1520e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: call{{.*}} void @__atomic_load(i64 16, 1530e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: call{{.*}} @__kmpc_flush( 1540e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store double 1550e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store double 1560e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic seq_cst read 1570e2c34f92f00628d48968dfea096d36381f494cbStephen Hines cdv = cdx; 1583ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i64, i64* 1590e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i8 1600e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1610e2c34f92f00628d48968dfea096d36381f494cbStephen Hines bv = ulx; 1623ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i8, i8* 1630e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i8 1640e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1650e2c34f92f00628d48968dfea096d36381f494cbStephen Hines cv = bx; 1663ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i8, i8* 1670e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: call{{.*}} @__kmpc_flush( 1680e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i8 1690e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read, seq_cst 1700e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ucv = cx; 1713ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i64, i64* 1720e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i16 1730e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1740e2c34f92f00628d48968dfea096d36381f494cbStephen Hines sv = ulx; 1753ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i64, i64* 1760e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i16 1770e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1780e2c34f92f00628d48968dfea096d36381f494cbStephen Hines usv = lx; 1793ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i32, i32* 1800e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: call{{.*}} @__kmpc_flush( 1810e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i32 1820e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic seq_cst, read 1830e2c34f92f00628d48968dfea096d36381f494cbStephen Hines iv = uix; 1843ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i32, i32* 1850e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i32 1860e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1870e2c34f92f00628d48968dfea096d36381f494cbStephen Hines uiv = ix; 1880e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: call{{.*}} void @__atomic_load(i64 8, 1890e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i64 1900e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1910e2c34f92f00628d48968dfea096d36381f494cbStephen Hines lv = cix; 1923ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i32, i32* 1930e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i64 1940e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1950e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ulv = fx; 1963ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i64, i64* 1970e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i64 1980e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 1990e2c34f92f00628d48968dfea096d36381f494cbStephen Hines llv = dx; 2003ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i128, i128* 2010e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i64 2020e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2030e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ullv = ldx; 2040e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: call{{.*}} void @__atomic_load(i64 8, 2050e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store float 2060e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2070e2c34f92f00628d48968dfea096d36381f494cbStephen Hines fv = cix; 2083ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i16, i16* 2090e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store double 2100e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2110e2c34f92f00628d48968dfea096d36381f494cbStephen Hines dv = sx; 2123ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i8, i8* 2130e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store x86_fp80 2140e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2150e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ldv = bx; 2163ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i8, i8* 2170e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i32 2180e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i32 2190e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2200e2c34f92f00628d48968dfea096d36381f494cbStephen Hines civ = bx; 2213ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i16, i16* 2220e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store float 2230e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store float 2240e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2250e2c34f92f00628d48968dfea096d36381f494cbStephen Hines cfv = usx; 2263ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: load atomic i64, i64* 2270e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store double 2280e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store double 2290e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2300e2c34f92f00628d48968dfea096d36381f494cbStephen Hines cdv = llx; 2313ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[I128VAL:%.+]] = load atomic i128, i128* bitcast (<4 x i32>* @{{.+}} to i128*) monotonic 2320e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[I128PTR:%.+]] = bitcast <4 x i32>* [[LDTEMP:%.+]] to i128* 2330e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i128 [[I128VAL]], i128* [[I128PTR]] 2343ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load <4 x i32>, <4 x i32>* [[LDTEMP]] 2350e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: extractelement <4 x i32> [[LD]] 2360e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i8 2370e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2380e2c34f92f00628d48968dfea096d36381f494cbStephen Hines bv = int4x[0]; 2393ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load atomic i32, i32* bitcast (i8* getelementptr (i8, i8* bitcast (%{{.+}}* @{{.+}} to i8*), i64 4) to i32*) monotonic 2400e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i32 [[LD]], i32* [[LDTEMP:%.+]] 2413ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load i32, i32* [[LDTEMP]] 2420e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[SHL:%.+]] = shl i32 [[LD]], 1 2430e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: ashr i32 [[SHL]], 1 2440e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store x86_fp80 2450e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2460e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ldv = bfx.a; 2470e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[LDTEMP_VOID_PTR:%.+]] = bitcast i32* [[LDTEMP:%.+]] to i8* 2483ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: call void @__atomic_load(i64 4, i8* getelementptr (i8, i8* bitcast (%struct.BitFields_packed* @bfx_packed to i8*), i64 4), i8* [[LDTEMP_VOID_PTR]], i32 0) 2493ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load i32, i32* [[LDTEMP]] 2500e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[SHL:%.+]] = shl i32 [[LD]], 1 2510e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: ashr i32 [[SHL]], 1 2520e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store x86_fp80 2530e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2540e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ldv = bfx_packed.a; 2553ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load atomic i32, i32* getelementptr inbounds (%struct.BitFields2, %struct.BitFields2* @bfx2, i32 0, i32 0) monotonic 2560e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i32 [[LD]], i32* [[LDTEMP:%.+]] 2573ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load i32, i32* [[LDTEMP]] 2580e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: ashr i32 [[LD]], 31 2590e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store x86_fp80 2600e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2610e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ldv = bfx2.a; 2623ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load atomic i8, i8* getelementptr (i8, i8* bitcast (%struct.BitFields2_packed* @bfx2_packed to i8*), i64 3) monotonic 2630e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i8 [[LD]], i8* [[LDTEMP:%.+]] 2643ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load i8, i8* [[LDTEMP]] 2650e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: ashr i8 [[LD]], 7 2660e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store x86_fp80 2670e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2680e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ldv = bfx2_packed.a; 2693ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load atomic i32, i32* getelementptr inbounds (%struct.BitFields3, %struct.BitFields3* @bfx3, i32 0, i32 0) monotonic 2700e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i32 [[LD]], i32* [[LDTEMP:%.+]] 2713ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load i32, i32* [[LDTEMP]] 2720e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[SHL:%.+]] = shl i32 [[LD]], 7 2730e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: ashr i32 [[SHL]], 18 2740e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store x86_fp80 2750e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2760e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ldv = bfx3.a; 2770e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[LDTEMP_VOID_PTR:%.+]] = bitcast i24* [[LDTEMP:%.+]] to i8* 2783ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: call void @__atomic_load(i64 3, i8* getelementptr (i8, i8* bitcast (%struct.BitFields3_packed* @bfx3_packed to i8*), i64 1), i8* [[LDTEMP_VOID_PTR]], i32 0) 2793ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load i24, i24* [[LDTEMP]] 2800e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[SHL:%.+]] = shl i24 [[LD]], 7 2810e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[ASHR:%.+]] = ashr i24 [[SHL]], 10 2820e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: sext i24 [[ASHR]] to i32 2830e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store x86_fp80 2840e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2850e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ldv = bfx3_packed.a; 2863ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load atomic i64, i64* bitcast (%struct.BitFields4* @bfx4 to i64*) monotonic 2870e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i64 [[LD]], i64* [[LDTEMP:%.+]] 2883ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load i64, i64* [[LDTEMP]] 2890e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[SHL:%.+]] = shl i64 [[LD]], 47 2900e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[ASHR:%.+]] = ashr i64 [[SHL]], 63 2910e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: trunc i64 [[ASHR]] to i32 2920e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store x86_fp80 2930e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 2940e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ldv = bfx4.a; 2953ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load atomic i8, i8* getelementptr inbounds (%struct.BitFields4_packed, %struct.BitFields4_packed* @bfx4_packed, i32 0, i32 0, i64 2) monotonic 2960e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i8 [[LD]], i8* [[LDTEMP:%.+]] 2973ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load i8, i8* [[LDTEMP]] 2980e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[SHL:%.+]] = shl i8 [[LD]], 7 2990e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[ASHR:%.+]] = ashr i8 [[SHL]], 7 3000e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: sext i8 [[ASHR]] to i32 3010e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store x86_fp80 3020e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 3030e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ldv = bfx4_packed.a; 3043ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load atomic i64, i64* bitcast (%struct.BitFields4* @bfx4 to i64*) monotonic 3050e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i64 [[LD]], i64* [[LDTEMP:%.+]] 3063ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load i64, i64* [[LDTEMP]] 3070e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[SHL:%.+]] = shl i64 [[LD]], 40 3080e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[ASHR:%.+]] = ashr i64 [[SHL]], 57 3090e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store x86_fp80 3100e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 3110e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ldv = bfx4.b; 3123ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load atomic i8, i8* getelementptr inbounds (%struct.BitFields4_packed, %struct.BitFields4_packed* @bfx4_packed, i32 0, i32 0, i64 2) monotonic 3130e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i8 [[LD]], i8* [[LDTEMP:%.+]] 3143ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load i8, i8* [[LDTEMP]] 3150e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: [[ASHR:%.+]] = ashr i8 [[LD]], 1 3160e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: sext i8 [[ASHR]] to i64 3170e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store x86_fp80 3180e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 3190e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ldv = bfx4_packed.b; 3203ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load atomic i64, i64* bitcast (<2 x float>* @{{.+}} to i64*) monotonic 3213ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast <2 x float>* [[LDTEMP:%.+]] to i64* 3223ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: store i64 [[LD]], i64* [[BITCAST]] 3233ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: [[LD:%.+]] = load <2 x float>, <2 x float>* [[LDTEMP]] 3240e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: extractelement <2 x float> [[LD]] 3250e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store i64 3260e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read 3270e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ulv = float2x.x; 3280e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: call{{.*}} i{{[0-9]+}} @llvm.read_register 3290e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: call{{.*}} @__kmpc_flush( 3300e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: store double 3310e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#pragma omp atomic read seq_cst 3320e2c34f92f00628d48968dfea096d36381f494cbStephen Hines dv = rix; 3330e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return 0; 3340e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 3350e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 3360e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#endif 337