1f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===-- AMDGPUTargetStreamer.cpp - Mips Target Streamer Methods -----------===// 2f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// 3f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// The LLVM Compiler Infrastructure 4f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// 5f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source 6f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// License. See LICENSE.TXT for details. 7f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// 8f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===// 9f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// 10f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// This file provides AMDGPU specific target streamer methods. 11f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// 12f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===// 13f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 14f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "AMDGPUTargetStreamer.h" 15f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "SIDefines.h" 16f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "Utils/AMDGPUBaseInfo.h" 17f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/ADT/Twine.h" 18f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/MC/MCContext.h" 19f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/MC/MCELFStreamer.h" 20f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/MC/MCObjectFileInfo.h" 21f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/MC/MCSectionELF.h" 22f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/Support/ELF.h" 23f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/Support/FormattedStream.h" 24f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 25f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarusing namespace llvm; 26f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 27f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetStreamer::AMDGPUTargetStreamer(MCStreamer &S) 28f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar : MCTargetStreamer(S) { } 29f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 30f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===// 31f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// AMDGPUTargetAsmStreamer 32f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===// 33f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 34f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetAsmStreamer::AMDGPUTargetAsmStreamer(MCStreamer &S, 35f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar formatted_raw_ostream &OS) 36f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar : AMDGPUTargetStreamer(S), OS(OS) { } 37f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 38f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid 39f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetAsmStreamer::EmitDirectiveHSACodeObjectVersion(uint32_t Major, 40f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar uint32_t Minor) { 41f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS << "\t.hsa_code_object_version " << 42f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Twine(Major) << "," << Twine(Minor) << '\n'; 43f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 44f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 45f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid 46f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetAsmStreamer::EmitDirectiveHSACodeObjectISA(uint32_t Major, 47f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar uint32_t Minor, 48f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar uint32_t Stepping, 49f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar StringRef VendorName, 50f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar StringRef ArchName) { 51f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS << "\t.hsa_code_object_isa " << 52f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Twine(Major) << "," << Twine(Minor) << "," << Twine(Stepping) << 53f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar ",\"" << VendorName << "\",\"" << ArchName << "\"\n"; 54f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 55f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 56f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 57f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid 58f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetAsmStreamer::EmitAMDKernelCodeT(const amd_kernel_code_t &Header) { 59f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar uint64_t ComputePgmRsrc2 = (Header.compute_pgm_resource_registers >> 32); 60f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool EnableSGPRPrivateSegmentBuffer = (Header.code_properties & 61f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_ENABLE_SGPR_PRIVATE_SEGMENT_BUFFER); 62f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool EnableSGPRDispatchPtr = (Header.code_properties & 63f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_ENABLE_SGPR_DISPATCH_PTR); 64f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool EnableSGPRQueuePtr = (Header.code_properties & 65f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_ENABLE_SGPR_QUEUE_PTR); 66f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool EnableSGPRKernargSegmentPtr = (Header.code_properties & 67f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_ENABLE_SGPR_KERNARG_SEGMENT_PTR); 68f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool EnableSGPRDispatchID = (Header.code_properties & 69f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_ENABLE_SGPR_DISPATCH_ID); 70f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool EnableSGPRFlatScratchInit = (Header.code_properties & 71f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_ENABLE_SGPR_FLAT_SCRATCH_INIT); 72f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool EnableSGPRPrivateSegmentSize = (Header.code_properties & 73f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_ENABLE_SGPR_PRIVATE_SEGMENT_SIZE); 74f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool EnableSGPRGridWorkgroupCountX = (Header.code_properties & 75f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_ENABLE_SGPR_GRID_WORKGROUP_COUNT_X); 76f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool EnableSGPRGridWorkgroupCountY = (Header.code_properties & 77f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_ENABLE_SGPR_GRID_WORKGROUP_COUNT_Y); 78f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool EnableSGPRGridWorkgroupCountZ = (Header.code_properties & 79f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_ENABLE_SGPR_GRID_WORKGROUP_COUNT_Z); 80f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool EnableOrderedAppendGDS = (Header.code_properties & 81f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_ENABLE_ORDERED_APPEND_GDS); 82f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar uint32_t PrivateElementSize = (Header.code_properties & 83f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_PRIVATE_ELEMENT_SIZE) >> 84f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_PRIVATE_ELEMENT_SIZE_SHIFT; 85f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool IsPtr64 = (Header.code_properties & AMD_CODE_PROPERTY_IS_PTR64); 86f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool IsDynamicCallstack = (Header.code_properties & 87f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_IS_DYNAMIC_CALLSTACK); 88f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool IsDebugEnabled = (Header.code_properties & 89f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_IS_DEBUG_SUPPORTED); 90f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar bool IsXNackEnabled = (Header.code_properties & 91f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AMD_CODE_PROPERTY_IS_XNACK_SUPPORTED); 92f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 93f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS << "\t.amd_kernel_code_t\n" << 94f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tkernel_code_version_major = " << 95f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.amd_kernel_code_version_major << '\n' << 96f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tkernel_code_version_minor = " << 97f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.amd_kernel_code_version_minor << '\n' << 98f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tmachine_kind = " << 99f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.amd_machine_kind << '\n' << 100f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tmachine_version_major = " << 101f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.amd_machine_version_major << '\n' << 102f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tmachine_version_minor = " << 103f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.amd_machine_version_minor << '\n' << 104f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tmachine_version_stepping = " << 105f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.amd_machine_version_stepping << '\n' << 106f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tkernel_code_entry_byte_offset = " << 107f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.kernel_code_entry_byte_offset << '\n' << 108f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tkernel_code_prefetch_byte_size = " << 109f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.kernel_code_prefetch_byte_size << '\n' << 110f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tmax_scratch_backing_memory_byte_size = " << 111f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.max_scratch_backing_memory_byte_size << '\n' << 112f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc1_vgprs = " << 113f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B848_VGPRS(Header.compute_pgm_resource_registers) << '\n' << 114f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc1_sgprs = " << 115f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B848_SGPRS(Header.compute_pgm_resource_registers) << '\n' << 116f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc1_priority = " << 117f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B848_PRIORITY(Header.compute_pgm_resource_registers) << '\n' << 118f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc1_float_mode = " << 119f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B848_FLOAT_MODE(Header.compute_pgm_resource_registers) << '\n' << 120f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc1_priv = " << 121f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B848_PRIV(Header.compute_pgm_resource_registers) << '\n' << 122f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc1_dx10_clamp = " << 123f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B848_DX10_CLAMP(Header.compute_pgm_resource_registers) << '\n' << 124f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc1_debug_mode = " << 125f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B848_DEBUG_MODE(Header.compute_pgm_resource_registers) << '\n' << 126f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc1_ieee_mode = " << 127f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B848_IEEE_MODE(Header.compute_pgm_resource_registers) << '\n' << 128f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc2_scratch_en = " << 129f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B84C_SCRATCH_EN(ComputePgmRsrc2) << '\n' << 130f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc2_user_sgpr = " << 131f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B84C_USER_SGPR(ComputePgmRsrc2) << '\n' << 132f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc2_tgid_x_en = " << 133f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B84C_TGID_X_EN(ComputePgmRsrc2) << '\n' << 134f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc2_tgid_y_en = " << 135f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B84C_TGID_Y_EN(ComputePgmRsrc2) << '\n' << 136f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc2_tgid_z_en = " << 137f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B84C_TGID_Z_EN(ComputePgmRsrc2) << '\n' << 138f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc2_tg_size_en = " << 139f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B84C_TG_SIZE_EN(ComputePgmRsrc2) << '\n' << 140f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc2_tidig_comp_cnt = " << 141f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B84C_TIDIG_COMP_CNT(ComputePgmRsrc2) << '\n' << 142f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc2_excp_en_msb = " << 143f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B84C_EXCP_EN_MSB(ComputePgmRsrc2) << '\n' << 144f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc2_lds_size = " << 145f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B84C_LDS_SIZE(ComputePgmRsrc2) << '\n' << 146f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcompute_pgm_rsrc2_excp_en = " << 147f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar G_00B84C_EXCP_EN(ComputePgmRsrc2) << '\n' << 148f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 149f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tenable_sgpr_private_segment_buffer = " << 150f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar EnableSGPRPrivateSegmentBuffer << '\n' << 151f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tenable_sgpr_dispatch_ptr = " << 152f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar EnableSGPRDispatchPtr << '\n' << 153f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tenable_sgpr_queue_ptr = " << 154f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar EnableSGPRQueuePtr << '\n' << 155f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tenable_sgpr_kernarg_segment_ptr = " << 156f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar EnableSGPRKernargSegmentPtr << '\n' << 157f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tenable_sgpr_dispatch_id = " << 158f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar EnableSGPRDispatchID << '\n' << 159f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tenable_sgpr_flat_scratch_init = " << 160f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar EnableSGPRFlatScratchInit << '\n' << 161f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tenable_sgpr_private_segment_size = " << 162f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar EnableSGPRPrivateSegmentSize << '\n' << 163f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tenable_sgpr_grid_workgroup_count_x = " << 164f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar EnableSGPRGridWorkgroupCountX << '\n' << 165f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tenable_sgpr_grid_workgroup_count_y = " << 166f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar EnableSGPRGridWorkgroupCountY << '\n' << 167f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tenable_sgpr_grid_workgroup_count_z = " << 168f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar EnableSGPRGridWorkgroupCountZ << '\n' << 169f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tenable_ordered_append_gds = " << 170f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar EnableOrderedAppendGDS << '\n' << 171f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tprivate_element_size = " << 172f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar PrivateElementSize << '\n' << 173f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tis_ptr64 = " << 174f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar IsPtr64 << '\n' << 175f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tis_dynamic_callstack = " << 176f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar IsDynamicCallstack << '\n' << 177f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tis_debug_enabled = " << 178f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar IsDebugEnabled << '\n' << 179f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tis_xnack_enabled = " << 180f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar IsXNackEnabled << '\n' << 181f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tworkitem_private_segment_byte_size = " << 182f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.workitem_private_segment_byte_size << '\n' << 183f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tworkgroup_group_segment_byte_size = " << 184f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.workgroup_group_segment_byte_size << '\n' << 185f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tgds_segment_byte_size = " << 186f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.gds_segment_byte_size << '\n' << 187f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tkernarg_segment_byte_size = " << 188f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.kernarg_segment_byte_size << '\n' << 189f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tworkgroup_fbarrier_count = " << 190f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.workgroup_fbarrier_count << '\n' << 191f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\twavefront_sgpr_count = " << 192f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.wavefront_sgpr_count << '\n' << 193f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tworkitem_vgpr_count = " << 194f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.workitem_vgpr_count << '\n' << 195f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\treserved_vgpr_first = " << 196f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.reserved_vgpr_first << '\n' << 197f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\treserved_vgpr_count = " << 198f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.reserved_vgpr_count << '\n' << 199f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\treserved_sgpr_first = " << 200f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.reserved_sgpr_first << '\n' << 201f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\treserved_sgpr_count = " << 202f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.reserved_sgpr_count << '\n' << 203f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tdebug_wavefront_private_segment_offset_sgpr = " << 204f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.debug_wavefront_private_segment_offset_sgpr << '\n' << 205f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tdebug_private_segment_buffer_sgpr = " << 206f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.debug_private_segment_buffer_sgpr << '\n' << 207f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tkernarg_segment_alignment = " << 208f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar (uint32_t)Header.kernarg_segment_alignment << '\n' << 209f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tgroup_segment_alignment = " << 210f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar (uint32_t)Header.group_segment_alignment << '\n' << 211f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tprivate_segment_alignment = " << 212f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar (uint32_t)Header.private_segment_alignment << '\n' << 213f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\twavefront_size = " << 214f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar (uint32_t)Header.wavefront_size << '\n' << 215f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\tcall_convention = " << 216f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.call_convention << '\n' << 217f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t\truntime_loader_kernel_symbol = " << 218f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Header.runtime_loader_kernel_symbol << '\n' << 219f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar // TODO: control_directives 220f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar "\t.end_amd_kernel_code_t\n"; 221f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 222f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 223f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 224f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid AMDGPUTargetAsmStreamer::EmitAMDGPUSymbolType(StringRef SymbolName, 225f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar unsigned Type) { 226f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar switch (Type) { 227f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar default: llvm_unreachable("Invalid AMDGPU symbol type"); 228f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar case ELF::STT_AMDGPU_HSA_KERNEL: 229f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS << "\t.amdgpu_hsa_kernel " << SymbolName << '\n' ; 230f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar break; 231f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar } 232f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 233f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 234f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid AMDGPUTargetAsmStreamer::EmitAMDGPUHsaModuleScopeGlobal( 235f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar StringRef GlobalName) { 236f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS << "\t.amdgpu_hsa_module_global " << GlobalName << '\n'; 237f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 238f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 239f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid AMDGPUTargetAsmStreamer::EmitAMDGPUHsaProgramScopeGlobal( 240f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar StringRef GlobalName) { 241f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS << "\t.amdgpu_hsa_program_global " << GlobalName << '\n'; 242f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 243f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 244f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===// 245f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// AMDGPUTargetELFStreamer 246f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===// 247f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 248f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetELFStreamer::AMDGPUTargetELFStreamer(MCStreamer &S) 249f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar : AMDGPUTargetStreamer(S), Streamer(S) { } 250f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 251f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarMCELFStreamer &AMDGPUTargetELFStreamer::getStreamer() { 252f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar return static_cast<MCELFStreamer &>(Streamer); 253f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 254f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 255f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid 256f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetELFStreamer::EmitDirectiveHSACodeObjectVersion(uint32_t Major, 257f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar uint32_t Minor) { 258f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar MCStreamer &OS = getStreamer(); 259f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar MCSectionELF *Note = OS.getContext().getELFSection(".note", ELF::SHT_NOTE, 0); 260f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 261f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar unsigned NameSZ = 4; 262f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 263f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.PushSection(); 264f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.SwitchSection(Note); 265f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(NameSZ, 4); // namesz 266f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(8, 4); // descz 267f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(NT_AMDGPU_HSA_CODE_OBJECT_VERSION, 4); // type 268f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitBytes(StringRef("AMD", NameSZ)); // name 269f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(Major, 4); // desc 270f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(Minor, 4); 271f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitValueToAlignment(4); 272f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.PopSection(); 273f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 274f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 275f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid 276f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetELFStreamer::EmitDirectiveHSACodeObjectISA(uint32_t Major, 277f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar uint32_t Minor, 278f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar uint32_t Stepping, 279f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar StringRef VendorName, 280f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar StringRef ArchName) { 281f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar MCStreamer &OS = getStreamer(); 282f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar MCSectionELF *Note = OS.getContext().getELFSection(".note", ELF::SHT_NOTE, 0); 283f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 284f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar unsigned NameSZ = 4; 285f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar uint16_t VendorNameSize = VendorName.size() + 1; 286f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar uint16_t ArchNameSize = ArchName.size() + 1; 287f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar unsigned DescSZ = sizeof(VendorNameSize) + sizeof(ArchNameSize) + 288f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar sizeof(Major) + sizeof(Minor) + sizeof(Stepping) + 289f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar VendorNameSize + ArchNameSize; 290f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 291f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.PushSection(); 292f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.SwitchSection(Note); 293f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(NameSZ, 4); // namesz 294f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(DescSZ, 4); // descsz 295f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(NT_AMDGPU_HSA_ISA, 4); // type 296f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitBytes(StringRef("AMD", 4)); // name 297f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(VendorNameSize, 2); // desc 298f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(ArchNameSize, 2); 299f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(Major, 4); 300f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(Minor, 4); 301f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(Stepping, 4); 302f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitBytes(VendorName); 303f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(0, 1); // NULL terminate VendorName 304f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitBytes(ArchName); 305f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitIntValue(0, 1); // NULL terminte ArchName 306f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitValueToAlignment(4); 307f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.PopSection(); 308f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 309f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 310f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid 311f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetELFStreamer::EmitAMDKernelCodeT(const amd_kernel_code_t &Header) { 312f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 313f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar MCStreamer &OS = getStreamer(); 314f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.PushSection(); 315f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.EmitBytes(StringRef((const char*)&Header, sizeof(Header))); 316f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar OS.PopSection(); 317f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 318f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 319f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid AMDGPUTargetELFStreamer::EmitAMDGPUSymbolType(StringRef SymbolName, 320f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar unsigned Type) { 321f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar MCSymbolELF *Symbol = cast<MCSymbolELF>( 322f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar getStreamer().getContext().getOrCreateSymbol(SymbolName)); 323f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Symbol->setType(ELF::STT_AMDGPU_HSA_KERNEL); 324f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 325f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 326f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid AMDGPUTargetELFStreamer::EmitAMDGPUHsaModuleScopeGlobal( 327f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar StringRef GlobalName) { 328f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 329f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar MCSymbolELF *Symbol = cast<MCSymbolELF>( 330f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar getStreamer().getContext().getOrCreateSymbol(GlobalName)); 331f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Symbol->setType(ELF::STT_OBJECT); 332f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Symbol->setBinding(ELF::STB_LOCAL); 333f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 334f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 335f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid AMDGPUTargetELFStreamer::EmitAMDGPUHsaProgramScopeGlobal( 336f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar StringRef GlobalName) { 337f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 338f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar MCSymbolELF *Symbol = cast<MCSymbolELF>( 339f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar getStreamer().getContext().getOrCreateSymbol(GlobalName)); 340f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Symbol->setType(ELF::STT_OBJECT); 341f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Symbol->setBinding(ELF::STB_GLOBAL); 342f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 343