From 8cc9b463deae8f6116963e1fea0c62930066b563 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Sat, 2 Jun 2012 07:57:54 -0400 Subject: [PATCH] radeon/llvm: Don't lower RETURN to S_ENDPGM on SI Instead create an S_ENDPGM instruction in the CodeEmitter and emit it after all the other instructions. --- src/gallium/drivers/radeon/SICodeEmitter.cpp | 4 ++++ src/gallium/drivers/radeon/SIInstrInfo.cpp | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/radeon/SICodeEmitter.cpp b/src/gallium/drivers/radeon/SICodeEmitter.cpp index d2ea1fb5dec..1d247061e41 100644 --- a/src/gallium/drivers/radeon/SICodeEmitter.cpp +++ b/src/gallium/drivers/radeon/SICodeEmitter.cpp @@ -172,6 +172,10 @@ bool SICodeEmitter::runOnMachineFunction(MachineFunction &MF) } } } + // Emit S_END_PGM + MachineInstr * End = BuildMI(MF, DebugLoc(), + TM->getInstrInfo()->get(AMDIL::S_ENDPGM)); + emitInstr(*End); return false; } diff --git a/src/gallium/drivers/radeon/SIInstrInfo.cpp b/src/gallium/drivers/radeon/SIInstrInfo.cpp index 40a1891b1a6..4c7a92075c6 100644 --- a/src/gallium/drivers/radeon/SIInstrInfo.cpp +++ b/src/gallium/drivers/radeon/SIInstrInfo.cpp @@ -100,7 +100,6 @@ unsigned SIInstrInfo::getISAOpcode(unsigned AMDILopcode) const { switch (AMDILopcode) { //XXX We need a better way of detecting end of program - case AMDIL::RETURN: return AMDIL::S_ENDPGM; case AMDIL::MOVE_f32: return AMDIL::V_MOV_B32_e32; default: return AMDILopcode; } -- 2.30.2