brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 91f8072 Raw
100 lines · c
1// RUN: %clang_cc1 -fms-extensions -emit-llvm -o - %s | FileCheck %s2 3// CHECK: %struct.test = type { i32, %struct.nested2, i32 }4// CHECK: %struct.nested2 = type { i32, %struct.nested1, i32 }5// CHECK: %struct.nested1 = type { i32, i32 }6typedef struct nested1 {7    int a1;8    int b1;9} NESTED1;10 11struct nested2 {12    int a;13    NESTED1; 14    int b;15};16 17struct test {18    int    x;19    struct nested2; 20    int    y;21};22 23 24void foo(void)25{26  // CHECK: %var = alloca %struct.test, align 427  struct test var;28 29  // CHECK: getelementptr inbounds nuw %struct.test, ptr %var, i32 0, i32 130  // CHECK-NEXT: getelementptr inbounds nuw %struct.nested2, ptr %{{.*}}, i32 0, i32 031  // CHECK-NEXT: load i32, ptr %{{.*}}, align 432  var.a;33 34  // CHECK-NEXT: getelementptr inbounds nuw %struct.test, ptr %var, i32 0, i32 135  // CHECK-NEXT: getelementptr inbounds nuw %struct.nested2, ptr %{{.*}}, i32 0, i32 236  // CHECK-NEXT: load i32, ptr %{{.*}}, align 437  var.b;38 39  // CHECK-NEXT: getelementptr inbounds nuw %struct.test, ptr %var, i32 0, i32 140  // CHECK-NEXT: getelementptr inbounds nuw %struct.nested2, ptr %{{.*}}, i32 0, i32 141  // CHECK-NEXT: getelementptr inbounds nuw %struct.nested1, ptr %{{.*}}, i32 0, i32 042  // CHECK-NEXT: load i32, ptr %{{.*}}, align 443  var.a1;44 45  // CHECK-NEXT: getelementptr inbounds nuw %struct.test, ptr %{{.*}}var, i32 0, i32 146  // CHECK-NEXT: getelementptr inbounds nuw %struct.nested2, ptr %{{.*}}, i32 0, i32 147  // CHECK-NEXT: getelementptr inbounds nuw %struct.nested1, ptr %{{.*}}, i32 0, i32 148  // CHECK-NEXT: load i32, ptr %{{.*}}, align 449  var.b1;50 51  // CHECK-NEXT: getelementptr inbounds nuw %struct.test, ptr %var, i32 0, i32 052  // CHECK-NEXT: load i32, ptr %{{.*}}, align 453  var.x;54 55  // CHECK-NEXT: getelementptr inbounds nuw %struct.test, ptr %var, i32 0, i32 256  // CHECK-NEXT: load i32, ptr %{{.*}}, align 457  var.y;58}59 60void foo2(struct test* var)61{62  // CHECK: alloca ptr, align63  // CHECK-NEXT: store ptr %var, ptr %{{.*}}, align64  // CHECK-NEXT: load ptr, ptr %{{.*}}, align65  // CHECK-NEXT: getelementptr inbounds nuw %struct.test, ptr %{{.*}}, i32 0, i32 166  // CHECK-NEXT: getelementptr inbounds nuw %struct.nested2, ptr %{{.*}}, i32 0, i32 067  // CHECK-NEXT: load i32, ptr %{{.*}}, align 468  var->a;69 70  // CHECK-NEXT: load ptr, ptr %{{.*}}, align71  // CHECK-NEXT: getelementptr inbounds nuw %struct.test, ptr %{{.*}}, i32 0, i32 172  // CHECK-NEXT: getelementptr inbounds nuw %struct.nested2, ptr %{{.*}}, i32 0, i32 273  // CHECK-NEXT: load i32, ptr %{{.*}}, align 474  var->b;75 76  // CHECK-NEXT: load ptr, ptr %{{.*}}, align77  // CHECK-NEXT: getelementptr inbounds nuw %struct.test, ptr %{{.*}}, i32 0, i32 178  // CHECK-NEXT: getelementptr inbounds nuw %struct.nested2, ptr %{{.*}}, i32 0, i32 179  // CHECK-NEXT: getelementptr inbounds nuw %struct.nested1, ptr %{{.*}}, i32 0, i32 080  // CHECK-NEXT: load i32, ptr %{{.*}}, align 481  var->a1;82 83  // CHECK-NEXT: load ptr, ptr %{{.*}}, align84  // CHECK-NEXT: getelementptr inbounds nuw %struct.test, ptr %{{.*}}, i32 0, i32 185  // CHECK-NEXT: getelementptr inbounds nuw %struct.nested2, ptr %{{.*}}, i32 0, i32 186  // CHECK-NEXT: getelementptr inbounds nuw %struct.nested1, ptr %{{.*}}, i32 0, i32 187  // CHECK-NEXT: load i32, ptr %{{.*}}, align 488  var->b1;89 90  // CHECK-NEXT: load ptr, ptr %{{.*}}, align91  // CHECK-NEXT: getelementptr inbounds nuw %struct.test, ptr %{{.*}}, i32 0, i32 092  // CHECK-NEXT: load i32, ptr %{{.*}}, align 493  var->x;94 95  // CHECK-NEXT: load ptr, ptr %{{.*}}, align96  // CHECK-NEXT: getelementptr inbounds nuw %struct.test, ptr %{{.*}}, i32 0, i32 297  // CHECK-NEXT: load i32, ptr %{{.*}}, align 498  var->y;99}100