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 458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// expected-no-diagnostics 587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// REQUIRES: x86-registered-target 658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#ifndef HEADER 758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#define HEADER 858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar_Bool bv, bx; 1058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarchar cv, cx; 1158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarunsigned char ucv, ucx; 1258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarshort sv, sx; 1358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarunsigned short usv, usx; 1458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarint iv, ix; 1558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarunsigned int uiv, uix; 1658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarlong lv, lx; 1758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarunsigned long ulv, ulx; 1858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarlong long llv, llx; 1958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarunsigned long long ullv, ullx; 2058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarfloat fv, fx; 2158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainardouble dv, dx; 2258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarlong double ldv, ldx; 2358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar_Complex int civ, cix; 2458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar_Complex float cfv, cfx; 2558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar_Complex double cdv, cdx; 2658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 2758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainartypedef int int4 __attribute__((__vector_size__(16))); 2858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarint4 int4x; 2958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 3058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarstruct BitFields { 3158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int : 32; 3258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int a : 31; 3358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} bfx; 3458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 3558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarstruct BitFields_packed { 3658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int : 32; 3758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int a : 31; 3858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} __attribute__ ((__packed__)) bfx_packed; 3958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 4058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarstruct BitFields2 { 4158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int : 31; 4258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int a : 1; 4358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} bfx2; 4458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 4558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarstruct BitFields2_packed { 4658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int : 31; 4758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int a : 1; 4858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} __attribute__ ((__packed__)) bfx2_packed; 4958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 5058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarstruct BitFields3 { 5158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int : 11; 5258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int a : 14; 5358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} bfx3; 5458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 5558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarstruct BitFields3_packed { 5658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int : 11; 5758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int a : 14; 5858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} __attribute__ ((__packed__)) bfx3_packed; 5958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 6058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarstruct BitFields4 { 6158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar short : 16; 6258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int a: 1; 6358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar long b : 7; 6458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} bfx4; 6558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 6658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarstruct BitFields4_packed { 6758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar short : 16; 6858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int a: 1; 6958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar long b : 7; 7058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} __attribute__ ((__packed__)) bfx4_packed; 7158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 7258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainartypedef float float2 __attribute__((ext_vector_type(2))); 7358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarfloat2 float2x; 7458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 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"); 7958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 8058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarint main() { 81b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK-NOT: atomicrmw 82b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#pragma omp atomic 83b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar ++dv; 8458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: atomicrmw add i8* @{{.+}}, i8 1 monotonic 8558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 8658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bx++; 8758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: atomicrmw add i8* @{{.+}}, i8 1 monotonic 8858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 8958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar ++cx; 9058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: atomicrmw sub i8* @{{.+}}, i8 1 monotonic 9158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 9258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar ucx--; 9358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: atomicrmw sub i16* @{{.+}}, i16 1 monotonic 9458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 9558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar --sx; 9658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[USV:%.+]] = load i16, i16* @{{.+}}, 9758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = zext i16 [[USV]] to i32 9858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X:%.+]] = load atomic i16, i16* [[X_ADDR:@.+]] monotonic 9958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 10058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 10158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i16 [ [[X]], %{{.+}} ], [ [[OLD_X:%.+]], %[[CONT]] ] 10258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONV:%.+]] = zext i16 [[EXPECTED]] to i32 10358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[ADD:%.+]] = add nsw i32 [[CONV]], [[EXPR]] 10458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = trunc i32 [[ADD]] to i16 105b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i16 [[DESIRED]], i16* [[TEMP:%.+]], 106b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i16, i16* [[TEMP]], 10758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i16* [[X_ADDR]], i16 [[EXPECTED]], i16 [[DESIRED]] monotonic monotonic 10858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_X]] = extractvalue { i16, i1 } [[RES]], 0 10958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i16, i1 } [[RES]], 1 11058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 11158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 11258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 11358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar usx += usv; 11458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load i32, i32* @{{.+}}, 11558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X:%.+]] = load atomic i32, i32* [[X_ADDR:@.+]] monotonic 11658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 11758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 11858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i32 [ [[X]], %{{.+}} ], [ [[OLD_X:%.+]], %[[CONT]] ] 11958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = mul nsw i32 [[EXPECTED]], [[EXPR]] 120b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i32 [[DESIRED]], i32* [[TEMP:%.+]], 121b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i32, i32* [[TEMP]], 12258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i32* [[X_ADDR]], i32 [[EXPECTED]], i32 [[DESIRED]] monotonic monotonic 12358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_X]] = extractvalue { i32, i1 } [[RES]], 0 12458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i32, i1 } [[RES]], 1 12558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 12658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 12758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 12858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar ix *= iv; 12958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load i32, i32* @{{.+}}, 13058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: atomicrmw sub i32* @{{.+}}, i32 [[EXPR]] monotonic 13158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 13258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar uix -= uiv; 13358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load i32, i32* @{{.+}}, 13458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X:%.+]] = load atomic i32, i32* [[X_ADDR:@.+]] monotonic 13558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 13658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 13758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i32 [ [[X]], %{{.+}} ], [ [[OLD_X:%.+]], %[[CONT]] ] 13858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = shl i32 [[EXPECTED]], [[EXPR]] 139b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i32 [[DESIRED]], i32* [[TEMP:%.+]], 140b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i32, i32* [[TEMP]], 14158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i32* [[X_ADDR]], i32 [[EXPECTED]], i32 [[DESIRED]] monotonic monotonic 14258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_X]] = extractvalue { i32, i1 } [[RES]], 0 14358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i32, i1 } [[RES]], 1 14458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 14558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 14658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 14758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar ix <<= iv; 14858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load i32, i32* @{{.+}}, 14958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X:%.+]] = load atomic i32, i32* [[X_ADDR:@.+]] monotonic 15058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 15158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 15258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i32 [ [[X]], %{{.+}} ], [ [[OLD_X:%.+]], %[[CONT]] ] 15358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = lshr i32 [[EXPECTED]], [[EXPR]] 154b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i32 [[DESIRED]], i32* [[TEMP:%.+]], 155b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i32, i32* [[TEMP]], 15658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i32* [[X_ADDR]], i32 [[EXPECTED]], i32 [[DESIRED]] monotonic monotonic 15758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_X]] = extractvalue { i32, i1 } [[RES]], 0 15858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i32, i1 } [[RES]], 1 15958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 16058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 16158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 16258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar uix >>= uiv; 16358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load i64, i64* @{{.+}}, 16458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X:%.+]] = load atomic i64, i64* [[X_ADDR:@.+]] monotonic 16558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 16658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 16758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i64 [ [[X]], %{{.+}} ], [ [[OLD_X:%.+]], %[[CONT]] ] 16858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = sdiv i64 [[EXPECTED]], [[EXPR]] 169b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i64 [[DESIRED]], i64* [[TEMP:%.+]], 170b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i64, i64* [[TEMP]], 17158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i64* [[X_ADDR]], i64 [[EXPECTED]], i64 [[DESIRED]] monotonic monotonic 17258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_X]] = extractvalue { i64, i1 } [[RES]], 0 17358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i64, i1 } [[RES]], 1 17458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 17558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 17658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 17758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar lx /= lv; 17858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load i64, i64* @{{.+}}, 17958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: atomicrmw and i64* @{{.+}}, i64 [[EXPR]] monotonic 18058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 18158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar ulx &= ulv; 18258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load i64, i64* @{{.+}}, 18358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: atomicrmw xor i64* @{{.+}}, i64 [[EXPR]] monotonic 18458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 18558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar llx ^= llv; 18658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load i64, i64* @{{.+}}, 18758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: atomicrmw or i64* @{{.+}}, i64 [[EXPR]] monotonic 18858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 18958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar ullx |= ullv; 19058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load float, float* @{{.+}}, 19158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = load atomic i32, i32* bitcast (float* [[X_ADDR:@.+]] to i32*) monotonic 19258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 19358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 194b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i32 [ [[OLD]], %{{.+}} ], [ [[PREV:%.+]], %[[CONT]] ] 195b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast float* [[TEMP:%.+]] to i32* 196b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = bitcast i32 [[EXPECTED]] to float 19758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[ADD:%.+]] = fadd float [[OLD]], [[EXPR]] 198b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store float [[ADD]], float* [[TEMP]], 199b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i32, i32* [[BITCAST]], 20058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i32* bitcast (float* [[X_ADDR]] to i32*), i32 [[EXPECTED]], i32 [[DESIRED]] monotonic monotonic 20158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV:%.+]] = extractvalue { i32, i1 } [[RES]], 0 20258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i32, i1 } [[RES]], 1 20358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 20458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 20558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 20658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar fx = fx + fv; 20758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load double, double* @{{.+}}, 20858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = load atomic i64, i64* bitcast (double* [[X_ADDR:@.+]] to i64*) monotonic 20958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 21058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 211b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i64 [ [[OLD]], %{{.+}} ], [ [[PREV:%.+]], %[[CONT]] ] 212b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast double* [[TEMP:%.+]] to i64* 213b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = bitcast i64 [[EXPECTED]] to double 21458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUB:%.+]] = fsub double [[EXPR]], [[OLD]] 215b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store double [[SUB]], double* [[TEMP]], 216b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i64, i64* [[BITCAST]], 21758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i64* bitcast (double* [[X_ADDR]] to i64*), i64 [[EXPECTED]], i64 [[DESIRED]] monotonic monotonic 21858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV:%.+]] = extractvalue { i64, i1 } [[RES]], 0 21958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i64, i1 } [[RES]], 1 22058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 22158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 22258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 22358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar dx = dv - dx; 22458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load x86_fp80, x86_fp80* @{{.+}}, 22558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = load atomic i128, i128* bitcast (x86_fp80* [[X_ADDR:@.+]] to i128*) monotonic 22658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 22758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 228b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i128 [ [[OLD]], %{{.+}} ], [ [[PREV:%.+]], %[[CONT]] ] 229b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast x86_fp80* [[TEMP:%.+]] to i128* 230b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i128 [[EXPECTED]], i128* [[BITCAST]], 231b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST1:%.+]] = bitcast x86_fp80* [[TEMP1:%.+]] to i128* 232b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i128 [[EXPECTED]], i128* [[BITCAST1]], 233b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = load x86_fp80, x86_fp80* [[TEMP1]] 23458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[MUL:%.+]] = fmul x86_fp80 [[OLD]], [[EXPR]] 23558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store x86_fp80 [[MUL]], x86_fp80* [[TEMP]] 23658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i128, i128* [[BITCAST]] 23758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i128* bitcast (x86_fp80* [[X_ADDR]] to i128*), i128 [[EXPECTED]], i128 [[DESIRED]] monotonic monotonic 23858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV:%.+]] = extractvalue { i128, i1 } [[RES]], 0 23958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i128, i1 } [[RES]], 1 24058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 24158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 24258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 24358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar ldx = ldx * ldv; 24458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR_RE:%.+]] = load i32, i32* getelementptr inbounds ({ i32, i32 }, { i32, i32 }* @{{.+}}, i32 0, i32 0) 24558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR_IM:%.+]] = load i32, i32* getelementptr inbounds ({ i32, i32 }, { i32, i32 }* @{{.+}}, i32 0, i32 1) 246b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast { i32, i32 }* [[EXPECTED_ADDR:%.+]] to i8* 24758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: call void @__atomic_load(i64 8, i8* bitcast ({ i32, i32 }* [[X_ADDR:@.+]] to i8*), i8* [[BITCAST]], i32 0) 24858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 24958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 250b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[X_RE_ADDR:%.+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[EXPECTED_ADDR]], i32 0, i32 0 25158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RE:%.+]] = load i32, i32* [[X_RE_ADDR]] 252b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[X_IM_ADDR:%.+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[EXPECTED_ADDR]], i32 0, i32 1 25358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_IM:%.+]] = load i32, i32* [[X_IM_ADDR]] 25458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// <Skip checks for complex calculations> 25558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RE_ADDR:%.+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[DESIRED_ADDR:%.+]], i32 0, i32 0 25658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_IM_ADDR:%.+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[DESIRED_ADDR]], i32 0, i32 1 25758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i32 %{{.+}}, i32* [[X_RE_ADDR]] 25858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i32 %{{.+}}, i32* [[X_IM_ADDR]] 25958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = bitcast { i32, i32 }* [[EXPECTED_ADDR]] to i8* 26058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = bitcast { i32, i32 }* [[DESIRED_ADDR]] to i8* 26158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = call zeroext i1 @__atomic_compare_exchange(i64 8, i8* bitcast ({ i32, i32 }* [[X_ADDR]] to i8*), i8* [[EXPECTED]], i8* [[DESIRED]], i32 0, i32 0) 26258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 26358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 26458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 26558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar cix = civ / cix; 26658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR_RE:%.+]] = load float, float* getelementptr inbounds ({ float, float }, { float, float }* @{{.+}}, i32 0, i32 0) 26758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR_IM:%.+]] = load float, float* getelementptr inbounds ({ float, float }, { float, float }* @{{.+}}, i32 0, i32 1) 268b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast { float, float }* [[EXPECTED_ADDR:%.+]] to i8* 26958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: call void @__atomic_load(i64 8, i8* bitcast ({ float, float }* [[X_ADDR:@.+]] to i8*), i8* [[BITCAST]], i32 0) 27058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 27158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 272b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[X_RE_ADDR:%.+]] = getelementptr inbounds { float, float }, { float, float }* [[EXPECTED_ADDR]], i32 0, i32 0 27358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RE:%.+]] = load float, float* [[X_RE_ADDR]] 274b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[X_IM_ADDR:%.+]] = getelementptr inbounds { float, float }, { float, float }* [[EXPECTED_ADDR]], i32 0, i32 1 27558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_IM:%.+]] = load float, float* [[X_IM_ADDR]] 27658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// <Skip checks for complex calculations> 27758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RE_ADDR:%.+]] = getelementptr inbounds { float, float }, { float, float }* [[DESIRED_ADDR:%.+]], i32 0, i32 0 27858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_IM_ADDR:%.+]] = getelementptr inbounds { float, float }, { float, float }* [[DESIRED_ADDR]], i32 0, i32 1 27958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store float %{{.+}}, float* [[X_RE_ADDR]] 28058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store float %{{.+}}, float* [[X_IM_ADDR]] 28158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = bitcast { float, float }* [[EXPECTED_ADDR]] to i8* 28258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = bitcast { float, float }* [[DESIRED_ADDR]] to i8* 28358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = call zeroext i1 @__atomic_compare_exchange(i64 8, i8* bitcast ({ float, float }* [[X_ADDR]] to i8*), i8* [[EXPECTED]], i8* [[DESIRED]], i32 0, i32 0) 28458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 28558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 28658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 28758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar cfx = cfv + cfx; 28858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR_RE:%.+]] = load double, double* getelementptr inbounds ({ double, double }, { double, double }* @{{.+}}, i32 0, i32 0) 28958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR_IM:%.+]] = load double, double* getelementptr inbounds ({ double, double }, { double, double }* @{{.+}}, i32 0, i32 1) 290b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast { double, double }* [[EXPECTED_ADDR:%.+]] to i8* 29158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: call void @__atomic_load(i64 16, i8* bitcast ({ double, double }* [[X_ADDR:@.+]] to i8*), i8* [[BITCAST]], i32 5) 29258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 29358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 294b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[X_RE_ADDR:%.+]] = getelementptr inbounds { double, double }, { double, double }* [[EXPECTED_ADDR]], i32 0, i32 0 29558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RE:%.+]] = load double, double* [[X_RE_ADDR]] 296b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[X_IM_ADDR:%.+]] = getelementptr inbounds { double, double }, { double, double }* [[EXPECTED_ADDR]], i32 0, i32 1 29758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_IM:%.+]] = load double, double* [[X_IM_ADDR]] 29858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// <Skip checks for complex calculations> 29958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RE_ADDR:%.+]] = getelementptr inbounds { double, double }, { double, double }* [[DESIRED_ADDR:%.+]], i32 0, i32 0 30058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_IM_ADDR:%.+]] = getelementptr inbounds { double, double }, { double, double }* [[DESIRED_ADDR]], i32 0, i32 1 30158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store double %{{.+}}, double* [[X_RE_ADDR]] 30258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store double %{{.+}}, double* [[X_IM_ADDR]] 30358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = bitcast { double, double }* [[EXPECTED_ADDR]] to i8* 30458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = bitcast { double, double }* [[DESIRED_ADDR]] to i8* 30558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = call zeroext i1 @__atomic_compare_exchange(i64 16, i8* bitcast ({ double, double }* [[X_ADDR]] to i8*), i8* [[EXPECTED]], i8* [[DESIRED]], i32 5, i32 5) 30658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 30758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 30858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: call{{.*}} @__kmpc_flush( 30958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic seq_cst 31058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar cdx = cdx - cdv; 31158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BV:%.+]] = load i8, i8* @{{.+}} 31258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BOOL:%.+]] = trunc i8 [[BV]] to i1 31358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = zext i1 [[BOOL]] to i64 31458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: atomicrmw and i64* @{{.+}}, i64 [[EXPR]] monotonic 31558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 31658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar ulx = ulx & bv; 31758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CV:%.+]] = load i8, i8* @{{.+}}, align 1 31858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = sext i8 [[CV]] to i32 31958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BX:%.+]] = load atomic i8, i8* [[BX_ADDR:@.+]] monotonic 32058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 32158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 322b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i8 [ [[BX]], %{{.+}} ], [ [[OLD_X:%.+]], %[[CONT]] ] 323b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = trunc i8 [[EXPECTED]] to i1 32458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = zext i1 [[OLD]] to i32 32558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[AND:%.+]] = and i32 [[EXPR]], [[X_RVAL]] 32658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CAST:%.+]] = icmp ne i32 [[AND]], 0 32758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = zext i1 [[CAST]] to i8 328b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i8 [[DESIRED]], i8* [[TEMP:%.+]], 329b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i8, i8* [[TEMP]], 33058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i8* [[BX_ADDR]], i8 [[EXPECTED]], i8 [[DESIRED]] monotonic monotonic 331b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[OLD_X:%.+]] = extractvalue { i8, i1 } [[RES]], 0 33258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i8, i1 } [[RES]], 1 33358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 33458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 33558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 33658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bx = cv & bx; 33758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[UCV:%.+]] = load i8, i8* @{{.+}}, 33858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = zext i8 [[UCV]] to i32 33958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X:%.+]] = load atomic i8, i8* [[CX_ADDR:@.+]] seq_cst 34058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 34158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 34258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i8 [ [[X]], %{{.+}} ], [ [[OLD_X:%.+]], %[[CONT]] ] 34358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sext i8 [[EXPECTED]] to i32 34458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[ASHR:%.+]] = ashr i32 [[X_RVAL]], [[EXPR]] 34558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = trunc i32 [[ASHR]] to i8 346b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i8 [[DESIRED]], i8* [[TEMP:%.+]], 347b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i8, i8* [[TEMP]], 34858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i8* [[CX_ADDR]], i8 [[EXPECTED]], i8 [[DESIRED]] seq_cst seq_cst 34958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_X:%.+]] = extractvalue { i8, i1 } [[RES]], 0 35058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i8, i1 } [[RES]], 1 35158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 35258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 35358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: call{{.*}} @__kmpc_flush( 35458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update, seq_cst 35558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar cx = cx >> ucv; 35658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SV:%.+]] = load i16, i16* @{{.+}}, 35758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = sext i16 [[SV]] to i32 35858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X:%.+]] = load atomic i64, i64* [[ULX_ADDR:@.+]] monotonic 35958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 36058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 36158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i64 [ [[X]], %{{.+}} ], [ [[OLD_X:%.+]], %[[CONT]] ] 36258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = trunc i64 [[EXPECTED]] to i32 36358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SHL:%.+]] = shl i32 [[EXPR]], [[X_RVAL]] 36458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = sext i32 [[SHL]] to i64 365b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i64 [[DESIRED]], i64* [[TEMP:%.+]], 366b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i64, i64* [[TEMP]], 36758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i64* [[ULX_ADDR]], i64 [[EXPECTED]], i64 [[DESIRED]] monotonic monotonic 36858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_X:%.+]] = extractvalue { i64, i1 } [[RES]], 0 36958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i64, i1 } [[RES]], 1 37058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 37158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 37258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 37358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar ulx = sv << ulx; 37458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[USV:%.+]] = load i16, i16* @{{.+}}, 37558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = zext i16 [[USV]] to i64 37658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X:%.+]] = load atomic i64, i64* [[LX_ADDR:@.+]] monotonic 37758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 37858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 37958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i64 [ [[X]], %{{.+}} ], [ [[OLD_X:%.+]], %[[CONT]] ] 38058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = srem i64 [[EXPECTED]], [[EXPR]] 381b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i64 [[DESIRED]], i64* [[TEMP:%.+]], 382b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i64, i64* [[TEMP]], 38358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i64* [[LX_ADDR]], i64 [[EXPECTED]], i64 [[DESIRED]] monotonic monotonic 38458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_X:%.+]] = extractvalue { i64, i1 } [[RES]], 0 38558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i64, i1 } [[RES]], 1 38658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 38758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 38858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 38958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar lx = lx % usv; 39058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load i32, i32* @{{.+}} 39158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: atomicrmw or i32* @{{.+}}, i32 [[EXPR]] seq_cst 39258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: call{{.*}} @__kmpc_flush( 39358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic seq_cst, update 39458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar uix = iv | uix; 39558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load i32, i32* @{{.+}} 39658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: atomicrmw and i32* @{{.+}}, i32 [[EXPR]] monotonic 39758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 39858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar ix = ix & uiv; 39958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load i64, i64* @{{.+}}, 400b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast { i32, i32 }* [[EXPECTED_ADDR:%.+]] to i8* 40158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: call void @__atomic_load(i64 8, i8* bitcast ({ i32, i32 }* [[X_ADDR:@.+]] to i8*), i8* [[BITCAST]], i32 0) 40258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 40358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 404b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[X_RE_ADDR:%.+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[EXPECTED_ADDR]], i32 0, i32 0 40558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RE:%.+]] = load i32, i32* [[X_RE_ADDR]] 406b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[X_IM_ADDR:%.+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[EXPECTED_ADDR]], i32 0, i32 1 40758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_IM:%.+]] = load i32, i32* [[X_IM_ADDR]] 40858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// <Skip checks for complex calculations> 40958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RE_ADDR:%.+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[DESIRED_ADDR:%.+]], i32 0, i32 0 41058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_IM_ADDR:%.+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[DESIRED_ADDR]], i32 0, i32 1 41158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i32 %{{.+}}, i32* [[X_RE_ADDR]] 41258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i32 %{{.+}}, i32* [[X_IM_ADDR]] 41358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = bitcast { i32, i32 }* [[EXPECTED_ADDR]] to i8* 41458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = bitcast { i32, i32 }* [[DESIRED_ADDR]] to i8* 41558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = call zeroext i1 @__atomic_compare_exchange(i64 8, i8* bitcast ({ i32, i32 }* [[X_ADDR]] to i8*), i8* [[EXPECTED]], i8* [[DESIRED]], i32 0, i32 0) 41658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 41758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 41858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 41958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar cix = lv + cix; 42058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[ULV:%.+]] = load i64, i64* @{{.+}}, 42158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = uitofp i64 [[ULV]] to float 42258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = load atomic i32, i32* bitcast (float* [[X_ADDR:@.+]] to i32*) monotonic 42358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 42458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 425b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i32 [ [[OLD]], %{{.+}} ], [ [[PREV:%.+]], %[[CONT]] ] 426b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast float* [[TEMP:%.+]] to i32* 427b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = bitcast i32 [[EXPECTED]] to float 42858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[MUL:%.+]] = fmul float [[OLD]], [[EXPR]] 429b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store float [[MUL]], float* [[TEMP]], 430b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i32, i32* [[BITCAST]], 43158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i32* bitcast (float* [[X_ADDR]] to i32*), i32 [[EXPECTED]], i32 [[DESIRED]] monotonic monotonic 43258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV:%.+]] = extractvalue { i32, i1 } [[RES]], 0 43358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i32, i1 } [[RES]], 1 43458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 43558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 43658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 43758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar fx = fx * ulv; 43858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[LLV:%.+]] = load i64, i64* @{{.+}}, 43958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = sitofp i64 [[LLV]] to double 44058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = load atomic i64, i64* bitcast (double* [[X_ADDR:@.+]] to i64*) monotonic 44158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 44258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 443b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i64 [ [[OLD]], %{{.+}} ], [ [[PREV:%.+]], %[[CONT]] ] 444b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast double* [[TEMP:%.+]] to i64* 445b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = bitcast i64 [[EXPECTED]] to double 44658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DIV:%.+]] = fdiv double [[OLD]], [[EXPR]] 447b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store double [[DIV]], double* [[TEMP]], 448b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i64, i64* [[BITCAST]], 44958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i64* bitcast (double* [[X_ADDR]] to i64*), i64 [[EXPECTED]], i64 [[DESIRED]] monotonic monotonic 45058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV:%.+]] = extractvalue { i64, i1 } [[RES]], 0 45158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i64, i1 } [[RES]], 1 45258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 45358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 45458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 45558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar dx /= llv; 45658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[ULLV:%.+]] = load i64, i64* @{{.+}}, 45758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = uitofp i64 [[ULLV]] to x86_fp80 45858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = load atomic i128, i128* bitcast (x86_fp80* [[X_ADDR:@.+]] to i128*) monotonic 45958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 46058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 461b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i128 [ [[OLD]], %{{.+}} ], [ [[PREV:%.+]], %[[CONT]] ] 462b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST1:%.+]] = bitcast x86_fp80* [[TEMP1:%.+]] to i128* 463b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast x86_fp80* [[TEMP:%.+]] to i128* 464b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i128 [[EXPECTED]], i128* [[BITCAST]] 465b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[OLD:%.+]] = load x86_fp80, x86_fp80* [[TEMP]] 46658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUB:%.+]] = fsub x86_fp80 [[OLD]], [[EXPR]] 467b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store x86_fp80 [[SUB]], x86_fp80* [[TEMP1]] 468b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i128, i128* [[BITCAST1]] 46958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i128* bitcast (x86_fp80* [[X_ADDR]] to i128*), i128 [[EXPECTED]], i128 [[DESIRED]] monotonic monotonic 47058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV:%.+]] = extractvalue { i128, i1 } [[RES]], 0 47158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i128, i1 } [[RES]], 1 47258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 47358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 47458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 47558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar ldx -= ullv; 47658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load float, float* @{{.+}}, 477b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast { i32, i32 }* [[EXPECTED_ADDR:%.+]] to i8* 47858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: call void @__atomic_load(i64 8, i8* bitcast ({ i32, i32 }* [[X_ADDR:@.+]] to i8*), i8* [[BITCAST]], i32 0) 47958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 48058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 481b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[X_RE_ADDR:%.+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[EXPECTED_ADDR]], i32 0, i32 0 48258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RE:%.+]] = load i32, i32* [[X_RE_ADDR]] 483b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[X_IM_ADDR:%.+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[EXPECTED_ADDR]], i32 0, i32 1 48458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_IM:%.+]] = load i32, i32* [[X_IM_ADDR]] 48558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// <Skip checks for complex calculations> 48658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RE_ADDR:%.+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[DESIRED_ADDR:%.+]], i32 0, i32 0 48758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_IM_ADDR:%.+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[DESIRED_ADDR]], i32 0, i32 1 48858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i32 %{{.+}}, i32* [[X_RE_ADDR]] 48958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i32 %{{.+}}, i32* [[X_IM_ADDR]] 49058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = bitcast { i32, i32 }* [[EXPECTED_ADDR]] to i8* 49158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = bitcast { i32, i32 }* [[DESIRED_ADDR]] to i8* 49258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = call zeroext i1 @__atomic_compare_exchange(i64 8, i8* bitcast ({ i32, i32 }* [[X_ADDR]] to i8*), i8* [[EXPECTED]], i8* [[DESIRED]], i32 0, i32 0) 49358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 49458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 49558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 49658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar cix = fv / cix; 49758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load double, double* @{{.+}}, 49858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X:%.+]] = load atomic i16, i16* [[X_ADDR:@.+]] monotonic 49958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 50058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 50158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i16 [ [[X]], %{{.+}} ], [ [[OLD_X:%.+]], %[[CONT]] ] 50258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONV:%.+]] = sext i16 [[EXPECTED]] to i32 50358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sitofp i32 [[CONV]] to double 50458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[ADD:%.+]] = fadd double [[X_RVAL]], [[EXPR]] 50558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = fptosi double [[ADD]] to i16 506b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i16 [[DESIRED]], i16* [[TEMP:%.+]] 507b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i16, i16* [[TEMP]] 50858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i16* [[X_ADDR]], i16 [[EXPECTED]], i16 [[DESIRED]] monotonic monotonic 50958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_X]] = extractvalue { i16, i1 } [[RES]], 0 51058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i16, i1 } [[RES]], 1 51158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 51258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 51358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 51458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar sx = sx + dv; 51558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load x86_fp80, x86_fp80* @{{.+}}, 51658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[XI8:%.+]] = load atomic i8, i8* [[X_ADDR:@.+]] monotonic 51758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 51858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 519b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i8 [ [[XI8]], %{{.+}} ], [ [[OLD_XI8:%.+]], %[[CONT]] ] 520b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BOOL_EXPECTED:%.+]] = trunc i8 [[EXPECTED]] to i1 52158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONV:%.+]] = zext i1 [[BOOL_EXPECTED]] to i32 52258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sitofp i32 [[CONV]] to x86_fp80 52358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[MUL:%.+]] = fmul x86_fp80 [[EXPR]], [[X_RVAL]] 52458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BOOL_DESIRED:%.+]] = fcmp une x86_fp80 [[MUL]], 0xK00000000000000000000 52558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = zext i1 [[BOOL_DESIRED]] to i8 526b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i8 [[DESIRED]], i8* [[TEMP:%.+]] 527b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i8, i8* [[TEMP]] 52858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i8* [[X_ADDR]], i8 [[EXPECTED]], i8 [[DESIRED]] monotonic monotonic 52958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_XI8:%.+]] = extractvalue { i8, i1 } [[RES]], 0 53058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i8, i1 } [[RES]], 1 53158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 53258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 53358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 53458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bx = ldv * bx; 53558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR_RE:%.+]] = load i32, i32* getelementptr inbounds ({ i32, i32 }, { i32, i32 }* [[CIV_ADDR:@.+]], i32 0, i32 0), 53658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR_IM:%.+]] = load i32, i32* getelementptr inbounds ({ i32, i32 }, { i32, i32 }* [[CIV_ADDR]], i32 0, i32 1), 53758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[XI8:%.+]] = load atomic i8, i8* [[X_ADDR:@.+]] monotonic 53858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 53958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 540b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i8 [ [[XI8]], %{{.+}} ], [ [[OLD_XI8:%.+]], %[[CONT]] ] 541b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BOOL_EXPECTED:%.+]] = trunc i8 [[EXPECTED]] to i1 54258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = zext i1 [[BOOL_EXPECTED]] to i32 54358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUB_RE:%.+]] = sub i32 [[EXPR_RE:%.+]], [[X_RVAL]] 54458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUB_IM:%.+]] = sub i32 [[EXPR_IM:%.+]], 0 54558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: icmp ne i32 [[SUB_RE]], 0 54658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: icmp ne i32 [[SUB_IM]], 0 54758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BOOL_DESIRED:%.+]] = or i1 54858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = zext i1 [[BOOL_DESIRED]] to i8 549b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i8 [[DESIRED]], i8* [[TEMP:%.+]] 550b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i8, i8* [[TEMP]] 55158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i8* [[X_ADDR]], i8 [[EXPECTED]], i8 [[DESIRED]] monotonic monotonic 55258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_XI8:%.+]] = extractvalue { i8, i1 } [[RES]], 0 55358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i8, i1 } [[RES]], 1 55458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 55558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 55658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 55758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bx = civ - bx; 55858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR_RE:%.+]] = load float, float* getelementptr inbounds ({ float, float }, { float, float }* @{{.+}}, i32 0, i32 0) 55958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR_IM:%.+]] = load float, float* getelementptr inbounds ({ float, float }, { float, float }* @{{.+}}, i32 0, i32 1) 56058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X:%.+]] = load atomic i16, i16* [[X_ADDR:@.+]] monotonic 56158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 56258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 56358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i16 [ [[X]], %{{.+}} ], [ [[OLD_X:%.+]], %[[CONT]] ] 56458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONV:%.+]] = zext i16 [[EXPECTED]] to i32 56558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sitofp i32 [[CONV]] to float 56658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// <Skip checks for complex calculations> 56758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RE_ADDR:%.+]] = getelementptr inbounds { float, float }, { float, float }* [[TEMP:%.+]], i32 0, i32 0 56858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RE:%.+]] = load float, float* [[X_RE_ADDR]] 56958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_IM_ADDR:%.+]] = getelementptr inbounds { float, float }, { float, float }* [[TEMP]], i32 0, i32 1 57058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_IM:%.+]] = load float, float* [[X_IM_ADDR]] 57158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = fptoui float [[X_RE]] to i16 572b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i16 [[DESIRED]], i16* [[TEMP:%.+]] 573b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i16, i16* [[TEMP]] 57458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i16* [[X_ADDR]], i16 [[EXPECTED]], i16 [[DESIRED]] monotonic monotonic 57558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_X]] = extractvalue { i16, i1 } [[RES]], 0 57658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i16, i1 } [[RES]], 1 57758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 57858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 57958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 58058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar usx /= cfv; 58158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR_RE:%.+]] = load double, double* getelementptr inbounds ({ double, double }, { double, double }* @{{.+}}, i32 0, i32 0) 58258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR_IM:%.+]] = load double, double* getelementptr inbounds ({ double, double }, { double, double }* @{{.+}}, i32 0, i32 1) 58358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X:%.+]] = load atomic i64, i64* [[X_ADDR:@.+]] monotonic 58458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 58558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 58658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPECTED:%.+]] = phi i64 [ [[X]], %{{.+}} ], [ [[OLD_X:%.+]], %[[CONT]] ] 58758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sitofp i64 [[EXPECTED]] to double 58858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[ADD_RE:%.+]] = fadd double [[X_RVAL]], [[EXPR_RE]] 58958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[ADD_IM:%.+]] = fadd double 0.000000e+00, [[EXPR_IM]] 59058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = fptosi double [[ADD_RE]] to i64 591b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i64 [[DESIRED]], i64* [[TEMP:%.+]] 592b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[DESIRED:%.+]] = load i64, i64* [[TEMP]] 59358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i64* [[X_ADDR]], i64 [[EXPECTED]], i64 [[DESIRED]] monotonic monotonic 59458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_X]] = extractvalue { i64, i1 } [[RES]], 0 59558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUCCESS_FAIL:%.+]] = extractvalue { i64, i1 } [[RES]], 1 59658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[SUCCESS_FAIL]], label %[[EXIT:.+]], label %[[CONT]] 59758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 59858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 59958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar llx += cdv; 60058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[IDX:%.+]] = load i16, i16* @{{.+}} 60158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: load i8, i8* 60258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[VEC_ITEM_VAL:%.+]] = zext i1 %{{.+}} to i32 60358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[I128VAL:%.+]] = load atomic i128, i128* bitcast (<4 x i32>* [[DEST:@.+]] to i128*) monotonic 60458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 60558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 606b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[OLD_I128:%.+]] = phi i128 [ [[I128VAL]], %{{.+}} ], [ [[FAILED_I128_OLD_VAL:%.+]], %[[CONT]] ] 607b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast <4 x i32>* [[TEMP:%.+]] to i128* 608b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i128 [[OLD_I128]], i128* [[BITCAST]], 609b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[OLD_VEC_VAL:%.+]] = bitcast i128 [[OLD_I128]] to <4 x i32> 61058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store <4 x i32> [[OLD_VEC_VAL]], <4 x i32>* [[LDTEMP:%.+]], 61158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[VEC_VAL:%.+]] = load <4 x i32>, <4 x i32>* [[LDTEMP]] 61258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[ITEM:%.+]] = extractelement <4 x i32> [[VEC_VAL]], i16 [[IDX]] 61358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OR:%.+]] = or i32 [[ITEM]], [[VEC_ITEM_VAL]] 614b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[VEC_VAL:%.+]] = load <4 x i32>, <4 x i32>* [[TEMP]] 61558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[NEW_VEC_VAL:%.+]] = insertelement <4 x i32> [[VEC_VAL]], i32 [[OR]], i16 [[IDX]] 616b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store <4 x i32> [[NEW_VEC_VAL]], <4 x i32>* [[TEMP]] 617b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_I128:%.+]] = load i128, i128* [[BITCAST]] 61858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i128* bitcast (<4 x i32>* [[DEST]] to i128*), i128 [[OLD_I128]], i128 [[NEW_I128]] monotonic monotonic 61958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAILED_I128_OLD_VAL:%.+]] = extractvalue { i128, i1 } [[RES]], 0 62058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i128, i1 } [[RES]], 1 62158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[FAIL_SUCCESS]], label %[[EXIT:.+]], label %[[CONT]] 62258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 62358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 62458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar int4x[sv] |= bv; 62558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load x86_fp80, x86_fp80* @{{.+}} 62658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV_VALUE:%.+]] = load atomic i32, i32* bitcast (i8* getelementptr (i8, i8* bitcast (%struct.BitFields* @{{.+}} to i8*), i64 4) to i32*) monotonic 62758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 62858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 62958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_BF_VALUE:%.+]] = phi i32 [ [[PREV_VALUE]], %[[EXIT]] ], [ [[FAILED_OLD_VAL:%.+]], %[[CONT]] ] 630b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i32 [[OLD_BF_VALUE]], i32* [[TEMP1:%.+]], 63158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i32 [[OLD_BF_VALUE]], i32* [[TEMP:%.+]], 63258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_LD:%.+]] = load i32, i32* [[TEMP]], 63358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_SHL:%.+]] = shl i32 [[A_LD]], 1 63458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_ASHR:%.+]] = ashr i32 [[A_SHL]], 1 63558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sitofp i32 [[A_ASHR]] to x86_fp80 63658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUB:%.+]] = fsub x86_fp80 [[X_RVAL]], [[EXPR]] 63758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONV:%.+]] = fptosi x86_fp80 [[SUB]] to i32 638b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_VAL:%.+]] = load i32, i32* [[TEMP1]], 63958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_VALUE:%.+]] = and i32 [[CONV]], 2147483647 64058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_CLEAR:%.+]] = and i32 [[NEW_VAL]], -2147483648 64158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: or i32 [[BF_CLEAR]], [[BF_VALUE]] 642b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i32 %{{.+}}, i32* [[TEMP1]] 643b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_BF_VALUE:%.+]] = load i32, i32* [[TEMP1]] 64458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i32* bitcast (i8* getelementptr (i8, i8* bitcast (%struct.BitFields* @{{.+}} to i8*), i64 4) to i32*), i32 [[OLD_BF_VALUE]], i32 [[NEW_BF_VALUE]] monotonic monotonic 64558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAILED_OLD_VAL]] = extractvalue { i32, i1 } [[RES]], 0 64658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i32, i1 } [[RES]], 1 64758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[FAIL_SUCCESS]], label %[[EXIT:.+]], label %[[CONT]] 64858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 64958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 65058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bfx.a = bfx.a - ldv; 65158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load x86_fp80, x86_fp80* @{{.+}} 65258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast i32* [[LDTEMP:%.+]] to i8* 65358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: call void @__atomic_load(i64 4, i8* getelementptr (i8, i8* bitcast (%struct.BitFields_packed* @{{.+}} to i8*), i64 4), i8* [[BITCAST]], i32 0) 65458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 65558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 656b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[PREV_VALUE:%.+]] = load i32, i32* [[LDTEMP]] 657b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i32 [[PREV_VALUE]], i32* [[TEMP1:%.+]], 658b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[PREV_VALUE:%.+]] = load i32, i32* [[LDTEMP]] 659b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i32 [[PREV_VALUE]], i32* [[TEMP:%.+]], 66058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_LD:%.+]] = load i32, i32* [[TEMP]], 66158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_SHL:%.+]] = shl i32 [[A_LD]], 1 66258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_ASHR:%.+]] = ashr i32 [[A_SHL]], 1 66358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sitofp i32 [[A_ASHR]] to x86_fp80 66458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[MUL:%.+]] = fmul x86_fp80 [[X_RVAL]], [[EXPR]] 66558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONV:%.+]] = fptosi x86_fp80 [[MUL]] to i32 666b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_VAL:%.+]] = load i32, i32* [[TEMP1]], 66758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_VALUE:%.+]] = and i32 [[CONV]], 2147483647 66858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_CLEAR:%.+]] = and i32 [[NEW_VAL]], -2147483648 66958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: or i32 [[BF_CLEAR]], [[BF_VALUE]] 670b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i32 %{{.+}}, i32* [[TEMP1]] 671b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST_TEMP_OLD_BF_ADDR:%.+]] = bitcast i32* [[LDTEMP]] to i8* 672b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST_TEMP_NEW_BF_ADDR:%.+]] = bitcast i32* [[TEMP1]] to i8* 67358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAIL_SUCCESS:%.+]] = call zeroext i1 @__atomic_compare_exchange(i64 4, i8* getelementptr (i8, i8* bitcast (%struct.BitFields_packed* @{{.+}} to i8*), i64 4), i8* [[BITCAST_TEMP_OLD_BF_ADDR]], i8* [[BITCAST_TEMP_NEW_BF_ADDR]], i32 0, i32 0) 67458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[FAIL_SUCCESS]], label %[[EXIT:.+]], label %[[CONT]] 67558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 67658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 67758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bfx_packed.a *= ldv; 67858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load x86_fp80, x86_fp80* @{{.+}} 67958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV_VALUE:%.+]] = load atomic i32, i32* getelementptr inbounds (%struct.BitFields2, %struct.BitFields2* @{{.+}}, i32 0, i32 0) monotonic 68058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 68158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 68258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_BF_VALUE:%.+]] = phi i32 [ [[PREV_VALUE]], %[[EXIT]] ], [ [[FAILED_OLD_VAL:%.+]], %[[CONT]] ] 683b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i32 [[OLD_BF_VALUE]], i32* [[TEMP1:%.+]], 68458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i32 [[OLD_BF_VALUE]], i32* [[TEMP:%.+]], 68558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_LD:%.+]] = load i32, i32* [[TEMP]], 68658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_ASHR:%.+]] = ashr i32 [[A_LD]], 31 68758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sitofp i32 [[A_ASHR]] to x86_fp80 68858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUB:%.+]] = fsub x86_fp80 [[X_RVAL]], [[EXPR]] 68958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONV:%.+]] = fptosi x86_fp80 [[SUB]] to i32 690b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_VAL:%.+]] = load i32, i32* [[TEMP1]], 69158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_AND:%.+]] = and i32 [[CONV]], 1 69258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_VALUE:%.+]] = shl i32 [[BF_AND]], 31 69358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_CLEAR:%.+]] = and i32 [[NEW_VAL]], 2147483647 69458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: or i32 [[BF_CLEAR]], [[BF_VALUE]] 695b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i32 %{{.+}}, i32* [[TEMP1]] 696b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_BF_VALUE:%.+]] = load i32, i32* [[TEMP1]] 69758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i32* getelementptr inbounds (%struct.BitFields2, %struct.BitFields2* @{{.+}}, i32 0, i32 0), i32 [[OLD_BF_VALUE]], i32 [[NEW_BF_VALUE]] monotonic monotonic 69858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAILED_OLD_VAL]] = extractvalue { i32, i1 } [[RES]], 0 69958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i32, i1 } [[RES]], 1 70058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[FAIL_SUCCESS]], label %[[EXIT:.+]], label %[[CONT]] 70158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 70258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 70358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bfx2.a -= ldv; 70458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load x86_fp80, x86_fp80* @{{.+}} 70558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV_VALUE:%.+]] = load atomic i8, i8* getelementptr (i8, i8* bitcast (%struct.BitFields2_packed* @{{.+}} to i8*), i64 3) monotonic 70658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 70758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 70858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_BF_VALUE:%.+]] = phi i8 [ [[PREV_VALUE]], %[[EXIT]] ], [ [[FAILED_OLD_VAL:%.+]], %[[CONT]] ] 709b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST1:%.+]] = bitcast i32* %{{.+}} to i8* 710b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i8 [[OLD_BF_VALUE]], i8* [[BITCAST1]], 71158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast i32* %{{.+}} to i8* 71258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i8 [[OLD_BF_VALUE]], i8* [[BITCAST]], 71358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_LD:%.+]] = load i8, i8* [[BITCAST]], 71458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_ASHR:%.+]] = ashr i8 [[A_LD]], 7 71558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CAST:%.+]] = sext i8 [[A_ASHR]] to i32 71658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sitofp i32 [[CAST]] to x86_fp80 71758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DIV:%.+]] = fdiv x86_fp80 [[EXPR]], [[X_RVAL]] 71858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[NEW_VAL:%.+]] = fptosi x86_fp80 [[DIV]] to i32 71958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[TRUNC:%.+]] = trunc i32 [[NEW_VAL]] to i8 720b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BF_LD:%.+]] = load i8, i8* [[BITCAST1]], 72158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_AND:%.+]] = and i8 [[TRUNC]], 1 72258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_VALUE:%.+]] = shl i8 [[BF_AND]], 7 72358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_CLEAR:%.+]] = and i8 %{{.+}}, 127 72458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: or i8 [[BF_CLEAR]], [[BF_VALUE]] 725b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i8 %{{.+}}, i8* [[BITCAST1]] 726b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_BF_VALUE:%.+]] = load i8, i8* [[BITCAST1]] 72758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i8* getelementptr (i8, i8* bitcast (%struct.BitFields2_packed* @{{.+}} to i8*), i64 3), i8 [[OLD_BF_VALUE]], i8 [[NEW_BF_VALUE]] monotonic monotonic 72858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAILED_OLD_VAL]] = extractvalue { i8, i1 } [[RES]], 0 72958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i8, i1 } [[RES]], 1 73058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[FAIL_SUCCESS]], label %[[EXIT:.+]], label %[[CONT]] 73158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 73258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 73358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bfx2_packed.a = ldv / bfx2_packed.a; 73458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load x86_fp80, x86_fp80* @{{.+}} 73558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV_VALUE:%.+]] = load atomic i32, i32* getelementptr inbounds (%struct.BitFields3, %struct.BitFields3* @{{.+}}, i32 0, i32 0) monotonic 73658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 73758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 73858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_BF_VALUE:%.+]] = phi i32 [ [[PREV_VALUE]], %[[EXIT]] ], [ [[FAILED_OLD_VAL:%.+]], %[[CONT]] ] 739b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i32 [[OLD_BF_VALUE]], i32* [[TEMP1:%.+]], 74058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i32 [[OLD_BF_VALUE]], i32* [[TEMP:%.+]], 74158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_LD:%.+]] = load i32, i32* [[TEMP]], 74258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_SHL:%.+]] = shl i32 [[A_LD]], 7 74358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_ASHR:%.+]] = ashr i32 [[A_SHL]], 18 74458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sitofp i32 [[A_ASHR]] to x86_fp80 74558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DIV:%.+]] = fdiv x86_fp80 [[X_RVAL]], [[EXPR]] 74658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[NEW_VAL:%.+]] = fptosi x86_fp80 [[DIV]] to i32 747b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BF_LD:%.+]] = load i32, i32* [[TEMP1]], 74858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_AND:%.+]] = and i32 [[NEW_VAL]], 16383 74958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_VALUE:%.+]] = shl i32 [[BF_AND]], 11 75058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_CLEAR:%.+]] = and i32 %{{.+}}, -33552385 75158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: or i32 [[BF_CLEAR]], [[BF_VALUE]] 752b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i32 %{{.+}}, i32* [[TEMP1]] 753b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_BF_VALUE:%.+]] = load i32, i32* [[TEMP1]] 75458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i32* getelementptr inbounds (%struct.BitFields3, %struct.BitFields3* @{{.+}}, i32 0, i32 0), i32 [[OLD_BF_VALUE]], i32 [[NEW_BF_VALUE]] monotonic monotonic 75558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAILED_OLD_VAL]] = extractvalue { i32, i1 } [[RES]], 0 75658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i32, i1 } [[RES]], 1 75758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[FAIL_SUCCESS]], label %[[EXIT:.+]], label %[[CONT]] 75858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 75958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 76058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bfx3.a /= ldv; 76158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load x86_fp80, x86_fp80* @{{.+}} 76258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[LDTEMP:%.+]] = bitcast i32* %{{.+}} to i24* 76358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast i24* %{{.+}} to i8* 76458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: call void @__atomic_load(i64 3, i8* getelementptr (i8, i8* bitcast (%struct.BitFields3_packed* @{{.+}} to i8*), i64 1), i8* [[BITCAST]], i32 0) 76558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 76658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 767b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[PREV_VALUE:%.+]] = load i24, i24* [[LDTEMP]] 768b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i24 [[PREV_VALUE]], i24* [[TEMP1:%.+]], 769b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[PREV_VALUE:%.+]] = load i24, i24* [[LDTEMP]] 770b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i24 [[PREV_VALUE]], i24* [[TEMP:%.+]], 771b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[A_LD:%.+]] = load i24, i24* [[TEMP]], 77258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_SHL:%.+]] = shl i24 [[A_LD]], 7 77358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_ASHR:%.+]] = ashr i24 [[A_SHL]], 10 77458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CAST:%.+]] = sext i24 [[A_ASHR]] to i32 77558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sitofp i32 [[CAST]] to x86_fp80 77658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[ADD:%.+]] = fadd x86_fp80 [[X_RVAL]], [[EXPR]] 77758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[NEW_VAL:%.+]] = fptosi x86_fp80 [[ADD]] to i32 77858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[TRUNC:%.+]] = trunc i32 [[NEW_VAL]] to i24 779b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BF_LD:%.+]] = load i24, i24* [[TEMP1]], 78058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_AND:%.+]] = and i24 [[TRUNC]], 16383 78158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_VALUE:%.+]] = shl i24 [[BF_AND]], 3 78258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_CLEAR:%.+]] = and i24 [[BF_LD]], -131065 78358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: or i24 [[BF_CLEAR]], [[BF_VALUE]] 784b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i24 %{{.+}}, i24* [[TEMP1]] 785b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST_TEMP_OLD_BF_ADDR:%.+]] = bitcast i24* [[LDTEMP]] to i8* 786b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST_TEMP_NEW_BF_ADDR:%.+]] = bitcast i24* [[TEMP1]] to i8* 78758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAIL_SUCCESS:%.+]] = call zeroext i1 @__atomic_compare_exchange(i64 3, i8* getelementptr (i8, i8* bitcast (%struct.BitFields3_packed* @{{.+}} to i8*), i64 1), i8* [[BITCAST_TEMP_OLD_BF_ADDR]], i8* [[BITCAST_TEMP_NEW_BF_ADDR]], i32 0, i32 0) 78858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[FAIL_SUCCESS]], label %[[EXIT:.+]], label %[[CONT]] 78958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 79058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 79158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bfx3_packed.a += ldv; 79258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load x86_fp80, x86_fp80* @{{.+}} 79358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV_VALUE:%.+]] = load atomic i64, i64* bitcast (%struct.BitFields4* @{{.+}} to i64*) monotonic 79458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 79558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 79658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_BF_VALUE:%.+]] = phi i64 [ [[PREV_VALUE]], %[[EXIT]] ], [ [[FAILED_OLD_VAL:%.+]], %[[CONT]] ] 797b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i64 [[OLD_BF_VALUE]], i64* [[TEMP1:%.+]], 79858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i64 [[OLD_BF_VALUE]], i64* [[TEMP:%.+]], 79958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_LD:%.+]] = load i64, i64* [[TEMP]], 80058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_SHL:%.+]] = shl i64 [[A_LD]], 47 80158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_ASHR:%.+]] = ashr i64 [[A_SHL:%.+]], 63 80258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_CAST:%.+]] = trunc i64 [[A_ASHR:%.+]] to i32 80358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sitofp i32 [[CAST:%.+]] to x86_fp80 80458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[MUL:%.+]] = fmul x86_fp80 [[X_RVAL]], [[EXPR]] 80558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[NEW_VAL:%.+]] = fptosi x86_fp80 [[MUL]] to i32 80658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[ZEXT:%.+]] = zext i32 [[NEW_VAL]] to i64 807b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BF_LD:%.+]] = load i64, i64* [[TEMP1]], 80858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_AND:%.+]] = and i64 [[ZEXT]], 1 80958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_VALUE:%.+]] = shl i64 [[BF_AND]], 16 81058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_CLEAR:%.+]] = and i64 [[BF_LD]], -65537 81158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: or i64 [[BF_CLEAR]], [[BF_VALUE]] 812b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i64 %{{.+}}, i64* [[TEMP1]] 813b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_BF_VALUE:%.+]] = load i64, i64* [[TEMP1]] 81458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i64* bitcast (%struct.BitFields4* @{{.+}} to i64*), i64 [[OLD_BF_VALUE]], i64 [[NEW_BF_VALUE]] monotonic monotonic 81558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAILED_OLD_VAL]] = extractvalue { i64, i1 } [[RES]], 0 81658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i64, i1 } [[RES]], 1 81758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[FAIL_SUCCESS]], label %[[EXIT:.+]], label %[[CONT]] 81858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 81958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 82058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bfx4.a = bfx4.a * ldv; 82158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load x86_fp80, x86_fp80* @{{.+}} 82258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV_VALUE:%.+]] = load atomic i8, i8* getelementptr inbounds (%struct.BitFields4_packed, %struct.BitFields4_packed* @{{.+}}, i32 0, i32 0, i64 2) monotonic 82358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 82458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 82558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_BF_VALUE:%.+]] = phi i8 [ [[PREV_VALUE]], %{{.+}} ], [ [[FAILED_OLD_VAL:%.+]], %[[CONT]] ] 826b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST1:%.+]] = bitcast i32* %{{.+}} to i8* 827b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i8 [[OLD_BF_VALUE]], i8* [[BITCAST1]], 82858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast i32* %{{.+}} to i8* 82958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i8 [[OLD_BF_VALUE]], i8* [[BITCAST]], 83058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_LD:%.+]] = load i8, i8* [[BITCAST]], 83158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_SHL:%.+]] = shl i8 [[A_LD]], 7 83258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_ASHR:%.+]] = ashr i8 [[A_SHL:%.+]], 7 83358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CAST:%.+]] = sext i8 [[A_ASHR:%.+]] to i32 83458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONV:%.+]] = sitofp i32 [[CAST]] to x86_fp80 83558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[SUB: %.+]] = fsub x86_fp80 [[CONV]], [[EXPR]] 83658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONV:%.+]] = fptosi x86_fp80 [[SUB:%.+]] to i32 83758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[NEW_VAL:%.+]] = trunc i32 [[CONV]] to i8 838b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BF_LD:%.+]] = load i8, i8* [[BITCAST1]], 83958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_VALUE:%.+]] = and i8 [[NEW_VAL]], 1 84058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_CLEAR:%.+]] = and i8 [[BF_LD]], -2 84158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: or i8 [[BF_CLEAR]], [[BF_VALUE]] 842b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i8 %{{.+}}, i8* [[BITCAST1]] 843b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_BF_VALUE:%.+]] = load i8, i8* [[BITCAST1]] 84458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i8* getelementptr inbounds (%struct.BitFields4_packed, %struct.BitFields4_packed* @{{.+}}, i32 0, i32 0, i64 2), i8 [[OLD_BF_VALUE]], i8 [[NEW_BF_VALUE]] monotonic monotonic 84558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAILED_OLD_VAL]] = extractvalue { i8, i1 } [[RES]], 0 84658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i8, i1 } [[RES]], 1 84758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[FAIL_SUCCESS]], label %[[EXIT:.+]], label %[[CONT]] 84858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 84958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 85058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bfx4_packed.a -= ldv; 85158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load x86_fp80, x86_fp80* @{{.+}} 85258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV_VALUE:%.+]] = load atomic i64, i64* bitcast (%struct.BitFields4* @{{.+}} to i64*) monotonic 85358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 85458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 85558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_BF_VALUE:%.+]] = phi i64 [ [[PREV_VALUE]], %[[EXIT]] ], [ [[FAILED_OLD_VAL:%.+]], %[[CONT]] ] 856b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i64 [[OLD_BF_VALUE]], i64* [[TEMP1:%.+]], 85758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i64 [[OLD_BF_VALUE]], i64* [[TEMP:%.+]], 85858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_LD:%.+]] = load i64, i64* [[TEMP]], 85958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_SHL:%.+]] = shl i64 [[A_LD]], 40 86058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_ASHR:%.+]] = ashr i64 [[A_SHL:%.+]], 57 86158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONV:%.+]] = sitofp i64 [[A_ASHR]] to x86_fp80 86258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DIV:%.+]] = fdiv x86_fp80 [[CONV]], [[EXPR]] 86358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONV:%.+]] = fptosi x86_fp80 [[DIV]] to i64 864b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BF_LD:%.+]] = load i64, i64* [[TEMP1]], 86558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_AND:%.+]] = and i64 [[CONV]], 127 86658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_VALUE:%.+]] = shl i64 [[BF_AND:%.+]], 17 86758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_CLEAR:%.+]] = and i64 [[BF_LD]], -16646145 86858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[VAL:%.+]] = or i64 [[BF_CLEAR]], [[BF_VALUE]] 869b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i64 [[VAL]], i64* [[TEMP1]] 870b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_BF_VALUE:%.+]] = load i64, i64* [[TEMP1]] 87158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i64* bitcast (%struct.BitFields4* @{{.+}} to i64*), i64 [[OLD_BF_VALUE]], i64 [[NEW_BF_VALUE]] monotonic monotonic 87258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAILED_OLD_VAL]] = extractvalue { i64, i1 } [[RES]], 0 87358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i64, i1 } [[RES]], 1 87458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[FAIL_SUCCESS]], label %[[EXIT:.+]], label %[[CONT]] 87558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 87658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 87758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bfx4.b /= ldv; 87858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load x86_fp80, x86_fp80* @{{.+}} 87958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[PREV_VALUE:%.+]] = load atomic i8, i8* getelementptr inbounds (%struct.BitFields4_packed, %struct.BitFields4_packed* @{{.+}}, i32 0, i32 0, i64 2) monotonic 88058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 88158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 88258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_BF_VALUE:%.+]] = phi i8 [ [[PREV_VALUE]], %[[EXIT]] ], [ [[FAILED_OLD_VAL:%.+]], %[[CONT]] ] 883b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST1:%.+]] = bitcast i64* %{{.+}} to i8* 884b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i8 [[OLD_BF_VALUE]], i8* [[BITCAST1]], 88558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast i64* %{{.+}} to i8* 88658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store i8 [[OLD_BF_VALUE]], i8* [[BITCAST]], 88758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_LD:%.+]] = load i8, i8* [[BITCAST]], 88858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[A_ASHR:%.+]] = ashr i8 [[A_LD]], 1 88958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CAST:%.+]] = sext i8 [[A_ASHR]] to i64 89058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONV:%.+]] = sitofp i64 [[CAST]] to x86_fp80 89158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[ADD:%.+]] = fadd x86_fp80 [[CONV]], [[EXPR]] 89258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[NEW_VAL:%.+]] = fptosi x86_fp80 [[ADD]] to i64 89358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[TRUNC:%.+]] = trunc i64 [[NEW_VAL]] to i8 894b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BF_LD:%.+]] = load i8, i8* [[BITCAST1]], 89558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_AND:%.+]] = and i8 [[TRUNC]], 127 89658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_VALUE:%.+]] = shl i8 [[BF_AND]], 1 89758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[BF_CLEAR:%.+]] = and i8 [[BF_LD]], 1 89858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: or i8 [[BF_CLEAR]], [[BF_VALUE]] 899b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i8 %{{.+}}, i8* [[BITCAST1]] 900b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_BF_VALUE:%.+]] = load i8, i8* [[BITCAST1]] 90158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i8* getelementptr inbounds (%struct.BitFields4_packed, %struct.BitFields4_packed* @{{.+}}, i32 0, i32 0, i64 2), i8 [[OLD_BF_VALUE]], i8 [[NEW_BF_VALUE]] monotonic monotonic 90258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAILED_OLD_VAL]] = extractvalue { i8, i1 } [[RES]], 0 90358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i8, i1 } [[RES]], 1 90458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[FAIL_SUCCESS]], label %[[EXIT:.+]], label %[[CONT]] 90558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 90658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic update 90758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar bfx4_packed.b += ldv; 90858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: load i64, i64* 90958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = uitofp i64 %{{.+}} to float 91058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[I64VAL:%.+]] = load atomic i64, i64* bitcast (<2 x float>* [[DEST:@.+]] to i64*) monotonic 91158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br label %[[CONT:.+]] 91258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[CONT]] 913b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[OLD_I64:%.+]] = phi i64 [ [[I64VAL]], %{{.+}} ], [ [[FAILED_I64_OLD_VAL:%.+]], %[[CONT]] ] 914b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[BITCAST:%.+]] = bitcast <2 x float>* [[TEMP:%.+]] to i64* 915b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store i64 [[OLD_I64]], i64* [[BITCAST]], 916b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[OLD_VEC_VAL:%.+]] = bitcast i64 [[OLD_I64]] to <2 x float> 91758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: store <2 x float> [[OLD_VEC_VAL]], <2 x float>* [[LDTEMP:%.+]], 91858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[VEC_VAL:%.+]] = load <2 x float>, <2 x float>* [[LDTEMP]] 91958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X:%.+]] = extractelement <2 x float> [[VEC_VAL]], i64 0 92058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[VEC_ITEM_VAL:%.+]] = fsub float [[EXPR]], [[X]] 921b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[VEC_VAL:%.+]] = load <2 x float>, <2 x float>* [[TEMP]], 92258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[NEW_VEC_VAL:%.+]] = insertelement <2 x float> [[VEC_VAL]], float [[VEC_ITEM_VAL]], i64 0 923b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: store <2 x float> [[NEW_VEC_VAL]], <2 x float>* [[TEMP]] 924b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK: [[NEW_I64:%.+]] = load i64, i64* [[BITCAST]] 92558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[RES:%.+]] = cmpxchg i64* bitcast (<2 x float>* [[DEST]] to i64*), i64 [[OLD_I64]], i64 [[NEW_I64]] monotonic monotonic 92658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAILED_I64_OLD_VAL:%.+]] = extractvalue { i64, i1 } [[RES]], 0 92758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i64, i1 } [[RES]], 1 92858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: br i1 [[FAIL_SUCCESS]], label %[[EXIT:.+]], label %[[CONT]] 92958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXIT]] 93058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic 93158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar float2x.x = ulv - float2x.x; 93258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[EXPR:%.+]] = load double, double* @{{.+}}, 93358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[OLD_VAL:%.+]] = call i32 @llvm.read_register.i32([[REG:metadata ![0-9]+]]) 93458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[X_RVAL:%.+]] = sitofp i32 [[OLD_VAL]] to double 93558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[DIV:%.+]] = fdiv double [[EXPR]], [[X_RVAL]] 93658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: [[NEW_VAL:%.+]] = fptosi double [[DIV]] to i32 93758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: call void @llvm.write_register.i32([[REG]], i32 [[NEW_VAL]]) 93858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar// CHECK: call{{.*}} @__kmpc_flush( 93958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp atomic seq_cst 94058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar rix = dv / rix; 94158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar return 0; 94258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 94358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 94458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#endif 945