Index: lib/Target/AMDGPU/AMDGPUAsmPrinter.h =================================================================== --- lib/Target/AMDGPU/AMDGPUAsmPrinter.h +++ lib/Target/AMDGPU/AMDGPUAsmPrinter.h @@ -131,14 +131,12 @@ void EmitStartOfAsmFile(Module &M) override; + void EmitEndOfAsmFile(Module &) override; + bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, unsigned AsmVariant, const char *ExtraCode, raw_ostream &O) override; - void emitStartOfRuntimeMetadata(const Module &M); - - void emitRuntimeMetadata(const Function &F); - protected: std::vector DisasmLines, HexLines; size_t DisasmLineMaxLen; Index: lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp =================================================================== --- lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp +++ lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp @@ -39,7 +39,7 @@ #include "llvm/Support/MathExtras.h" #include "llvm/Support/TargetRegistry.h" #include "llvm/Target/TargetLoweringObjectFile.h" -#include "AMDGPURuntimeMetadata.h" +#include "AMDGPURuntimeMDYamlMapping.h" using namespace ::AMDGPU; using namespace llvm; @@ -117,7 +117,6 @@ AMDGPU::IsaVersion ISA = AMDGPU::getIsaVersion(STI->getFeatureBits()); TS->EmitDirectiveHSACodeObjectISA(ISA.Major, ISA.Minor, ISA.Stepping, "AMD", "AMDGPU"); - emitStartOfRuntimeMetadata(M); } void AMDGPUAsmPrinter::EmitFunctionBodyStart() { @@ -261,8 +260,6 @@ } } - emitRuntimeMetadata(*MF.getFunction()); - return false; } @@ -773,307 +770,17 @@ return false; } -// Emit a key and an integer value for runtime metadata. -static void emitRuntimeMDIntValue(MCStreamer &Streamer, - RuntimeMD::Key K, uint64_t V, - unsigned Size) { - Streamer.EmitIntValue(K, 1); - Streamer.EmitIntValue(V, Size); -} - -// Emit a key and a string value for runtime metadata. -static void emitRuntimeMDStringValue(MCStreamer &Streamer, - RuntimeMD::Key K, StringRef S) { - Streamer.EmitIntValue(K, 1); - Streamer.EmitIntValue(S.size(), 4); - Streamer.EmitBytes(S); -} - -// Emit a key and three integer values for runtime metadata. -// The three integer values are obtained from MDNode \p Node; -static void emitRuntimeMDThreeIntValues(MCStreamer &Streamer, - RuntimeMD::Key K, MDNode *Node, - unsigned Size) { - assert(Node->getNumOperands() == 3); - - Streamer.EmitIntValue(K, 1); - for (const MDOperand &Op : Node->operands()) { - const ConstantInt *CI = mdconst::extract(Op); - Streamer.EmitIntValue(CI->getZExtValue(), Size); - } -} - -void AMDGPUAsmPrinter::emitStartOfRuntimeMetadata(const Module &M) { - OutStreamer->SwitchSection(getObjFileLowering().getContext() - .getELFSection(RuntimeMD::SectionName, ELF::SHT_PROGBITS, 0)); - - emitRuntimeMDIntValue(*OutStreamer, RuntimeMD::KeyMDVersion, - RuntimeMD::MDVersion << 8 | RuntimeMD::MDRevision, 2); - if (auto MD = M.getNamedMetadata("opencl.ocl.version")) { - if (MD->getNumOperands() != 0) { - auto Node = MD->getOperand(0); - if (Node->getNumOperands() > 1) { - emitRuntimeMDIntValue(*OutStreamer, RuntimeMD::KeyLanguage, - RuntimeMD::OpenCL_C, 1); - uint16_t Major = mdconst::extract(Node->getOperand(0)) - ->getZExtValue(); - uint16_t Minor = mdconst::extract(Node->getOperand(1)) - ->getZExtValue(); - emitRuntimeMDIntValue(*OutStreamer, RuntimeMD::KeyLanguageVersion, - Major * 100 + Minor * 10, 2); - } - } - } - - if (auto MD = M.getNamedMetadata("llvm.printf.fmts")) { - for (unsigned I = 0; I < MD->getNumOperands(); ++I) { - auto Node = MD->getOperand(I); - if (Node->getNumOperands() > 0) - emitRuntimeMDStringValue(*OutStreamer, RuntimeMD::KeyPrintfInfo, - cast(Node->getOperand(0))->getString()); - } - } -} - -static std::string getOCLTypeName(Type *Ty, bool Signed) { - switch (Ty->getTypeID()) { - case Type::HalfTyID: - return "half"; - case Type::FloatTyID: - return "float"; - case Type::DoubleTyID: - return "double"; - case Type::IntegerTyID: { - if (!Signed) - return (Twine('u') + getOCLTypeName(Ty, true)).str(); - unsigned BW = Ty->getIntegerBitWidth(); - switch (BW) { - case 8: - return "char"; - case 16: - return "short"; - case 32: - return "int"; - case 64: - return "long"; - default: - return (Twine('i') + Twine(BW)).str(); - } - } - case Type::VectorTyID: { - VectorType *VecTy = cast(Ty); - Type *EleTy = VecTy->getElementType(); - unsigned Size = VecTy->getVectorNumElements(); - return (Twine(getOCLTypeName(EleTy, Signed)) + Twine(Size)).str(); - } - default: - return "unknown"; - } -} - -static RuntimeMD::KernelArg::ValueType getRuntimeMDValueType( - Type *Ty, StringRef TypeName) { - switch (Ty->getTypeID()) { - case Type::HalfTyID: - return RuntimeMD::KernelArg::F16; - case Type::FloatTyID: - return RuntimeMD::KernelArg::F32; - case Type::DoubleTyID: - return RuntimeMD::KernelArg::F64; - case Type::IntegerTyID: { - bool Signed = !TypeName.startswith("u"); - switch (Ty->getIntegerBitWidth()) { - case 8: - return Signed ? RuntimeMD::KernelArg::I8 : RuntimeMD::KernelArg::U8; - case 16: - return Signed ? RuntimeMD::KernelArg::I16 : RuntimeMD::KernelArg::U16; - case 32: - return Signed ? RuntimeMD::KernelArg::I32 : RuntimeMD::KernelArg::U32; - case 64: - return Signed ? RuntimeMD::KernelArg::I64 : RuntimeMD::KernelArg::U64; - default: - // Runtime does not recognize other integer types. Report as struct type. - return RuntimeMD::KernelArg::Struct; - } - } - case Type::VectorTyID: - return getRuntimeMDValueType(Ty->getVectorElementType(), TypeName); - case Type::PointerTyID: - return getRuntimeMDValueType(Ty->getPointerElementType(), TypeName); - default: - return RuntimeMD::KernelArg::Struct; - } -} - -static RuntimeMD::KernelArg::AddressSpaceQualifer getRuntimeAddrSpace( - AMDGPUAS::AddressSpaces A) { - switch (A) { - case AMDGPUAS::GLOBAL_ADDRESS: - return RuntimeMD::KernelArg::Global; - case AMDGPUAS::CONSTANT_ADDRESS: - return RuntimeMD::KernelArg::Constant; - case AMDGPUAS::LOCAL_ADDRESS: - return RuntimeMD::KernelArg::Local; - case AMDGPUAS::FLAT_ADDRESS: - return RuntimeMD::KernelArg::Generic; - case AMDGPUAS::REGION_ADDRESS: - return RuntimeMD::KernelArg::Region; - default: - return RuntimeMD::KernelArg::Private; - } -} - -static void emitRuntimeMetadataForKernelArg(const DataLayout &DL, - MCStreamer &OutStreamer, Type *T, - RuntimeMD::KernelArg::Kind Kind, - StringRef BaseTypeName = "", StringRef TypeName = "", - StringRef ArgName = "", StringRef TypeQual = "", StringRef AccQual = "") { - // Emit KeyArgBegin. - OutStreamer.EmitIntValue(RuntimeMD::KeyArgBegin, 1); - - // Emit KeyArgSize and KeyArgAlign. - emitRuntimeMDIntValue(OutStreamer, RuntimeMD::KeyArgSize, - DL.getTypeAllocSize(T), 4); - emitRuntimeMDIntValue(OutStreamer, RuntimeMD::KeyArgAlign, - DL.getABITypeAlignment(T), 4); - if (auto PT = dyn_cast(T)) { - auto ET = PT->getElementType(); - if (PT->getAddressSpace() == AMDGPUAS::LOCAL_ADDRESS && ET->isSized()) - emitRuntimeMDIntValue(OutStreamer, RuntimeMD::KeyArgPointeeAlign, - DL.getABITypeAlignment(ET), 4); - } - - // Emit KeyArgTypeName. - if (!TypeName.empty()) - emitRuntimeMDStringValue(OutStreamer, RuntimeMD::KeyArgTypeName, TypeName); - - // Emit KeyArgName. - if (!ArgName.empty()) - emitRuntimeMDStringValue(OutStreamer, RuntimeMD::KeyArgName, ArgName); - - // Emit KeyArgIsVolatile, KeyArgIsRestrict, KeyArgIsConst and KeyArgIsPipe. - SmallVector SplitQ; - TypeQual.split(SplitQ, " ", -1, false /* Drop empty entry */); - - for (StringRef KeyName : SplitQ) { - auto Key = StringSwitch(KeyName) - .Case("volatile", RuntimeMD::KeyArgIsVolatile) - .Case("restrict", RuntimeMD::KeyArgIsRestrict) - .Case("const", RuntimeMD::KeyArgIsConst) - .Case("pipe", RuntimeMD::KeyArgIsPipe) - .Default(RuntimeMD::KeyNull); - OutStreamer.EmitIntValue(Key, 1); - } - - // Emit KeyArgKind. - emitRuntimeMDIntValue(OutStreamer, RuntimeMD::KeyArgKind, Kind, 1); - - // Emit KeyArgValueType. - emitRuntimeMDIntValue(OutStreamer, RuntimeMD::KeyArgValueType, - getRuntimeMDValueType(T, BaseTypeName), 2); - - // Emit KeyArgAccQual. - if (!AccQual.empty()) { - auto AQ = StringSwitch(AccQual) - .Case("read_only", RuntimeMD::KernelArg::ReadOnly) - .Case("write_only", RuntimeMD::KernelArg::WriteOnly) - .Case("read_write", RuntimeMD::KernelArg::ReadWrite) - .Default(RuntimeMD::KernelArg::None); - emitRuntimeMDIntValue(OutStreamer, RuntimeMD::KeyArgAccQual, AQ, 1); - } - - // Emit KeyArgAddrQual. - if (auto *PT = dyn_cast(T)) - emitRuntimeMDIntValue(OutStreamer, RuntimeMD::KeyArgAddrQual, - getRuntimeAddrSpace(static_cast( - PT->getAddressSpace())), 1); - - // Emit KeyArgEnd - OutStreamer.EmitIntValue(RuntimeMD::KeyArgEnd, 1); -} - -void AMDGPUAsmPrinter::emitRuntimeMetadata(const Function &F) { - if (!F.getMetadata("kernel_arg_type")) - return; - +void AMDGPUAsmPrinter::EmitEndOfAsmFile(Module &M) { MCContext &Context = getObjFileLowering().getContext(); OutStreamer->SwitchSection( Context.getELFSection(RuntimeMD::SectionName, ELF::SHT_PROGBITS, 0)); - OutStreamer->EmitIntValue(RuntimeMD::KeyKernelBegin, 1); - emitRuntimeMDStringValue(*OutStreamer, RuntimeMD::KeyKernelName, F.getName()); - - const DataLayout &DL = F.getParent()->getDataLayout(); - for (auto &Arg : F.args()) { - unsigned I = Arg.getArgNo(); - Type *T = Arg.getType(); - auto TypeName = dyn_cast(F.getMetadata( - "kernel_arg_type")->getOperand(I))->getString(); - auto BaseTypeName = cast(F.getMetadata( - "kernel_arg_base_type")->getOperand(I))->getString(); - StringRef ArgName; - if (auto ArgNameMD = F.getMetadata("kernel_arg_name")) - ArgName = cast(ArgNameMD->getOperand(I))->getString(); - auto TypeQual = cast(F.getMetadata( - "kernel_arg_type_qual")->getOperand(I))->getString(); - auto AccQual = cast(F.getMetadata( - "kernel_arg_access_qual")->getOperand(I))->getString(); - RuntimeMD::KernelArg::Kind Kind; - if (TypeQual.find("pipe") != StringRef::npos) - Kind = RuntimeMD::KernelArg::Pipe; - else Kind = StringSwitch(BaseTypeName) - .Case("sampler_t", RuntimeMD::KernelArg::Sampler) - .Case("queue_t", RuntimeMD::KernelArg::Queue) - .Cases("image1d_t", "image1d_array_t", "image1d_buffer_t", - "image2d_t" , "image2d_array_t", RuntimeMD::KernelArg::Image) - .Cases("image2d_depth_t", "image2d_array_depth_t", - "image2d_msaa_t", "image2d_array_msaa_t", - "image2d_msaa_depth_t", RuntimeMD::KernelArg::Image) - .Cases("image2d_array_msaa_depth_t", "image3d_t", - RuntimeMD::KernelArg::Image) - .Default(isa(T) ? - (T->getPointerAddressSpace() == AMDGPUAS::LOCAL_ADDRESS ? - RuntimeMD::KernelArg::DynamicSharedPointer : - RuntimeMD::KernelArg::GlobalBuffer) : - RuntimeMD::KernelArg::ByValue); - emitRuntimeMetadataForKernelArg(DL, *OutStreamer, T, - Kind, BaseTypeName, TypeName, ArgName, TypeQual, AccQual); - } - - // Emit hidden kernel arguments for OpenCL kernels. - if (F.getParent()->getNamedMetadata("opencl.ocl.version")) { - auto Int64T = Type::getInt64Ty(F.getContext()); - emitRuntimeMetadataForKernelArg(DL, *OutStreamer, Int64T, - RuntimeMD::KernelArg::HiddenGlobalOffsetX); - emitRuntimeMetadataForKernelArg(DL, *OutStreamer, Int64T, - RuntimeMD::KernelArg::HiddenGlobalOffsetY); - emitRuntimeMetadataForKernelArg(DL, *OutStreamer, Int64T, - RuntimeMD::KernelArg::HiddenGlobalOffsetZ); - if (F.getParent()->getNamedMetadata("llvm.printf.fmts")) { - auto Int8PtrT = Type::getInt8PtrTy(F.getContext(), - RuntimeMD::KernelArg::Global); - emitRuntimeMetadataForKernelArg(DL, *OutStreamer, Int8PtrT, - RuntimeMD::KernelArg::HiddenPrintfBuffer); - } - } - - // Emit KeyReqdWorkGroupSize, KeyWorkGroupSizeHint, and KeyVecTypeHint. - if (auto RWGS = F.getMetadata("reqd_work_group_size")) { - emitRuntimeMDThreeIntValues(*OutStreamer, RuntimeMD::KeyReqdWorkGroupSize, - RWGS, 4); - } - - if (auto WGSH = F.getMetadata("work_group_size_hint")) { - emitRuntimeMDThreeIntValues(*OutStreamer, RuntimeMD::KeyWorkGroupSizeHint, - WGSH, 4); - } - - if (auto VTH = F.getMetadata("vec_type_hint")) { - auto TypeName = getOCLTypeName(cast( - VTH->getOperand(0))->getType(), mdconst::extract( - VTH->getOperand(1))->getZExtValue()); - emitRuntimeMDStringValue(*OutStreamer, RuntimeMD::KeyVecTypeHint, TypeName); - } - // Emit KeyKernelEnd - OutStreamer->EmitIntValue(RuntimeMD::KeyKernelEnd, 1); + std::string Text; + raw_string_ostream Stream(Text); + yaml::Output Output(Stream, nullptr, INT_MAX /* do not wrap line */); + yaml::Program Prog(M); + Output << Prog; + DEBUG_WITH_TYPE("amdgpu-rtmd", + llvm::dbgs() << "AMDGPU runtime metadata:\n" << Stream.str() << '\n'); + OutStreamer->EmitBytes(Stream.str()); } Index: lib/Target/AMDGPU/AMDGPURuntimeMDYamlMapping.h =================================================================== --- /dev/null +++ lib/Target/AMDGPU/AMDGPURuntimeMDYamlMapping.h @@ -0,0 +1,159 @@ +//===- AMDGPURuntimeMDYamlMapping.h - Map runtime metadata to YAML -*- C++ -*-// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the mapping between various AMDGPU runtime metadata +// structures and their corresponding YAML representation. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPURUNTIMEMDYAMLMAPPING_H +#define LLVM_LIB_TARGET_AMDGPU_AMDGPURUNTIMEMDYAMLMAPPING_H + +#include "llvm/ADT/StringRef.h" +#include "llvm/Support/raw_ostream.h" +#include "llvm/Support/YAMLTraits.h" +#include "AMDGPURuntimeMetadata.h" +#include + +namespace llvm { + +class Module; + +namespace yaml { + +// Invalid values are used to indicate an optional key should not be emitted. +#define INVALID_ADDR_QUAL uint8_t(0xff) +#define INVALID_ACC_QUAL uint8_t(0xff) +#define INVALID_KERNEL_INDEX uint32_t(~0U) + +struct Arg { + uint32_t Size; + uint32_t Align; + uint32_t PointeeAlign; + uint8_t Kind; + uint16_t ValueType; + StringRef TypeName; + StringRef Name; + uint8_t AddrQual; + uint8_t AccQual; + uint8_t IsVolatile; + uint8_t IsConst; + uint8_t IsRestrict; + uint8_t IsPipe; + Arg() : Size(0), Align(0), PointeeAlign(0), Kind(0), ValueType(0), + AddrQual(INVALID_ADDR_QUAL), AccQual(INVALID_ACC_QUAL), IsVolatile(0), + IsConst(0), IsRestrict(0), IsPipe(0) {} +}; + +struct Kernel { + StringRef Name; + StringRef Language; + std::vector LanguageVersion; + std::vector ReqdWorkGroupSize; + std::vector WorkGroupSizeHint; + // This value cannot be StringRef since it is generated on the fly. + std::string VecTypeHint; + uint32_t KernelIndex; + uint8_t NoPartialWorkGroups; + std::vector Args; + Kernel() : KernelIndex(INVALID_KERNEL_INDEX), NoPartialWorkGroups(0) {} +}; + +struct Program { + std::vector MDVersionSeq; + std::vector PrintfInfo; + std::vector Kernels; + + Program(Module &M); +}; +} +} + +LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(uint8_t) +LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(uint32_t) +LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(StringRef) +LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(Kernel) +LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(Arg) + +namespace llvm { +namespace yaml { + +template <> struct MappingTraits { + static void mapping(IO &YamlIO, Arg &A) { + YamlIO.mapRequired(::AMDGPU::RuntimeMD::KeyName::ArgSize, + A.Size); + YamlIO.mapRequired(::AMDGPU::RuntimeMD::KeyName::ArgAlign, + A.Align); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::ArgPointeeAlign, + A.PointeeAlign, 0U); + YamlIO.mapRequired(::AMDGPU::RuntimeMD::KeyName::ArgKind, + A.Kind); + YamlIO.mapRequired(::AMDGPU::RuntimeMD::KeyName::ArgValueType, + A.ValueType); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::ArgTypeName, + A.TypeName, StringRef()); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::ArgName, + A.Name, StringRef()); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::ArgAddrQual, + A.AddrQual, INVALID_ADDR_QUAL); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::ArgAccQual, + A.AccQual, INVALID_ACC_QUAL); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::ArgIsVolatile, + A.IsVolatile, uint8_t(0)); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::ArgIsConst, + A.IsConst, uint8_t(0)); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::ArgIsRestrict, + A.IsRestrict, uint8_t(0)); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::ArgIsPipe, + A.IsPipe, uint8_t(0)); + } + static const bool flow = true; +}; + +template <> struct MappingTraits { + static void mapping(IO &YamlIO, Kernel &K) { + YamlIO.mapRequired(::AMDGPU::RuntimeMD::KeyName::KernelName, + K.Name); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::Language, + K.Language); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::LanguageVersion, + K.LanguageVersion); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::ReqdWorkGroupSize, + K.ReqdWorkGroupSize); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::WorkGroupSizeHint, + K.WorkGroupSizeHint); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::VecTypeHint, + K.VecTypeHint, std::string()); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::KernelIndex, + K.KernelIndex, INVALID_KERNEL_INDEX); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::NoPartialWorkGroups, + K.NoPartialWorkGroups, uint8_t(0)); + YamlIO.mapRequired(::AMDGPU::RuntimeMD::KeyName::Args, + K.Args); + } + static const bool flow = true; +}; + +template <> struct MappingTraits { + static void mapping(IO &YamlIO, Program &Prog) { + YamlIO.mapRequired(::AMDGPU::RuntimeMD::KeyName::MDVersion, + Prog.MDVersionSeq); + YamlIO.mapOptional(::AMDGPU::RuntimeMD::KeyName::PrintfInfo, + Prog.PrintfInfo); + YamlIO.mapRequired(::AMDGPU::RuntimeMD::KeyName::Kernels, + Prog.Kernels); + } + static const bool flow = true; +}; + +} // end namespace yaml +} // end namespace llvm + + +#endif Index: lib/Target/AMDGPU/AMDGPURuntimeMDYamlMapping.cpp =================================================================== --- /dev/null +++ lib/Target/AMDGPU/AMDGPURuntimeMDYamlMapping.cpp @@ -0,0 +1,294 @@ +//===-- AMDGPURuntimeMDYamlMapping.cpp - Generates runtime metadata -------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +/// \file +/// +/// Generates AMDGPU runtime metadata for YAML mapping. +// +//===----------------------------------------------------------------------===// +// + +#include "AMDGPU.h" +#include "AMDGPURuntimeMDYamlMapping.h" +#include "llvm/IR/Constants.h" +#include "llvm/IR/DataLayout.h" +#include "llvm/IR/Module.h" + +using namespace ::AMDGPU; +using namespace llvm; + +// Get a vector of three integer values from MDNode \p Node; +static std::vector getThreeInt32(MDNode *Node) { + assert(Node->getNumOperands() == 3); + std::vector V; + for (const MDOperand &Op : Node->operands()) { + const ConstantInt *CI = mdconst::extract(Op); + V.push_back(CI->getZExtValue()); + } + return V; +} + +static std::string getOCLTypeName(Type *Ty, bool Signed) { + switch (Ty->getTypeID()) { + case Type::HalfTyID: + return "half"; + case Type::FloatTyID: + return "float"; + case Type::DoubleTyID: + return "double"; + case Type::IntegerTyID: { + if (!Signed) + return (Twine('u') + getOCLTypeName(Ty, true)).str(); + unsigned BW = Ty->getIntegerBitWidth(); + switch (BW) { + case 8: + return "char"; + case 16: + return "short"; + case 32: + return "int"; + case 64: + return "long"; + default: + return (Twine('i') + Twine(BW)).str(); + } + } + case Type::VectorTyID: { + VectorType *VecTy = cast(Ty); + Type *EleTy = VecTy->getElementType(); + unsigned Size = VecTy->getVectorNumElements(); + return (Twine(getOCLTypeName(EleTy, Signed)) + Twine(Size)).str(); + } + default: + return "unknown"; + } +} + +static RuntimeMD::KernelArg::ValueType getRuntimeMDValueType( + Type *Ty, StringRef TypeName) { + switch (Ty->getTypeID()) { + case Type::HalfTyID: + return RuntimeMD::KernelArg::F16; + case Type::FloatTyID: + return RuntimeMD::KernelArg::F32; + case Type::DoubleTyID: + return RuntimeMD::KernelArg::F64; + case Type::IntegerTyID: { + bool Signed = !TypeName.startswith("u"); + switch (Ty->getIntegerBitWidth()) { + case 8: + return Signed ? RuntimeMD::KernelArg::I8 : RuntimeMD::KernelArg::U8; + case 16: + return Signed ? RuntimeMD::KernelArg::I16 : RuntimeMD::KernelArg::U16; + case 32: + return Signed ? RuntimeMD::KernelArg::I32 : RuntimeMD::KernelArg::U32; + case 64: + return Signed ? RuntimeMD::KernelArg::I64 : RuntimeMD::KernelArg::U64; + default: + // Runtime does not recognize other integer types. Report as struct type. + return RuntimeMD::KernelArg::Struct; + } + } + case Type::VectorTyID: + return getRuntimeMDValueType(Ty->getVectorElementType(), TypeName); + case Type::PointerTyID: + return getRuntimeMDValueType(Ty->getPointerElementType(), TypeName); + default: + return RuntimeMD::KernelArg::Struct; + } +} + +static RuntimeMD::KernelArg::AddressSpaceQualifer getRuntimeAddrSpace( + AMDGPUAS::AddressSpaces A) { + switch (A) { + case AMDGPUAS::GLOBAL_ADDRESS: + return RuntimeMD::KernelArg::Global; + case AMDGPUAS::CONSTANT_ADDRESS: + return RuntimeMD::KernelArg::Constant; + case AMDGPUAS::LOCAL_ADDRESS: + return RuntimeMD::KernelArg::Local; + case AMDGPUAS::FLAT_ADDRESS: + return RuntimeMD::KernelArg::Generic; + case AMDGPUAS::REGION_ADDRESS: + return RuntimeMD::KernelArg::Region; + default: + return RuntimeMD::KernelArg::Private; + } +} + +static yaml::Arg getRuntimeMDForKernelArg(const DataLayout &DL, Type *T, + RuntimeMD::KernelArg::Kind Kind, StringRef BaseTypeName = "", + StringRef TypeName = "", StringRef ArgName = "", StringRef TypeQual = "", + StringRef AccQual = "") { + + yaml::Arg Arg; + + // Set ArgSize and ArgAlign. + Arg.Size = DL.getTypeAllocSize(T); + Arg.Align = DL.getABITypeAlignment(T); + if (auto PT = dyn_cast(T)) { + auto ET = PT->getElementType(); + if (PT->getAddressSpace() == AMDGPUAS::LOCAL_ADDRESS && ET->isSized()) + Arg.PointeeAlign = DL.getABITypeAlignment(ET); + } + + // Set ArgTypeName. + Arg.TypeName = TypeName; + + // Set ArgName. + Arg.Name = ArgName; + + // Set ArgIsVolatile, ArgIsRestrict, ArgIsConst and ArgIsPipe. + SmallVector SplitQ; + TypeQual.split(SplitQ, " ", -1, false /* Drop empty entry */); + + for (StringRef KeyName : SplitQ) { + auto *P = StringSwitch(KeyName) + .Case("volatile", &Arg.IsVolatile) + .Case("restrict", &Arg.IsRestrict) + .Case("const", &Arg.IsConst) + .Case("pipe", &Arg.IsPipe) + .Default(nullptr); + if (P) + *P = 1; + } + + // Set ArgKind. + Arg.Kind = Kind; + + // Set ArgValueType. + Arg.ValueType = getRuntimeMDValueType(T, BaseTypeName); + + // Set ArgAccQual. + if (!AccQual.empty()) + Arg.AccQual = StringSwitch(AccQual) + .Case("read_only", RuntimeMD::KernelArg::ReadOnly) + .Case("write_only", RuntimeMD::KernelArg::WriteOnly) + .Case("read_write", RuntimeMD::KernelArg::ReadWrite) + .Default(RuntimeMD::KernelArg::None); + + // Set ArgAddrQual. + if (auto *PT = dyn_cast(T)) + Arg.AddrQual = getRuntimeAddrSpace(static_cast( + PT->getAddressSpace())); + + return Arg; +} + +static yaml::Kernel getRuntimeMDForKernel(const Function &F) { + yaml::Kernel Kernel; + Kernel.Name = F.getName(); + auto &M = *F.getParent(); + + // Set Language and LanguageVersion. + if (auto MD = M.getNamedMetadata("opencl.ocl.version")) { + if (MD->getNumOperands() != 0) { + auto Node = MD->getOperand(0); + if (Node->getNumOperands() > 1) { + Kernel.Language = "OpenCL C"; + uint16_t Major = mdconst::extract(Node->getOperand(0)) + ->getZExtValue(); + uint16_t Minor = mdconst::extract(Node->getOperand(1)) + ->getZExtValue(); + Kernel.LanguageVersion.push_back(Major); + Kernel.LanguageVersion.push_back(Minor); + } + } + } + + const DataLayout &DL = F.getParent()->getDataLayout(); + for (auto &Arg : F.args()) { + unsigned I = Arg.getArgNo(); + Type *T = Arg.getType(); + auto TypeName = dyn_cast(F.getMetadata( + "kernel_arg_type")->getOperand(I))->getString(); + auto BaseTypeName = cast(F.getMetadata( + "kernel_arg_base_type")->getOperand(I))->getString(); + StringRef ArgName; + if (auto ArgNameMD = F.getMetadata("kernel_arg_name")) + ArgName = cast(ArgNameMD->getOperand(I))->getString(); + auto TypeQual = cast(F.getMetadata( + "kernel_arg_type_qual")->getOperand(I))->getString(); + auto AccQual = cast(F.getMetadata( + "kernel_arg_access_qual")->getOperand(I))->getString(); + RuntimeMD::KernelArg::Kind Kind; + if (TypeQual.find("pipe") != StringRef::npos) + Kind = RuntimeMD::KernelArg::Pipe; + else Kind = StringSwitch(BaseTypeName) + .Case("sampler_t", RuntimeMD::KernelArg::Sampler) + .Case("queue_t", RuntimeMD::KernelArg::Queue) + .Cases("image1d_t", "image1d_array_t", "image1d_buffer_t", + "image2d_t" , "image2d_array_t", RuntimeMD::KernelArg::Image) + .Cases("image2d_depth_t", "image2d_array_depth_t", + "image2d_msaa_t", "image2d_array_msaa_t", + "image2d_msaa_depth_t", RuntimeMD::KernelArg::Image) + .Cases("image2d_array_msaa_depth_t", "image3d_t", + RuntimeMD::KernelArg::Image) + .Default(isa(T) ? + (T->getPointerAddressSpace() == AMDGPUAS::LOCAL_ADDRESS ? + RuntimeMD::KernelArg::DynamicSharedPointer : + RuntimeMD::KernelArg::GlobalBuffer) : + RuntimeMD::KernelArg::ByValue); + Kernel.Args.emplace_back(getRuntimeMDForKernelArg(DL, T, Kind, + BaseTypeName, TypeName, ArgName, TypeQual, AccQual)); + } + + // Emit hidden kernel arguments for OpenCL kernels. + if (F.getParent()->getNamedMetadata("opencl.ocl.version")) { + auto Int64T = Type::getInt64Ty(F.getContext()); + Kernel.Args.emplace_back(getRuntimeMDForKernelArg(DL, Int64T, + RuntimeMD::KernelArg::HiddenGlobalOffsetX)); + Kernel.Args.emplace_back(getRuntimeMDForKernelArg(DL, Int64T, + RuntimeMD::KernelArg::HiddenGlobalOffsetY)); + Kernel.Args.emplace_back(getRuntimeMDForKernelArg(DL, Int64T, + RuntimeMD::KernelArg::HiddenGlobalOffsetZ)); + if (F.getParent()->getNamedMetadata("llvm.printf.fmts")) { + auto Int8PtrT = Type::getInt8PtrTy(F.getContext(), + RuntimeMD::KernelArg::Global); + Kernel.Args.emplace_back(getRuntimeMDForKernelArg(DL, Int8PtrT, + RuntimeMD::KernelArg::HiddenPrintfBuffer)); + } + } + + // Set ReqdWorkGroupSize, WorkGroupSizeHint, and VecTypeHint. + if (auto RWGS = F.getMetadata("reqd_work_group_size")) + Kernel.ReqdWorkGroupSize = getThreeInt32(RWGS); + + if (auto WGSH = F.getMetadata("work_group_size_hint")) + Kernel.WorkGroupSizeHint = getThreeInt32(WGSH); + + if (auto VTH = F.getMetadata("vec_type_hint")) + Kernel.VecTypeHint = getOCLTypeName(cast( + VTH->getOperand(0))->getType(), mdconst::extract( + VTH->getOperand(1))->getZExtValue()); + + return Kernel; +} + +yaml::Program::Program(Module &M) { + MDVersionSeq.push_back(::AMDGPU::RuntimeMD::MDVersion); + MDVersionSeq.push_back(::AMDGPU::RuntimeMD::MDRevision); + + // Set PrintfInfo. + if (auto MD = M.getNamedMetadata("llvm.printf.fmts")) { + for (unsigned I = 0; I < MD->getNumOperands(); ++I) { + auto Node = MD->getOperand(I); + if (Node->getNumOperands() > 0) + PrintfInfo.push_back(cast(Node->getOperand(0)) + ->getString()); + } + } + + // Set Kernels. + for (auto &F: M.functions()) { + if (!F.getMetadata("kernel_arg_type")) + continue; + Kernels.emplace_back(getRuntimeMDForKernel(F)); + } +} Index: lib/Target/AMDGPU/AMDGPURuntimeMetadata.h =================================================================== --- lib/Target/AMDGPU/AMDGPURuntimeMetadata.h +++ lib/Target/AMDGPU/AMDGPURuntimeMetadata.h @@ -44,62 +44,40 @@ namespace RuntimeMD { // Version and revision of runtime metadata - const unsigned char MDVersion = 1; + const unsigned char MDVersion = 2; const unsigned char MDRevision = 0; // ELF section name containing runtime metadata const char SectionName[] = ".AMDGPU.runtime_metadata"; - // Enumeration values of keys in runtime metadata. - enum Key { - KeyNull = 0, // Place holder. Ignored when encountered - KeyMDVersion = 1, // Runtime metadata version - KeyLanguage = 2, // Language - KeyLanguageVersion = 3, // Language version - KeyKernelBegin = 4, // Beginning of kernel-level stream - KeyKernelEnd = 5, // End of kernel-level stream - KeyKernelName = 6, // Kernel name - KeyArgBegin = 7, // Beginning of kernel-arg-level stream - KeyArgEnd = 8, // End of kernel-arg-level stream - KeyArgSize = 9, // Kernel arg size - KeyArgAlign = 10, // Kernel arg alignment - KeyArgTypeName = 11, // Kernel type name - KeyArgName = 12, // Kernel name - KeyArgKind = 13, // Kernel argument kind - KeyArgValueType = 14, // Kernel argument value type - KeyArgAddrQual = 15, // Kernel argument address qualifier - KeyArgAccQual = 16, // Kernel argument access qualifier - KeyArgIsConst = 17, // Kernel argument is const qualified - KeyArgIsRestrict = 18, // Kernel argument is restrict qualified - KeyArgIsVolatile = 19, // Kernel argument is volatile qualified - KeyArgIsPipe = 20, // Kernel argument is pipe qualified - KeyReqdWorkGroupSize = 21, // Required work group size - KeyWorkGroupSizeHint = 22, // Work group size hint - KeyVecTypeHint = 23, // Vector type hint - KeyKernelIndex = 24, // Kernel index for device enqueue - KeyMinWavesPerSIMD = 25, // Minimum number of waves per SIMD - KeyMaxWavesPerSIMD = 26, // Maximum number of waves per SIMD - KeyFlatWorkGroupSizeLimits = 27, // Flat work group size limits - KeyMaxWorkGroupSize = 28, // Maximum work group size - KeyNoPartialWorkGroups = 29, // No partial work groups - KeyPrintfInfo = 30, // Prinf function call information - KeyArgActualAcc = 31, // The actual kernel argument access qualifier - KeyArgPointeeAlign = 32, // Alignment of pointee type - }; - - enum Language : uint8_t { - OpenCL_C = 0, - HCC = 1, - OpenMP = 2, - OpenCL_CPP = 3, -}; - - enum LanguageVersion : uint16_t { - V100 = 100, - V110 = 110, - V120 = 120, - V200 = 200, - V210 = 210, + // Name of keys for runtime metadata. + namespace KeyName { + const char MDVersion[] = "amd.MDVersion"; // Runtime metadata version + const char Language[] = "amd.Language"; // Language + const char LanguageVersion[] = "amd.LanguageVersion"; // Language version + const char Kernels[] = "amd.Kernels"; // Kernels + const char KernelName[] = "amd.KernelName"; // Kernel name + const char Args[] = "amd.Args"; // Kernel arguments + const char ArgSize[] = "amd.ArgSize"; // Kernel arg size + const char ArgAlign[] = "amd.ArgAlign"; // Kernel arg alignment + const char ArgTypeName[] = "amd.ArgTypeName"; // Kernel type name + const char ArgName[] = "amd.ArgName"; // Kernel name + const char ArgKind[] = "amd.ArgKind"; // Kernel argument kind + const char ArgValueType[] = "amd.ArgValueType"; // Kernel argument value type + const char ArgAddrQual[] = "amd.ArgAddrQual"; // Kernel argument address qualifier + const char ArgAccQual[] = "amd.ArgAccQual"; // Kernel argument access qualifier + const char ArgIsConst[] = "amd.ArgIsConst"; // Kernel argument is const qualified + const char ArgIsRestrict[] = "amd.ArgIsRestrict"; // Kernel argument is restrict qualified + const char ArgIsVolatile[] = "amd.ArgIsVolatile"; // Kernel argument is volatile qualified + const char ArgIsPipe[] = "amd.ArgIsPipe"; // Kernel argument is pipe qualified + const char ReqdWorkGroupSize[] = "amd.ReqdWorkGroupSize"; // Required work group size + const char WorkGroupSizeHint[] = "amd.WorkGroupSizeHint"; // Work group size hint + const char VecTypeHint[] = "amd.VecTypeHint"; // Vector type hint + const char KernelIndex[] = "amd.KernelIndex"; // Kernel index for device enqueue + const char NoPartialWorkGroups[] = "amd.NoPartialWorkGroups"; // No partial work groups + const char PrintfInfo[] = "amd.PrintfInfo"; // Prinf function call information + const char ArgActualAcc[] = "amd.ArgActualAcc"; // The actual kernel argument access qualifier + const char ArgPointeeAlign[] = "amd.ArgPointeeAlign"; // Alignment of pointee type }; namespace KernelArg { Index: lib/Target/AMDGPU/CMakeLists.txt =================================================================== --- lib/Target/AMDGPU/CMakeLists.txt +++ lib/Target/AMDGPU/CMakeLists.txt @@ -41,6 +41,7 @@ AMDGPUMCInstLower.cpp AMDGPUMachineFunction.cpp AMDGPUOpenCLImageTypeLoweringPass.cpp + AMDGPURuntimeMDYamlMapping.cpp AMDGPUSubtarget.cpp AMDGPUTargetMachine.cpp AMDGPUTargetTransformInfo.cpp Index: test/CodeGen/AMDGPU/invalid-opencl-version-metadata1.ll =================================================================== --- test/CodeGen/AMDGPU/invalid-opencl-version-metadata1.ll +++ test/CodeGen/AMDGPU/invalid-opencl-version-metadata1.ll @@ -2,7 +2,5 @@ ; check llc does not crash for invalid opencl version metadata ; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .short 256 !opencl.ocl.version = !{} Index: test/CodeGen/AMDGPU/invalid-opencl-version-metadata2.ll =================================================================== --- test/CodeGen/AMDGPU/invalid-opencl-version-metadata2.ll +++ test/CodeGen/AMDGPU/invalid-opencl-version-metadata2.ll @@ -2,8 +2,6 @@ ; check llc does not crash for invalid opencl version metadata ; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .short 256 !opencl.ocl.version = !{!0} !0 = !{} Index: test/CodeGen/AMDGPU/invalid-opencl-version-metadata3.ll =================================================================== --- test/CodeGen/AMDGPU/invalid-opencl-version-metadata3.ll +++ test/CodeGen/AMDGPU/invalid-opencl-version-metadata3.ll @@ -2,8 +2,6 @@ ; check llc does not crash for invalid opencl version metadata ; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .short 256 !opencl.ocl.version = !{!0} !0 = !{i32 1} Index: test/CodeGen/AMDGPU/runtime-metadata.ll =================================================================== --- test/CodeGen/AMDGPU/runtime-metadata.ll +++ test/CodeGen/AMDGPU/runtime-metadata.ll @@ -9,2465 +9,127 @@ %struct.B = type { i32 addrspace(1)*} %opencl.clk_event_t = type opaque -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .short 256 -; CHECK-NEXT: .byte 2 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 3 -; CHECK-NEXT: .short 200 -; CHECK-NEXT: .byte 30 -; CHECK-NEXT: .long 10 -; CHECK-NEXT: .ascii "1:1:4:%d\\n" -; CHECK-NEXT: .byte 30 -; CHECK-NEXT: .long 10 -; CHECK-NEXT: .ascii "2:1:8:%g\\n" - -; CHECK-LABEL:{{^}}test_char: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 9 -; CHECK-NEXT: .ascii "test_char" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 1 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 1 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .ascii "char" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_char(i8 %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !9 !kernel_arg_base_type !9 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_ushort2: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 12 -; CHECK-NEXT: .ascii "test_ushort2" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 7 -; CHECK-NEXT: .ascii "ushort2" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 4 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_ushort2(<2 x i16> %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !10 !kernel_arg_base_type !10 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_int3: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 9 -; CHECK-NEXT: .ascii "test_int3" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 16 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 16 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .ascii "int3" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_int3(<3 x i32> %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !11 !kernel_arg_base_type !11 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_ulong4: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 11 -; CHECK-NEXT: .ascii "test_ulong4" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 32 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 32 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 6 -; CHECK-NEXT: .ascii "ulong4" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 10 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_ulong4(<4 x i64> %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !12 !kernel_arg_base_type !12 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_half8: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 10 -; CHECK-NEXT: .ascii "test_half8" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 16 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 16 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 5 -; CHECK-NEXT: .ascii "half8" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 5 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_half8(<8 x half> %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !13 !kernel_arg_base_type !13 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_float16: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 12 -; CHECK-NEXT: .ascii "test_float16" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 64 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 64 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 7 -; CHECK-NEXT: .ascii "float16" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 8 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_float16(<16 x float> %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !14 !kernel_arg_base_type !14 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_double16: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 13 -; CHECK-NEXT: .ascii "test_double16" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 128 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 128 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .ascii "double16" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 11 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_double16(<16 x double> %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !15 !kernel_arg_base_type !15 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_pointer: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 12 -; CHECK-NEXT: .ascii "test_pointer" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 5 -; CHECK-NEXT: .ascii "int *" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_pointer(i32 addrspace(1)* %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !16 !kernel_arg_base_type !16 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_image: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 10 -; CHECK-NEXT: .ascii "test_image" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 9 -; CHECK-NEXT: .ascii "image2d_t" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 0 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_image(%opencl.image2d_t addrspace(1)* %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !17 !kernel_arg_base_type !17 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_sampler: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 12 -; CHECK-NEXT: .ascii "test_sampler" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 9 -; CHECK-NEXT: .ascii "sampler_t" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 3 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_sampler(i32 %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !18 !kernel_arg_base_type !18 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_queue: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 10 -; CHECK-NEXT: .ascii "test_queue" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 7 -; CHECK-NEXT: .ascii "queue_t" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 0 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_queue(%opencl.queue_t addrspace(1)* %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !19 !kernel_arg_base_type !19 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_struct: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 11 -; CHECK-NEXT: .ascii "test_struct" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .ascii "struct A" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 0 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_struct(%struct.A* byval %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !20 !kernel_arg_base_type !20 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_i128: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 9 -; CHECK-NEXT: .ascii "test_i128" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 16 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .ascii "i128" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 0 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_i128(i128 %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !21 !kernel_arg_base_type !21 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_multi_arg: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 14 -; CHECK-NEXT: .ascii "test_multi_arg" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 3 -; CHECK-NEXT: .ascii "int" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 6 -; CHECK-NEXT: .ascii "short2" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 3 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 5 -; CHECK-NEXT: .ascii "char3" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_multi_arg(i32 %a, <2 x i16> %b, <3 x i8> %c) !kernel_arg_addr_space !22 !kernel_arg_access_qual !23 !kernel_arg_type !24 !kernel_arg_base_type !24 !kernel_arg_type_qual !25 { ret void } -; CHECK-LABEL:{{^}}test_addr_space: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 15 -; CHECK-NEXT: .ascii "test_addr_space" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 5 -; CHECK-NEXT: .ascii "int *" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 5 -; CHECK-NEXT: .ascii "int *" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 2 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 32 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 5 -; CHECK-NEXT: .ascii "int *" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 2 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 3 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_addr_space(i32 addrspace(1)* %g, i32 addrspace(2)* %c, i32 addrspace(3)* %l) !kernel_arg_addr_space !50 !kernel_arg_access_qual !23 !kernel_arg_type !51 !kernel_arg_base_type !51 !kernel_arg_type_qual !25 { ret void } -; CHECK-LABEL:{{^}}test_type_qual: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 14 -; CHECK-NEXT: .ascii "test_type_qual" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 5 -; CHECK-NEXT: .ascii "int *" -; CHECK-NEXT: .byte 19 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 5 -; CHECK-NEXT: .ascii "int *" -; CHECK-NEXT: .byte 17 -; CHECK-NEXT: .byte 18 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 5 -; CHECK-NEXT: .ascii "int *" -; CHECK-NEXT: .byte 20 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 5 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 0 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_type_qual(i32 addrspace(1)* %a, i32 addrspace(1)* %b, %opencl.pipe_t addrspace(1)* %c) !kernel_arg_addr_space !22 !kernel_arg_access_qual !23 !kernel_arg_type !51 !kernel_arg_base_type !51 !kernel_arg_type_qual !70 { ret void } -; CHECK-LABEL:{{^}}test_access_qual: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 16 -; CHECK-NEXT: .ascii "test_access_qual" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 9 -; CHECK-NEXT: .ascii "image1d_t" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 0 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 9 -; CHECK-NEXT: .ascii "image2d_t" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 0 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 2 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 9 -; CHECK-NEXT: .ascii "image3d_t" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 0 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 3 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_access_qual(%opencl.image1d_t addrspace(1)* %ro, %opencl.image2d_t addrspace(1)* %wo, %opencl.image3d_t addrspace(1)* %rw) !kernel_arg_addr_space !60 !kernel_arg_access_qual !61 !kernel_arg_type !62 !kernel_arg_base_type !62 !kernel_arg_type_qual !25 { ret void } -; CHECK-LABEL:{{^}}test_vec_type_hint_half: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 23 -; CHECK-NEXT: .ascii "test_vec_type_hint_half" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 3 -; CHECK-NEXT: .ascii "int" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 23 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .ascii "half" -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_vec_type_hint_half(i32 %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !26 { ret void } -; CHECK-LABEL:{{^}}test_vec_type_hint_float: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 24 -; CHECK-NEXT: .ascii "test_vec_type_hint_float" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 3 -; CHECK-NEXT: .ascii "int" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 23 -; CHECK-NEXT: .long 5 -; CHECK-NEXT: .ascii "float" -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_vec_type_hint_float(i32 %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !27 { ret void } -; CHECK-LABEL:{{^}}test_vec_type_hint_double: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 25 -; CHECK-NEXT: .ascii "test_vec_type_hint_double" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 3 -; CHECK-NEXT: .ascii "int" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 23 -; CHECK-NEXT: .long 6 -; CHECK-NEXT: .ascii "double" -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_vec_type_hint_double(i32 %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !28 { ret void } -; CHECK-LABEL:{{^}}test_vec_type_hint_char: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 23 -; CHECK-NEXT: .ascii "test_vec_type_hint_char" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 3 -; CHECK-NEXT: .ascii "int" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 23 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .ascii "char" -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_vec_type_hint_char(i32 %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !29 { ret void } -; CHECK-LABEL:{{^}}test_vec_type_hint_short: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 24 -; CHECK-NEXT: .ascii "test_vec_type_hint_short" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 3 -; CHECK-NEXT: .ascii "int" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 23 -; CHECK-NEXT: .long 5 -; CHECK-NEXT: .ascii "short" -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_vec_type_hint_short(i32 %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !30 { ret void } -; CHECK-LABEL:{{^}}test_vec_type_hint_long: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 23 -; CHECK-NEXT: .ascii "test_vec_type_hint_long" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 3 -; CHECK-NEXT: .ascii "int" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 23 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .ascii "long" -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_vec_type_hint_long(i32 %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !31 { ret void } -; CHECK-LABEL:{{^}}test_vec_type_hint_unknown: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 26 -; CHECK-NEXT: .ascii "test_vec_type_hint_unknown" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 3 -; CHECK-NEXT: .ascii "int" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 23 -; CHECK-NEXT: .long 7 -; CHECK-NEXT: .ascii "unknown" -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_vec_type_hint_unknown(i32 %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !32 { ret void } -; CHECK-LABEL:{{^}}test_reqd_wgs_vec_type_hint: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 27 -; CHECK-NEXT: .ascii "test_reqd_wgs_vec_type_hint" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 3 -; CHECK-NEXT: .ascii "int" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 21 -; CHECK-NEXT: .long 1 -; CHECK-NEXT: .long 2 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 23 -; CHECK-NEXT: .long 3 -; CHECK-NEXT: .ascii "int" -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_reqd_wgs_vec_type_hint(i32 %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !5 !reqd_work_group_size !6 { ret void } -; CHECK-LABEL:{{^}}test_wgs_hint_vec_type_hint: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 27 -; CHECK-NEXT: .ascii "test_wgs_hint_vec_type_hint" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 3 -; CHECK-NEXT: .ascii "int" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 22 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .long 16 -; CHECK-NEXT: .long 32 -; CHECK-NEXT: .byte 23 -; CHECK-NEXT: .long 5 -; CHECK-NEXT: .ascii "uint4" -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_wgs_hint_vec_type_hint(i32 %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !7 !work_group_size_hint !8 { ret void } -; CHECK-LABEL:{{^}}test_arg_ptr_to_ptr: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 19 -; CHECK-NEXT: .ascii "test_arg_ptr_to_ptr" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 6 -; CHECK-NEXT: .ascii "int **" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_arg_ptr_to_ptr(i32 * addrspace(1)* %a) !kernel_arg_addr_space !81 !kernel_arg_access_qual !2 !kernel_arg_type !80 !kernel_arg_base_type !80 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_arg_struct_contains_ptr: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 28 -; CHECK-NEXT: .ascii "test_arg_struct_contains_ptr" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .ascii "struct B" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 0 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_arg_struct_contains_ptr(%struct.B * byval %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !82 !kernel_arg_base_type !82 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_arg_vector_of_ptr: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 22 -; CHECK-NEXT: .ascii "test_arg_vector_of_ptr" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 16 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 16 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 47 -; CHECK-NEXT: .ascii "global int* __attribute__((ext_vector_type(2)))" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 6 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_arg_vector_of_ptr(<2 x i32 addrspace(1)*> %a) !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !83 !kernel_arg_base_type !83 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_arg_unknown_builtin_type: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 29 -; CHECK-NEXT: .ascii "test_arg_unknown_builtin_type" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 11 -; CHECK-NEXT: .ascii "clk_event_t" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 0 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_arg_unknown_builtin_type(%opencl.clk_event_t addrspace(1)* %a) !kernel_arg_addr_space !81 !kernel_arg_access_qual !2 !kernel_arg_type !84 !kernel_arg_base_type !84 !kernel_arg_type_qual !4 { ret void } -; CHECK-LABEL:{{^}}test_pointee_align: -; CHECK: .section .AMDGPU.runtime_metadata -; CHECK-NEXT: .byte 4 -; CHECK-NEXT: .byte 6 -; CHECK-NEXT: .long 18 -; CHECK-NEXT: .ascii "test_pointee_align" -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 6 -; CHECK-NEXT: .ascii "long *" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 32 -; CHECK-NEXT: .long 1 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 6 -; CHECK-NEXT: .ascii "char *" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 2 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 3 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 32 -; CHECK-NEXT: .long 2 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 7 -; CHECK-NEXT: .ascii "char2 *" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 2 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 3 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 32 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 7 -; CHECK-NEXT: .ascii "char3 *" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 2 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 3 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 32 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 7 -; CHECK-NEXT: .ascii "char4 *" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 2 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 3 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 32 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 7 -; CHECK-NEXT: .ascii "char8 *" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 2 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 3 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 4 -; CHECK-NEXT: .byte 32 -; CHECK-NEXT: .long 16 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .ascii "char16 *" -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 2 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 16 -; CHECK-NEXT: .byte 0 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 3 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 9 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 7 -; CHECK-NEXT: .byte 9 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 10 -; CHECK-NEXT: .long 8 -; CHECK-NEXT: .byte 13 -; CHECK-NEXT: .byte 11 -; CHECK-NEXT: .byte 14 -; CHECK-NEXT: .short 1 -; CHECK-NEXT: .byte 15 -; CHECK-NEXT: .byte 1 -; CHECK-NEXT: .byte 8 -; CHECK-NEXT: .byte 5 - define amdgpu_kernel void @test_pointee_align(i64 addrspace(1)* %a, i8 addrspace(3)* %b, <2 x i8> addrspace(3)* %c, <3 x i8> addrspace(3)* %d, <4 x i8> addrspace(3)* %e, <8 x i8> addrspace(3)* %f, <16 x i8> addrspace(3)* %g) !kernel_arg_addr_space !91 !kernel_arg_access_qual !92 !kernel_arg_type !93 !kernel_arg_base_type !93 !kernel_arg_type_qual !94 { ret void } @@ -2525,3 +187,6 @@ !94 = !{!"", !"", !"", !"", !"", !"", !""} !100 = !{!"1:1:4:%d\5Cn"} !101 = !{!"2:1:8:%g\5Cn"} + +; CHECK: .section .AMDGPU.runtime_metadata +; CHECK-NEXT: .ascii "---\n{ amd.MDVersion: [ 2, 0 ], amd.PrintfInfo: [ '1:1:4:%d\\n', '2:1:8:%g\\n' ], amd.Kernels: [ { amd.KernelName: test_char, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 1, amd.ArgAlign: 1, amd.ArgKind: 0, amd.ArgValueType: 1, amd.ArgTypeName: char, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_ushort2, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 4, amd.ArgTypeName: ushort2, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_int3, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 16, amd.ArgAlign: 16, amd.ArgKind: 0, amd.ArgValueType: 6, amd.ArgTypeName: int3, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_ulong4, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 32, amd.ArgAlign: 32, amd.ArgKind: 0, amd.ArgValueType: 10, amd.ArgTypeName: ulong4, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_half8, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 16, amd.ArgAlign: 16, amd.ArgKind: 0, amd.ArgValueType: 5, amd.ArgTypeName: half8, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_float16, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 64, amd.ArgAlign: 64, amd.ArgKind: 0, amd.ArgValueType: 8, amd.ArgTypeName: float16, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_double16, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 128, amd.ArgAlign: 128, amd.ArgKind: 0, amd.ArgValueType: 11, amd.ArgTypeName: double16, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_pointer, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 1, amd.ArgValueType: 6, amd.ArgTypeName: 'int *', amd.ArgAddrQual: 1, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_image, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 4, amd.ArgValueType: 0, amd.ArgTypeName: image2d_t, amd.ArgAddrQual: 1, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_sampler, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 3, amd.ArgValueType: 6, amd.ArgTypeName: sampler_t, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_queue, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 6, amd.ArgValueType: 0, amd.ArgTypeName: queue_t, amd.ArgAddrQual: 1, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_struct, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 1, amd.ArgValueType: 0, amd.ArgTypeName: struct A, amd.ArgAddrQual: 0, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_i128, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 16, amd.ArgAlign: 8, amd.ArgKind: 0, amd.ArgValueType: 0, amd.ArgTypeName: i128, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_multi_arg, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 6, amd.ArgTypeName: int, amd.ArgAccQual: 0 }, { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 3, amd.ArgTypeName: short2, amd.ArgAccQual: 0 }, { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 1, amd.ArgTypeName: char3, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_addr_space, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 1, amd.ArgValueType: 6, amd.ArgTypeName: 'int *', amd.ArgAddrQual: 1, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 1, amd.ArgValueType: 6, amd.ArgTypeName: 'int *', amd.ArgAddrQual: 2, amd.ArgAccQual: 0 }, { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgPointeeAlign: 4, amd.ArgKind: 2, amd.ArgValueType: 6, amd.ArgTypeName: 'int *', amd.ArgAddrQual: 3, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_type_qual, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 1, amd.ArgValueType: 6, amd.ArgTypeName: 'int *', amd.ArgAddrQual: 1, amd.ArgAccQual: 0, amd.ArgIsVolatile: 1 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 1, amd.ArgValueType: 6, amd.ArgTypeName: 'int *', amd.ArgAddrQual: 1, amd.ArgAccQual: 0, amd.ArgIsConst: 1, amd.ArgIsRestrict: 1 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 5, amd.ArgValueType: 0, amd.ArgTypeName: 'int *', amd.ArgAddrQual: 1, amd.ArgAccQual: 0, amd.ArgIsPipe: 1 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_access_qual, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 4, amd.ArgValueType: 0, amd.ArgTypeName: image1d_t, amd.ArgAddrQual: 1, amd.ArgAccQual: 1 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 4, amd.ArgValueType: 0, amd.ArgTypeName: image2d_t, amd.ArgAddrQual: 1, amd.ArgAccQual: 2 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 4, amd.ArgValueType: 0, amd.ArgTypeName: image3d_t, amd.ArgAddrQual: 1, amd.ArgAccQual: 3 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_vec_type_hint_half, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.VecTypeHint: half, amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 6, amd.ArgTypeName: int, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_vec_type_hint_float, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.VecTypeHint: float, amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 6, amd.ArgTypeName: int, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_vec_type_hint_double, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.VecTypeHint: double, amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 6, amd.ArgTypeName: int, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_vec_type_hint_char, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.VecTypeHint: char, amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 6, amd.ArgTypeName: int, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_vec_type_hint_short, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.VecTypeHint: short, amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 6, amd.ArgTypeName: int, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_vec_type_hint_long, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.VecTypeHint: long, amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 6, amd.ArgTypeName: int, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_vec_type_hint_unknown, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.VecTypeHint: unknown, amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 6, amd.ArgTypeName: int, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_reqd_wgs_vec_type_hint, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.ReqdWorkGroupSize: [ 1, 2, 4 ], amd.VecTypeHint: int, amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 6, amd.ArgTypeName: int, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_wgs_hint_vec_type_hint, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.WorkGroupSizeHint: [ 8, 16, 32 ], amd.VecTypeHint: uint4, amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 0, amd.ArgValueType: 6, amd.ArgTypeName: int, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_arg_ptr_to_ptr, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 1, amd.ArgValueType: 6, amd.ArgTypeName: 'int **', amd.ArgAddrQual: 1, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_arg_struct_contains_ptr, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgKind: 1, amd.ArgValueType: 0, amd.ArgTypeName: struct B, amd.ArgAddrQual: 0, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_arg_vector_of_ptr, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 16, amd.ArgAlign: 16, amd.ArgKind: 0, amd.ArgValueType: 6, amd.ArgTypeName: 'global int* __attribute__((ext_vector_type(2)))', amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_arg_unknown_builtin_type, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 1, amd.ArgValueType: 0, amd.ArgTypeName: clk_event_t, amd.ArgAddrQual: 1, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] }, { amd.KernelName: test_pointee_align, amd.Language: OpenCL C, amd.LanguageVersion: [ 2, 0 ], amd.Args: [ { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 1, amd.ArgValueType: 9, amd.ArgTypeName: 'long *', amd.ArgAddrQual: 1, amd.ArgAccQual: 0 }, { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgPointeeAlign: 1, amd.ArgKind: 2, amd.ArgValueType: 1, amd.ArgTypeName: 'char *', amd.ArgAddrQual: 3, amd.ArgAccQual: 0 }, { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgPointeeAlign: 2, amd.ArgKind: 2, amd.ArgValueType: 1, amd.ArgTypeName: 'char2 *', amd.ArgAddrQual: 3, amd.ArgAccQual: 0 }, { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgPointeeAlign: 4, amd.ArgKind: 2, amd.ArgValueType: 1, amd.ArgTypeName: 'char3 *', amd.ArgAddrQual: 3, amd.ArgAccQual: 0 }, { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgPointeeAlign: 4, amd.ArgKind: 2, amd.ArgValueType: 1, amd.ArgTypeName: 'char4 *', amd.ArgAddrQual: 3, amd.ArgAccQual: 0 }, { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgPointeeAlign: 8, amd.ArgKind: 2, amd.ArgValueType: 1, amd.ArgTypeName: 'char8 *', amd.ArgAddrQual: 3, amd.ArgAccQual: 0 }, { amd.ArgSize: 4, amd.ArgAlign: 4, amd.ArgPointeeAlign: 16, amd.ArgKind: 2, amd.ArgValueType: 1, amd.ArgTypeName: 'char16 *', amd.ArgAddrQual: 3, amd.ArgAccQual: 0 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 7, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 8, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 9, amd.ArgValueType: 9 }, { amd.ArgSize: 8, amd.ArgAlign: 8, amd.ArgKind: 11, amd.ArgValueType: 1, amd.ArgAddrQual: 1 } ] } ] }\n...\n"