From abf19e5c1b50590233ca861aec5b2ad8944abc5e Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Wed, 18 Feb 2015 02:15:30 +0000 Subject: [PATCH] R600/SI: Fix src1_modifiers for class instructions src1 doesn't have modifiers, but the operand was missing resulting in an encoding build error when all fields are required.' git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229611 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/R600/SIInstrInfo.td | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/Target/R600/SIInstrInfo.td b/lib/Target/R600/SIInstrInfo.td index 3732b8e3664..00520caf818 100644 --- a/lib/Target/R600/SIInstrInfo.td +++ b/lib/Target/R600/SIInstrInfo.td @@ -860,13 +860,24 @@ class VOP3DisableFields { bits<2> src0_modifiers = !if(HasModifiers, ?, 0); bits<2> src1_modifiers = !if(HasModifiers, !if(HasSrc1, ?, 0), 0); - bits<2> src2_modifiers = !if(HasModifiers, !if(HasSrc2, ? ,0) ,0); + bits<2> src2_modifiers = !if(HasModifiers, !if(HasSrc2, ?, 0), 0); bits<2> omod = !if(HasModifiers, ?, 0); bits<1> clamp = !if(HasModifiers, ?, 0); bits<9> src1 = !if(HasSrc1, ?, 0); bits<9> src2 = !if(HasSrc2, ?, 0); } +class VOP3DisableModFields { + bits<2> src0_modifiers = !if(HasSrc0Mods, ?, 0); + bits<2> src1_modifiers = !if(HasSrc1Mods, ?, 0); + bits<2> src2_modifiers = !if(HasSrc2Mods, ?, 0); + bits<2> omod = !if(HasOutputMods, ?, 0); + bits<1> clamp = !if(HasOutputMods, ?, 0); +} + class VOP3_Pseudo pattern, string opName> : VOP3Common , VOP , @@ -1203,6 +1214,19 @@ multiclass VOPC_Helper ; } +// Special case for class instructions which only have modifiers on +// the 1st source operand. +multiclass VOPC_Class_Helper pat32, + dag out64, dag ins64, string asm64, list pat64, + bit HasMods, bit DefExec> { + defm _e32 : VOPC_m ; + + defm _e64 : VOP3_C_m , + VOP3DisableModFields<1, 0, 0>; +} + multiclass VOPCInst : VOPC_Helper < @@ -1220,7 +1244,7 @@ multiclass VOPCInst ; multiclass VOPCClassInst : VOPC_Helper < + bit DefExec = 0> : VOPC_Class_Helper < op, opName, P.Ins32, P.Asm32, [], (outs SReg_64:$dst), P.Ins64, P.Asm64, -- 2.34.1