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