R600/SI: Add double precision fsub pattern for SI
Patch by: Niels Ole Salscheider Reviewed-by: Tom Stellard <thomas.stellard@amd.com> llvm-svn: 186179
This commit is contained in:
parent
ab8a8c84d4
commit
2a6a610516
|
@ -296,6 +296,21 @@ MachineBasicBlock * SITargetLowering::EmitInstrWithCustomInserter(
|
||||||
MI->eraseFromParent();
|
MI->eraseFromParent();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case AMDGPU::V_SUB_F64: {
|
||||||
|
const SIInstrInfo *TII =
|
||||||
|
static_cast<const SIInstrInfo*>(getTargetMachine().getInstrInfo());
|
||||||
|
BuildMI(*BB, I, MI->getDebugLoc(), TII->get(AMDGPU::V_ADD_F64),
|
||||||
|
MI->getOperand(0).getReg())
|
||||||
|
.addReg(MI->getOperand(1).getReg())
|
||||||
|
.addReg(MI->getOperand(2).getReg())
|
||||||
|
.addImm(0) /* src2 */
|
||||||
|
.addImm(0) /* ABS */
|
||||||
|
.addImm(0) /* CLAMP */
|
||||||
|
.addImm(0) /* OMOD */
|
||||||
|
.addImm(2); /* NEG */
|
||||||
|
MI->eraseFromParent();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return BB;
|
return BB;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1232,17 +1232,23 @@ def SI_INDIRECT_DST_V16 : SI_INDIRECT_DST<VReg_512>;
|
||||||
|
|
||||||
} // Uses = [EXEC,VCC,M0], Defs = [EXEC,VCC,M0]
|
} // Uses = [EXEC,VCC,M0], Defs = [EXEC,VCC,M0]
|
||||||
|
|
||||||
// This psuedo instruction takes a pointer as input and outputs a resource
|
|
||||||
// constant that can be used with the ADDR64 MUBUF instructions.
|
|
||||||
|
|
||||||
let usesCustomInserter = 1 in {
|
let usesCustomInserter = 1 in {
|
||||||
|
|
||||||
|
// This psuedo instruction takes a pointer as input and outputs a resource
|
||||||
|
// constant that can be used with the ADDR64 MUBUF instructions.
|
||||||
def SI_ADDR64_RSRC : InstSI <
|
def SI_ADDR64_RSRC : InstSI <
|
||||||
(outs SReg_128:$srsrc),
|
(outs SReg_128:$srsrc),
|
||||||
(ins SReg_64:$ptr),
|
(ins SReg_64:$ptr),
|
||||||
"", []
|
"", []
|
||||||
>;
|
>;
|
||||||
|
|
||||||
|
def V_SUB_F64 : InstSI <
|
||||||
|
(outs VReg_64:$dst),
|
||||||
|
(ins VReg_64:$src0, VReg_64:$src1),
|
||||||
|
"V_SUB_F64 $dst, $src0, $src1",
|
||||||
|
[]
|
||||||
|
>;
|
||||||
|
|
||||||
} // end usesCustomInserter
|
} // end usesCustomInserter
|
||||||
|
|
||||||
} // end IsCodeGenOnly, isPseudo
|
} // end IsCodeGenOnly, isPseudo
|
||||||
|
@ -1271,6 +1277,11 @@ def : Pat <
|
||||||
$src0, $src1, $src2, $src3)
|
$src0, $src1, $src2, $src3)
|
||||||
>;
|
>;
|
||||||
|
|
||||||
|
def : Pat <
|
||||||
|
(f64 (fsub f64:$src0, f64:$src1)),
|
||||||
|
(V_SUB_F64 $src0, $src1)
|
||||||
|
>;
|
||||||
|
|
||||||
/********** ======================= **********/
|
/********** ======================= **********/
|
||||||
/********** Image sampling patterns **********/
|
/********** Image sampling patterns **********/
|
||||||
/********** ======================= **********/
|
/********** ======================= **********/
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
; RUN: llc < %s -march=r600 -mcpu=tahiti | FileCheck %s
|
||||||
|
|
||||||
|
; CHECK: @fsub_f64
|
||||||
|
; CHECK: V_ADD_F64 {{VGPR[0-9]+_VGPR[0-9]+, VGPR[0-9]+_VGPR[0-9]+, VGPR[0-9]+_VGPR[0-9]+}}, 0, 0, 0, 0, 2
|
||||||
|
|
||||||
|
define void @fsub_f64(double addrspace(1)* %out, double addrspace(1)* %in1,
|
||||||
|
double addrspace(1)* %in2) {
|
||||||
|
%r0 = load double addrspace(1)* %in1
|
||||||
|
%r1 = load double addrspace(1)* %in2
|
||||||
|
%r2 = fsub double %r0, %r1
|
||||||
|
store double %r2, double addrspace(1)* %out
|
||||||
|
ret void
|
||||||
|
}
|
Loading…
Reference in New Issue