diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-12-14 16:36:12 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-12-14 16:36:12 +0000 |
commit | ebfba7027ea89fbd4e2672d375f65451a7e54cde (patch) | |
tree | 9043431c398f12258b97cec526fe34d8889b9f9a /llvm/lib | |
parent | 112b3039056b86f163825df14591f5af83e1a05f (diff) | |
download | bcm5719-llvm-ebfba7027ea89fbd4e2672d375f65451a7e54cde.tar.gz bcm5719-llvm-ebfba7027ea89fbd4e2672d375f65451a7e54cde.zip |
AMDGPU: Change vintrp printing
llvm-svn: 289664
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp | 14 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.h | 5 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIInstrInfo.td | 12 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIInstructions.td | 12 |
4 files changed, 37 insertions, 6 deletions
diff --git a/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp b/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp index fb51cb899e1..7172a0aa716 100644 --- a/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp +++ b/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp @@ -749,6 +749,20 @@ void AMDGPUInstPrinter::printInterpSlot(const MCInst *MI, unsigned OpNum, } } +void AMDGPUInstPrinter::printInterpAttr(const MCInst *MI, unsigned OpNum, + const MCSubtargetInfo &STI, + raw_ostream &O) { + unsigned Attr = MI->getOperand(OpNum).getImm(); + O << "attr" << Attr; +} + +void AMDGPUInstPrinter::printInterpAttrChan(const MCInst *MI, unsigned OpNum, + const MCSubtargetInfo &STI, + raw_ostream &O) { + unsigned Chan = MI->getOperand(OpNum).getImm(); + O << '.' << "xyzw"[Chan & 0x3]; +} + void AMDGPUInstPrinter::printVGPRIndexMode(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O) { diff --git a/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.h b/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.h index f2ed0e09bbf..a6d348ff0f1 100644 --- a/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.h +++ b/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.h @@ -119,6 +119,11 @@ private: const MCSubtargetInfo &STI, raw_ostream &O); void printInterpSlot(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O); + void printInterpAttr(const MCInst *MI, unsigned OpNo, + const MCSubtargetInfo &STI, raw_ostream &O); + void printInterpAttrChan(const MCInst *MI, unsigned OpNo, + const MCSubtargetInfo &STI, raw_ostream &O); + void printVGPRIndexMode(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O); void printMemOperand(const MCInst *MI, unsigned OpNo, diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.td b/llvm/lib/Target/AMDGPU/SIInstrInfo.td index 9f7c921c565..be0466b7753 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.td +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.td @@ -308,6 +308,18 @@ def InterpSlot : Operand<i32> { let PrintMethod = "printInterpSlot"; } +// It appears to be necessary to create a separate operand for this to +// be able to parse attr<num> with no space. +def Attr : Operand<i32> { + let PrintMethod = "printInterpAttr"; + let OperandType = "OPERAND_IMMEDIATE"; +} + +def AttrChan : Operand<i32> { + let PrintMethod = "printInterpAttrChan"; + let OperandType = "OPERAND_IMMEDIATE"; +} + def SendMsgMatchClass : AsmOperandClass { let Name = "SendMsg"; let PredicateMethod = "isSendMsg"; diff --git a/llvm/lib/Target/AMDGPU/SIInstructions.td b/llvm/lib/Target/AMDGPU/SIInstructions.td index 83c4fc45cef..250fe8a5632 100644 --- a/llvm/lib/Target/AMDGPU/SIInstructions.td +++ b/llvm/lib/Target/AMDGPU/SIInstructions.td @@ -51,8 +51,8 @@ let Uses = [M0, EXEC] in { multiclass V_INTERP_P1_F32_m : VINTRP_m < 0x00000000, (outs VGPR_32:$vdst), - (ins VGPR_32:$vsrc, i32imm:$attrchan, i32imm:$attr), - "v_interp_p1_f32 $vdst, $vsrc, $attrchan, $attr", + (ins VGPR_32:$vsrc, i32imm:$attr, AttrChan:$attrchan), + "v_interp_p1_f32 $vdst, $vsrc, attr${attr}$attrchan", [(set f32:$vdst, (AMDGPUinterp_p1 f32:$vsrc, (i32 imm:$attrchan), (i32 imm:$attr)))] >; @@ -74,8 +74,8 @@ let DisableEncoding = "$src0", Constraints = "$src0 = $vdst" in { defm V_INTERP_P2_F32 : VINTRP_m < 0x00000001, (outs VGPR_32:$vdst), - (ins VGPR_32:$src0, VGPR_32:$vsrc, i32imm:$attrchan, i32imm:$attr), - "v_interp_p2_f32 $vdst, $vsrc, $attrchan, $attr", + (ins VGPR_32:$src0, VGPR_32:$vsrc, i32imm:$attr, AttrChan:$attrchan), + "v_interp_p2_f32 $vdst, $vsrc, attr${attr}$attrchan", [(set f32:$vdst, (AMDGPUinterp_p2 f32:$src0, f32:$vsrc, (i32 imm:$attrchan), (i32 imm:$attr)))]>; @@ -84,8 +84,8 @@ defm V_INTERP_P2_F32 : VINTRP_m < defm V_INTERP_MOV_F32 : VINTRP_m < 0x00000002, (outs VGPR_32:$vdst), - (ins InterpSlot:$vsrc, i32imm:$attrchan, i32imm:$attr), - "v_interp_mov_f32 $vdst, $vsrc, $attrchan, $attr", + (ins InterpSlot:$vsrc, i32imm:$attr, AttrChan:$attrchan), + "v_interp_mov_f32 $vdst, $vsrc, attr${attr}$attrchan", [(set f32:$vdst, (AMDGPUinterp_mov (i32 imm:$vsrc), (i32 imm:$attrchan), (i32 imm:$attr)))]>; |