brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · a7ea109 Raw
88 lines · c
1// RUN: %clang_cc1 -triple i386-pc-win32 -fms-extensions -emit-llvm -fms-volatile -o - < %s | FileCheck %s2struct foo {3  volatile int x;4};5struct bar {6  int x;7};8typedef _Complex float __declspec(align(8)) baz;9 10#pragma pack(push)11#pragma pack(1)12struct qux {13   volatile int f;14};15#pragma pack(pop)16 17void test1(struct foo *p, struct foo *q) {18  *p = *q;19  // CHECK-LABEL: @test120  // CHECK: load atomic volatile {{.*}} acquire, align 421  // CHECK: store atomic volatile {{.*}}, {{.*}} release, align 422}23void test2(volatile int *p, volatile int *q) {24  *p = *q;25  // CHECK-LABEL: @test226  // CHECK: load atomic volatile {{.*}} acquire, align 427  // CHECK: store atomic volatile {{.*}}, {{.*}} release, align 428}29void test3(struct foo *p, struct foo *q) {30  p->x = q->x;31  // CHECK-LABEL: @test332  // CHECK: load atomic volatile {{.*}} acquire, align 433  // CHECK: store atomic volatile {{.*}}, {{.*}} release, align 434}35void test4(volatile struct foo *p, volatile struct foo *q) {36  p->x = q->x;37  // CHECK-LABEL: @test438  // CHECK: load atomic volatile {{.*}} acquire, align 439  // CHECK: store atomic volatile {{.*}}, {{.*}} release, align 440}41void test5(volatile struct foo *p, volatile struct foo *q) {42  *p = *q;43  // CHECK-LABEL: @test544  // CHECK: load atomic volatile {{.*}} acquire, align 445  // CHECK: store atomic volatile {{.*}}, {{.*}} release, align 446}47void test6(struct bar *p, struct bar *q) {48  *p = *q;49  // CHECK-LABEL: @test650  // CHECK-NOT: load atomic volatile {{.*}}51  // CHECK-NOT: store atomic volatile {{.*}}, {{.*}}52}53void test7(volatile struct bar *p, volatile struct bar *q) {54  *p = *q;55  // CHECK-LABEL: @test756  // CHECK: load atomic volatile {{.*}} acquire, align 457  // CHECK: store atomic volatile {{.*}}, {{.*}} release, align 458}59void test8(volatile double *p, volatile double *q) {60  *p = *q;61  // CHECK-LABEL: @test862  // CHECK: load volatile {{.*}}, align 863  // CHECK: store volatile {{.*}}, {{.*}}, align 864}65void test9(volatile baz *p, baz *q) {66  *p = *q;67  // CHECK-LABEL: @test968  // CHECK: store volatile {{.*}}, {{.*}}, align 869  // CHECK: store volatile {{.*}}, {{.*}}, align 470}71void test10(volatile long long *p, volatile long long *q) {72  *p = *q;73  // CHECK-LABEL: @test1074  // CHECK: load volatile {{.*}}, align 875  // CHECK: store volatile {{.*}}, {{.*}}, align 876}77void test11(volatile float *p, volatile float *q) {78  *p = *q;79  // CHECK-LABEL: @test1180  // CHECK: load atomic volatile {{.*}} acquire, align 481  // CHECK: store atomic volatile {{.*}}, {{.*}} release, align 482}83int test12(struct qux *p) {84  return p->f;85  // CHECK-LABEL: @test1286  // CHECK: load volatile {{.*}}, align 187}88