mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-28 06:00:28 +00:00
AMDGPU/SI: Add amdgpu_kernel calling convention. Part 1.
Summary: This will be used for AMDGPU_HSA_KERNEL symbol type in output ELF. Also, in the future unused non-kernels may be optimized. For now, also accept SPIR_KERNEL for HCC frontend. Also, add bitcode compatibility tests for missing calling conventions except AVR_BUILTIN which doesn't have parse code. Reviewers: tstellarAMD, arsenm Subscribers: arsenm, joker.eph, llvm-commits git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@268717 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d4ecd0d79c
commit
ac1dd296bc
@ -190,6 +190,9 @@ namespace CallingConv {
|
||||
/// Calling convention used for Mesa compute shaders.
|
||||
AMDGPU_CS = 90,
|
||||
|
||||
/// Calling convention for AMDGPU code object kernels.
|
||||
AMDGPU_KERNEL = 91,
|
||||
|
||||
/// The highest possible calling convention ID. Must be some 2^k - 1.
|
||||
MaxID = 1023
|
||||
};
|
||||
|
@ -604,6 +604,7 @@ lltok::Kind LLLexer::LexIdentifier() {
|
||||
KEYWORD(amdgpu_gs);
|
||||
KEYWORD(amdgpu_ps);
|
||||
KEYWORD(amdgpu_cs);
|
||||
KEYWORD(amdgpu_kernel);
|
||||
|
||||
KEYWORD(cc);
|
||||
KEYWORD(c);
|
||||
|
@ -1636,6 +1636,7 @@ bool LLParser::ParseOptionalDLLStorageClass(unsigned &Res) {
|
||||
/// ::= 'amdgpu_gs'
|
||||
/// ::= 'amdgpu_ps'
|
||||
/// ::= 'amdgpu_cs'
|
||||
/// ::= 'amdgpu_kernel'
|
||||
/// ::= 'cc' UINT
|
||||
///
|
||||
bool LLParser::ParseOptionalCallingConv(unsigned &CC) {
|
||||
@ -1675,6 +1676,7 @@ bool LLParser::ParseOptionalCallingConv(unsigned &CC) {
|
||||
case lltok::kw_amdgpu_gs: CC = CallingConv::AMDGPU_GS; break;
|
||||
case lltok::kw_amdgpu_ps: CC = CallingConv::AMDGPU_PS; break;
|
||||
case lltok::kw_amdgpu_cs: CC = CallingConv::AMDGPU_CS; break;
|
||||
case lltok::kw_amdgpu_kernel: CC = CallingConv::AMDGPU_KERNEL; break;
|
||||
case lltok::kw_cc: {
|
||||
Lex.Lex();
|
||||
return ParseUInt32(CC);
|
||||
|
@ -111,6 +111,7 @@ namespace lltok {
|
||||
kw_amdgpu_gs,
|
||||
kw_amdgpu_ps,
|
||||
kw_amdgpu_cs,
|
||||
kw_amdgpu_kernel,
|
||||
|
||||
// Attributes:
|
||||
kw_attributes,
|
||||
|
@ -332,6 +332,7 @@ static void PrintCallingConv(unsigned cc, raw_ostream &Out) {
|
||||
case CallingConv::AMDGPU_GS: Out << "amdgpu_gs"; break;
|
||||
case CallingConv::AMDGPU_PS: Out << "amdgpu_ps"; break;
|
||||
case CallingConv::AMDGPU_CS: Out << "amdgpu_cs"; break;
|
||||
case CallingConv::AMDGPU_KERNEL: Out << "amdgpu_kernel"; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -428,6 +428,46 @@ declare cc80 void @f.cc80()
|
||||
; CHECK: declare x86_vectorcallcc void @f.cc80()
|
||||
declare x86_vectorcallcc void @f.x86_vectorcallcc()
|
||||
; CHECK: declare x86_vectorcallcc void @f.x86_vectorcallcc()
|
||||
declare cc81 void @f.cc81()
|
||||
; CHECK: declare hhvmcc void @f.cc81()
|
||||
declare hhvmcc void @f.hhvmcc()
|
||||
; CHECK: declare hhvmcc void @f.hhvmcc()
|
||||
declare cc82 void @f.cc82()
|
||||
; CHECK: declare hhvm_ccc void @f.cc82()
|
||||
declare hhvm_ccc void @f.hhvm_ccc()
|
||||
; CHECK: declare hhvm_ccc void @f.hhvm_ccc()
|
||||
declare cc83 void @f.cc83()
|
||||
; CHECK: declare x86_intrcc void @f.cc83()
|
||||
declare x86_intrcc void @f.x86_intrcc()
|
||||
; CHECK: declare x86_intrcc void @f.x86_intrcc()
|
||||
declare cc84 void @f.cc84()
|
||||
; CHECK: declare avr_intrcc void @f.cc84()
|
||||
declare avr_intrcc void @f.avr_intrcc()
|
||||
; CHECK: declare avr_intrcc void @f.avr_intrcc()
|
||||
declare cc85 void @f.cc85()
|
||||
; CHECK: declare avr_signalcc void @f.cc85()
|
||||
declare avr_signalcc void @f.avr_signalcc()
|
||||
; CHECK: declare avr_signalcc void @f.avr_signalcc()
|
||||
declare cc87 void @f.cc87()
|
||||
; CHECK: declare amdgpu_vs void @f.cc87()
|
||||
declare amdgpu_vs void @f.amdgpu_vs()
|
||||
; CHECK: declare amdgpu_vs void @f.amdgpu_vs()
|
||||
declare cc88 void @f.cc88()
|
||||
; CHECK: declare amdgpu_gs void @f.cc88()
|
||||
declare amdgpu_gs void @f.amdgpu_gs()
|
||||
; CHECK: declare amdgpu_gs void @f.amdgpu_gs()
|
||||
declare cc89 void @f.cc89()
|
||||
; CHECK: declare amdgpu_ps void @f.cc89()
|
||||
declare amdgpu_ps void @f.amdgpu_ps()
|
||||
; CHECK: declare amdgpu_ps void @f.amdgpu_ps()
|
||||
declare cc90 void @f.cc90()
|
||||
; CHECK: declare amdgpu_cs void @f.cc90()
|
||||
declare amdgpu_cs void @f.amdgpu_cs()
|
||||
; CHECK: declare amdgpu_cs void @f.amdgpu_cs()
|
||||
declare cc91 void @f.cc91()
|
||||
; CHECK: declare amdgpu_kernel void @f.cc91()
|
||||
declare amdgpu_kernel void @f.amdgpu_kernel()
|
||||
; CHECK: declare amdgpu_kernel void @f.amdgpu_kernel()
|
||||
declare cc1023 void @f.cc1023()
|
||||
; CHECK: declare cc1023 void @f.cc1023()
|
||||
|
||||
|
@ -53,7 +53,7 @@
|
||||
; HSA: .Lfunc_end0:
|
||||
; HSA: .size simple, .Lfunc_end0-simple
|
||||
|
||||
define void @simple(i32 addrspace(1)* %out) {
|
||||
define amdgpu_kernel void @simple(i32 addrspace(1)* %out) {
|
||||
entry:
|
||||
store i32 0, i32 addrspace(1)* %out
|
||||
ret void
|
||||
|
Loading…
Reference in New Issue
Block a user