mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-04 03:06:28 +00:00
AMDGPU: Improve note directive verification in assembler
- Do not allow amd_amdgpu_isa directives on non-amdgcn architectures - Do not allow amd_amdgpu_hsa_metadata on non-amdhsa OSes - Do not allow amd_amdgpu_pal_metadata on non-amdpal OSes Differential Revision: https://reviews.llvm.org/D38750 llvm-svn: 315812
This commit is contained in:
parent
c9bc3fd2a9
commit
fd75ed74e2
@ -2454,6 +2454,12 @@ bool AMDGPUAsmParser::ParseDirectiveAMDGPUHsaKernel() {
|
||||
}
|
||||
|
||||
bool AMDGPUAsmParser::ParseDirectiveISAVersion() {
|
||||
if (getSTI().getTargetTriple().getArch() != Triple::amdgcn) {
|
||||
return Error(getParser().getTok().getLoc(),
|
||||
".amd_amdgpu_isa directive is not available on non-amdgcn "
|
||||
"architectures");
|
||||
}
|
||||
|
||||
auto ISAVersionStringFromASM = getLexer().getTok().getStringContents();
|
||||
|
||||
std::string ISAVersionStringFromSTI;
|
||||
@ -2473,6 +2479,12 @@ bool AMDGPUAsmParser::ParseDirectiveISAVersion() {
|
||||
}
|
||||
|
||||
bool AMDGPUAsmParser::ParseDirectiveHSAMetadata() {
|
||||
if (getSTI().getTargetTriple().getOS() != Triple::AMDHSA) {
|
||||
return Error(getParser().getTok().getLoc(),
|
||||
(Twine(HSAMD::AssemblerDirectiveBegin) + Twine(" directive is "
|
||||
"not available on non-amdhsa OSes")).str());
|
||||
}
|
||||
|
||||
std::string HSAMetadataString;
|
||||
raw_string_ostream YamlStream(HSAMetadataString);
|
||||
|
||||
@ -2504,7 +2516,7 @@ bool AMDGPUAsmParser::ParseDirectiveHSAMetadata() {
|
||||
|
||||
if (getLexer().is(AsmToken::Eof) && !FoundEnd) {
|
||||
return TokError(Twine("expected directive ") +
|
||||
Twine(HSAMD::AssemblerDirectiveEnd) + Twine("not found"));
|
||||
Twine(HSAMD::AssemblerDirectiveEnd) + Twine(" not found"));
|
||||
}
|
||||
|
||||
YamlStream.flush();
|
||||
@ -2516,6 +2528,12 @@ bool AMDGPUAsmParser::ParseDirectiveHSAMetadata() {
|
||||
}
|
||||
|
||||
bool AMDGPUAsmParser::ParseDirectivePALMetadata() {
|
||||
if (getSTI().getTargetTriple().getOS() != Triple::AMDPAL) {
|
||||
return Error(getParser().getTok().getLoc(),
|
||||
(Twine(PALMD::AssemblerDirective) + Twine(" directive is "
|
||||
"not available on non-amdpal OSes")).str());
|
||||
}
|
||||
|
||||
PALMD::Metadata PALMetadata;
|
||||
for (;;) {
|
||||
uint32_t Value;
|
||||
|
7
test/MC/AMDGPU/elf-notes-verify-amdgcn.s
Normal file
7
test/MC/AMDGPU/elf-notes-verify-amdgcn.s
Normal file
@ -0,0 +1,7 @@
|
||||
// RUN: not llvm-mc -arch amdgcn %s 2>&1 | FileCheck --check-prefix=GCN %s
|
||||
|
||||
// GCN: error: .amd_amdgpu_hsa_metadata directive is not available on non-amdhsa OSes
|
||||
.amd_amdgpu_hsa_metadata
|
||||
|
||||
// GCN: error: .amd_amdgpu_pal_metadata directive is not available on non-amdpal OSes
|
||||
.amd_amdgpu_pal_metadata
|
10
test/MC/AMDGPU/elf-notes-verify-r600.s
Normal file
10
test/MC/AMDGPU/elf-notes-verify-r600.s
Normal file
@ -0,0 +1,10 @@
|
||||
// RUN: not llvm-mc -arch r600 %s 2>&1 | FileCheck --check-prefix=R600 %s
|
||||
|
||||
// R600: error: .amd_amdgpu_isa directive is not available on non-amdgcn architectures
|
||||
.amd_amdgpu_isa "r600"
|
||||
|
||||
// R600: error: .amd_amdgpu_hsa_metadata directive is not available on non-amdhsa OSes
|
||||
.amd_amdgpu_hsa_metadata
|
||||
|
||||
// R600: error: .amd_amdgpu_pal_metadata directive is not available on non-amdpal OSes
|
||||
.amd_amdgpu_pal_metadata
|
Loading…
x
Reference in New Issue
Block a user