mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-23 21:46:05 +00:00

This reverts commit d3f8105c65046173e20c4c59394b4a7f1bbe7627. Halide no longer relies on this target: https://github.com/llvm/llvm-project/pull/98497#issuecomment-2253358685
157 lines
9.3 KiB
C++
157 lines
9.3 KiB
C++
// Check we use tail padding if it is known to be safe
|
|
|
|
// Configs that have cheap unaligned access
|
|
// Little Endian
|
|
// RUN: %clang_cc1 -triple=aarch64-apple-darwin %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT64 %s
|
|
// RUN: %clang_cc1 -triple=aarch64-linux-gnu %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT64 %s
|
|
// RUN: %clang_cc1 -triple=arm-apple-darwin %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT-DWN32 %s
|
|
// RUN: %clang_cc1 -triple=arm-none-eabi %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=i686-linux-gnu %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=loongarch64-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT64 %s
|
|
// RUN: %clang_cc1 -triple=powerpcle-linux-gnu %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=ve-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT64 %s
|
|
// RUN: %clang_cc1 -triple=wasm32 %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=wasm64 %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT64 %s
|
|
// RUN: %clang_cc1 -triple=x86_64-linux-gnu %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT64 %s
|
|
|
|
// Big Endian
|
|
// RUN: %clang_cc1 -triple=powerpc-linux-gnu %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=powerpc64-linux-gnu %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT64 %s
|
|
// RUN: %clang_cc1 -triple=systemz %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT64 %s
|
|
|
|
// Configs that have expensive unaligned access
|
|
// Little Endian
|
|
// RUN: %clang_cc1 -triple=amdgcn-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT64 %s
|
|
// RUN: %clang_cc1 -triple=arc-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=bpf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT64 %s
|
|
// RUN: %clang_cc1 -triple=csky %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=hexagon-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=loongarch32-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=nvptx-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=riscv32 %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=riscv64 %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT64 %s
|
|
// RUN: %clang_cc1 -triple=spir-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=xcore-none-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
|
|
// Big endian
|
|
// RUN: %clang_cc1 -triple=lanai-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=m68k-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=mips-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=mips64-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT64 %s
|
|
// RUN: %clang_cc1 -triple=sparc-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
// RUN: %clang_cc1 -triple=tce-elf %s -emit-llvm -o /dev/null -fdump-record-layouts-simple | FileCheck --check-prefixes CHECK,LAYOUT,LAYOUT32 %s
|
|
|
|
// Can use tail padding
|
|
struct Pod {
|
|
int a : 16;
|
|
int b : 8;
|
|
} P;
|
|
// CHECK-LABEL: LLVMType:%struct.Pod =
|
|
// LAYOUT-SAME: type { i32 }
|
|
// LAYOUT-DWN32-SAME: type <{ i16, i8 }>
|
|
// CHECK-NEXT: NonVirtualBaseLLVMType:%struct.Pod =
|
|
// CHECK: BitFields:[
|
|
// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:32 StorageOffset:0
|
|
// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:32 StorageOffset:0
|
|
|
|
// LAYOUT-DWN32-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:0
|
|
// LAYOUT-DWN32-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:2
|
|
// CHECK-NEXT: ]>
|
|
|
|
// No tail padding
|
|
struct __attribute__((packed)) PPod {
|
|
int a : 16;
|
|
int b : 8;
|
|
} PP;
|
|
// CHECK-LABEL: LLVMType:%struct.PPod =
|
|
// LAYOUT-SAME: type <{ i16, i8 }>
|
|
// LAYOUT-DWN32-SAME: type <{ i16, i8 }>
|
|
// CHECK-NEXT: NonVirtualBaseLLVMType:%struct.PPod =
|
|
// CHECK: BitFields:[
|
|
// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:0
|
|
// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:2
|
|
|
|
// LAYOUT-DWN32-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:0
|
|
// LAYOUT-DWN32-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:2
|
|
// CHECK-NEXT: ]>
|
|
|
|
// Cannot use tail padding
|
|
struct NonPod {
|
|
~NonPod();
|
|
int a : 16;
|
|
int b : 8;
|
|
} NP;
|
|
// CHECK-LABEL: LLVMType:%struct.NonPod =
|
|
// LAYOUT-SAME: type <{ i16, i8, i8 }>
|
|
// LAYOUT-DWN32-SAME: type <{ i16, i8 }>
|
|
// CHECK-NEXT: NonVirtualBaseLLVMType:%struct.
|
|
// LAYOUT-SAME: NonPod.base = type <{ i16, i8 }>
|
|
// LAYOUT-DWN32-SAME: NonPod = type <{ i16, i8 }>
|
|
// CHECK: BitFields:[
|
|
// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:0
|
|
// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:2
|
|
|
|
// LAYOUT-DWN32-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:0
|
|
// LAYOUT-DWN32-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:2
|
|
// CHECK-NEXT: ]>
|
|
|
|
// No tail padding
|
|
struct __attribute__((packed)) PNonPod {
|
|
~PNonPod();
|
|
int a : 16;
|
|
int b : 8;
|
|
} PNP;
|
|
// CHECK-LABEL: LLVMType:%struct.PNonPod =
|
|
// LAYOUT-SAME: type <{ i16, i8 }>
|
|
// LAYOUT-DWN32-SAME: type <{ i16, i8 }>
|
|
// CHECK-NEXT: NonVirtualBaseLLVMType:%struct.PNonPod =
|
|
// CHECK: BitFields:[
|
|
// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:0
|
|
// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:2
|
|
|
|
// LAYOUT-DWN32-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:0
|
|
// LAYOUT-DWN32-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:2
|
|
// CHECK-NEXT: ]>
|
|
|
|
struct __attribute__((aligned(4))) Empty {} empty;
|
|
|
|
struct Char { char a; } cbase;
|
|
struct D : virtual Char {
|
|
[[no_unique_address]] Empty e0;
|
|
[[no_unique_address]] Empty e1;
|
|
unsigned a : 24; // keep as 24bits
|
|
} d;
|
|
// CHECK-LABEL: LLVMType:%struct.D =
|
|
// LAYOUT64-SAME: type <{ ptr, [3 x i8], %struct.Char, [4 x i8] }>
|
|
// LAYOUT32-SAME: type { ptr, [3 x i8], %struct.Char }
|
|
// LAYOUT-DWN32-SAME: type { ptr, [3 x i8], %struct.Char }
|
|
// CHECK-NEXT: NonVirtualBaseLLVMType:
|
|
// LAYOUT64-SAME: %struct.D.base = type <{ ptr, i32 }>
|
|
// LAYOUT32-SAME: %struct.D = type { ptr, [3 x i8], %struct.Char }
|
|
// LAYOUT-DWN32-SAME: %struct.D = type { ptr, [3 x i8], %struct.Char }
|
|
// CHECK: BitFields:[
|
|
// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:24 IsSigned:0 StorageSize:24 StorageOffset:{{(4|8)}}
|
|
|
|
// LAYOUT-DWN32-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:24 IsSigned:0 StorageSize:24 StorageOffset:{{(4|8)}}
|
|
// CHECK-NEXT: ]>
|
|
|
|
struct Int { int a; } ibase;
|
|
struct E : virtual Int {
|
|
[[no_unique_address]] Empty e0;
|
|
[[no_unique_address]] Empty e1;
|
|
unsigned a : 24; // expand to 32
|
|
} e;
|
|
// CHECK-LABEL: LLVMType:%struct.E =
|
|
// LAYOUT64-SAME: type <{ ptr, i32, %struct.Int }>
|
|
// LAYOUT32-SAME: type { ptr, i32, %struct.Int }
|
|
// LAYOUT-DWN32-SAME: type { ptr, i32, %struct.Int }
|
|
// CHECK-NEXT: NonVirtualBaseLLVMType:%struct.E.base =
|
|
// LAYOUT64-SAME: type <{ ptr, i32 }>
|
|
// LAYOUT32-SAME: type { ptr, i32 }
|
|
// LAYOUT-DWN32-SAME: type { ptr, i32 }
|
|
// CHECK: BitFields:[
|
|
// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:24 IsSigned:0 StorageSize:32 StorageOffset:{{(4|8)}}
|
|
|
|
// LAYOUT-DWN32-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:24 IsSigned:0 StorageSize:32 StorageOffset:{{(4|8)}}
|
|
// CHECK-NEXT: ]>
|