[PATCH] AMDGPU: Verify instructions in non-debug builds as well
Michel Dänzer via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 9 22:57:45 PST 2016
On 10.02.2016 12:17, Michel Dänzer via llvm-commits wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> And emit an error if it fails.
>
> This prevents illegal instructions from getting sent to the GPU, which
> would potentially result in a hang.
>
> This is a candidate for the stable branch(es).
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> ---
> lib/Target/AMDGPU/AMDGPUMCInstLower.cpp | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp b/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp
> index dfc652f..929cf87 100644
> --- a/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp
> +++ b/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp
> @@ -88,13 +88,13 @@ void AMDGPUAsmPrinter::EmitInstruction(const MachineInstr *MI) {
> const AMDGPUSubtarget &STI = MF->getSubtarget<AMDGPUSubtarget>();
> AMDGPUMCInstLower MCInstLowering(OutContext, STI);
>
> -#ifdef _DEBUG
> StringRef Err;
> if (!STI.getInstrInfo()->verifyInstruction(MI, Err)) {
> - errs() << "Warning: Illegal instruction detected: " << Err << "\n";
> + LLVMContext &C = MI->getParent()->getParent()->getFunction()->getContext();
> + C.emitError("Illegal instruction detected: " + Err);
> MI->dump();
> }
> -#endif
> +
> if (MI->isBundle()) {
> const MachineBasicBlock *MBB = MI->getParent();
> MachineBasicBlock::const_instr_iterator I = ++MI->getIterator();
>
Unfortunately, this breaks the lit test test/CodeGen/AMDGPU/fmin_legacy.ll:
test_fmin_legacy_f32: ; @test_fmin_legacy_f32
; BB#0:
s_load_dwordx2 s[4:5], s[0:1], 0x9
s_load_dwordx4 s[0:3], s[0:1], 0xd
s_mov_b32 s7, 0xf000
s_mov_b32 s6, -1
Warning: Illegal instruction detected: VOP* instruction uses the constant bus more than once
%VGPR0<def> = V_MIN_LEGACY_F32_e64 0, %SGPR0, 0, %SGPR1, 0, 0, %EXEC<imp-use>
s_waitcnt lgkmcnt(0)
v_min_legacy_f32_e64 v0, s0, s1
buffer_store_dwordx4 v[0:3], s[4:7], 0
s_endpgm
v_min_legacy_f32 only supports one SGPR argument. Where should this be
enforced?
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the llvm-commits
mailing list