Files
TheRock/compiler/amd-llvm/clang/test/CodeGenHIP/debug-info-amdgcn-abi-heterogeneous-dwarf.hip
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

1729 lines
159 KiB
Plaintext

// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
// XFAIL: *
// REQUIRES: amdgpu-registered-target
// RUN: %clang_cc1 -O0 -debug-info-kind=limited -gheterogeneous-dwarf -triple amdgcn-amd-amdhsa -x hip -emit-llvm -fcuda-is-device -o - %s | FileCheck %s
// Notes:
// * There is no test involving transparent_union, as this isn't supported in
// C++, and so is not supported in HIP.
// * There is no test involving flexible array members, as this isn't supported
// in C++ without an extension.
// * AMDGCN uses the ItaniumCXXABI, which seems to require one trivial,
// non-deleted copy or move constructor in order to allow Default passing,
// otherwise it selects Indirect. There is a "non-ByVal" form of Indirect,
// which seems to add an extra indirection to avoid a copy, but this is only
// used by the MicrosoftCXXABI, so AFAICT it is impossible to construct for
// AMDGCN.
// * The tests are not exhaustive by any stretch, but try to cover all of the
// relevant corner cases from the perspective of debug info. One notable
// omission is any consideration for return values, as this isn't (currently)
// present in the debug info at all.
#define __device__ __attribute__((device))
#define __global__ __attribute__((global))
#define int8_t char
#define uint8_t unsigned int8_t
#define int16_t short
#define uint16_t unsigned int16_t
#define int32_t int
#define uint32_t unsigned int32_t
#define int64_t long
#define uint64_t unsigned int64_t
struct StructEmpty {};
struct StructSingleElement {
int8_t Element0;
};
struct StructSingleElementRecursive {
StructSingleElement Element0;
};
struct StructTrivialCopyTrivialMove {
int8_t Element0;
__device__ StructTrivialCopyTrivialMove(const StructTrivialCopyTrivialMove &) = default;
__device__ StructTrivialCopyTrivialMove(StructTrivialCopyTrivialMove &&) = default;
};
struct StructNoCopyTrivialMove {
int8_t Element0;
__device__ StructNoCopyTrivialMove(const StructNoCopyTrivialMove &) = delete;
__device__ StructNoCopyTrivialMove(StructNoCopyTrivialMove &&) = default;
};
struct StructTrivialCopyNoMove {
int8_t Element0;
__device__ StructTrivialCopyNoMove(const StructTrivialCopyNoMove &) = default;
__device__ StructTrivialCopyNoMove(StructTrivialCopyNoMove &&) = delete;
};
struct StructNoCopyNoMove {
int8_t Element0;
__device__ StructNoCopyNoMove(const StructNoCopyNoMove &) = delete;
__device__ StructNoCopyNoMove(StructNoCopyNoMove &&) = delete;
};
template <unsigned N>
struct StructNBytes {
static_assert(N > 1, "");
int8_t Element0;
int8_t Elements[N - 1u];
};
enum EnumInt8T : int8_t {};
enum EnumUInt8T : uint8_t {};
enum EnumInt16T : int16_t {};
enum EnumUInt16T : uint16_t {};
enum EnumInt32T : int32_t {};
enum EnumUInt32T : uint32_t {};
enum EnumInt64T : int64_t {};
enum EnumUInt64T : uint64_t {};
struct StructSinglePointerElement {
int32_t *Element0;
};
struct StructPointerElements {
int32_t *Element0;
float *Element1;
};
struct StructMultipleElements {
int32_t Element0;
int64_t Element1;
};
// CHECK-LABEL: define dso_local void @_Z21Test_Func_StructEmpty11StructEmpty(
// CHECK-SAME: ) #[[ATTR0:[0-9]+]] !dbg [[DBG26:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP:%.*]] = alloca [[STRUCT_STRUCTEMPTY:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP0:%.*]] = addrspacecast ptr addrspace(5) [[TMP]] to ptr
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP]], [[META31:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTEMPTY]])), [[META32:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG33:![0-9]+]]
//
__device__ void Test_Func_StructEmpty(StructEmpty) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z21Test_Kern_StructEmpty11StructEmpty(
// CHECK-SAME: ptr addrspace(4) noundef byref([[STRUCT_STRUCTEMPTY:%.*]]) align 1 [[TMP0:%.*]]) #[[ATTR1:[0-9]+]] !dbg [[DBG34:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTEMPTY]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 1 [[TMP1]], ptr addrspace(4) align 1 [[TMP0]], i64 1, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META36:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTEMPTY]])), [[META37:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG38:![0-9]+]]
//
__global__ void Test_Kern_StructEmpty(StructEmpty) {}
// CHECK-LABEL: define dso_local void @_Z29Test_Func_StructSingleElement19StructSingleElement(
// CHECK-SAME: i8 [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG39:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTSINGLEELEMENT:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTSINGLEELEMENT]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store i8 [[DOTCOERCE]], ptr [[COERCE_DIVE]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META46:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTSINGLEELEMENT]])), [[META47:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG48:![0-9]+]]
//
__device__ void Test_Func_StructSingleElement(StructSingleElement) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z29Test_Kern_StructSingleElement19StructSingleElement(
// CHECK-SAME: i8 [[DOTCOERCE:%.*]]) #[[ATTR1]] !dbg [[DBG49:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTSINGLEELEMENT:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTSINGLEELEMENT]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store i8 [[DOTCOERCE]], ptr [[COERCE_DIVE]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META51:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTSINGLEELEMENT]])), [[META52:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG53:![0-9]+]]
//
__global__ void Test_Kern_StructSingleElement(StructSingleElement) {}
// CHECK-LABEL: define dso_local void @_Z38Test_Func_StructSingleElementRecursive28StructSingleElementRecursive(
// CHECK-SAME: i8 [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG54:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTSINGLEELEMENTRECURSIVE:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTSINGLEELEMENTRECURSIVE]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: [[COERCE_DIVE1:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTSINGLEELEMENT:%.*]], ptr [[COERCE_DIVE]], i32 0, i32 0
// CHECK-NEXT: store i8 [[DOTCOERCE]], ptr [[COERCE_DIVE1]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META61:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTSINGLEELEMENTRECURSIVE]])), [[META62:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG63:![0-9]+]]
//
__device__ void Test_Func_StructSingleElementRecursive(StructSingleElementRecursive) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z38Test_Kern_StructSingleElementRecursive28StructSingleElementRecursive(
// CHECK-SAME: i8 [[DOTCOERCE:%.*]]) #[[ATTR1]] !dbg [[DBG64:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTSINGLEELEMENTRECURSIVE:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTSINGLEELEMENTRECURSIVE]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: [[COERCE_DIVE1:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTSINGLEELEMENT:%.*]], ptr [[COERCE_DIVE]], i32 0, i32 0
// CHECK-NEXT: store i8 [[DOTCOERCE]], ptr [[COERCE_DIVE1]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META66:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTSINGLEELEMENTRECURSIVE]])), [[META67:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG68:![0-9]+]]
//
__global__ void Test_Kern_StructSingleElementRecursive(StructSingleElementRecursive) {}
// CHECK-LABEL: define dso_local void @_Z38Test_Func_StructTrivialCopyTrivialMove28StructTrivialCopyTrivialMove(
// CHECK-SAME: i8 [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG69:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTTRIVIALCOPYTRIVIALMOVE:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTTRIVIALCOPYTRIVIALMOVE]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store i8 [[DOTCOERCE]], ptr [[COERCE_DIVE]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META86:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTTRIVIALCOPYTRIVIALMOVE]])), [[META87:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG88:![0-9]+]]
//
__device__ void Test_Func_StructTrivialCopyTrivialMove(StructTrivialCopyTrivialMove) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z38Test_Kern_StructTrivialCopyTrivialMove28StructTrivialCopyTrivialMove(
// CHECK-SAME: i8 [[DOTCOERCE:%.*]]) #[[ATTR1]] !dbg [[DBG89:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTTRIVIALCOPYTRIVIALMOVE:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTTRIVIALCOPYTRIVIALMOVE]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store i8 [[DOTCOERCE]], ptr [[COERCE_DIVE]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META91:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTTRIVIALCOPYTRIVIALMOVE]])), [[META92:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG93:![0-9]+]]
//
__global__ void Test_Kern_StructTrivialCopyTrivialMove(StructTrivialCopyTrivialMove) {}
// CHECK-LABEL: define dso_local void @_Z33Test_Func_StructNoCopyTrivialMove23StructNoCopyTrivialMove(
// CHECK-SAME: i8 [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG94:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTNOCOPYTRIVIALMOVE:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTNOCOPYTRIVIALMOVE]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store i8 [[DOTCOERCE]], ptr [[COERCE_DIVE]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META111:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNOCOPYTRIVIALMOVE]])), [[META112:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG113:![0-9]+]]
//
__device__ void Test_Func_StructNoCopyTrivialMove(StructNoCopyTrivialMove) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z33Test_Kern_StructNoCopyTrivialMove23StructNoCopyTrivialMove(
// CHECK-SAME: i8 [[DOTCOERCE:%.*]]) #[[ATTR1]] !dbg [[DBG114:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTNOCOPYTRIVIALMOVE:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTNOCOPYTRIVIALMOVE]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store i8 [[DOTCOERCE]], ptr [[COERCE_DIVE]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META116:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNOCOPYTRIVIALMOVE]])), [[META117:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG118:![0-9]+]]
//
__global__ void Test_Kern_StructNoCopyTrivialMove(StructNoCopyTrivialMove) {}
// CHECK-LABEL: define dso_local void @_Z33Test_Func_StructTrivialCopyNoMove23StructTrivialCopyNoMove(
// CHECK-SAME: i8 [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG119:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTTRIVIALCOPYNOMOVE:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTTRIVIALCOPYNOMOVE]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store i8 [[DOTCOERCE]], ptr [[COERCE_DIVE]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META136:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTTRIVIALCOPYNOMOVE]])), [[META137:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG138:![0-9]+]]
//
__device__ void Test_Func_StructTrivialCopyNoMove(StructTrivialCopyNoMove) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z33Test_Kern_StructTrivialCopyNoMove23StructTrivialCopyNoMove(
// CHECK-SAME: i8 [[DOTCOERCE:%.*]]) #[[ATTR1]] !dbg [[DBG139:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTTRIVIALCOPYNOMOVE:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTTRIVIALCOPYNOMOVE]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store i8 [[DOTCOERCE]], ptr [[COERCE_DIVE]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META141:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTTRIVIALCOPYNOMOVE]])), [[META142:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG143:![0-9]+]]
//
__global__ void Test_Kern_StructTrivialCopyNoMove(StructTrivialCopyNoMove) {}
// CHECK-LABEL: define dso_local void @_Z28Test_Func_StructNoCopyNoMove18StructNoCopyNoMove(
// CHECK-SAME: ptr addrspace(5) noundef dead_on_return [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG144:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTINDIRECT_ADDR:%.*]] = alloca ptr, align 8, addrspace(5)
// CHECK-NEXT: [[DOTINDIRECT_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTINDIRECT_ADDR]] to ptr
// CHECK-NEXT: store ptr addrspace(5) [[TMP0]], ptr [[DOTINDIRECT_ADDR_ASCAST]], align 8
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTINDIRECT_ADDR]], [[META161:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNOCOPYNOMOVE:%.*]])), [[META162:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG163:![0-9]+]]
//
__device__ void Test_Func_StructNoCopyNoMove(StructNoCopyNoMove) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z28Test_Kern_StructNoCopyNoMove18StructNoCopyNoMove(
// CHECK-SAME: i8 [[DOTCOERCE:%.*]]) #[[ATTR1]] !dbg [[DBG164:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTNOCOPYNOMOVE:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTNOCOPYNOMOVE]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store i8 [[DOTCOERCE]], ptr [[COERCE_DIVE]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META166:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNOCOPYNOMOVE]])), [[META167:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG168:![0-9]+]]
//
__global__ void Test_Kern_StructNoCopyNoMove(StructNoCopyNoMove) {}
// CHECK-LABEL: define dso_local void @_Z22Test_Func_Struct2Bytes12StructNBytesILj2EE(
// CHECK-SAME: i16 [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG169:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTNBYTES:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: store i16 [[DOTCOERCE]], ptr [[TMP1]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META182:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES]])), [[META183:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG184:![0-9]+]]
//
__device__ void Test_Func_Struct2Bytes(StructNBytes<2>) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z22Test_Kern_Struct2Bytes12StructNBytesILj2EE(
// CHECK-SAME: ptr addrspace(4) noundef byref([[STRUCT_STRUCTNBYTES:%.*]]) align 1 [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG185:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTNBYTES]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 1 [[TMP1]], ptr addrspace(4) align 1 [[TMP0]], i64 2, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META187:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES]])), [[META188:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG189:![0-9]+]]
//
__global__ void Test_Kern_Struct2Bytes(StructNBytes<2>) {}
// CHECK-LABEL: define dso_local void @_Z22Test_Func_Struct3Bytes12StructNBytesILj3EE(
// CHECK-SAME: i32 [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG190:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTNBYTES_0:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_VAL_II:%.*]] = trunc i32 [[DOTCOERCE]] to i24
// CHECK-NEXT: store i24 [[COERCE_VAL_II]], ptr [[TMP1]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META203:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_0]])), [[META204:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG205:![0-9]+]]
//
__device__ void Test_Func_Struct3Bytes(StructNBytes<3>) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z22Test_Kern_Struct3Bytes12StructNBytesILj3EE(
// CHECK-SAME: ptr addrspace(4) noundef byref([[STRUCT_STRUCTNBYTES_0:%.*]]) align 1 [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG206:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTNBYTES_0]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 1 [[TMP1]], ptr addrspace(4) align 1 [[TMP0]], i64 3, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META208:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_0]])), [[META209:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG210:![0-9]+]]
//
__global__ void Test_Kern_Struct3Bytes(StructNBytes<3>) {}
// CHECK-LABEL: define dso_local void @_Z22Test_Func_Struct4Bytes12StructNBytesILj4EE(
// CHECK-SAME: i32 [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG211:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTNBYTES_1:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: store i32 [[DOTCOERCE]], ptr [[TMP1]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META224:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_1]])), [[META225:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG226:![0-9]+]]
//
__device__ void Test_Func_Struct4Bytes(StructNBytes<4>) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z22Test_Kern_Struct4Bytes12StructNBytesILj4EE(
// CHECK-SAME: ptr addrspace(4) noundef byref([[STRUCT_STRUCTNBYTES_1:%.*]]) align 1 [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG227:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTNBYTES_1]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 1 [[TMP1]], ptr addrspace(4) align 1 [[TMP0]], i64 4, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META229:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_1]])), [[META230:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG231:![0-9]+]]
//
__global__ void Test_Kern_Struct4Bytes(StructNBytes<4>) {}
// CHECK-LABEL: define dso_local void @_Z22Test_Func_Struct5Bytes12StructNBytesILj5EE(
// CHECK-SAME: [2 x i32] [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG232:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTNBYTES_2:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP_COERCE:%.*]] = alloca [2 x i32], align 4, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[TMP_COERCE_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[TMP_COERCE]] to ptr
// CHECK-NEXT: store [2 x i32] [[DOTCOERCE]], ptr [[TMP_COERCE_ASCAST]], align 4
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 [[TMP1]], ptr align 4 [[TMP_COERCE_ASCAST]], i64 5, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META245:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_2]])), [[META246:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG247:![0-9]+]]
//
__device__ void Test_Func_Struct5Bytes(StructNBytes<5>) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z22Test_Kern_Struct5Bytes12StructNBytesILj5EE(
// CHECK-SAME: ptr addrspace(4) noundef byref([[STRUCT_STRUCTNBYTES_2:%.*]]) align 1 [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG248:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTNBYTES_2]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 1 [[TMP1]], ptr addrspace(4) align 1 [[TMP0]], i64 5, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META250:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_2]])), [[META251:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG252:![0-9]+]]
//
__global__ void Test_Kern_Struct5Bytes(StructNBytes<5>) {}
// CHECK-LABEL: define dso_local void @_Z22Test_Func_Struct6Bytes12StructNBytesILj6EE(
// CHECK-SAME: [2 x i32] [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG253:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTNBYTES_3:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP_COERCE:%.*]] = alloca [2 x i32], align 4, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[TMP_COERCE_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[TMP_COERCE]] to ptr
// CHECK-NEXT: store [2 x i32] [[DOTCOERCE]], ptr [[TMP_COERCE_ASCAST]], align 4
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 [[TMP1]], ptr align 4 [[TMP_COERCE_ASCAST]], i64 6, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META266:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_3]])), [[META267:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG268:![0-9]+]]
//
__device__ void Test_Func_Struct6Bytes(StructNBytes<6>) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z22Test_Kern_Struct6Bytes12StructNBytesILj6EE(
// CHECK-SAME: ptr addrspace(4) noundef byref([[STRUCT_STRUCTNBYTES_3:%.*]]) align 1 [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG269:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTNBYTES_3]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 1 [[TMP1]], ptr addrspace(4) align 1 [[TMP0]], i64 6, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META271:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_3]])), [[META272:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG273:![0-9]+]]
//
__global__ void Test_Kern_Struct6Bytes(StructNBytes<6>) {}
// CHECK-LABEL: define dso_local void @_Z22Test_Func_Struct7Bytes12StructNBytesILj7EE(
// CHECK-SAME: [2 x i32] [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG274:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTNBYTES_4:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP_COERCE:%.*]] = alloca [2 x i32], align 4, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[TMP_COERCE_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[TMP_COERCE]] to ptr
// CHECK-NEXT: store [2 x i32] [[DOTCOERCE]], ptr [[TMP_COERCE_ASCAST]], align 4
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 [[TMP1]], ptr align 4 [[TMP_COERCE_ASCAST]], i64 7, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META287:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_4]])), [[META288:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG289:![0-9]+]]
//
__device__ void Test_Func_Struct7Bytes(StructNBytes<7>) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z22Test_Kern_Struct7Bytes12StructNBytesILj7EE(
// CHECK-SAME: ptr addrspace(4) noundef byref([[STRUCT_STRUCTNBYTES_4:%.*]]) align 1 [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG290:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTNBYTES_4]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 1 [[TMP1]], ptr addrspace(4) align 1 [[TMP0]], i64 7, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META292:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_4]])), [[META293:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG294:![0-9]+]]
//
__global__ void Test_Kern_Struct7Bytes(StructNBytes<7>) {}
// CHECK-LABEL: define dso_local void @_Z22Test_Func_Struct8Bytes12StructNBytesILj8EE(
// CHECK-SAME: [2 x i32] [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG295:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTNBYTES_5:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: store [2 x i32] [[DOTCOERCE]], ptr [[TMP1]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META308:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_5]])), [[META309:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG310:![0-9]+]]
//
__device__ void Test_Func_Struct8Bytes(StructNBytes<8>) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z22Test_Kern_Struct8Bytes12StructNBytesILj8EE(
// CHECK-SAME: ptr addrspace(4) noundef byref([[STRUCT_STRUCTNBYTES_5:%.*]]) align 1 [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG311:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTNBYTES_5]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 1 [[TMP1]], ptr addrspace(4) align 1 [[TMP0]], i64 8, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META313:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_5]])), [[META314:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG315:![0-9]+]]
//
__global__ void Test_Kern_Struct8Bytes(StructNBytes<8>) {}
// CHECK-LABEL: define dso_local void @_Z22Test_Func_Struct9Bytes12StructNBytesILj9EE(
// CHECK-SAME: i8 [[DOTCOERCE0:%.*]], [8 x i8] [[DOTCOERCE1:%.*]]) #[[ATTR0]] !dbg [[DBG316:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTNBYTES_6:%.*]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTNBYTES_6]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store i8 [[DOTCOERCE0]], ptr [[TMP2]], align 1
// CHECK-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTNBYTES_6]], ptr [[TMP1]], i32 0, i32 1
// CHECK-NEXT: store [8 x i8] [[DOTCOERCE1]], ptr [[TMP3]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META329:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_6]])), [[META330:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG331:![0-9]+]]
//
__device__ void Test_Func_Struct9Bytes(StructNBytes<9>) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z22Test_Kern_Struct9Bytes12StructNBytesILj9EE(
// CHECK-SAME: ptr addrspace(4) noundef byref([[STRUCT_STRUCTNBYTES_6:%.*]]) align 1 [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG332:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTNBYTES_6]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 1 [[TMP1]], ptr addrspace(4) align 1 [[TMP0]], i64 9, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META334:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_6]])), [[META335:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG336:![0-9]+]]
//
__global__ void Test_Kern_Struct9Bytes(StructNBytes<9>) {}
// CHECK-LABEL: define dso_local void @_Z23Test_Func_Struct64Bytes12StructNBytesILj64EE(
// CHECK-SAME: ptr addrspace(5) noundef byref([[STRUCT_STRUCTNBYTES_7:%.*]]) align 1 [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG337:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTNBYTES_7]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p5.i64(ptr align 1 [[TMP1]], ptr addrspace(5) align 1 [[TMP0]], i64 64, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META350:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_7]])), [[META351:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG352:![0-9]+]]
//
__device__ void Test_Func_Struct64Bytes(StructNBytes<64>) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z23Test_Kern_Struct64Bytes12StructNBytesILj64EE(
// CHECK-SAME: ptr addrspace(4) noundef byref([[STRUCT_STRUCTNBYTES_7:%.*]]) align 1 [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG353:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTNBYTES_7]], align 1, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 1 [[TMP1]], ptr addrspace(4) align 1 [[TMP0]], i64 64, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META355:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTNBYTES_7]])), [[META356:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG357:![0-9]+]]
//
__global__ void Test_Kern_Struct64Bytes(StructNBytes<64>) {}
// CHECK-LABEL: define dso_local void @_Z15Test_Func_Int8Tc(
// CHECK-SAME: i8 noundef signext [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG358:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i8, align 1, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i8 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META362:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i8)), [[META363:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG364:![0-9]+]]
//
__device__ void Test_Func_Int8T(int8_t) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z15Test_Kern_Int8Tc(
// CHECK-SAME: i8 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG365:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i8, align 1, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i8 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META367:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i8)), [[META368:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG369:![0-9]+]]
//
__global__ void Test_Kern_Int8T(int8_t) {}
// CHECK-LABEL: define dso_local void @_Z16Test_Func_UInt8Th(
// CHECK-SAME: i8 noundef zeroext [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG370:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i8, align 1, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i8 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META374:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i8)), [[META375:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG376:![0-9]+]]
//
__device__ void Test_Func_UInt8T(uint8_t) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z16Test_Kern_UInt8Th(
// CHECK-SAME: i8 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG377:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i8, align 1, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i8 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META379:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i8)), [[META380:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG381:![0-9]+]]
//
__global__ void Test_Kern_UInt8T(uint8_t) {}
// CHECK-LABEL: define dso_local void @_Z16Test_Func_Int16Ts(
// CHECK-SAME: i16 noundef signext [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG382:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i16, align 2, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i16 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 2
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META386:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i16)), [[META387:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG388:![0-9]+]]
//
__device__ void Test_Func_Int16T(int16_t) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z16Test_Kern_Int16Ts(
// CHECK-SAME: i16 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG389:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i16, align 2, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i16 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 2
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META391:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i16)), [[META392:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG393:![0-9]+]]
//
__global__ void Test_Kern_Int16T(int16_t) {}
// CHECK-LABEL: define dso_local void @_Z17Test_Func_UInt16Tt(
// CHECK-SAME: i16 noundef zeroext [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG394:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i16, align 2, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i16 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 2
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META398:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i16)), [[META399:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG400:![0-9]+]]
//
__device__ void Test_Func_UInt16T(uint16_t) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z17Test_Kern_UInt16Tt(
// CHECK-SAME: i16 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG401:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i16, align 2, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i16 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 2
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META403:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i16)), [[META404:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG405:![0-9]+]]
//
__global__ void Test_Kern_UInt16T(uint16_t) {}
// CHECK-LABEL: define dso_local void @_Z16Test_Func_Int32Ti(
// CHECK-SAME: i32 noundef [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG406:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i32 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 4
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META410:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META411:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG412:![0-9]+]]
//
__device__ void Test_Func_Int32T(int32_t) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z16Test_Kern_Int32Ti(
// CHECK-SAME: i32 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG413:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i32 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 4
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META415:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META416:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG417:![0-9]+]]
//
__global__ void Test_Kern_Int32T(int32_t) {}
// CHECK-LABEL: define dso_local void @_Z17Test_Func_UInt32Tj(
// CHECK-SAME: i32 noundef [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG418:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i32 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 4
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META422:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META423:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG424:![0-9]+]]
//
__device__ void Test_Func_UInt32T(uint32_t) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z17Test_Kern_UInt32Tj(
// CHECK-SAME: i32 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG425:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i32 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 4
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META427:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META428:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG429:![0-9]+]]
//
__global__ void Test_Kern_UInt32T(uint32_t) {}
// CHECK-LABEL: define dso_local void @_Z16Test_Func_Int64Tl(
// CHECK-SAME: i64 noundef [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG430:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i64 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META434:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META435:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG436:![0-9]+]]
//
__device__ void Test_Func_Int64T(int64_t) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z16Test_Kern_Int64Tl(
// CHECK-SAME: i64 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG437:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i64 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META439:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META440:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG441:![0-9]+]]
//
__global__ void Test_Kern_Int64T(int64_t) {}
// CHECK-LABEL: define dso_local void @_Z17Test_Func_UInt64Tm(
// CHECK-SAME: i64 noundef [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG442:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i64 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META446:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META447:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG448:![0-9]+]]
//
__device__ void Test_Func_UInt64T(uint64_t) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z17Test_Kern_UInt64Tm(
// CHECK-SAME: i64 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG449:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i64 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META451:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META452:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG453:![0-9]+]]
//
__global__ void Test_Kern_UInt64T(uint64_t) {}
// CHECK-LABEL: define dso_local void @_Z19Test_Func_EnumInt8T9EnumInt8T(
// CHECK-SAME: i8 noundef signext [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG454:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i8, align 1, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i8 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META458:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i8)), [[META459:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG460:![0-9]+]]
//
__device__ void Test_Func_EnumInt8T(EnumInt8T) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z19Test_Kern_EnumInt8T9EnumInt8T(
// CHECK-SAME: i8 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG461:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i8, align 1, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i8 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META463:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i8)), [[META464:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG465:![0-9]+]]
//
__global__ void Test_Kern_EnumInt8T(EnumInt8T) {}
// CHECK-LABEL: define dso_local void @_Z20Test_Func_EnumUInt8T10EnumUInt8T(
// CHECK-SAME: i8 noundef zeroext [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG466:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i8, align 1, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i8 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META470:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i8)), [[META471:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG472:![0-9]+]]
//
__device__ void Test_Func_EnumUInt8T(EnumUInt8T) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z20Test_Kern_EnumUInt8T10EnumUInt8T(
// CHECK-SAME: i8 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG473:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i8, align 1, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i8 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META475:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i8)), [[META476:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG477:![0-9]+]]
//
__global__ void Test_Kern_EnumUInt8T(EnumUInt8T) {}
// CHECK-LABEL: define dso_local void @_Z20Test_Func_EnumInt16T10EnumInt16T(
// CHECK-SAME: i16 noundef signext [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG478:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i16, align 2, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i16 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 2
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META482:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i16)), [[META483:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG484:![0-9]+]]
//
__device__ void Test_Func_EnumInt16T(EnumInt16T) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z20Test_Kern_EnumInt16T10EnumInt16T(
// CHECK-SAME: i16 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG485:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i16, align 2, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i16 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 2
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META487:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i16)), [[META488:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG489:![0-9]+]]
//
__global__ void Test_Kern_EnumInt16T(EnumInt16T) {}
// CHECK-LABEL: define dso_local void @_Z21Test_Func_EnumUInt16T11EnumUInt16T(
// CHECK-SAME: i16 noundef zeroext [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG490:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i16, align 2, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i16 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 2
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META494:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i16)), [[META495:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG496:![0-9]+]]
//
__device__ void Test_Func_EnumUInt16T(EnumUInt16T) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z21Test_Kern_EnumUInt16T11EnumUInt16T(
// CHECK-SAME: i16 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG497:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i16, align 2, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i16 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 2
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META499:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i16)), [[META500:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG501:![0-9]+]]
//
__global__ void Test_Kern_EnumUInt16T(EnumUInt16T) {}
// CHECK-LABEL: define dso_local void @_Z20Test_Func_EnumInt32T10EnumInt32T(
// CHECK-SAME: i32 noundef [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG502:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i32 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 4
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META506:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META507:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG508:![0-9]+]]
//
__device__ void Test_Func_EnumInt32T(EnumInt32T) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z20Test_Kern_EnumInt32T10EnumInt32T(
// CHECK-SAME: i32 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG509:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i32 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 4
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META511:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META512:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG513:![0-9]+]]
//
__global__ void Test_Kern_EnumInt32T(EnumInt32T) {}
// CHECK-LABEL: define dso_local void @_Z21Test_Func_EnumUInt32T11EnumUInt32T(
// CHECK-SAME: i32 noundef [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG514:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i32 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 4
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META518:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META519:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG520:![0-9]+]]
//
__device__ void Test_Func_EnumUInt32T(EnumUInt32T) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z21Test_Kern_EnumUInt32T11EnumUInt32T(
// CHECK-SAME: i32 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG521:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i32 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 4
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META523:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META524:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG525:![0-9]+]]
//
__global__ void Test_Kern_EnumUInt32T(EnumUInt32T) {}
// CHECK-LABEL: define dso_local void @_Z20Test_Func_EnumInt64T10EnumInt64T(
// CHECK-SAME: i64 noundef [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG526:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i64 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META530:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META531:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG532:![0-9]+]]
//
__device__ void Test_Func_EnumInt64T(EnumInt64T) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z20Test_Kern_EnumInt64T10EnumInt64T(
// CHECK-SAME: i64 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG533:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i64 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META535:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META536:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG537:![0-9]+]]
//
__global__ void Test_Kern_EnumInt64T(EnumInt64T) {}
// CHECK-LABEL: define dso_local void @_Z21Test_Func_EnumUInt64T11EnumUInt64T(
// CHECK-SAME: i64 noundef [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG538:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i64 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META542:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META543:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG544:![0-9]+]]
//
__device__ void Test_Func_EnumUInt64T(EnumUInt64T) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z21Test_Kern_EnumUInt64T11EnumUInt64T(
// CHECK-SAME: i64 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG545:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store i64 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META547:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META548:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG549:![0-9]+]]
//
__global__ void Test_Kern_EnumUInt64T(EnumUInt64T) {}
// CHECK-LABEL: define dso_local void @_Z27Test_Func_PromotableIntegerb(
// CHECK-SAME: i1 noundef zeroext [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG550:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i8, align 1, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: [[STOREDV:%.*]] = zext i1 [[TMP0]] to i8
// CHECK-NEXT: store i8 [[STOREDV]], ptr [[DOTADDR_ASCAST]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META555:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i8)), [[META556:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG557:![0-9]+]]
//
__device__ void Test_Func_PromotableInteger(bool) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z27Test_Kern_PromotableIntegerb(
// CHECK-SAME: i1 noundef [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG558:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i8, align 1, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: [[STOREDV:%.*]] = zext i1 [[TMP0]] to i8
// CHECK-NEXT: store i8 [[STOREDV]], ptr [[DOTADDR_ASCAST]], align 1
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META560:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i8)), [[META561:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG562:![0-9]+]]
//
__global__ void Test_Kern_PromotableInteger(bool) {}
// CHECK-LABEL: define dso_local void @_Z17Test_Func_PointerPi(
// CHECK-SAME: ptr noundef [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG563:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store ptr [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META568:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(ptr)), [[META569:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG570:![0-9]+]]
//
__device__ void Test_Func_Pointer(int32_t *) {}
// FIXME: There is a store, load, store sequence through another alloca here,
// which I don't understand the intent of
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z17Test_Kern_PointerPi(
// CHECK-SAME: ptr addrspace(1) noundef [[DOTCOERCE:%.*]]) #[[ATTR1]] !dbg [[DBG571:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca ptr, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 8, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store ptr addrspace(1) [[DOTCOERCE]], ptr [[TMP1]], align 8
// CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8
// CHECK-NEXT: store ptr [[TMP2]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META573:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(ptr)), [[META574:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG575:![0-9]+]]
//
__global__ void Test_Kern_Pointer(int32_t *) {}
// CHECK-LABEL: define dso_local void @_Z19Test_Func_ReferenceRi(
// CHECK-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[TMP0:%.*]]) #[[ATTR0]] !dbg [[DBG576:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store ptr [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META581:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(ptr)), [[META582:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG583:![0-9]+]]
//
__device__ void Test_Func_Reference(int32_t &) {}
// FIXME: There is a store, load, store sequence through another alloca here,
// which I don't understand the intent of
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z19Test_Kern_ReferenceRi(
// CHECK-SAME: ptr addrspace(1) noundef nonnull align 4 dereferenceable(4) [[DOTCOERCE:%.*]]) #[[ATTR1]] !dbg [[DBG584:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca ptr, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 8, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: store ptr addrspace(1) [[DOTCOERCE]], ptr [[TMP1]], align 8
// CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8
// CHECK-NEXT: store ptr [[TMP2]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META586:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(ptr)), [[META587:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG588:![0-9]+]]
//
__global__ void Test_Kern_Reference(int32_t &) {}
// CHECK-LABEL: define dso_local void @_Z36Test_Func_StructSinglePointerElement26StructSinglePointerElement(
// CHECK-SAME: ptr [[DOTCOERCE:%.*]]) #[[ATTR0]] !dbg [[DBG589:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTSINGLEPOINTERELEMENT:%.*]], align 8, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTSINGLEPOINTERELEMENT]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store ptr [[DOTCOERCE]], ptr [[COERCE_DIVE]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META596:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTSINGLEPOINTERELEMENT]])), [[META597:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG598:![0-9]+]]
//
__device__ void Test_Func_StructSinglePointerElement(StructSinglePointerElement) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z36Test_Kern_StructSinglePointerElement26StructSinglePointerElement(
// CHECK-SAME: ptr addrspace(1) [[DOTCOERCE:%.*]]) #[[ATTR1]] !dbg [[DBG599:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTSINGLEPOINTERELEMENT:%.*]], align 8, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTSINGLEPOINTERELEMENT]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store ptr addrspace(1) [[DOTCOERCE]], ptr [[COERCE_DIVE]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META601:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTSINGLEPOINTERELEMENT]])), [[META602:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG603:![0-9]+]]
//
__global__ void Test_Kern_StructSinglePointerElement(StructSinglePointerElement) {}
// CHECK-LABEL: define dso_local void @_Z31Test_Func_StructPointerElements21StructPointerElements(
// CHECK-SAME: ptr [[DOTCOERCE0:%.*]], ptr [[DOTCOERCE1:%.*]]) #[[ATTR0]] !dbg [[DBG604:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_STRUCTPOINTERELEMENTS:%.*]], align 8, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[TMP0]] to ptr
// CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTPOINTERELEMENTS]], ptr [[TMP1]], i32 0, i32 0
// CHECK-NEXT: store ptr [[DOTCOERCE0]], ptr [[TMP2]], align 8
// CHECK-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTPOINTERELEMENTS]], ptr [[TMP1]], i32 0, i32 1
// CHECK-NEXT: store ptr [[DOTCOERCE1]], ptr [[TMP3]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP0]], [[META614:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTPOINTERELEMENTS]])), [[META615:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG616:![0-9]+]]
//
__device__ void Test_Func_StructPointerElements(StructPointerElements) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z31Test_Kern_StructPointerElements21StructPointerElements(
// CHECK-SAME: ptr addrspace(4) noundef byref([[STRUCT_STRUCTPOINTERELEMENTS:%.*]]) align 8 [[TMP0:%.*]]) #[[ATTR1]] !dbg [[DBG617:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTPOINTERELEMENTS]], align 8, addrspace(5)
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 8 [[TMP1]], ptr addrspace(4) align 8 [[TMP0]], i64 16, i1 false)
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META619:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTPOINTERELEMENTS]])), [[META620:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG621:![0-9]+]]
//
__global__ void Test_Kern_StructPointerElements(StructPointerElements) {}
// CHECK-LABEL: define dso_local void @_Z37Test_Func_ParamRegLimitExpandedStructlllllli22StructMultipleElements(
// CHECK-SAME: i64 noundef [[TMP0:%.*]], i64 noundef [[TMP1:%.*]], i64 noundef [[TMP2:%.*]], i64 noundef [[TMP3:%.*]], i64 noundef [[TMP4:%.*]], i64 noundef [[TMP5:%.*]], i32 noundef [[TMP6:%.*]], i32 [[DOTCOERCE0:%.*]], i64 [[DOTCOERCE1:%.*]]) #[[ATTR0]] !dbg [[DBG622:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[TMP7:%.*]] = alloca [[STRUCT_STRUCTMULTIPLEELEMENTS:%.*]], align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR1:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR2:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR3:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR4:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR5:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR6:%.*]] = alloca i32, align 4, addrspace(5)
// CHECK-NEXT: [[TMP8:%.*]] = addrspacecast ptr addrspace(5) [[TMP7]] to ptr
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: [[DOTADDR1_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR1]] to ptr
// CHECK-NEXT: [[DOTADDR2_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR2]] to ptr
// CHECK-NEXT: [[DOTADDR3_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR3]] to ptr
// CHECK-NEXT: [[DOTADDR4_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR4]] to ptr
// CHECK-NEXT: [[DOTADDR5_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR5]] to ptr
// CHECK-NEXT: [[DOTADDR6_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR6]] to ptr
// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTMULTIPLEELEMENTS]], ptr [[TMP8]], i32 0, i32 0
// CHECK-NEXT: store i32 [[DOTCOERCE0]], ptr [[TMP9]], align 8
// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_STRUCTMULTIPLEELEMENTS]], ptr [[TMP8]], i32 0, i32 1
// CHECK-NEXT: store i64 [[DOTCOERCE1]], ptr [[TMP10]], align 8
// CHECK-NEXT: store i64 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META630:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META638:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP1]], ptr [[DOTADDR1_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR1]], [[META631:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META639:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP2]], ptr [[DOTADDR2_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR2]], [[META632:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META640:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP3]], ptr [[DOTADDR3_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR3]], [[META633:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META641:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP4]], ptr [[DOTADDR4_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR4]], [[META634:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META642:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP5]], ptr [[DOTADDR5_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR5]], [[META635:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META643:![0-9]+]])
// CHECK-NEXT: store i32 [[TMP6]], ptr [[DOTADDR6_ASCAST]], align 4
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR6]], [[META636:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META644:![0-9]+]])
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[TMP7]], [[META637:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTMULTIPLEELEMENTS]])), [[META645:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG646:![0-9]+]]
//
__device__ void Test_Func_ParamRegLimitExpandedStruct(int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int32_t, StructMultipleElements) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z37Test_Kern_ParamRegLimitExpandedStructlllllli22StructMultipleElements(
// CHECK-SAME: i64 noundef [[TMP0:%.*]], i64 noundef [[TMP1:%.*]], i64 noundef [[TMP2:%.*]], i64 noundef [[TMP3:%.*]], i64 noundef [[TMP4:%.*]], i64 noundef [[TMP5:%.*]], i32 noundef [[TMP6:%.*]], ptr addrspace(4) noundef byref([[STRUCT_STRUCTMULTIPLEELEMENTS:%.*]]) align 8 [[TMP7:%.*]]) #[[ATTR1]] !dbg [[DBG647:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTMULTIPLEELEMENTS]], align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR1:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR2:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR3:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR4:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR5:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR6:%.*]] = alloca i32, align 4, addrspace(5)
// CHECK-NEXT: [[TMP8:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: [[DOTADDR1_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR1]] to ptr
// CHECK-NEXT: [[DOTADDR2_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR2]] to ptr
// CHECK-NEXT: [[DOTADDR3_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR3]] to ptr
// CHECK-NEXT: [[DOTADDR4_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR4]] to ptr
// CHECK-NEXT: [[DOTADDR5_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR5]] to ptr
// CHECK-NEXT: [[DOTADDR6_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR6]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 8 [[TMP8]], ptr addrspace(4) align 8 [[TMP7]], i64 16, i1 false)
// CHECK-NEXT: store i64 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META649:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META657:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP1]], ptr [[DOTADDR1_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR1]], [[META650:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META658:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP2]], ptr [[DOTADDR2_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR2]], [[META651:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META659:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP3]], ptr [[DOTADDR3_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR3]], [[META652:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META660:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP4]], ptr [[DOTADDR4_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR4]], [[META653:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META661:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP5]], ptr [[DOTADDR5_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR5]], [[META654:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META662:![0-9]+]])
// CHECK-NEXT: store i32 [[TMP6]], ptr [[DOTADDR6_ASCAST]], align 4
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR6]], [[META655:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META663:![0-9]+]])
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META656:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTMULTIPLEELEMENTS]])), [[META664:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG665:![0-9]+]]
//
__global__ void Test_Kern_ParamRegLimitExpandedStruct(int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int32_t, StructMultipleElements) {}
// CHECK-LABEL: define dso_local void @_Z39Test_Func_ParamRegLimitUnexpandedStructlllllll22StructMultipleElements(
// CHECK-SAME: i64 noundef [[TMP0:%.*]], i64 noundef [[TMP1:%.*]], i64 noundef [[TMP2:%.*]], i64 noundef [[TMP3:%.*]], i64 noundef [[TMP4:%.*]], i64 noundef [[TMP5:%.*]], i64 noundef [[TMP6:%.*]], ptr addrspace(5) noundef byref([[STRUCT_STRUCTMULTIPLEELEMENTS:%.*]]) align 8 [[TMP7:%.*]]) #[[ATTR0]] !dbg [[DBG666:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTMULTIPLEELEMENTS]], align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR1:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR2:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR3:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR4:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR5:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR6:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[TMP8:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: [[DOTADDR1_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR1]] to ptr
// CHECK-NEXT: [[DOTADDR2_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR2]] to ptr
// CHECK-NEXT: [[DOTADDR3_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR3]] to ptr
// CHECK-NEXT: [[DOTADDR4_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR4]] to ptr
// CHECK-NEXT: [[DOTADDR5_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR5]] to ptr
// CHECK-NEXT: [[DOTADDR6_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR6]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p5.i64(ptr align 8 [[TMP8]], ptr addrspace(5) align 8 [[TMP7]], i64 16, i1 false)
// CHECK-NEXT: store i64 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META670:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META678:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP1]], ptr [[DOTADDR1_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR1]], [[META671:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META679:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP2]], ptr [[DOTADDR2_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR2]], [[META672:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META680:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP3]], ptr [[DOTADDR3_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR3]], [[META673:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META681:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP4]], ptr [[DOTADDR4_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR4]], [[META674:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META682:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP5]], ptr [[DOTADDR5_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR5]], [[META675:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META683:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP6]], ptr [[DOTADDR6_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR6]], [[META676:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META684:![0-9]+]])
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META677:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTMULTIPLEELEMENTS]])), [[META685:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG686:![0-9]+]]
//
__device__ void Test_Func_ParamRegLimitUnexpandedStruct(int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, StructMultipleElements) {}
// CHECK-LABEL: define dso_local amdgpu_kernel void @_Z39Test_Kern_ParamRegLimitUnexpandedStructlllllll22StructMultipleElements(
// CHECK-SAME: i64 noundef [[TMP0:%.*]], i64 noundef [[TMP1:%.*]], i64 noundef [[TMP2:%.*]], i64 noundef [[TMP3:%.*]], i64 noundef [[TMP4:%.*]], i64 noundef [[TMP5:%.*]], i64 noundef [[TMP6:%.*]], ptr addrspace(4) noundef byref([[STRUCT_STRUCTMULTIPLEELEMENTS:%.*]]) align 8 [[TMP7:%.*]]) #[[ATTR1]] !dbg [[DBG687:![0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
// CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_STRUCTMULTIPLEELEMENTS]], align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR1:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR2:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR3:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR4:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR5:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[DOTADDR6:%.*]] = alloca i64, align 8, addrspace(5)
// CHECK-NEXT: [[TMP8:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
// CHECK-NEXT: [[DOTADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR]] to ptr
// CHECK-NEXT: [[DOTADDR1_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR1]] to ptr
// CHECK-NEXT: [[DOTADDR2_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR2]] to ptr
// CHECK-NEXT: [[DOTADDR3_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR3]] to ptr
// CHECK-NEXT: [[DOTADDR4_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR4]] to ptr
// CHECK-NEXT: [[DOTADDR5_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR5]] to ptr
// CHECK-NEXT: [[DOTADDR6_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTADDR6]] to ptr
// CHECK-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 8 [[TMP8]], ptr addrspace(4) align 8 [[TMP7]], i64 16, i1 false)
// CHECK-NEXT: store i64 [[TMP0]], ptr [[DOTADDR_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR]], [[META689:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META697:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP1]], ptr [[DOTADDR1_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR1]], [[META690:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META698:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP2]], ptr [[DOTADDR2_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR2]], [[META691:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META699:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP3]], ptr [[DOTADDR3_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR3]], [[META692:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META700:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP4]], ptr [[DOTADDR4_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR4]], [[META693:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META701:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP5]], ptr [[DOTADDR5_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR5]], [[META694:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META702:![0-9]+]])
// CHECK-NEXT: store i64 [[TMP6]], ptr [[DOTADDR6_ASCAST]], align 8
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[DOTADDR6]], [[META695:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i64)), [[META703:![0-9]+]])
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[COERCE]], [[META696:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_STRUCTMULTIPLEELEMENTS]])), [[META704:![0-9]+]])
// CHECK-NEXT: ret void, !dbg [[DBG705:![0-9]+]]
//
__global__ void Test_Kern_ParamRegLimitUnexpandedStruct(int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, StructMultipleElements) {}
//.
// CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: [[META1:![0-9]+]], producer: "{{.*}}clang version {{.*}}", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: [[META2:![0-9]+]], splitDebugInlining: false, nameTableKind: None)
// CHECK: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: {{.*}})
// CHECK: [[META2]] = !{[[META3:![0-9]+]], [[META7:![0-9]+]], [[META9:![0-9]+]], [[META11:![0-9]+]], [[META13:![0-9]+]], [[META15:![0-9]+]], [[META17:![0-9]+]], [[META19:![0-9]+]]}
// CHECK: [[META3]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "EnumInt8T", file: [[META4:![0-9]+]], line: 65, baseType: [[META5:![0-9]+]], size: 8, elements: [[META6:![0-9]+]], identifier: "_ZTS9EnumInt8T")
// CHECK: [[META4]] = !DIFile(filename: "{{.*}}debug-info-amdgcn-abi-heterogeneous-dwarf.hip", directory: {{.*}})
// CHECK: [[META5]] = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
// CHECK: [[META6]] = !{}
// CHECK: [[META7]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "EnumUInt8T", file: [[META4]], line: 66, baseType: [[META8:![0-9]+]], size: 8, elements: [[META6]], identifier: "_ZTS10EnumUInt8T")
// CHECK: [[META8]] = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char)
// CHECK: [[META9]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "EnumInt16T", file: [[META4]], line: 67, baseType: [[META10:![0-9]+]], size: 16, elements: [[META6]], identifier: "_ZTS10EnumInt16T")
// CHECK: [[META10]] = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed)
// CHECK: [[META11]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "EnumUInt16T", file: [[META4]], line: 68, baseType: [[META12:![0-9]+]], size: 16, elements: [[META6]], identifier: "_ZTS11EnumUInt16T")
// CHECK: [[META12]] = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned)
// CHECK: [[META13]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "EnumInt32T", file: [[META4]], line: 69, baseType: [[META14:![0-9]+]], size: 32, elements: [[META6]], identifier: "_ZTS10EnumInt32T")
// CHECK: [[META14]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
// CHECK: [[META15]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "EnumUInt32T", file: [[META4]], line: 70, baseType: [[META16:![0-9]+]], size: 32, elements: [[META6]], identifier: "_ZTS11EnumUInt32T")
// CHECK: [[META16]] = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
// CHECK: [[META17]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "EnumInt64T", file: [[META4]], line: 71, baseType: [[META18:![0-9]+]], size: 64, elements: [[META6]], identifier: "_ZTS10EnumInt64T")
// CHECK: [[META18]] = !DIBasicType(name: "long", size: 64, encoding: DW_ATE_signed)
// CHECK: [[META19]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "EnumUInt64T", file: [[META4]], line: 72, baseType: [[META20:![0-9]+]], size: 64, elements: [[META6]], identifier: "_ZTS11EnumUInt64T")
// CHECK: [[META20]] = !DIBasicType(name: "unsigned long", size: 64, encoding: DW_ATE_unsigned)
// CHECK: [[DBG26]] = distinct !DISubprogram(name: "Test_Func_StructEmpty", linkageName: "_Z21Test_Func_StructEmpty11StructEmpty", scope: [[META4]], file: [[META4]], line: 93, type: [[META27:![0-9]+]], scopeLine: 93, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META30:![0-9]+]])
// CHECK: [[META27]] = !DISubroutineType(types: [[META28:![0-9]+]])
// CHECK: [[META28]] = !{null, [[META29:![0-9]+]]}
// CHECK: [[META29]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructEmpty", file: [[META4]], line: 32, size: 8, flags: DIFlagTypePassByValue, elements: [[META6]], identifier: "_ZTS11StructEmpty")
// CHECK: [[META30]] = !{[[META31]]}
// CHECK: [[META31]] = !DILocalVariable(arg: 1, scope: [[DBG26]], file: [[META4]], line: 93, type: [[META29]])
// CHECK: [[META32]] = !DILocation(line: 93, column: 50, scope: [[DBG26]])
// CHECK: [[DBG33]] = !DILocation(line: 93, column: 53, scope: [[DBG26]])
// CHECK: [[DBG34]] = distinct !DISubprogram(name: "Test_Kern_StructEmpty", linkageName: "_Z21Test_Kern_StructEmpty11StructEmpty", scope: [[META4]], file: [[META4]], line: 103, type: [[META27]], scopeLine: 103, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META35:![0-9]+]])
// CHECK: [[META35]] = !{[[META36]]}
// CHECK: [[META36]] = !DILocalVariable(arg: 1, scope: [[DBG34]], file: [[META4]], line: 103, type: [[META29]])
// CHECK: [[META37]] = !DILocation(line: 103, column: 50, scope: [[DBG34]])
// CHECK: [[DBG38]] = !DILocation(line: 103, column: 53, scope: [[DBG34]])
// CHECK: [[DBG39]] = distinct !DISubprogram(name: "Test_Func_StructSingleElement", linkageName: "_Z29Test_Func_StructSingleElement19StructSingleElement", scope: [[META4]], file: [[META4]], line: 114, type: [[META40:![0-9]+]], scopeLine: 114, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META45:![0-9]+]])
// CHECK: [[META40]] = !DISubroutineType(types: [[META41:![0-9]+]])
// CHECK: [[META41]] = !{null, [[META42:![0-9]+]]}
// CHECK: [[META42]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructSingleElement", file: [[META4]], line: 33, size: 8, flags: DIFlagTypePassByValue, elements: [[META43:![0-9]+]], identifier: "_ZTS19StructSingleElement")
// CHECK: [[META43]] = !{[[META44:![0-9]+]]}
// CHECK: [[META44]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META42]], file: [[META4]], line: 34, baseType: [[META5]], size: 8)
// CHECK: [[META45]] = !{[[META46]]}
// CHECK: [[META46]] = !DILocalVariable(arg: 1, scope: [[DBG39]], file: [[META4]], line: 114, type: [[META42]])
// CHECK: [[META47]] = !DILocation(line: 114, column: 66, scope: [[DBG39]])
// CHECK: [[DBG48]] = !DILocation(line: 114, column: 69, scope: [[DBG39]])
// CHECK: [[DBG49]] = distinct !DISubprogram(name: "Test_Kern_StructSingleElement", linkageName: "_Z29Test_Kern_StructSingleElement19StructSingleElement", scope: [[META4]], file: [[META4]], line: 125, type: [[META40]], scopeLine: 125, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META50:![0-9]+]])
// CHECK: [[META50]] = !{[[META51]]}
// CHECK: [[META51]] = !DILocalVariable(arg: 1, scope: [[DBG49]], file: [[META4]], line: 125, type: [[META42]])
// CHECK: [[META52]] = !DILocation(line: 125, column: 66, scope: [[DBG49]])
// CHECK: [[DBG53]] = !DILocation(line: 125, column: 69, scope: [[DBG49]])
// CHECK: [[DBG54]] = distinct !DISubprogram(name: "Test_Func_StructSingleElementRecursive", linkageName: "_Z38Test_Func_StructSingleElementRecursive28StructSingleElementRecursive", scope: [[META4]], file: [[META4]], line: 137, type: [[META55:![0-9]+]], scopeLine: 137, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META60:![0-9]+]])
// CHECK: [[META55]] = !DISubroutineType(types: [[META56:![0-9]+]])
// CHECK: [[META56]] = !{null, [[META57:![0-9]+]]}
// CHECK: [[META57]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructSingleElementRecursive", file: [[META4]], line: 36, size: 8, flags: DIFlagTypePassByValue, elements: [[META58:![0-9]+]], identifier: "_ZTS28StructSingleElementRecursive")
// CHECK: [[META58]] = !{[[META59:![0-9]+]]}
// CHECK: [[META59]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META57]], file: [[META4]], line: 37, baseType: [[META42]], size: 8)
// CHECK: [[META60]] = !{[[META61]]}
// CHECK: [[META61]] = !DILocalVariable(arg: 1, scope: [[DBG54]], file: [[META4]], line: 137, type: [[META57]])
// CHECK: [[META62]] = !DILocation(line: 137, column: 84, scope: [[DBG54]])
// CHECK: [[DBG63]] = !DILocation(line: 137, column: 87, scope: [[DBG54]])
// CHECK: [[DBG64]] = distinct !DISubprogram(name: "Test_Kern_StructSingleElementRecursive", linkageName: "_Z38Test_Kern_StructSingleElementRecursive28StructSingleElementRecursive", scope: [[META4]], file: [[META4]], line: 149, type: [[META55]], scopeLine: 149, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META65:![0-9]+]])
// CHECK: [[META65]] = !{[[META66]]}
// CHECK: [[META66]] = !DILocalVariable(arg: 1, scope: [[DBG64]], file: [[META4]], line: 149, type: [[META57]])
// CHECK: [[META67]] = !DILocation(line: 149, column: 84, scope: [[DBG64]])
// CHECK: [[DBG68]] = !DILocation(line: 149, column: 87, scope: [[DBG64]])
// CHECK: [[DBG69]] = distinct !DISubprogram(name: "Test_Func_StructTrivialCopyTrivialMove", linkageName: "_Z38Test_Func_StructTrivialCopyTrivialMove28StructTrivialCopyTrivialMove", scope: [[META4]], file: [[META4]], line: 160, type: [[META70:![0-9]+]], scopeLine: 160, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META85:![0-9]+]])
// CHECK: [[META70]] = !DISubroutineType(types: [[META71:![0-9]+]])
// CHECK: [[META71]] = !{null, [[META72:![0-9]+]]}
// CHECK: [[META72]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructTrivialCopyTrivialMove", file: [[META4]], line: 39, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: [[META73:![0-9]+]], identifier: "_ZTS28StructTrivialCopyTrivialMove")
// CHECK: [[META73]] = !{[[META74:![0-9]+]], [[META75:![0-9]+]], [[META81:![0-9]+]]}
// CHECK: [[META74]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META72]], file: [[META4]], line: 40, baseType: [[META5]], size: 8)
// CHECK: [[META75]] = !DISubprogram(name: "StructTrivialCopyTrivialMove", linkageName: "_ZN28StructTrivialCopyTrivialMoveC4ERKS_", scope: [[META72]], file: [[META4]], line: 41, type: [[META76:![0-9]+]], scopeLine: 41, flags: DIFlagPrototyped, spFlags: 0)
// CHECK: [[META76]] = !DISubroutineType(types: [[META77:![0-9]+]])
// CHECK: [[META77]] = !{null, [[META78:![0-9]+]], [[META79:![0-9]+]]}
// CHECK: [[META78]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META72]], size: 64, flags: DIFlagArtificial | DIFlagObjectPointer, addressSpace: 1)
// CHECK: [[META79]] = !DIDerivedType(tag: DW_TAG_reference_type, baseType: [[META80:![0-9]+]], size: 64, addressSpace: 1)
// CHECK: [[META80]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: [[META72]])
// CHECK: [[META81]] = !DISubprogram(name: "StructTrivialCopyTrivialMove", linkageName: "_ZN28StructTrivialCopyTrivialMoveC4EOS_", scope: [[META72]], file: [[META4]], line: 42, type: [[META82:![0-9]+]], scopeLine: 42, flags: DIFlagPrototyped, spFlags: 0)
// CHECK: [[META82]] = !DISubroutineType(types: [[META83:![0-9]+]])
// CHECK: [[META83]] = !{null, [[META78]], [[META84:![0-9]+]]}
// CHECK: [[META84]] = !DIDerivedType(tag: DW_TAG_rvalue_reference_type, baseType: [[META72]], size: 64, addressSpace: 1)
// CHECK: [[META85]] = !{[[META86]]}
// CHECK: [[META86]] = !DILocalVariable(arg: 1, scope: [[DBG69]], file: [[META4]], line: 160, type: [[META72]])
// CHECK: [[META87]] = !DILocation(line: 160, column: 84, scope: [[DBG69]])
// CHECK: [[DBG88]] = !DILocation(line: 160, column: 87, scope: [[DBG69]])
// CHECK: [[DBG89]] = distinct !DISubprogram(name: "Test_Kern_StructTrivialCopyTrivialMove", linkageName: "_Z38Test_Kern_StructTrivialCopyTrivialMove28StructTrivialCopyTrivialMove", scope: [[META4]], file: [[META4]], line: 171, type: [[META70]], scopeLine: 171, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META90:![0-9]+]])
// CHECK: [[META90]] = !{[[META91]]}
// CHECK: [[META91]] = !DILocalVariable(arg: 1, scope: [[DBG89]], file: [[META4]], line: 171, type: [[META72]])
// CHECK: [[META92]] = !DILocation(line: 171, column: 84, scope: [[DBG89]])
// CHECK: [[DBG93]] = !DILocation(line: 171, column: 87, scope: [[DBG89]])
// CHECK: [[DBG94]] = distinct !DISubprogram(name: "Test_Func_StructNoCopyTrivialMove", linkageName: "_Z33Test_Func_StructNoCopyTrivialMove23StructNoCopyTrivialMove", scope: [[META4]], file: [[META4]], line: 182, type: [[META95:![0-9]+]], scopeLine: 182, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META110:![0-9]+]])
// CHECK: [[META95]] = !DISubroutineType(types: [[META96:![0-9]+]])
// CHECK: [[META96]] = !{null, [[META97:![0-9]+]]}
// CHECK: [[META97]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructNoCopyTrivialMove", file: [[META4]], line: 44, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: [[META98:![0-9]+]], identifier: "_ZTS23StructNoCopyTrivialMove")
// CHECK: [[META98]] = !{[[META99:![0-9]+]], [[META100:![0-9]+]], [[META106:![0-9]+]]}
// CHECK: [[META99]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META97]], file: [[META4]], line: 45, baseType: [[META5]], size: 8)
// CHECK: [[META100]] = !DISubprogram(name: "StructNoCopyTrivialMove", linkageName: "_ZN23StructNoCopyTrivialMoveC4ERKS_", scope: [[META97]], file: [[META4]], line: 46, type: [[META101:![0-9]+]], scopeLine: 46, flags: DIFlagPrototyped, spFlags: DISPFlagDeleted)
// CHECK: [[META101]] = !DISubroutineType(types: [[META102:![0-9]+]])
// CHECK: [[META102]] = !{null, [[META103:![0-9]+]], [[META104:![0-9]+]]}
// CHECK: [[META103]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META97]], size: 64, flags: DIFlagArtificial | DIFlagObjectPointer, addressSpace: 1)
// CHECK: [[META104]] = !DIDerivedType(tag: DW_TAG_reference_type, baseType: [[META105:![0-9]+]], size: 64, addressSpace: 1)
// CHECK: [[META105]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: [[META97]])
// CHECK: [[META106]] = !DISubprogram(name: "StructNoCopyTrivialMove", linkageName: "_ZN23StructNoCopyTrivialMoveC4EOS_", scope: [[META97]], file: [[META4]], line: 47, type: [[META107:![0-9]+]], scopeLine: 47, flags: DIFlagPrototyped, spFlags: 0)
// CHECK: [[META107]] = !DISubroutineType(types: [[META108:![0-9]+]])
// CHECK: [[META108]] = !{null, [[META103]], [[META109:![0-9]+]]}
// CHECK: [[META109]] = !DIDerivedType(tag: DW_TAG_rvalue_reference_type, baseType: [[META97]], size: 64, addressSpace: 1)
// CHECK: [[META110]] = !{[[META111]]}
// CHECK: [[META111]] = !DILocalVariable(arg: 1, scope: [[DBG94]], file: [[META4]], line: 182, type: [[META97]])
// CHECK: [[META112]] = !DILocation(line: 182, column: 74, scope: [[DBG94]])
// CHECK: [[DBG113]] = !DILocation(line: 182, column: 77, scope: [[DBG94]])
// CHECK: [[DBG114]] = distinct !DISubprogram(name: "Test_Kern_StructNoCopyTrivialMove", linkageName: "_Z33Test_Kern_StructNoCopyTrivialMove23StructNoCopyTrivialMove", scope: [[META4]], file: [[META4]], line: 193, type: [[META95]], scopeLine: 193, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META115:![0-9]+]])
// CHECK: [[META115]] = !{[[META116]]}
// CHECK: [[META116]] = !DILocalVariable(arg: 1, scope: [[DBG114]], file: [[META4]], line: 193, type: [[META97]])
// CHECK: [[META117]] = !DILocation(line: 193, column: 74, scope: [[DBG114]])
// CHECK: [[DBG118]] = !DILocation(line: 193, column: 77, scope: [[DBG114]])
// CHECK: [[DBG119]] = distinct !DISubprogram(name: "Test_Func_StructTrivialCopyNoMove", linkageName: "_Z33Test_Func_StructTrivialCopyNoMove23StructTrivialCopyNoMove", scope: [[META4]], file: [[META4]], line: 204, type: [[META120:![0-9]+]], scopeLine: 204, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META135:![0-9]+]])
// CHECK: [[META120]] = !DISubroutineType(types: [[META121:![0-9]+]])
// CHECK: [[META121]] = !{null, [[META122:![0-9]+]]}
// CHECK: [[META122]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructTrivialCopyNoMove", file: [[META4]], line: 49, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: [[META123:![0-9]+]], identifier: "_ZTS23StructTrivialCopyNoMove")
// CHECK: [[META123]] = !{[[META124:![0-9]+]], [[META125:![0-9]+]], [[META131:![0-9]+]]}
// CHECK: [[META124]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META122]], file: [[META4]], line: 50, baseType: [[META5]], size: 8)
// CHECK: [[META125]] = !DISubprogram(name: "StructTrivialCopyNoMove", linkageName: "_ZN23StructTrivialCopyNoMoveC4ERKS_", scope: [[META122]], file: [[META4]], line: 51, type: [[META126:![0-9]+]], scopeLine: 51, flags: DIFlagPrototyped, spFlags: 0)
// CHECK: [[META126]] = !DISubroutineType(types: [[META127:![0-9]+]])
// CHECK: [[META127]] = !{null, [[META128:![0-9]+]], [[META129:![0-9]+]]}
// CHECK: [[META128]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META122]], size: 64, flags: DIFlagArtificial | DIFlagObjectPointer, addressSpace: 1)
// CHECK: [[META129]] = !DIDerivedType(tag: DW_TAG_reference_type, baseType: [[META130:![0-9]+]], size: 64, addressSpace: 1)
// CHECK: [[META130]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: [[META122]])
// CHECK: [[META131]] = !DISubprogram(name: "StructTrivialCopyNoMove", linkageName: "_ZN23StructTrivialCopyNoMoveC4EOS_", scope: [[META122]], file: [[META4]], line: 52, type: [[META132:![0-9]+]], scopeLine: 52, flags: DIFlagPrototyped, spFlags: DISPFlagDeleted)
// CHECK: [[META132]] = !DISubroutineType(types: [[META133:![0-9]+]])
// CHECK: [[META133]] = !{null, [[META128]], [[META134:![0-9]+]]}
// CHECK: [[META134]] = !DIDerivedType(tag: DW_TAG_rvalue_reference_type, baseType: [[META122]], size: 64, addressSpace: 1)
// CHECK: [[META135]] = !{[[META136]]}
// CHECK: [[META136]] = !DILocalVariable(arg: 1, scope: [[DBG119]], file: [[META4]], line: 204, type: [[META122]])
// CHECK: [[META137]] = !DILocation(line: 204, column: 74, scope: [[DBG119]])
// CHECK: [[DBG138]] = !DILocation(line: 204, column: 77, scope: [[DBG119]])
// CHECK: [[DBG139]] = distinct !DISubprogram(name: "Test_Kern_StructTrivialCopyNoMove", linkageName: "_Z33Test_Kern_StructTrivialCopyNoMove23StructTrivialCopyNoMove", scope: [[META4]], file: [[META4]], line: 215, type: [[META120]], scopeLine: 215, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META140:![0-9]+]])
// CHECK: [[META140]] = !{[[META141]]}
// CHECK: [[META141]] = !DILocalVariable(arg: 1, scope: [[DBG139]], file: [[META4]], line: 215, type: [[META122]])
// CHECK: [[META142]] = !DILocation(line: 215, column: 74, scope: [[DBG139]])
// CHECK: [[DBG143]] = !DILocation(line: 215, column: 77, scope: [[DBG139]])
// CHECK: [[DBG144]] = distinct !DISubprogram(name: "Test_Func_StructNoCopyNoMove", linkageName: "_Z28Test_Func_StructNoCopyNoMove18StructNoCopyNoMove", scope: [[META4]], file: [[META4]], line: 226, type: [[META145:![0-9]+]], scopeLine: 226, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META160:![0-9]+]])
// CHECK: [[META145]] = !DISubroutineType(types: [[META146:![0-9]+]])
// CHECK: [[META146]] = !{null, [[META147:![0-9]+]]}
// CHECK: [[META147]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructNoCopyNoMove", file: [[META4]], line: 54, size: 8, flags: DIFlagTypePassByReference | DIFlagNonTrivial, elements: [[META148:![0-9]+]], identifier: "_ZTS18StructNoCopyNoMove")
// CHECK: [[META148]] = !{[[META149:![0-9]+]], [[META150:![0-9]+]], [[META156:![0-9]+]]}
// CHECK: [[META149]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META147]], file: [[META4]], line: 55, baseType: [[META5]], size: 8)
// CHECK: [[META150]] = !DISubprogram(name: "StructNoCopyNoMove", linkageName: "_ZN18StructNoCopyNoMoveC4ERKS_", scope: [[META147]], file: [[META4]], line: 56, type: [[META151:![0-9]+]], scopeLine: 56, flags: DIFlagPrototyped, spFlags: DISPFlagDeleted)
// CHECK: [[META151]] = !DISubroutineType(types: [[META152:![0-9]+]])
// CHECK: [[META152]] = !{null, [[META153:![0-9]+]], [[META154:![0-9]+]]}
// CHECK: [[META153]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META147]], size: 64, flags: DIFlagArtificial | DIFlagObjectPointer, addressSpace: 1)
// CHECK: [[META154]] = !DIDerivedType(tag: DW_TAG_reference_type, baseType: [[META155:![0-9]+]], size: 64, addressSpace: 1)
// CHECK: [[META155]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: [[META147]])
// CHECK: [[META156]] = !DISubprogram(name: "StructNoCopyNoMove", linkageName: "_ZN18StructNoCopyNoMoveC4EOS_", scope: [[META147]], file: [[META4]], line: 57, type: [[META157:![0-9]+]], scopeLine: 57, flags: DIFlagPrototyped, spFlags: DISPFlagDeleted)
// CHECK: [[META157]] = !DISubroutineType(types: [[META158:![0-9]+]])
// CHECK: [[META158]] = !{null, [[META153]], [[META159:![0-9]+]]}
// CHECK: [[META159]] = !DIDerivedType(tag: DW_TAG_rvalue_reference_type, baseType: [[META147]], size: 64, addressSpace: 1)
// CHECK: [[META160]] = !{[[META161]]}
// CHECK: [[META161]] = !DILocalVariable(arg: 1, scope: [[DBG144]], file: [[META4]], line: 226, type: [[META147]])
// CHECK: [[META162]] = !DILocation(line: 226, column: 64, scope: [[DBG144]])
// CHECK: [[DBG163]] = !DILocation(line: 226, column: 67, scope: [[DBG144]])
// CHECK: [[DBG164]] = distinct !DISubprogram(name: "Test_Kern_StructNoCopyNoMove", linkageName: "_Z28Test_Kern_StructNoCopyNoMove18StructNoCopyNoMove", scope: [[META4]], file: [[META4]], line: 237, type: [[META145]], scopeLine: 237, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META165:![0-9]+]])
// CHECK: [[META165]] = !{[[META166]]}
// CHECK: [[META166]] = !DILocalVariable(arg: 1, scope: [[DBG164]], file: [[META4]], line: 237, type: [[META147]])
// CHECK: [[META167]] = !DILocation(line: 237, column: 64, scope: [[DBG164]])
// CHECK: [[DBG168]] = !DILocation(line: 237, column: 67, scope: [[DBG164]])
// CHECK: [[DBG169]] = distinct !DISubprogram(name: "Test_Func_Struct2Bytes", linkageName: "_Z22Test_Func_Struct2Bytes12StructNBytesILj2EE", scope: [[META4]], file: [[META4]], line: 247, type: [[META170:![0-9]+]], scopeLine: 247, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META181:![0-9]+]])
// CHECK: [[META170]] = !DISubroutineType(types: [[META171:![0-9]+]])
// CHECK: [[META171]] = !{null, [[META172:![0-9]+]]}
// CHECK: [[META172]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructNBytes<2U>", file: [[META4]], line: 60, size: 16, flags: DIFlagTypePassByValue, elements: [[META173:![0-9]+]], templateParams: [[META179:![0-9]+]], identifier: "_ZTS12StructNBytesILj2EE")
// CHECK: [[META173]] = !{[[META174:![0-9]+]], [[META175:![0-9]+]]}
// CHECK: [[META174]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META172]], file: [[META4]], line: 62, baseType: [[META5]], size: 8)
// CHECK: [[META175]] = !DIDerivedType(tag: DW_TAG_member, name: "Elements", scope: [[META172]], file: [[META4]], line: 63, baseType: [[META176:![0-9]+]], size: 8, offset: 8)
// CHECK: [[META176]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[META5]], size: 8, elements: [[META177:![0-9]+]])
// CHECK: [[META177]] = !{[[META178:![0-9]+]]}
// CHECK: [[META178]] = !DISubrange(count: 1)
// CHECK: [[META179]] = !{[[META180:![0-9]+]]}
// CHECK: [[META180]] = !DITemplateValueParameter(name: "N", type: [[META16]], value: i32 2)
// CHECK: [[META181]] = !{[[META182]]}
// CHECK: [[META182]] = !DILocalVariable(arg: 1, scope: [[DBG169]], file: [[META4]], line: 247, type: [[META172]])
// CHECK: [[META183]] = !DILocation(line: 247, column: 55, scope: [[DBG169]])
// CHECK: [[DBG184]] = !DILocation(line: 247, column: 58, scope: [[DBG169]])
// CHECK: [[DBG185]] = distinct !DISubprogram(name: "Test_Kern_Struct2Bytes", linkageName: "_Z22Test_Kern_Struct2Bytes12StructNBytesILj2EE", scope: [[META4]], file: [[META4]], line: 257, type: [[META170]], scopeLine: 257, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META186:![0-9]+]])
// CHECK: [[META186]] = !{[[META187]]}
// CHECK: [[META187]] = !DILocalVariable(arg: 1, scope: [[DBG185]], file: [[META4]], line: 257, type: [[META172]])
// CHECK: [[META188]] = !DILocation(line: 257, column: 55, scope: [[DBG185]])
// CHECK: [[DBG189]] = !DILocation(line: 257, column: 58, scope: [[DBG185]])
// CHECK: [[DBG190]] = distinct !DISubprogram(name: "Test_Func_Struct3Bytes", linkageName: "_Z22Test_Func_Struct3Bytes12StructNBytesILj3EE", scope: [[META4]], file: [[META4]], line: 268, type: [[META191:![0-9]+]], scopeLine: 268, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META202:![0-9]+]])
// CHECK: [[META191]] = !DISubroutineType(types: [[META192:![0-9]+]])
// CHECK: [[META192]] = !{null, [[META193:![0-9]+]]}
// CHECK: [[META193]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructNBytes<3U>", file: [[META4]], line: 60, size: 24, flags: DIFlagTypePassByValue, elements: [[META194:![0-9]+]], templateParams: [[META200:![0-9]+]], identifier: "_ZTS12StructNBytesILj3EE")
// CHECK: [[META194]] = !{[[META195:![0-9]+]], [[META196:![0-9]+]]}
// CHECK: [[META195]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META193]], file: [[META4]], line: 62, baseType: [[META5]], size: 8)
// CHECK: [[META196]] = !DIDerivedType(tag: DW_TAG_member, name: "Elements", scope: [[META193]], file: [[META4]], line: 63, baseType: [[META197:![0-9]+]], size: 16, offset: 8)
// CHECK: [[META197]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[META5]], size: 16, elements: [[META198:![0-9]+]])
// CHECK: [[META198]] = !{[[META199:![0-9]+]]}
// CHECK: [[META199]] = !DISubrange(count: 2)
// CHECK: [[META200]] = !{[[META201:![0-9]+]]}
// CHECK: [[META201]] = !DITemplateValueParameter(name: "N", type: [[META16]], value: i32 3)
// CHECK: [[META202]] = !{[[META203]]}
// CHECK: [[META203]] = !DILocalVariable(arg: 1, scope: [[DBG190]], file: [[META4]], line: 268, type: [[META193]])
// CHECK: [[META204]] = !DILocation(line: 268, column: 55, scope: [[DBG190]])
// CHECK: [[DBG205]] = !DILocation(line: 268, column: 58, scope: [[DBG190]])
// CHECK: [[DBG206]] = distinct !DISubprogram(name: "Test_Kern_Struct3Bytes", linkageName: "_Z22Test_Kern_Struct3Bytes12StructNBytesILj3EE", scope: [[META4]], file: [[META4]], line: 278, type: [[META191]], scopeLine: 278, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META207:![0-9]+]])
// CHECK: [[META207]] = !{[[META208]]}
// CHECK: [[META208]] = !DILocalVariable(arg: 1, scope: [[DBG206]], file: [[META4]], line: 278, type: [[META193]])
// CHECK: [[META209]] = !DILocation(line: 278, column: 55, scope: [[DBG206]])
// CHECK: [[DBG210]] = !DILocation(line: 278, column: 58, scope: [[DBG206]])
// CHECK: [[DBG211]] = distinct !DISubprogram(name: "Test_Func_Struct4Bytes", linkageName: "_Z22Test_Func_Struct4Bytes12StructNBytesILj4EE", scope: [[META4]], file: [[META4]], line: 288, type: [[META212:![0-9]+]], scopeLine: 288, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META223:![0-9]+]])
// CHECK: [[META212]] = !DISubroutineType(types: [[META213:![0-9]+]])
// CHECK: [[META213]] = !{null, [[META214:![0-9]+]]}
// CHECK: [[META214]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructNBytes<4U>", file: [[META4]], line: 60, size: 32, flags: DIFlagTypePassByValue, elements: [[META215:![0-9]+]], templateParams: [[META221:![0-9]+]], identifier: "_ZTS12StructNBytesILj4EE")
// CHECK: [[META215]] = !{[[META216:![0-9]+]], [[META217:![0-9]+]]}
// CHECK: [[META216]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META214]], file: [[META4]], line: 62, baseType: [[META5]], size: 8)
// CHECK: [[META217]] = !DIDerivedType(tag: DW_TAG_member, name: "Elements", scope: [[META214]], file: [[META4]], line: 63, baseType: [[META218:![0-9]+]], size: 24, offset: 8)
// CHECK: [[META218]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[META5]], size: 24, elements: [[META219:![0-9]+]])
// CHECK: [[META219]] = !{[[META220:![0-9]+]]}
// CHECK: [[META220]] = !DISubrange(count: 3)
// CHECK: [[META221]] = !{[[META222:![0-9]+]]}
// CHECK: [[META222]] = !DITemplateValueParameter(name: "N", type: [[META16]], value: i32 4)
// CHECK: [[META223]] = !{[[META224]]}
// CHECK: [[META224]] = !DILocalVariable(arg: 1, scope: [[DBG211]], file: [[META4]], line: 288, type: [[META214]])
// CHECK: [[META225]] = !DILocation(line: 288, column: 55, scope: [[DBG211]])
// CHECK: [[DBG226]] = !DILocation(line: 288, column: 58, scope: [[DBG211]])
// CHECK: [[DBG227]] = distinct !DISubprogram(name: "Test_Kern_Struct4Bytes", linkageName: "_Z22Test_Kern_Struct4Bytes12StructNBytesILj4EE", scope: [[META4]], file: [[META4]], line: 298, type: [[META212]], scopeLine: 298, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META228:![0-9]+]])
// CHECK: [[META228]] = !{[[META229]]}
// CHECK: [[META229]] = !DILocalVariable(arg: 1, scope: [[DBG227]], file: [[META4]], line: 298, type: [[META214]])
// CHECK: [[META230]] = !DILocation(line: 298, column: 55, scope: [[DBG227]])
// CHECK: [[DBG231]] = !DILocation(line: 298, column: 58, scope: [[DBG227]])
// CHECK: [[DBG232]] = distinct !DISubprogram(name: "Test_Func_Struct5Bytes", linkageName: "_Z22Test_Func_Struct5Bytes12StructNBytesILj5EE", scope: [[META4]], file: [[META4]], line: 311, type: [[META233:![0-9]+]], scopeLine: 311, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META244:![0-9]+]])
// CHECK: [[META233]] = !DISubroutineType(types: [[META234:![0-9]+]])
// CHECK: [[META234]] = !{null, [[META235:![0-9]+]]}
// CHECK: [[META235]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructNBytes<5U>", file: [[META4]], line: 60, size: 40, flags: DIFlagTypePassByValue, elements: [[META236:![0-9]+]], templateParams: [[META242:![0-9]+]], identifier: "_ZTS12StructNBytesILj5EE")
// CHECK: [[META236]] = !{[[META237:![0-9]+]], [[META238:![0-9]+]]}
// CHECK: [[META237]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META235]], file: [[META4]], line: 62, baseType: [[META5]], size: 8)
// CHECK: [[META238]] = !DIDerivedType(tag: DW_TAG_member, name: "Elements", scope: [[META235]], file: [[META4]], line: 63, baseType: [[META239:![0-9]+]], size: 32, offset: 8)
// CHECK: [[META239]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[META5]], size: 32, elements: [[META240:![0-9]+]])
// CHECK: [[META240]] = !{[[META241:![0-9]+]]}
// CHECK: [[META241]] = !DISubrange(count: 4)
// CHECK: [[META242]] = !{[[META243:![0-9]+]]}
// CHECK: [[META243]] = !DITemplateValueParameter(name: "N", type: [[META16]], value: i32 5)
// CHECK: [[META244]] = !{[[META245]]}
// CHECK: [[META245]] = !DILocalVariable(arg: 1, scope: [[DBG232]], file: [[META4]], line: 311, type: [[META235]])
// CHECK: [[META246]] = !DILocation(line: 311, column: 55, scope: [[DBG232]])
// CHECK: [[DBG247]] = !DILocation(line: 311, column: 58, scope: [[DBG232]])
// CHECK: [[DBG248]] = distinct !DISubprogram(name: "Test_Kern_Struct5Bytes", linkageName: "_Z22Test_Kern_Struct5Bytes12StructNBytesILj5EE", scope: [[META4]], file: [[META4]], line: 321, type: [[META233]], scopeLine: 321, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META249:![0-9]+]])
// CHECK: [[META249]] = !{[[META250]]}
// CHECK: [[META250]] = !DILocalVariable(arg: 1, scope: [[DBG248]], file: [[META4]], line: 321, type: [[META235]])
// CHECK: [[META251]] = !DILocation(line: 321, column: 55, scope: [[DBG248]])
// CHECK: [[DBG252]] = !DILocation(line: 321, column: 58, scope: [[DBG248]])
// CHECK: [[DBG253]] = distinct !DISubprogram(name: "Test_Func_Struct6Bytes", linkageName: "_Z22Test_Func_Struct6Bytes12StructNBytesILj6EE", scope: [[META4]], file: [[META4]], line: 334, type: [[META254:![0-9]+]], scopeLine: 334, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META265:![0-9]+]])
// CHECK: [[META254]] = !DISubroutineType(types: [[META255:![0-9]+]])
// CHECK: [[META255]] = !{null, [[META256:![0-9]+]]}
// CHECK: [[META256]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructNBytes<6U>", file: [[META4]], line: 60, size: 48, flags: DIFlagTypePassByValue, elements: [[META257:![0-9]+]], templateParams: [[META263:![0-9]+]], identifier: "_ZTS12StructNBytesILj6EE")
// CHECK: [[META257]] = !{[[META258:![0-9]+]], [[META259:![0-9]+]]}
// CHECK: [[META258]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META256]], file: [[META4]], line: 62, baseType: [[META5]], size: 8)
// CHECK: [[META259]] = !DIDerivedType(tag: DW_TAG_member, name: "Elements", scope: [[META256]], file: [[META4]], line: 63, baseType: [[META260:![0-9]+]], size: 40, offset: 8)
// CHECK: [[META260]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[META5]], size: 40, elements: [[META261:![0-9]+]])
// CHECK: [[META261]] = !{[[META262:![0-9]+]]}
// CHECK: [[META262]] = !DISubrange(count: 5)
// CHECK: [[META263]] = !{[[META264:![0-9]+]]}
// CHECK: [[META264]] = !DITemplateValueParameter(name: "N", type: [[META16]], value: i32 6)
// CHECK: [[META265]] = !{[[META266]]}
// CHECK: [[META266]] = !DILocalVariable(arg: 1, scope: [[DBG253]], file: [[META4]], line: 334, type: [[META256]])
// CHECK: [[META267]] = !DILocation(line: 334, column: 55, scope: [[DBG253]])
// CHECK: [[DBG268]] = !DILocation(line: 334, column: 58, scope: [[DBG253]])
// CHECK: [[DBG269]] = distinct !DISubprogram(name: "Test_Kern_Struct6Bytes", linkageName: "_Z22Test_Kern_Struct6Bytes12StructNBytesILj6EE", scope: [[META4]], file: [[META4]], line: 344, type: [[META254]], scopeLine: 344, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META270:![0-9]+]])
// CHECK: [[META270]] = !{[[META271]]}
// CHECK: [[META271]] = !DILocalVariable(arg: 1, scope: [[DBG269]], file: [[META4]], line: 344, type: [[META256]])
// CHECK: [[META272]] = !DILocation(line: 344, column: 55, scope: [[DBG269]])
// CHECK: [[DBG273]] = !DILocation(line: 344, column: 58, scope: [[DBG269]])
// CHECK: [[DBG274]] = distinct !DISubprogram(name: "Test_Func_Struct7Bytes", linkageName: "_Z22Test_Func_Struct7Bytes12StructNBytesILj7EE", scope: [[META4]], file: [[META4]], line: 357, type: [[META275:![0-9]+]], scopeLine: 357, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META286:![0-9]+]])
// CHECK: [[META275]] = !DISubroutineType(types: [[META276:![0-9]+]])
// CHECK: [[META276]] = !{null, [[META277:![0-9]+]]}
// CHECK: [[META277]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructNBytes<7U>", file: [[META4]], line: 60, size: 56, flags: DIFlagTypePassByValue, elements: [[META278:![0-9]+]], templateParams: [[META284:![0-9]+]], identifier: "_ZTS12StructNBytesILj7EE")
// CHECK: [[META278]] = !{[[META279:![0-9]+]], [[META280:![0-9]+]]}
// CHECK: [[META279]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META277]], file: [[META4]], line: 62, baseType: [[META5]], size: 8)
// CHECK: [[META280]] = !DIDerivedType(tag: DW_TAG_member, name: "Elements", scope: [[META277]], file: [[META4]], line: 63, baseType: [[META281:![0-9]+]], size: 48, offset: 8)
// CHECK: [[META281]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[META5]], size: 48, elements: [[META282:![0-9]+]])
// CHECK: [[META282]] = !{[[META283:![0-9]+]]}
// CHECK: [[META283]] = !DISubrange(count: 6)
// CHECK: [[META284]] = !{[[META285:![0-9]+]]}
// CHECK: [[META285]] = !DITemplateValueParameter(name: "N", type: [[META16]], value: i32 7)
// CHECK: [[META286]] = !{[[META287]]}
// CHECK: [[META287]] = !DILocalVariable(arg: 1, scope: [[DBG274]], file: [[META4]], line: 357, type: [[META277]])
// CHECK: [[META288]] = !DILocation(line: 357, column: 55, scope: [[DBG274]])
// CHECK: [[DBG289]] = !DILocation(line: 357, column: 58, scope: [[DBG274]])
// CHECK: [[DBG290]] = distinct !DISubprogram(name: "Test_Kern_Struct7Bytes", linkageName: "_Z22Test_Kern_Struct7Bytes12StructNBytesILj7EE", scope: [[META4]], file: [[META4]], line: 367, type: [[META275]], scopeLine: 367, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META291:![0-9]+]])
// CHECK: [[META291]] = !{[[META292]]}
// CHECK: [[META292]] = !DILocalVariable(arg: 1, scope: [[DBG290]], file: [[META4]], line: 367, type: [[META277]])
// CHECK: [[META293]] = !DILocation(line: 367, column: 55, scope: [[DBG290]])
// CHECK: [[DBG294]] = !DILocation(line: 367, column: 58, scope: [[DBG290]])
// CHECK: [[DBG295]] = distinct !DISubprogram(name: "Test_Func_Struct8Bytes", linkageName: "_Z22Test_Func_Struct8Bytes12StructNBytesILj8EE", scope: [[META4]], file: [[META4]], line: 377, type: [[META296:![0-9]+]], scopeLine: 377, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META307:![0-9]+]])
// CHECK: [[META296]] = !DISubroutineType(types: [[META297:![0-9]+]])
// CHECK: [[META297]] = !{null, [[META298:![0-9]+]]}
// CHECK: [[META298]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructNBytes<8U>", file: [[META4]], line: 60, size: 64, flags: DIFlagTypePassByValue, elements: [[META299:![0-9]+]], templateParams: [[META305:![0-9]+]], identifier: "_ZTS12StructNBytesILj8EE")
// CHECK: [[META299]] = !{[[META300:![0-9]+]], [[META301:![0-9]+]]}
// CHECK: [[META300]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META298]], file: [[META4]], line: 62, baseType: [[META5]], size: 8)
// CHECK: [[META301]] = !DIDerivedType(tag: DW_TAG_member, name: "Elements", scope: [[META298]], file: [[META4]], line: 63, baseType: [[META302:![0-9]+]], size: 56, offset: 8)
// CHECK: [[META302]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[META5]], size: 56, elements: [[META303:![0-9]+]])
// CHECK: [[META303]] = !{[[META304:![0-9]+]]}
// CHECK: [[META304]] = !DISubrange(count: 7)
// CHECK: [[META305]] = !{[[META306:![0-9]+]]}
// CHECK: [[META306]] = !DITemplateValueParameter(name: "N", type: [[META16]], value: i32 8)
// CHECK: [[META307]] = !{[[META308]]}
// CHECK: [[META308]] = !DILocalVariable(arg: 1, scope: [[DBG295]], file: [[META4]], line: 377, type: [[META298]])
// CHECK: [[META309]] = !DILocation(line: 377, column: 55, scope: [[DBG295]])
// CHECK: [[DBG310]] = !DILocation(line: 377, column: 58, scope: [[DBG295]])
// CHECK: [[DBG311]] = distinct !DISubprogram(name: "Test_Kern_Struct8Bytes", linkageName: "_Z22Test_Kern_Struct8Bytes12StructNBytesILj8EE", scope: [[META4]], file: [[META4]], line: 387, type: [[META296]], scopeLine: 387, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META312:![0-9]+]])
// CHECK: [[META312]] = !{[[META313]]}
// CHECK: [[META313]] = !DILocalVariable(arg: 1, scope: [[DBG311]], file: [[META4]], line: 387, type: [[META298]])
// CHECK: [[META314]] = !DILocation(line: 387, column: 55, scope: [[DBG311]])
// CHECK: [[DBG315]] = !DILocation(line: 387, column: 58, scope: [[DBG311]])
// CHECK: [[DBG316]] = distinct !DISubprogram(name: "Test_Func_Struct9Bytes", linkageName: "_Z22Test_Func_Struct9Bytes12StructNBytesILj9EE", scope: [[META4]], file: [[META4]], line: 400, type: [[META317:![0-9]+]], scopeLine: 400, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META328:![0-9]+]])
// CHECK: [[META317]] = !DISubroutineType(types: [[META318:![0-9]+]])
// CHECK: [[META318]] = !{null, [[META319:![0-9]+]]}
// CHECK: [[META319]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructNBytes<9U>", file: [[META4]], line: 60, size: 72, flags: DIFlagTypePassByValue, elements: [[META320:![0-9]+]], templateParams: [[META326:![0-9]+]], identifier: "_ZTS12StructNBytesILj9EE")
// CHECK: [[META320]] = !{[[META321:![0-9]+]], [[META322:![0-9]+]]}
// CHECK: [[META321]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META319]], file: [[META4]], line: 62, baseType: [[META5]], size: 8)
// CHECK: [[META322]] = !DIDerivedType(tag: DW_TAG_member, name: "Elements", scope: [[META319]], file: [[META4]], line: 63, baseType: [[META323:![0-9]+]], size: 64, offset: 8)
// CHECK: [[META323]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[META5]], size: 64, elements: [[META324:![0-9]+]])
// CHECK: [[META324]] = !{[[META325:![0-9]+]]}
// CHECK: [[META325]] = !DISubrange(count: 8)
// CHECK: [[META326]] = !{[[META327:![0-9]+]]}
// CHECK: [[META327]] = !DITemplateValueParameter(name: "N", type: [[META16]], value: i32 9)
// CHECK: [[META328]] = !{[[META329]]}
// CHECK: [[META329]] = !DILocalVariable(arg: 1, scope: [[DBG316]], file: [[META4]], line: 400, type: [[META319]])
// CHECK: [[META330]] = !DILocation(line: 400, column: 55, scope: [[DBG316]])
// CHECK: [[DBG331]] = !DILocation(line: 400, column: 58, scope: [[DBG316]])
// CHECK: [[DBG332]] = distinct !DISubprogram(name: "Test_Kern_Struct9Bytes", linkageName: "_Z22Test_Kern_Struct9Bytes12StructNBytesILj9EE", scope: [[META4]], file: [[META4]], line: 410, type: [[META317]], scopeLine: 410, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META333:![0-9]+]])
// CHECK: [[META333]] = !{[[META334]]}
// CHECK: [[META334]] = !DILocalVariable(arg: 1, scope: [[DBG332]], file: [[META4]], line: 410, type: [[META319]])
// CHECK: [[META335]] = !DILocation(line: 410, column: 55, scope: [[DBG332]])
// CHECK: [[DBG336]] = !DILocation(line: 410, column: 58, scope: [[DBG332]])
// CHECK: [[DBG337]] = distinct !DISubprogram(name: "Test_Func_Struct64Bytes", linkageName: "_Z23Test_Func_Struct64Bytes12StructNBytesILj64EE", scope: [[META4]], file: [[META4]], line: 420, type: [[META338:![0-9]+]], scopeLine: 420, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META349:![0-9]+]])
// CHECK: [[META338]] = !DISubroutineType(types: [[META339:![0-9]+]])
// CHECK: [[META339]] = !{null, [[META340:![0-9]+]]}
// CHECK: [[META340]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructNBytes<64U>", file: [[META4]], line: 60, size: 512, flags: DIFlagTypePassByValue, elements: [[META341:![0-9]+]], templateParams: [[META347:![0-9]+]], identifier: "_ZTS12StructNBytesILj64EE")
// CHECK: [[META341]] = !{[[META342:![0-9]+]], [[META343:![0-9]+]]}
// CHECK: [[META342]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META340]], file: [[META4]], line: 62, baseType: [[META5]], size: 8)
// CHECK: [[META343]] = !DIDerivedType(tag: DW_TAG_member, name: "Elements", scope: [[META340]], file: [[META4]], line: 63, baseType: [[META344:![0-9]+]], size: 504, offset: 8)
// CHECK: [[META344]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[META5]], size: 504, elements: [[META345:![0-9]+]])
// CHECK: [[META345]] = !{[[META346:![0-9]+]]}
// CHECK: [[META346]] = !DISubrange(count: 63)
// CHECK: [[META347]] = !{[[META348:![0-9]+]]}
// CHECK: [[META348]] = !DITemplateValueParameter(name: "N", type: [[META16]], value: i32 64)
// CHECK: [[META349]] = !{[[META350]]}
// CHECK: [[META350]] = !DILocalVariable(arg: 1, scope: [[DBG337]], file: [[META4]], line: 420, type: [[META340]])
// CHECK: [[META351]] = !DILocation(line: 420, column: 57, scope: [[DBG337]])
// CHECK: [[DBG352]] = !DILocation(line: 420, column: 60, scope: [[DBG337]])
// CHECK: [[DBG353]] = distinct !DISubprogram(name: "Test_Kern_Struct64Bytes", linkageName: "_Z23Test_Kern_Struct64Bytes12StructNBytesILj64EE", scope: [[META4]], file: [[META4]], line: 430, type: [[META338]], scopeLine: 430, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META354:![0-9]+]])
// CHECK: [[META354]] = !{[[META355]]}
// CHECK: [[META355]] = !DILocalVariable(arg: 1, scope: [[DBG353]], file: [[META4]], line: 430, type: [[META340]])
// CHECK: [[META356]] = !DILocation(line: 430, column: 57, scope: [[DBG353]])
// CHECK: [[DBG357]] = !DILocation(line: 430, column: 60, scope: [[DBG353]])
// CHECK: [[DBG358]] = distinct !DISubprogram(name: "Test_Func_Int8T", linkageName: "_Z15Test_Func_Int8Tc", scope: [[META4]], file: [[META4]], line: 440, type: [[META359:![0-9]+]], scopeLine: 440, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META361:![0-9]+]])
// CHECK: [[META359]] = !DISubroutineType(types: [[META360:![0-9]+]])
// CHECK: [[META360]] = !{null, [[META5]]}
// CHECK: [[META361]] = !{[[META362]]}
// CHECK: [[META362]] = !DILocalVariable(arg: 1, scope: [[DBG358]], file: [[META4]], line: 440, type: [[META5]])
// CHECK: [[META363]] = !DILocation(line: 440, column: 39, scope: [[DBG358]])
// CHECK: [[DBG364]] = !DILocation(line: 440, column: 42, scope: [[DBG358]])
// CHECK: [[DBG365]] = distinct !DISubprogram(name: "Test_Kern_Int8T", linkageName: "_Z15Test_Kern_Int8Tc", scope: [[META4]], file: [[META4]], line: 450, type: [[META359]], scopeLine: 450, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META366:![0-9]+]])
// CHECK: [[META366]] = !{[[META367]]}
// CHECK: [[META367]] = !DILocalVariable(arg: 1, scope: [[DBG365]], file: [[META4]], line: 450, type: [[META5]])
// CHECK: [[META368]] = !DILocation(line: 450, column: 39, scope: [[DBG365]])
// CHECK: [[DBG369]] = !DILocation(line: 450, column: 42, scope: [[DBG365]])
// CHECK: [[DBG370]] = distinct !DISubprogram(name: "Test_Func_UInt8T", linkageName: "_Z16Test_Func_UInt8Th", scope: [[META4]], file: [[META4]], line: 460, type: [[META371:![0-9]+]], scopeLine: 460, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META373:![0-9]+]])
// CHECK: [[META371]] = !DISubroutineType(types: [[META372:![0-9]+]])
// CHECK: [[META372]] = !{null, [[META8]]}
// CHECK: [[META373]] = !{[[META374]]}
// CHECK: [[META374]] = !DILocalVariable(arg: 1, scope: [[DBG370]], file: [[META4]], line: 460, type: [[META8]])
// CHECK: [[META375]] = !DILocation(line: 460, column: 41, scope: [[DBG370]])
// CHECK: [[DBG376]] = !DILocation(line: 460, column: 44, scope: [[DBG370]])
// CHECK: [[DBG377]] = distinct !DISubprogram(name: "Test_Kern_UInt8T", linkageName: "_Z16Test_Kern_UInt8Th", scope: [[META4]], file: [[META4]], line: 470, type: [[META371]], scopeLine: 470, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META378:![0-9]+]])
// CHECK: [[META378]] = !{[[META379]]}
// CHECK: [[META379]] = !DILocalVariable(arg: 1, scope: [[DBG377]], file: [[META4]], line: 470, type: [[META8]])
// CHECK: [[META380]] = !DILocation(line: 470, column: 41, scope: [[DBG377]])
// CHECK: [[DBG381]] = !DILocation(line: 470, column: 44, scope: [[DBG377]])
// CHECK: [[DBG382]] = distinct !DISubprogram(name: "Test_Func_Int16T", linkageName: "_Z16Test_Func_Int16Ts", scope: [[META4]], file: [[META4]], line: 480, type: [[META383:![0-9]+]], scopeLine: 480, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META385:![0-9]+]])
// CHECK: [[META383]] = !DISubroutineType(types: [[META384:![0-9]+]])
// CHECK: [[META384]] = !{null, [[META10]]}
// CHECK: [[META385]] = !{[[META386]]}
// CHECK: [[META386]] = !DILocalVariable(arg: 1, scope: [[DBG382]], file: [[META4]], line: 480, type: [[META10]])
// CHECK: [[META387]] = !DILocation(line: 480, column: 41, scope: [[DBG382]])
// CHECK: [[DBG388]] = !DILocation(line: 480, column: 44, scope: [[DBG382]])
// CHECK: [[DBG389]] = distinct !DISubprogram(name: "Test_Kern_Int16T", linkageName: "_Z16Test_Kern_Int16Ts", scope: [[META4]], file: [[META4]], line: 490, type: [[META383]], scopeLine: 490, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META390:![0-9]+]])
// CHECK: [[META390]] = !{[[META391]]}
// CHECK: [[META391]] = !DILocalVariable(arg: 1, scope: [[DBG389]], file: [[META4]], line: 490, type: [[META10]])
// CHECK: [[META392]] = !DILocation(line: 490, column: 41, scope: [[DBG389]])
// CHECK: [[DBG393]] = !DILocation(line: 490, column: 44, scope: [[DBG389]])
// CHECK: [[DBG394]] = distinct !DISubprogram(name: "Test_Func_UInt16T", linkageName: "_Z17Test_Func_UInt16Tt", scope: [[META4]], file: [[META4]], line: 500, type: [[META395:![0-9]+]], scopeLine: 500, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META397:![0-9]+]])
// CHECK: [[META395]] = !DISubroutineType(types: [[META396:![0-9]+]])
// CHECK: [[META396]] = !{null, [[META12]]}
// CHECK: [[META397]] = !{[[META398]]}
// CHECK: [[META398]] = !DILocalVariable(arg: 1, scope: [[DBG394]], file: [[META4]], line: 500, type: [[META12]])
// CHECK: [[META399]] = !DILocation(line: 500, column: 43, scope: [[DBG394]])
// CHECK: [[DBG400]] = !DILocation(line: 500, column: 46, scope: [[DBG394]])
// CHECK: [[DBG401]] = distinct !DISubprogram(name: "Test_Kern_UInt16T", linkageName: "_Z17Test_Kern_UInt16Tt", scope: [[META4]], file: [[META4]], line: 510, type: [[META395]], scopeLine: 510, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META402:![0-9]+]])
// CHECK: [[META402]] = !{[[META403]]}
// CHECK: [[META403]] = !DILocalVariable(arg: 1, scope: [[DBG401]], file: [[META4]], line: 510, type: [[META12]])
// CHECK: [[META404]] = !DILocation(line: 510, column: 43, scope: [[DBG401]])
// CHECK: [[DBG405]] = !DILocation(line: 510, column: 46, scope: [[DBG401]])
// CHECK: [[DBG406]] = distinct !DISubprogram(name: "Test_Func_Int32T", linkageName: "_Z16Test_Func_Int32Ti", scope: [[META4]], file: [[META4]], line: 520, type: [[META407:![0-9]+]], scopeLine: 520, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META409:![0-9]+]])
// CHECK: [[META407]] = !DISubroutineType(types: [[META408:![0-9]+]])
// CHECK: [[META408]] = !{null, [[META14]]}
// CHECK: [[META409]] = !{[[META410]]}
// CHECK: [[META410]] = !DILocalVariable(arg: 1, scope: [[DBG406]], file: [[META4]], line: 520, type: [[META14]])
// CHECK: [[META411]] = !DILocation(line: 520, column: 41, scope: [[DBG406]])
// CHECK: [[DBG412]] = !DILocation(line: 520, column: 44, scope: [[DBG406]])
// CHECK: [[DBG413]] = distinct !DISubprogram(name: "Test_Kern_Int32T", linkageName: "_Z16Test_Kern_Int32Ti", scope: [[META4]], file: [[META4]], line: 530, type: [[META407]], scopeLine: 530, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META414:![0-9]+]])
// CHECK: [[META414]] = !{[[META415]]}
// CHECK: [[META415]] = !DILocalVariable(arg: 1, scope: [[DBG413]], file: [[META4]], line: 530, type: [[META14]])
// CHECK: [[META416]] = !DILocation(line: 530, column: 41, scope: [[DBG413]])
// CHECK: [[DBG417]] = !DILocation(line: 530, column: 44, scope: [[DBG413]])
// CHECK: [[DBG418]] = distinct !DISubprogram(name: "Test_Func_UInt32T", linkageName: "_Z17Test_Func_UInt32Tj", scope: [[META4]], file: [[META4]], line: 540, type: [[META419:![0-9]+]], scopeLine: 540, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META421:![0-9]+]])
// CHECK: [[META419]] = !DISubroutineType(types: [[META420:![0-9]+]])
// CHECK: [[META420]] = !{null, [[META16]]}
// CHECK: [[META421]] = !{[[META422]]}
// CHECK: [[META422]] = !DILocalVariable(arg: 1, scope: [[DBG418]], file: [[META4]], line: 540, type: [[META16]])
// CHECK: [[META423]] = !DILocation(line: 540, column: 43, scope: [[DBG418]])
// CHECK: [[DBG424]] = !DILocation(line: 540, column: 46, scope: [[DBG418]])
// CHECK: [[DBG425]] = distinct !DISubprogram(name: "Test_Kern_UInt32T", linkageName: "_Z17Test_Kern_UInt32Tj", scope: [[META4]], file: [[META4]], line: 550, type: [[META419]], scopeLine: 550, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META426:![0-9]+]])
// CHECK: [[META426]] = !{[[META427]]}
// CHECK: [[META427]] = !DILocalVariable(arg: 1, scope: [[DBG425]], file: [[META4]], line: 550, type: [[META16]])
// CHECK: [[META428]] = !DILocation(line: 550, column: 43, scope: [[DBG425]])
// CHECK: [[DBG429]] = !DILocation(line: 550, column: 46, scope: [[DBG425]])
// CHECK: [[DBG430]] = distinct !DISubprogram(name: "Test_Func_Int64T", linkageName: "_Z16Test_Func_Int64Tl", scope: [[META4]], file: [[META4]], line: 560, type: [[META431:![0-9]+]], scopeLine: 560, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META433:![0-9]+]])
// CHECK: [[META431]] = !DISubroutineType(types: [[META432:![0-9]+]])
// CHECK: [[META432]] = !{null, [[META18]]}
// CHECK: [[META433]] = !{[[META434]]}
// CHECK: [[META434]] = !DILocalVariable(arg: 1, scope: [[DBG430]], file: [[META4]], line: 560, type: [[META18]])
// CHECK: [[META435]] = !DILocation(line: 560, column: 41, scope: [[DBG430]])
// CHECK: [[DBG436]] = !DILocation(line: 560, column: 44, scope: [[DBG430]])
// CHECK: [[DBG437]] = distinct !DISubprogram(name: "Test_Kern_Int64T", linkageName: "_Z16Test_Kern_Int64Tl", scope: [[META4]], file: [[META4]], line: 570, type: [[META431]], scopeLine: 570, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META438:![0-9]+]])
// CHECK: [[META438]] = !{[[META439]]}
// CHECK: [[META439]] = !DILocalVariable(arg: 1, scope: [[DBG437]], file: [[META4]], line: 570, type: [[META18]])
// CHECK: [[META440]] = !DILocation(line: 570, column: 41, scope: [[DBG437]])
// CHECK: [[DBG441]] = !DILocation(line: 570, column: 44, scope: [[DBG437]])
// CHECK: [[DBG442]] = distinct !DISubprogram(name: "Test_Func_UInt64T", linkageName: "_Z17Test_Func_UInt64Tm", scope: [[META4]], file: [[META4]], line: 580, type: [[META443:![0-9]+]], scopeLine: 580, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META445:![0-9]+]])
// CHECK: [[META443]] = !DISubroutineType(types: [[META444:![0-9]+]])
// CHECK: [[META444]] = !{null, [[META20]]}
// CHECK: [[META445]] = !{[[META446]]}
// CHECK: [[META446]] = !DILocalVariable(arg: 1, scope: [[DBG442]], file: [[META4]], line: 580, type: [[META20]])
// CHECK: [[META447]] = !DILocation(line: 580, column: 43, scope: [[DBG442]])
// CHECK: [[DBG448]] = !DILocation(line: 580, column: 46, scope: [[DBG442]])
// CHECK: [[DBG449]] = distinct !DISubprogram(name: "Test_Kern_UInt64T", linkageName: "_Z17Test_Kern_UInt64Tm", scope: [[META4]], file: [[META4]], line: 590, type: [[META443]], scopeLine: 590, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META450:![0-9]+]])
// CHECK: [[META450]] = !{[[META451]]}
// CHECK: [[META451]] = !DILocalVariable(arg: 1, scope: [[DBG449]], file: [[META4]], line: 590, type: [[META20]])
// CHECK: [[META452]] = !DILocation(line: 590, column: 43, scope: [[DBG449]])
// CHECK: [[DBG453]] = !DILocation(line: 590, column: 46, scope: [[DBG449]])
// CHECK: [[DBG454]] = distinct !DISubprogram(name: "Test_Func_EnumInt8T", linkageName: "_Z19Test_Func_EnumInt8T9EnumInt8T", scope: [[META4]], file: [[META4]], line: 600, type: [[META455:![0-9]+]], scopeLine: 600, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META457:![0-9]+]])
// CHECK: [[META455]] = !DISubroutineType(types: [[META456:![0-9]+]])
// CHECK: [[META456]] = !{null, [[META3]]}
// CHECK: [[META457]] = !{[[META458]]}
// CHECK: [[META458]] = !DILocalVariable(arg: 1, scope: [[DBG454]], file: [[META4]], line: 600, type: [[META3]])
// CHECK: [[META459]] = !DILocation(line: 600, column: 46, scope: [[DBG454]])
// CHECK: [[DBG460]] = !DILocation(line: 600, column: 49, scope: [[DBG454]])
// CHECK: [[DBG461]] = distinct !DISubprogram(name: "Test_Kern_EnumInt8T", linkageName: "_Z19Test_Kern_EnumInt8T9EnumInt8T", scope: [[META4]], file: [[META4]], line: 610, type: [[META455]], scopeLine: 610, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META462:![0-9]+]])
// CHECK: [[META462]] = !{[[META463]]}
// CHECK: [[META463]] = !DILocalVariable(arg: 1, scope: [[DBG461]], file: [[META4]], line: 610, type: [[META3]])
// CHECK: [[META464]] = !DILocation(line: 610, column: 46, scope: [[DBG461]])
// CHECK: [[DBG465]] = !DILocation(line: 610, column: 49, scope: [[DBG461]])
// CHECK: [[DBG466]] = distinct !DISubprogram(name: "Test_Func_EnumUInt8T", linkageName: "_Z20Test_Func_EnumUInt8T10EnumUInt8T", scope: [[META4]], file: [[META4]], line: 620, type: [[META467:![0-9]+]], scopeLine: 620, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META469:![0-9]+]])
// CHECK: [[META467]] = !DISubroutineType(types: [[META468:![0-9]+]])
// CHECK: [[META468]] = !{null, [[META7]]}
// CHECK: [[META469]] = !{[[META470]]}
// CHECK: [[META470]] = !DILocalVariable(arg: 1, scope: [[DBG466]], file: [[META4]], line: 620, type: [[META7]])
// CHECK: [[META471]] = !DILocation(line: 620, column: 48, scope: [[DBG466]])
// CHECK: [[DBG472]] = !DILocation(line: 620, column: 51, scope: [[DBG466]])
// CHECK: [[DBG473]] = distinct !DISubprogram(name: "Test_Kern_EnumUInt8T", linkageName: "_Z20Test_Kern_EnumUInt8T10EnumUInt8T", scope: [[META4]], file: [[META4]], line: 630, type: [[META467]], scopeLine: 630, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META474:![0-9]+]])
// CHECK: [[META474]] = !{[[META475]]}
// CHECK: [[META475]] = !DILocalVariable(arg: 1, scope: [[DBG473]], file: [[META4]], line: 630, type: [[META7]])
// CHECK: [[META476]] = !DILocation(line: 630, column: 48, scope: [[DBG473]])
// CHECK: [[DBG477]] = !DILocation(line: 630, column: 51, scope: [[DBG473]])
// CHECK: [[DBG478]] = distinct !DISubprogram(name: "Test_Func_EnumInt16T", linkageName: "_Z20Test_Func_EnumInt16T10EnumInt16T", scope: [[META4]], file: [[META4]], line: 640, type: [[META479:![0-9]+]], scopeLine: 640, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META481:![0-9]+]])
// CHECK: [[META479]] = !DISubroutineType(types: [[META480:![0-9]+]])
// CHECK: [[META480]] = !{null, [[META9]]}
// CHECK: [[META481]] = !{[[META482]]}
// CHECK: [[META482]] = !DILocalVariable(arg: 1, scope: [[DBG478]], file: [[META4]], line: 640, type: [[META9]])
// CHECK: [[META483]] = !DILocation(line: 640, column: 48, scope: [[DBG478]])
// CHECK: [[DBG484]] = !DILocation(line: 640, column: 51, scope: [[DBG478]])
// CHECK: [[DBG485]] = distinct !DISubprogram(name: "Test_Kern_EnumInt16T", linkageName: "_Z20Test_Kern_EnumInt16T10EnumInt16T", scope: [[META4]], file: [[META4]], line: 650, type: [[META479]], scopeLine: 650, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META486:![0-9]+]])
// CHECK: [[META486]] = !{[[META487]]}
// CHECK: [[META487]] = !DILocalVariable(arg: 1, scope: [[DBG485]], file: [[META4]], line: 650, type: [[META9]])
// CHECK: [[META488]] = !DILocation(line: 650, column: 48, scope: [[DBG485]])
// CHECK: [[DBG489]] = !DILocation(line: 650, column: 51, scope: [[DBG485]])
// CHECK: [[DBG490]] = distinct !DISubprogram(name: "Test_Func_EnumUInt16T", linkageName: "_Z21Test_Func_EnumUInt16T11EnumUInt16T", scope: [[META4]], file: [[META4]], line: 660, type: [[META491:![0-9]+]], scopeLine: 660, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META493:![0-9]+]])
// CHECK: [[META491]] = !DISubroutineType(types: [[META492:![0-9]+]])
// CHECK: [[META492]] = !{null, [[META11]]}
// CHECK: [[META493]] = !{[[META494]]}
// CHECK: [[META494]] = !DILocalVariable(arg: 1, scope: [[DBG490]], file: [[META4]], line: 660, type: [[META11]])
// CHECK: [[META495]] = !DILocation(line: 660, column: 50, scope: [[DBG490]])
// CHECK: [[DBG496]] = !DILocation(line: 660, column: 53, scope: [[DBG490]])
// CHECK: [[DBG497]] = distinct !DISubprogram(name: "Test_Kern_EnumUInt16T", linkageName: "_Z21Test_Kern_EnumUInt16T11EnumUInt16T", scope: [[META4]], file: [[META4]], line: 670, type: [[META491]], scopeLine: 670, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META498:![0-9]+]])
// CHECK: [[META498]] = !{[[META499]]}
// CHECK: [[META499]] = !DILocalVariable(arg: 1, scope: [[DBG497]], file: [[META4]], line: 670, type: [[META11]])
// CHECK: [[META500]] = !DILocation(line: 670, column: 50, scope: [[DBG497]])
// CHECK: [[DBG501]] = !DILocation(line: 670, column: 53, scope: [[DBG497]])
// CHECK: [[DBG502]] = distinct !DISubprogram(name: "Test_Func_EnumInt32T", linkageName: "_Z20Test_Func_EnumInt32T10EnumInt32T", scope: [[META4]], file: [[META4]], line: 680, type: [[META503:![0-9]+]], scopeLine: 680, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META505:![0-9]+]])
// CHECK: [[META503]] = !DISubroutineType(types: [[META504:![0-9]+]])
// CHECK: [[META504]] = !{null, [[META13]]}
// CHECK: [[META505]] = !{[[META506]]}
// CHECK: [[META506]] = !DILocalVariable(arg: 1, scope: [[DBG502]], file: [[META4]], line: 680, type: [[META13]])
// CHECK: [[META507]] = !DILocation(line: 680, column: 48, scope: [[DBG502]])
// CHECK: [[DBG508]] = !DILocation(line: 680, column: 51, scope: [[DBG502]])
// CHECK: [[DBG509]] = distinct !DISubprogram(name: "Test_Kern_EnumInt32T", linkageName: "_Z20Test_Kern_EnumInt32T10EnumInt32T", scope: [[META4]], file: [[META4]], line: 690, type: [[META503]], scopeLine: 690, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META510:![0-9]+]])
// CHECK: [[META510]] = !{[[META511]]}
// CHECK: [[META511]] = !DILocalVariable(arg: 1, scope: [[DBG509]], file: [[META4]], line: 690, type: [[META13]])
// CHECK: [[META512]] = !DILocation(line: 690, column: 48, scope: [[DBG509]])
// CHECK: [[DBG513]] = !DILocation(line: 690, column: 51, scope: [[DBG509]])
// CHECK: [[DBG514]] = distinct !DISubprogram(name: "Test_Func_EnumUInt32T", linkageName: "_Z21Test_Func_EnumUInt32T11EnumUInt32T", scope: [[META4]], file: [[META4]], line: 700, type: [[META515:![0-9]+]], scopeLine: 700, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META517:![0-9]+]])
// CHECK: [[META515]] = !DISubroutineType(types: [[META516:![0-9]+]])
// CHECK: [[META516]] = !{null, [[META15]]}
// CHECK: [[META517]] = !{[[META518]]}
// CHECK: [[META518]] = !DILocalVariable(arg: 1, scope: [[DBG514]], file: [[META4]], line: 700, type: [[META15]])
// CHECK: [[META519]] = !DILocation(line: 700, column: 50, scope: [[DBG514]])
// CHECK: [[DBG520]] = !DILocation(line: 700, column: 53, scope: [[DBG514]])
// CHECK: [[DBG521]] = distinct !DISubprogram(name: "Test_Kern_EnumUInt32T", linkageName: "_Z21Test_Kern_EnumUInt32T11EnumUInt32T", scope: [[META4]], file: [[META4]], line: 710, type: [[META515]], scopeLine: 710, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META522:![0-9]+]])
// CHECK: [[META522]] = !{[[META523]]}
// CHECK: [[META523]] = !DILocalVariable(arg: 1, scope: [[DBG521]], file: [[META4]], line: 710, type: [[META15]])
// CHECK: [[META524]] = !DILocation(line: 710, column: 50, scope: [[DBG521]])
// CHECK: [[DBG525]] = !DILocation(line: 710, column: 53, scope: [[DBG521]])
// CHECK: [[DBG526]] = distinct !DISubprogram(name: "Test_Func_EnumInt64T", linkageName: "_Z20Test_Func_EnumInt64T10EnumInt64T", scope: [[META4]], file: [[META4]], line: 720, type: [[META527:![0-9]+]], scopeLine: 720, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META529:![0-9]+]])
// CHECK: [[META527]] = !DISubroutineType(types: [[META528:![0-9]+]])
// CHECK: [[META528]] = !{null, [[META17]]}
// CHECK: [[META529]] = !{[[META530]]}
// CHECK: [[META530]] = !DILocalVariable(arg: 1, scope: [[DBG526]], file: [[META4]], line: 720, type: [[META17]])
// CHECK: [[META531]] = !DILocation(line: 720, column: 48, scope: [[DBG526]])
// CHECK: [[DBG532]] = !DILocation(line: 720, column: 51, scope: [[DBG526]])
// CHECK: [[DBG533]] = distinct !DISubprogram(name: "Test_Kern_EnumInt64T", linkageName: "_Z20Test_Kern_EnumInt64T10EnumInt64T", scope: [[META4]], file: [[META4]], line: 730, type: [[META527]], scopeLine: 730, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META534:![0-9]+]])
// CHECK: [[META534]] = !{[[META535]]}
// CHECK: [[META535]] = !DILocalVariable(arg: 1, scope: [[DBG533]], file: [[META4]], line: 730, type: [[META17]])
// CHECK: [[META536]] = !DILocation(line: 730, column: 48, scope: [[DBG533]])
// CHECK: [[DBG537]] = !DILocation(line: 730, column: 51, scope: [[DBG533]])
// CHECK: [[DBG538]] = distinct !DISubprogram(name: "Test_Func_EnumUInt64T", linkageName: "_Z21Test_Func_EnumUInt64T11EnumUInt64T", scope: [[META4]], file: [[META4]], line: 740, type: [[META539:![0-9]+]], scopeLine: 740, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META541:![0-9]+]])
// CHECK: [[META539]] = !DISubroutineType(types: [[META540:![0-9]+]])
// CHECK: [[META540]] = !{null, [[META19]]}
// CHECK: [[META541]] = !{[[META542]]}
// CHECK: [[META542]] = !DILocalVariable(arg: 1, scope: [[DBG538]], file: [[META4]], line: 740, type: [[META19]])
// CHECK: [[META543]] = !DILocation(line: 740, column: 50, scope: [[DBG538]])
// CHECK: [[DBG544]] = !DILocation(line: 740, column: 53, scope: [[DBG538]])
// CHECK: [[DBG545]] = distinct !DISubprogram(name: "Test_Kern_EnumUInt64T", linkageName: "_Z21Test_Kern_EnumUInt64T11EnumUInt64T", scope: [[META4]], file: [[META4]], line: 750, type: [[META539]], scopeLine: 750, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META546:![0-9]+]])
// CHECK: [[META546]] = !{[[META547]]}
// CHECK: [[META547]] = !DILocalVariable(arg: 1, scope: [[DBG545]], file: [[META4]], line: 750, type: [[META19]])
// CHECK: [[META548]] = !DILocation(line: 750, column: 50, scope: [[DBG545]])
// CHECK: [[DBG549]] = !DILocation(line: 750, column: 53, scope: [[DBG545]])
// CHECK: [[DBG550]] = distinct !DISubprogram(name: "Test_Func_PromotableInteger", linkageName: "_Z27Test_Func_PromotableIntegerb", scope: [[META4]], file: [[META4]], line: 761, type: [[META551:![0-9]+]], scopeLine: 761, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META554:![0-9]+]])
// CHECK: [[META551]] = !DISubroutineType(types: [[META552:![0-9]+]])
// CHECK: [[META552]] = !{null, [[META553:![0-9]+]]}
// CHECK: [[META553]] = !DIBasicType(name: "bool", size: 8, encoding: DW_ATE_boolean)
// CHECK: [[META554]] = !{[[META555]]}
// CHECK: [[META555]] = !DILocalVariable(arg: 1, scope: [[DBG550]], file: [[META4]], line: 761, type: [[META553]])
// CHECK: [[META556]] = !DILocation(line: 761, column: 49, scope: [[DBG550]])
// CHECK: [[DBG557]] = !DILocation(line: 761, column: 52, scope: [[DBG550]])
// CHECK: [[DBG558]] = distinct !DISubprogram(name: "Test_Kern_PromotableInteger", linkageName: "_Z27Test_Kern_PromotableIntegerb", scope: [[META4]], file: [[META4]], line: 772, type: [[META551]], scopeLine: 772, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META559:![0-9]+]])
// CHECK: [[META559]] = !{[[META560]]}
// CHECK: [[META560]] = !DILocalVariable(arg: 1, scope: [[DBG558]], file: [[META4]], line: 772, type: [[META553]])
// CHECK: [[META561]] = !DILocation(line: 772, column: 49, scope: [[DBG558]])
// CHECK: [[DBG562]] = !DILocation(line: 772, column: 52, scope: [[DBG558]])
// CHECK: [[DBG563]] = distinct !DISubprogram(name: "Test_Func_Pointer", linkageName: "_Z17Test_Func_PointerPi", scope: [[META4]], file: [[META4]], line: 782, type: [[META564:![0-9]+]], scopeLine: 782, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META567:![0-9]+]])
// CHECK: [[META564]] = !DISubroutineType(types: [[META565:![0-9]+]])
// CHECK: [[META565]] = !{null, [[META566:![0-9]+]]}
// CHECK: [[META566]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META14]], size: 64, addressSpace: 1)
// CHECK: [[META567]] = !{[[META568]]}
// CHECK: [[META568]] = !DILocalVariable(arg: 1, scope: [[DBG563]], file: [[META4]], line: 782, type: [[META566]])
// CHECK: [[META569]] = !DILocation(line: 782, column: 44, scope: [[DBG563]])
// CHECK: [[DBG570]] = !DILocation(line: 782, column: 47, scope: [[DBG563]])
// CHECK: [[DBG571]] = distinct !DISubprogram(name: "Test_Kern_Pointer", linkageName: "_Z17Test_Kern_PointerPi", scope: [[META4]], file: [[META4]], line: 798, type: [[META564]], scopeLine: 798, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META572:![0-9]+]])
// CHECK: [[META572]] = !{[[META573]]}
// CHECK: [[META573]] = !DILocalVariable(arg: 1, scope: [[DBG571]], file: [[META4]], line: 798, type: [[META566]])
// CHECK: [[META574]] = !DILocation(line: 798, column: 44, scope: [[DBG571]])
// CHECK: [[DBG575]] = !DILocation(line: 798, column: 47, scope: [[DBG571]])
// CHECK: [[DBG576]] = distinct !DISubprogram(name: "Test_Func_Reference", linkageName: "_Z19Test_Func_ReferenceRi", scope: [[META4]], file: [[META4]], line: 808, type: [[META577:![0-9]+]], scopeLine: 808, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META580:![0-9]+]])
// CHECK: [[META577]] = !DISubroutineType(types: [[META578:![0-9]+]])
// CHECK: [[META578]] = !{null, [[META579:![0-9]+]]}
// CHECK: [[META579]] = !DIDerivedType(tag: DW_TAG_reference_type, baseType: [[META14]], size: 64, addressSpace: 1)
// CHECK: [[META580]] = !{[[META581]]}
// CHECK: [[META581]] = !DILocalVariable(arg: 1, scope: [[DBG576]], file: [[META4]], line: 808, type: [[META579]])
// CHECK: [[META582]] = !DILocation(line: 808, column: 46, scope: [[DBG576]])
// CHECK: [[DBG583]] = !DILocation(line: 808, column: 49, scope: [[DBG576]])
// CHECK: [[DBG584]] = distinct !DISubprogram(name: "Test_Kern_Reference", linkageName: "_Z19Test_Kern_ReferenceRi", scope: [[META4]], file: [[META4]], line: 824, type: [[META577]], scopeLine: 824, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META585:![0-9]+]])
// CHECK: [[META585]] = !{[[META586]]}
// CHECK: [[META586]] = !DILocalVariable(arg: 1, scope: [[DBG584]], file: [[META4]], line: 824, type: [[META579]])
// CHECK: [[META587]] = !DILocation(line: 824, column: 46, scope: [[DBG584]])
// CHECK: [[DBG588]] = !DILocation(line: 824, column: 49, scope: [[DBG584]])
// CHECK: [[DBG589]] = distinct !DISubprogram(name: "Test_Func_StructSinglePointerElement", linkageName: "_Z36Test_Func_StructSinglePointerElement26StructSinglePointerElement", scope: [[META4]], file: [[META4]], line: 835, type: [[META590:![0-9]+]], scopeLine: 835, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META595:![0-9]+]])
// CHECK: [[META590]] = !DISubroutineType(types: [[META591:![0-9]+]])
// CHECK: [[META591]] = !{null, [[META592:![0-9]+]]}
// CHECK: [[META592]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructSinglePointerElement", file: [[META4]], line: 73, size: 64, flags: DIFlagTypePassByValue, elements: [[META593:![0-9]+]], identifier: "_ZTS26StructSinglePointerElement")
// CHECK: [[META593]] = !{[[META594:![0-9]+]]}
// CHECK: [[META594]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META592]], file: [[META4]], line: 74, baseType: [[META566]], size: 64)
// CHECK: [[META595]] = !{[[META596]]}
// CHECK: [[META596]] = !DILocalVariable(arg: 1, scope: [[DBG589]], file: [[META4]], line: 835, type: [[META592]])
// CHECK: [[META597]] = !DILocation(line: 835, column: 80, scope: [[DBG589]])
// CHECK: [[DBG598]] = !DILocation(line: 835, column: 83, scope: [[DBG589]])
// CHECK: [[DBG599]] = distinct !DISubprogram(name: "Test_Kern_StructSinglePointerElement", linkageName: "_Z36Test_Kern_StructSinglePointerElement26StructSinglePointerElement", scope: [[META4]], file: [[META4]], line: 846, type: [[META590]], scopeLine: 846, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META600:![0-9]+]])
// CHECK: [[META600]] = !{[[META601]]}
// CHECK: [[META601]] = !DILocalVariable(arg: 1, scope: [[DBG599]], file: [[META4]], line: 846, type: [[META592]])
// CHECK: [[META602]] = !DILocation(line: 846, column: 80, scope: [[DBG599]])
// CHECK: [[DBG603]] = !DILocation(line: 846, column: 83, scope: [[DBG599]])
// CHECK: [[DBG604]] = distinct !DISubprogram(name: "Test_Func_StructPointerElements", linkageName: "_Z31Test_Func_StructPointerElements21StructPointerElements", scope: [[META4]], file: [[META4]], line: 859, type: [[META605:![0-9]+]], scopeLine: 859, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META613:![0-9]+]])
// CHECK: [[META605]] = !DISubroutineType(types: [[META606:![0-9]+]])
// CHECK: [[META606]] = !{null, [[META607:![0-9]+]]}
// CHECK: [[META607]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructPointerElements", file: [[META4]], line: 76, size: 128, flags: DIFlagTypePassByValue, elements: [[META608:![0-9]+]], identifier: "_ZTS21StructPointerElements")
// CHECK: [[META608]] = !{[[META609:![0-9]+]], [[META610:![0-9]+]]}
// CHECK: [[META609]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META607]], file: [[META4]], line: 77, baseType: [[META566]], size: 64)
// CHECK: [[META610]] = !DIDerivedType(tag: DW_TAG_member, name: "Element1", scope: [[META607]], file: [[META4]], line: 78, baseType: [[META611:![0-9]+]], size: 64, offset: 64)
// CHECK: [[META611]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META612:![0-9]+]], size: 64, addressSpace: 1)
// CHECK: [[META612]] = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float)
// CHECK: [[META613]] = !{[[META614]]}
// CHECK: [[META614]] = !DILocalVariable(arg: 1, scope: [[DBG604]], file: [[META4]], line: 859, type: [[META607]])
// CHECK: [[META615]] = !DILocation(line: 859, column: 70, scope: [[DBG604]])
// CHECK: [[DBG616]] = !DILocation(line: 859, column: 73, scope: [[DBG604]])
// CHECK: [[DBG617]] = distinct !DISubprogram(name: "Test_Kern_StructPointerElements", linkageName: "_Z31Test_Kern_StructPointerElements21StructPointerElements", scope: [[META4]], file: [[META4]], line: 869, type: [[META605]], scopeLine: 869, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META618:![0-9]+]])
// CHECK: [[META618]] = !{[[META619]]}
// CHECK: [[META619]] = !DILocalVariable(arg: 1, scope: [[DBG617]], file: [[META4]], line: 869, type: [[META607]])
// CHECK: [[META620]] = !DILocation(line: 869, column: 70, scope: [[DBG617]])
// CHECK: [[DBG621]] = !DILocation(line: 869, column: 73, scope: [[DBG617]])
// CHECK: [[DBG622]] = distinct !DISubprogram(name: "Test_Func_ParamRegLimitExpandedStruct", linkageName: "_Z37Test_Func_ParamRegLimitExpandedStructlllllli22StructMultipleElements", scope: [[META4]], file: [[META4]], line: 910, type: [[META623:![0-9]+]], scopeLine: 910, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META629:![0-9]+]])
// CHECK: [[META623]] = !DISubroutineType(types: [[META624:![0-9]+]])
// CHECK: [[META624]] = !{null, [[META18]], [[META18]], [[META18]], [[META18]], [[META18]], [[META18]], [[META14]], [[META625:![0-9]+]]}
// CHECK: [[META625]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "StructMultipleElements", file: [[META4]], line: 80, size: 128, flags: DIFlagTypePassByValue, elements: [[META626:![0-9]+]], identifier: "_ZTS22StructMultipleElements")
// CHECK: [[META626]] = !{[[META627:![0-9]+]], [[META628:![0-9]+]]}
// CHECK: [[META627]] = !DIDerivedType(tag: DW_TAG_member, name: "Element0", scope: [[META625]], file: [[META4]], line: 81, baseType: [[META14]], size: 32)
// CHECK: [[META628]] = !DIDerivedType(tag: DW_TAG_member, name: "Element1", scope: [[META625]], file: [[META4]], line: 82, baseType: [[META18]], size: 64, offset: 64)
// CHECK: [[META629]] = !{[[META630]], [[META631]], [[META632]], [[META633]], [[META634]], [[META635]], [[META636]], [[META637]]}
// CHECK: [[META630]] = !DILocalVariable(arg: 1, scope: [[DBG622]], file: [[META4]], line: 910, type: [[META18]])
// CHECK: [[META631]] = !DILocalVariable(arg: 2, scope: [[DBG622]], file: [[META4]], line: 910, type: [[META18]])
// CHECK: [[META632]] = !DILocalVariable(arg: 3, scope: [[DBG622]], file: [[META4]], line: 910, type: [[META18]])
// CHECK: [[META633]] = !DILocalVariable(arg: 4, scope: [[DBG622]], file: [[META4]], line: 910, type: [[META18]])
// CHECK: [[META634]] = !DILocalVariable(arg: 5, scope: [[DBG622]], file: [[META4]], line: 910, type: [[META18]])
// CHECK: [[META635]] = !DILocalVariable(arg: 6, scope: [[DBG622]], file: [[META4]], line: 910, type: [[META18]])
// CHECK: [[META636]] = !DILocalVariable(arg: 7, scope: [[DBG622]], file: [[META4]], line: 910, type: [[META14]])
// CHECK: [[META637]] = !DILocalVariable(arg: 8, scope: [[DBG622]], file: [[META4]], line: 910, type: [[META625]])
// CHECK: [[META638]] = !DILocation(line: 910, column: 62, scope: [[DBG622]])
// CHECK: [[META639]] = !DILocation(line: 910, column: 71, scope: [[DBG622]])
// CHECK: [[META640]] = !DILocation(line: 910, column: 80, scope: [[DBG622]])
// CHECK: [[META641]] = !DILocation(line: 910, column: 89, scope: [[DBG622]])
// CHECK: [[META642]] = !DILocation(line: 910, column: 98, scope: [[DBG622]])
// CHECK: [[META643]] = !DILocation(line: 910, column: 107, scope: [[DBG622]])
// CHECK: [[META644]] = !DILocation(line: 910, column: 116, scope: [[DBG622]])
// CHECK: [[META645]] = !DILocation(line: 910, column: 140, scope: [[DBG622]])
// CHECK: [[DBG646]] = !DILocation(line: 910, column: 143, scope: [[DBG622]])
// CHECK: [[DBG647]] = distinct !DISubprogram(name: "Test_Kern_ParamRegLimitExpandedStruct", linkageName: "_Z37Test_Kern_ParamRegLimitExpandedStructlllllli22StructMultipleElements", scope: [[META4]], file: [[META4]], line: 948, type: [[META623]], scopeLine: 948, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META648:![0-9]+]])
// CHECK: [[META648]] = !{[[META649]], [[META650]], [[META651]], [[META652]], [[META653]], [[META654]], [[META655]], [[META656]]}
// CHECK: [[META649]] = !DILocalVariable(arg: 1, scope: [[DBG647]], file: [[META4]], line: 948, type: [[META18]])
// CHECK: [[META650]] = !DILocalVariable(arg: 2, scope: [[DBG647]], file: [[META4]], line: 948, type: [[META18]])
// CHECK: [[META651]] = !DILocalVariable(arg: 3, scope: [[DBG647]], file: [[META4]], line: 948, type: [[META18]])
// CHECK: [[META652]] = !DILocalVariable(arg: 4, scope: [[DBG647]], file: [[META4]], line: 948, type: [[META18]])
// CHECK: [[META653]] = !DILocalVariable(arg: 5, scope: [[DBG647]], file: [[META4]], line: 948, type: [[META18]])
// CHECK: [[META654]] = !DILocalVariable(arg: 6, scope: [[DBG647]], file: [[META4]], line: 948, type: [[META18]])
// CHECK: [[META655]] = !DILocalVariable(arg: 7, scope: [[DBG647]], file: [[META4]], line: 948, type: [[META14]])
// CHECK: [[META656]] = !DILocalVariable(arg: 8, scope: [[DBG647]], file: [[META4]], line: 948, type: [[META625]])
// CHECK: [[META657]] = !DILocation(line: 948, column: 62, scope: [[DBG647]])
// CHECK: [[META658]] = !DILocation(line: 948, column: 71, scope: [[DBG647]])
// CHECK: [[META659]] = !DILocation(line: 948, column: 80, scope: [[DBG647]])
// CHECK: [[META660]] = !DILocation(line: 948, column: 89, scope: [[DBG647]])
// CHECK: [[META661]] = !DILocation(line: 948, column: 98, scope: [[DBG647]])
// CHECK: [[META662]] = !DILocation(line: 948, column: 107, scope: [[DBG647]])
// CHECK: [[META663]] = !DILocation(line: 948, column: 116, scope: [[DBG647]])
// CHECK: [[META664]] = !DILocation(line: 948, column: 140, scope: [[DBG647]])
// CHECK: [[DBG665]] = !DILocation(line: 948, column: 143, scope: [[DBG647]])
// CHECK: [[DBG666]] = distinct !DISubprogram(name: "Test_Func_ParamRegLimitUnexpandedStruct", linkageName: "_Z39Test_Func_ParamRegLimitUnexpandedStructlllllll22StructMultipleElements", scope: [[META4]], file: [[META4]], line: 986, type: [[META667:![0-9]+]], scopeLine: 986, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META669:![0-9]+]])
// CHECK: [[META667]] = !DISubroutineType(types: [[META668:![0-9]+]])
// CHECK: [[META668]] = !{null, [[META18]], [[META18]], [[META18]], [[META18]], [[META18]], [[META18]], [[META18]], [[META625]]}
// CHECK: [[META669]] = !{[[META670]], [[META671]], [[META672]], [[META673]], [[META674]], [[META675]], [[META676]], [[META677]]}
// CHECK: [[META670]] = !DILocalVariable(arg: 1, scope: [[DBG666]], file: [[META4]], line: 986, type: [[META18]])
// CHECK: [[META671]] = !DILocalVariable(arg: 2, scope: [[DBG666]], file: [[META4]], line: 986, type: [[META18]])
// CHECK: [[META672]] = !DILocalVariable(arg: 3, scope: [[DBG666]], file: [[META4]], line: 986, type: [[META18]])
// CHECK: [[META673]] = !DILocalVariable(arg: 4, scope: [[DBG666]], file: [[META4]], line: 986, type: [[META18]])
// CHECK: [[META674]] = !DILocalVariable(arg: 5, scope: [[DBG666]], file: [[META4]], line: 986, type: [[META18]])
// CHECK: [[META675]] = !DILocalVariable(arg: 6, scope: [[DBG666]], file: [[META4]], line: 986, type: [[META18]])
// CHECK: [[META676]] = !DILocalVariable(arg: 7, scope: [[DBG666]], file: [[META4]], line: 986, type: [[META18]])
// CHECK: [[META677]] = !DILocalVariable(arg: 8, scope: [[DBG666]], file: [[META4]], line: 986, type: [[META625]])
// CHECK: [[META678]] = !DILocation(line: 986, column: 64, scope: [[DBG666]])
// CHECK: [[META679]] = !DILocation(line: 986, column: 73, scope: [[DBG666]])
// CHECK: [[META680]] = !DILocation(line: 986, column: 82, scope: [[DBG666]])
// CHECK: [[META681]] = !DILocation(line: 986, column: 91, scope: [[DBG666]])
// CHECK: [[META682]] = !DILocation(line: 986, column: 100, scope: [[DBG666]])
// CHECK: [[META683]] = !DILocation(line: 986, column: 109, scope: [[DBG666]])
// CHECK: [[META684]] = !DILocation(line: 986, column: 118, scope: [[DBG666]])
// CHECK: [[META685]] = !DILocation(line: 986, column: 142, scope: [[DBG666]])
// CHECK: [[DBG686]] = !DILocation(line: 986, column: 145, scope: [[DBG666]])
// CHECK: [[DBG687]] = distinct !DISubprogram(name: "Test_Kern_ParamRegLimitUnexpandedStruct", linkageName: "_Z39Test_Kern_ParamRegLimitUnexpandedStructlllllll22StructMultipleElements", scope: [[META4]], file: [[META4]], line: 1024, type: [[META667]], scopeLine: 1024, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META688:![0-9]+]])
// CHECK: [[META688]] = !{[[META689]], [[META690]], [[META691]], [[META692]], [[META693]], [[META694]], [[META695]], [[META696]]}
// CHECK: [[META689]] = !DILocalVariable(arg: 1, scope: [[DBG687]], file: [[META4]], line: 1024, type: [[META18]])
// CHECK: [[META690]] = !DILocalVariable(arg: 2, scope: [[DBG687]], file: [[META4]], line: 1024, type: [[META18]])
// CHECK: [[META691]] = !DILocalVariable(arg: 3, scope: [[DBG687]], file: [[META4]], line: 1024, type: [[META18]])
// CHECK: [[META692]] = !DILocalVariable(arg: 4, scope: [[DBG687]], file: [[META4]], line: 1024, type: [[META18]])
// CHECK: [[META693]] = !DILocalVariable(arg: 5, scope: [[DBG687]], file: [[META4]], line: 1024, type: [[META18]])
// CHECK: [[META694]] = !DILocalVariable(arg: 6, scope: [[DBG687]], file: [[META4]], line: 1024, type: [[META18]])
// CHECK: [[META695]] = !DILocalVariable(arg: 7, scope: [[DBG687]], file: [[META4]], line: 1024, type: [[META18]])
// CHECK: [[META696]] = !DILocalVariable(arg: 8, scope: [[DBG687]], file: [[META4]], line: 1024, type: [[META625]])
// CHECK: [[META697]] = !DILocation(line: 1024, column: 64, scope: [[DBG687]])
// CHECK: [[META698]] = !DILocation(line: 1024, column: 73, scope: [[DBG687]])
// CHECK: [[META699]] = !DILocation(line: 1024, column: 82, scope: [[DBG687]])
// CHECK: [[META700]] = !DILocation(line: 1024, column: 91, scope: [[DBG687]])
// CHECK: [[META701]] = !DILocation(line: 1024, column: 100, scope: [[DBG687]])
// CHECK: [[META702]] = !DILocation(line: 1024, column: 109, scope: [[DBG687]])
// CHECK: [[META703]] = !DILocation(line: 1024, column: 118, scope: [[DBG687]])
// CHECK: [[META704]] = !DILocation(line: 1024, column: 142, scope: [[DBG687]])
// CHECK: [[DBG705]] = !DILocation(line: 1024, column: 145, scope: [[DBG687]])
//.