mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
AMDGPU: Restore AMDGPU prefixed rsq intrinsic for now
Also move into backend intrinsics to discourage use of the old name. llvm-svn: 258783
This commit is contained in:
parent
bf8e0c60a6
commit
97a3b39dcb
@ -57,10 +57,6 @@ def int_r600_read_workdim : AMDGPUReadPreloadRegisterIntrinsic <
|
||||
|
||||
// FIXME: These should be renamed/moved to r600
|
||||
let TargetPrefix = "AMDGPU" in {
|
||||
def int_AMDGPU_rsq_clamped : Intrinsic<
|
||||
[llvm_anyfloat_ty], [LLVMMatchType<0>], [IntrNoMem]
|
||||
>;
|
||||
|
||||
def int_AMDGPU_ldexp : Intrinsic<
|
||||
[llvm_anyfloat_ty], [LLVMMatchType<0>, llvm_i32_ty], [IntrNoMem]
|
||||
>;
|
||||
|
@ -922,10 +922,6 @@ SDValue AMDGPUTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
|
||||
return DAG.getNode(AMDGPUISD::CLAMP, DL, VT,
|
||||
Op.getOperand(1), Op.getOperand(2), Op.getOperand(3));
|
||||
|
||||
case Intrinsic::AMDGPU_rsq_clamped:
|
||||
assert(Subtarget->getGeneration() < AMDGPUSubtarget::SOUTHERN_ISLANDS);
|
||||
return DAG.getNode(AMDGPUISD::RSQ_CLAMPED, DL, VT, Op.getOperand(1));
|
||||
|
||||
case Intrinsic::AMDGPU_ldexp: // Legacy name
|
||||
return DAG.getNode(AMDGPUISD::LDEXP, DL, VT, Op.getOperand(1),
|
||||
Op.getOperand(2));
|
||||
|
@ -40,6 +40,15 @@ let TargetPrefix = "AMDGPU", isTarget = 1 in {
|
||||
def int_AMDGPU_bfm : Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
|
||||
def int_AMDGPU_flbit_i32 : Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>;
|
||||
|
||||
def int_AMDGPU_rsq_clamped : Intrinsic<
|
||||
[llvm_anyfloat_ty], [LLVMMatchType<0>], [IntrNoMem]
|
||||
>;
|
||||
|
||||
// Deprecated in favor of llvm.amdgcn.rsq
|
||||
def int_AMDGPU_rsq : Intrinsic<
|
||||
[llvm_anyfloat_ty], [LLVMMatchType<0>], [IntrNoMem]
|
||||
>;
|
||||
|
||||
// Deprecated in favor of llvm.bitreverse
|
||||
def int_AMDGPU_brev : Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>;
|
||||
|
||||
|
@ -801,10 +801,11 @@ SDValue R600TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const
|
||||
AMDGPU::T0_Z, VT);
|
||||
|
||||
// FIXME: Should be renamed to r600 prefix
|
||||
case Intrinsic::AMDGPU_rsq_clamped:
|
||||
case AMDGPUIntrinsic::AMDGPU_rsq_clamped:
|
||||
return DAG.getNode(AMDGPUISD::RSQ_CLAMPED, DL, VT, Op.getOperand(1));
|
||||
|
||||
case Intrinsic::r600_rsq:
|
||||
case AMDGPUIntrinsic::AMDGPU_rsq: // Legacy name
|
||||
// XXX - I'm assuming SI's RSQ_LEGACY matches R600's behavior.
|
||||
return DAG.getNode(AMDGPUISD::RSQ_LEGACY, DL, VT, Op.getOperand(1));
|
||||
}
|
||||
|
@ -1287,9 +1287,10 @@ SDValue SITargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
|
||||
case Intrinsic::amdgcn_rcp:
|
||||
return DAG.getNode(AMDGPUISD::RCP, DL, VT, Op.getOperand(1));
|
||||
case Intrinsic::amdgcn_rsq:
|
||||
case AMDGPUIntrinsic::AMDGPU_rsq: // Legacy name
|
||||
return DAG.getNode(AMDGPUISD::RSQ, DL, VT, Op.getOperand(1));
|
||||
case Intrinsic::amdgcn_rsq_clamped:
|
||||
case Intrinsic::AMDGPU_rsq_clamped: { // Legacy name
|
||||
case AMDGPUIntrinsic::AMDGPU_rsq_clamped: { // Legacy name
|
||||
if (Subtarget->getGeneration() < AMDGPUSubtarget::VOLCANIC_ISLANDS)
|
||||
return DAG.getNode(AMDGPUISD::RSQ_CLAMPED, DL, VT, Op.getOperand(1));
|
||||
|
||||
|
23
test/CodeGen/AMDGPU/llvm.AMDGPU.rsq.clamped.f64.ll
Normal file
23
test/CodeGen/AMDGPU/llvm.AMDGPU.rsq.clamped.f64.ll
Normal file
@ -0,0 +1,23 @@
|
||||
; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||
; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=VI -check-prefix=FUNC %s
|
||||
|
||||
declare double @llvm.AMDGPU.rsq.clamped.f64(double) nounwind readnone
|
||||
|
||||
; FUNC-LABEL: {{^}}rsq_clamped_f64:
|
||||
; SI: v_rsq_clamp_f64_e32
|
||||
|
||||
; VI: v_rsq_f64_e32 [[RSQ:v\[[0-9]+:[0-9]+\]]], s[2:3]
|
||||
; TODO: this constant should be folded:
|
||||
; VI: s_mov_b32 s[[ALLBITS:[0-9+]]], -1
|
||||
; VI: s_mov_b32 s[[HIGH1:[0-9+]]], 0x7fefffff
|
||||
; VI: s_mov_b32 s[[LOW1:[0-9+]]], s[[ALLBITS]]
|
||||
; VI: v_min_f64 v[0:1], [[RSQ]], s{{\[}}[[LOW1]]:[[HIGH1]]]
|
||||
; VI: s_mov_b32 s[[HIGH2:[0-9+]]], 0xffefffff
|
||||
; VI: s_mov_b32 s[[LOW2:[0-9+]]], s[[ALLBITS]]
|
||||
; VI: v_max_f64 v[0:1], v[0:1], s{{\[}}[[LOW2]]:[[HIGH2]]]
|
||||
|
||||
define void @rsq_clamped_f64(double addrspace(1)* %out, double %src) nounwind {
|
||||
%rsq_clamped = call double @llvm.AMDGPU.rsq.clamped.f64(double %src) nounwind readnone
|
||||
store double %rsq_clamped, double addrspace(1)* %out, align 8
|
||||
ret void
|
||||
}
|
33
test/CodeGen/AMDGPU/llvm.AMDGPU.rsq.ll
Normal file
33
test/CodeGen/AMDGPU/llvm.AMDGPU.rsq.ll
Normal file
@ -0,0 +1,33 @@
|
||||
; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||
; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||
; RUN: llc -march=r600 -mcpu=cypress -verify-machineinstrs < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
|
||||
|
||||
declare float @llvm.AMDGPU.rsq.f32(float) nounwind readnone
|
||||
|
||||
; FUNC-LABEL: {{^}}rsq_f32:
|
||||
; SI: v_rsq_f32_e32 {{v[0-9]+}}, {{s[0-9]+}}
|
||||
; EG: RECIPSQRT_IEEE
|
||||
define void @rsq_f32(float addrspace(1)* %out, float %src) nounwind {
|
||||
%rsq = call float @llvm.AMDGPU.rsq.f32(float %src) nounwind readnone
|
||||
store float %rsq, float addrspace(1)* %out, align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
; TODO: Really these should be constant folded
|
||||
; FUNC-LABEL: {{^}}rsq_f32_constant_4.0
|
||||
; SI: v_rsq_f32_e32 {{v[0-9]+}}, 4.0
|
||||
; EG: RECIPSQRT_IEEE
|
||||
define void @rsq_f32_constant_4.0(float addrspace(1)* %out) nounwind {
|
||||
%rsq = call float @llvm.AMDGPU.rsq.f32(float 4.0) nounwind readnone
|
||||
store float %rsq, float addrspace(1)* %out, align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
; FUNC-LABEL: {{^}}rsq_f32_constant_100.0
|
||||
; SI: v_rsq_f32_e32 {{v[0-9]+}}, 0x42c80000
|
||||
; EG: RECIPSQRT_IEEE
|
||||
define void @rsq_f32_constant_100.0(float addrspace(1)* %out) nounwind {
|
||||
%rsq = call float @llvm.AMDGPU.rsq.f32(float 100.0) nounwind readnone
|
||||
store float %rsq, float addrspace(1)* %out, align 4
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue
Block a user