| // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value -fclangir -emit-cir %s -o %t.cir |
| // RUN: FileCheck --input-file=%t.cir %s -check-prefix=CIR |
| // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value -fclangir -emit-llvm %s -o %t-cir.ll |
| // RUN: FileCheck --input-file=%t-cir.ll %s -check-prefix=LLVM |
| // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value -emit-llvm %s -o %t.ll |
| // RUN: FileCheck --input-file=%t.ll %s -check-prefix=OGCG |
| |
| struct S { |
| char b; |
| short s; |
| int i; |
| float f; |
| double d; |
| }; |
| |
| void accessStruct(struct S u) { |
| u.b; |
| u.s; |
| u.i; |
| u.f; |
| u.d; |
| } |
| |
| // CIR: cir.func @accessStruct |
| // CIR: cir.load align(8) |
| // CIR: cir.load align(2) |
| // CIR: cir.load align(4) |
| // CIR: cir.load align(8) |
| // CIR: cir.load align(8) |
| |
| // LLVM: define{{.*}} @accessStruct |
| // LLVM: load i8, ptr {{.*}}, align 8 |
| // LLVM: load i16, ptr {{.*}}, align 2 |
| // LLVM: load i32, ptr {{.*}}, align 4 |
| // LLVM: load float, ptr {{.*}}, align 8 |
| // LLVM: load double, ptr {{.*}}, align 8 |
| |
| // OGCG: define{{.*}} @accessStruct |
| // OGCG: load i8, ptr {{.*}}, align 8 |
| // OGCG: load i16, ptr {{.*}}, align 2 |
| // OGCG: load i32, ptr {{.*}}, align 4 |
| // OGCG: load float, ptr {{.*}}, align 8 |
| // OGCG: load double, ptr {{.*}}, align 8 |
| |
| union U { |
| char b; |
| short s; |
| int i; |
| float f; |
| double d; |
| }; |
| |
| void accessUnion(union U u) { |
| u.b; |
| u.s; |
| u.i; |
| u.f; |
| u.d; |
| } |
| |
| // CIR: cir.func @accessUnion |
| // CIR: cir.load align(8) |
| // CIR: cir.load align(8) |
| // CIR: cir.load align(8) |
| // CIR: cir.load align(8) |
| // CIR: cir.load align(8) |
| |
| // LLVM: define{{.*}} @accessUnion |
| // LLVM: load i8, ptr {{.*}}, align 8 |
| // LLVM: load i16, ptr {{.*}}, align 8 |
| // LLVM: load i32, ptr {{.*}}, align 8 |
| // LLVM: load float, ptr {{.*}}, align 8 |
| // LLVM: load double, ptr {{.*}}, align 8 |
| |
| // OGCG: define{{.*}} @accessUnion |
| // OGCG: load i8, ptr {{.*}}, align 8 |
| // OGCG: load i16, ptr {{.*}}, align 8 |
| // OGCG: load i32, ptr {{.*}}, align 8 |
| // OGCG: load float, ptr {{.*}}, align 8 |
| // OGCG: load double, ptr {{.*}}, align 8 |
| |
| // PR5279 - Reduced alignment on typedef. |
| typedef int myint __attribute__((aligned(1))); |
| |
| int loadAligned(myint *p) { |
| return *p; |
| } |
| |
| // CIR: cir.func @loadAligned |
| // CIR: cir.load align(1) |
| |
| // LLVM: @loadAligned |
| // LLVM: load i32, ptr {{.*}}, align 1 |
| |
| // OGCG: @loadAligned |
| // OGCG: load i32, ptr {{.*}}, align 1 |