Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
Show First 20 Lines • Show All 200 Lines • ▼ Show 20 Lines | void AMDGPUTargetAsmStreamer::EmitAMDGPUSymbolType(StringRef SymbolName, | ||||
switch (Type) { | switch (Type) { | ||||
default: llvm_unreachable("Invalid AMDGPU symbol type"); | default: llvm_unreachable("Invalid AMDGPU symbol type"); | ||||
case ELF::STT_AMDGPU_HSA_KERNEL: | case ELF::STT_AMDGPU_HSA_KERNEL: | ||||
OS << "\t.amdgpu_hsa_kernel " << SymbolName << '\n' ; | OS << "\t.amdgpu_hsa_kernel " << SymbolName << '\n' ; | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
void AMDGPUTargetAsmStreamer::emitAMDGPULDS(MCSymbol *Symbol, unsigned Size, | |||||
unsigned Align) { | |||||
OS << "\t.amdgpu_lds " << Symbol->getName() << ", " << Size << ", " << Align | |||||
<< '\n'; | |||||
} | |||||
bool AMDGPUTargetAsmStreamer::EmitISAVersion(StringRef IsaVersionString) { | bool AMDGPUTargetAsmStreamer::EmitISAVersion(StringRef IsaVersionString) { | ||||
OS << "\t.amd_amdgpu_isa \"" << IsaVersionString << "\"\n"; | OS << "\t.amd_amdgpu_isa \"" << IsaVersionString << "\"\n"; | ||||
return true; | return true; | ||||
} | } | ||||
bool AMDGPUTargetAsmStreamer::EmitHSAMetadata( | bool AMDGPUTargetAsmStreamer::EmitHSAMetadata( | ||||
const AMDGPU::HSAMD::Metadata &HSAMetadata) { | const AMDGPU::HSAMD::Metadata &HSAMetadata) { | ||||
std::string HSAMetadataString; | std::string HSAMetadataString; | ||||
▲ Show 20 Lines • Show All 275 Lines • ▼ Show 20 Lines | |||||
void AMDGPUTargetELFStreamer::EmitAMDGPUSymbolType(StringRef SymbolName, | void AMDGPUTargetELFStreamer::EmitAMDGPUSymbolType(StringRef SymbolName, | ||||
unsigned Type) { | unsigned Type) { | ||||
MCSymbolELF *Symbol = cast<MCSymbolELF>( | MCSymbolELF *Symbol = cast<MCSymbolELF>( | ||||
getStreamer().getContext().getOrCreateSymbol(SymbolName)); | getStreamer().getContext().getOrCreateSymbol(SymbolName)); | ||||
Symbol->setType(Type); | Symbol->setType(Type); | ||||
} | } | ||||
void AMDGPUTargetELFStreamer::emitAMDGPULDS(MCSymbol *Symbol, unsigned Size, | |||||
unsigned Align) { | |||||
assert(isPowerOf2_32(Align)); | |||||
MCSymbolELF *SymbolELF = cast<MCSymbolELF>(Symbol); | |||||
SymbolELF->setType(ELF::STT_OBJECT); | |||||
if (!SymbolELF->isBindingSet()) { | |||||
SymbolELF->setBinding(ELF::STB_GLOBAL); | |||||
SymbolELF->setExternal(true); | |||||
} | |||||
if (SymbolELF->declareCommon(Size, Align, true)) { | |||||
report_fatal_error("Symbol: " + Symbol->getName() + | |||||
" redeclared as different type"); | |||||
} | |||||
SymbolELF->setIndex(ELF::SHN_AMDGPU_LDS); | |||||
SymbolELF->setSize(MCConstantExpr::create(Size, getContext())); | |||||
} | |||||
bool AMDGPUTargetELFStreamer::EmitISAVersion(StringRef IsaVersionString) { | bool AMDGPUTargetELFStreamer::EmitISAVersion(StringRef IsaVersionString) { | ||||
// Create two labels to mark the beginning and end of the desc field | // Create two labels to mark the beginning and end of the desc field | ||||
// and a MCExpr to calculate the size of the desc field. | // and a MCExpr to calculate the size of the desc field. | ||||
auto &Context = getContext(); | auto &Context = getContext(); | ||||
auto *DescBegin = Context.createTempSymbol(); | auto *DescBegin = Context.createTempSymbol(); | ||||
auto *DescEnd = Context.createTempSymbol(); | auto *DescEnd = Context.createTempSymbol(); | ||||
auto *DescSZ = MCBinaryExpr::createSub( | auto *DescSZ = MCBinaryExpr::createSub( | ||||
MCSymbolRefExpr::create(DescEnd, Context), | MCSymbolRefExpr::create(DescEnd, Context), | ||||
▲ Show 20 Lines • Show All 125 Lines • Show Last 20 Lines |