forked from OSchip/llvm-project
R600: Implement float to long/ulong
Use alg. from LegalizeDAG.cpp Move Expand setting to SIISellowering v2: Extend existing tests instead of creating new ones v3: use separate LowerFPTOSINT function v4: use TargetLowering::expandFP_TO_SINT add comment about using FP_TO_SINT for uints Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu> Reviewed-by: Tom Stellard <tom@stellard.net> llvm-svn: 212773
This commit is contained in:
parent
eca89d283e
commit
2cb62ce2a0
|
@ -271,7 +271,6 @@ AMDGPUTargetLowering::AMDGPUTargetLowering(TargetMachine &TM) :
|
|||
setOperationAction(ISD::ROTL, MVT::i64, Expand);
|
||||
setOperationAction(ISD::ROTR, MVT::i64, Expand);
|
||||
|
||||
setOperationAction(ISD::FP_TO_SINT, MVT::i64, Expand);
|
||||
setOperationAction(ISD::MUL, MVT::i64, Expand);
|
||||
setOperationAction(ISD::MULHU, MVT::i64, Expand);
|
||||
setOperationAction(ISD::MULHS, MVT::i64, Expand);
|
||||
|
|
|
@ -82,6 +82,8 @@ R600TargetLowering::R600TargetLowering(TargetMachine &TM) :
|
|||
setOperationAction(ISD::SETCC, MVT::i32, Expand);
|
||||
setOperationAction(ISD::SETCC, MVT::f32, Expand);
|
||||
setOperationAction(ISD::FP_TO_UINT, MVT::i1, Custom);
|
||||
setOperationAction(ISD::FP_TO_SINT, MVT::i64, Custom);
|
||||
setOperationAction(ISD::FP_TO_UINT, MVT::i64, Custom);
|
||||
|
||||
setOperationAction(ISD::SELECT, MVT::i32, Expand);
|
||||
setOperationAction(ISD::SELECT, MVT::f32, Expand);
|
||||
|
@ -839,8 +841,20 @@ void R600TargetLowering::ReplaceNodeResults(SDNode *N,
|
|||
default:
|
||||
AMDGPUTargetLowering::ReplaceNodeResults(N, Results, DAG);
|
||||
return;
|
||||
case ISD::FP_TO_UINT: Results.push_back(LowerFPTOUINT(N->getOperand(0), DAG));
|
||||
case ISD::FP_TO_UINT:
|
||||
if (N->getValueType(0) == MVT::i1) {
|
||||
Results.push_back(LowerFPTOUINT(N->getOperand(0), DAG));
|
||||
return;
|
||||
}
|
||||
// Fall-through. Since we don't care about out of bounds values
|
||||
// we can use FP_TO_SINT for uints too. The DAGLegalizer code for uint
|
||||
// considers some extra cases which are not necessary here.
|
||||
case ISD::FP_TO_SINT: {
|
||||
SDValue Result;
|
||||
if (expandFP_TO_SINT(N, Result, DAG))
|
||||
Results.push_back(Result);
|
||||
return;
|
||||
}
|
||||
case ISD::UDIV: {
|
||||
SDValue Op = SDValue(N, 0);
|
||||
SDLoc DL(Op);
|
||||
|
|
|
@ -165,6 +165,9 @@ SITargetLowering::SITargetLowering(TargetMachine &TM) :
|
|||
|
||||
setOperationAction(ISD::LOAD, MVT::i1, Custom);
|
||||
|
||||
setOperationAction(ISD::FP_TO_SINT, MVT::i64, Expand);
|
||||
setOperationAction(ISD::FP_TO_UINT, MVT::i64, Expand);
|
||||
|
||||
setOperationAction(ISD::GlobalAddress, MVT::i32, Custom);
|
||||
setOperationAction(ISD::GlobalAddress, MVT::i64, Custom);
|
||||
setOperationAction(ISD::FrameIndex, MVT::i32, Custom);
|
||||
|
|
|
@ -1,31 +1,206 @@
|
|||
; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s --check-prefix=R600-CHECK
|
||||
; RUN: llc < %s -march=r600 -mcpu=SI -verify-machineinstrs | FileCheck %s --check-prefix=SI-CHECK
|
||||
; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck %s --check-prefix=EG --check-prefix=FUNC
|
||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck %s --check-prefix=SI --check-prefix=FUNC
|
||||
|
||||
; R600-CHECK: @fp_to_sint_v2i32
|
||||
; R600-CHECK: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; R600-CHECK: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; SI-CHECK: @fp_to_sint_v2i32
|
||||
; SI-CHECK: V_CVT_I32_F32_e32
|
||||
; SI-CHECK: V_CVT_I32_F32_e32
|
||||
; FUNC-LABEL: @fp_to_sint_v2i32
|
||||
; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; SI: V_CVT_I32_F32_e32
|
||||
; SI: V_CVT_I32_F32_e32
|
||||
define void @fp_to_sint_v2i32(<2 x i32> addrspace(1)* %out, <2 x float> %in) {
|
||||
%result = fptosi <2 x float> %in to <2 x i32>
|
||||
store <2 x i32> %result, <2 x i32> addrspace(1)* %out
|
||||
ret void
|
||||
}
|
||||
|
||||
; R600-CHECK: @fp_to_sint_v4i32
|
||||
; R600-CHECK: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; R600-CHECK: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW]}}
|
||||
; R600-CHECK: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; R600-CHECK: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; SI-CHECK: @fp_to_sint_v4i32
|
||||
; SI-CHECK: V_CVT_I32_F32_e32
|
||||
; SI-CHECK: V_CVT_I32_F32_e32
|
||||
; SI-CHECK: V_CVT_I32_F32_e32
|
||||
; SI-CHECK: V_CVT_I32_F32_e32
|
||||
; FUNC-LABEL: @fp_to_sint_v4i32
|
||||
; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW]}}
|
||||
; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; SI: V_CVT_I32_F32_e32
|
||||
; SI: V_CVT_I32_F32_e32
|
||||
; SI: V_CVT_I32_F32_e32
|
||||
; SI: V_CVT_I32_F32_e32
|
||||
define void @fp_to_sint_v4i32(<4 x i32> addrspace(1)* %out, <4 x float> addrspace(1)* %in) {
|
||||
%value = load <4 x float> addrspace(1) * %in
|
||||
%result = fptosi <4 x float> %value to <4 x i32>
|
||||
store <4 x i32> %result, <4 x i32> addrspace(1)* %out
|
||||
ret void
|
||||
}
|
||||
|
||||
; FUNC-LABEL: @fp_to_sint_i64
|
||||
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
|
||||
; Check that the compiler doesn't crash with a "cannot select" error
|
||||
; SI: S_ENDPGM
|
||||
define void @fp_to_sint_i64 (i64 addrspace(1)* %out, float %in) {
|
||||
entry:
|
||||
%0 = fptosi float %in to i64
|
||||
store i64 %0, i64 addrspace(1)* %out
|
||||
ret void
|
||||
}
|
||||
|
||||
; FUNC: @fp_to_sint_v2i64
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
|
||||
; SI: S_ENDPGM
|
||||
define void @fp_to_sint_v2i64(<2 x i64> addrspace(1)* %out, <2 x float> %x) {
|
||||
%conv = fptosi <2 x float> %x to <2 x i64>
|
||||
store <2 x i64> %conv, <2 x i64> addrspace(1)* %out
|
||||
ret void
|
||||
}
|
||||
|
||||
; FUNC: @fp_to_sint_v4i64
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
|
||||
; SI: S_ENDPGM
|
||||
define void @fp_to_sint_v4i64(<4 x i64> addrspace(1)* %out, <4 x float> %x) {
|
||||
%conv = fptosi <4 x float> %x to <4 x i64>
|
||||
store <4 x i64> %conv, <4 x i64> addrspace(1)* %out
|
||||
ret void
|
||||
}
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
; FIXME: Merge into fp_to_sint.ll when EG/NI supports 64-bit types
|
||||
; RUN: llc < %s -march=r600 -mcpu=SI -verify-machineinstrs | FileCheck --check-prefix=SI %s
|
||||
|
||||
; SI-LABEL: @fp_to_sint_i64
|
||||
; Check that the compiler doesn't crash with a "cannot select" error
|
||||
; SI: S_ENDPGM
|
||||
define void @fp_to_sint_i64 (i64 addrspace(1)* %out, float %in) {
|
||||
entry:
|
||||
%0 = fptosi float %in to i64
|
||||
store i64 %0, i64 addrspace(1)* %out
|
||||
ret void
|
||||
}
|
|
@ -1,12 +1,11 @@
|
|||
; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s --check-prefix=R600-CHECK
|
||||
; RUN: llc < %s -march=r600 -mcpu=SI -verify-machineinstrs | FileCheck %s --check-prefix=SI-CHECK
|
||||
; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck %s --check-prefix=EG --check-prefix=FUNC
|
||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck %s --check-prefix=SI --check-prefix=FUNC
|
||||
|
||||
; R600-CHECK: @fp_to_uint_v2i32
|
||||
; R600-CHECK: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; R600-CHECK: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
; SI-CHECK: @fp_to_uint_v2i32
|
||||
; SI-CHECK: V_CVT_U32_F32_e32
|
||||
; SI-CHECK: V_CVT_U32_F32_e32
|
||||
; FUNC-LABEL: @fp_to_uint_v2i32
|
||||
; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
; SI: V_CVT_U32_F32_e32
|
||||
; SI: V_CVT_U32_F32_e32
|
||||
|
||||
define void @fp_to_uint_v2i32(<2 x i32> addrspace(1)* %out, <2 x float> %in) {
|
||||
%result = fptoui <2 x float> %in to <2 x i32>
|
||||
|
@ -14,16 +13,15 @@ define void @fp_to_uint_v2i32(<2 x i32> addrspace(1)* %out, <2 x float> %in) {
|
|||
ret void
|
||||
}
|
||||
|
||||
; R600-CHECK: @fp_to_uint_v4i32
|
||||
; R600-CHECK: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; R600-CHECK: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
; R600-CHECK: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; R600-CHECK: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; SI-CHECK: @fp_to_uint_v4i32
|
||||
; SI-CHECK: V_CVT_U32_F32_e32
|
||||
; SI-CHECK: V_CVT_U32_F32_e32
|
||||
; SI-CHECK: V_CVT_U32_F32_e32
|
||||
; SI-CHECK: V_CVT_U32_F32_e32
|
||||
; FUNC-LABEL: @fp_to_uint_v4i32
|
||||
; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; EG: FLT_TO_UINT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
|
||||
; SI: V_CVT_U32_F32_e32
|
||||
; SI: V_CVT_U32_F32_e32
|
||||
; SI: V_CVT_U32_F32_e32
|
||||
; SI: V_CVT_U32_F32_e32
|
||||
|
||||
define void @fp_to_uint_v4i32(<4 x i32> addrspace(1)* %out, <4 x float> addrspace(1)* %in) {
|
||||
%value = load <4 x float> addrspace(1) * %in
|
||||
|
@ -31,3 +29,179 @@ define void @fp_to_uint_v4i32(<4 x i32> addrspace(1)* %out, <4 x float> addrspac
|
|||
store <4 x i32> %result, <4 x i32> addrspace(1)* %out
|
||||
ret void
|
||||
}
|
||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck --check-prefix=SI --check-prefix=FUNC %s
|
||||
; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck --check-prefix=EG --check-prefix=FUNC %s
|
||||
|
||||
; FUNC: @fp_to_uint_i64
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
|
||||
; SI: S_ENDPGM
|
||||
define void @fp_to_uint_i64(i64 addrspace(1)* %out, float %x) {
|
||||
%conv = fptoui float %x to i64
|
||||
store i64 %conv, i64 addrspace(1)* %out
|
||||
ret void
|
||||
}
|
||||
|
||||
; FUNC: @fp_to_uint_v2i64
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
|
||||
; SI: S_ENDPGM
|
||||
define void @fp_to_uint_v2i64(<2 x i64> addrspace(1)* %out, <2 x float> %x) {
|
||||
%conv = fptoui <2 x float> %x to <2 x i64>
|
||||
store <2 x i64> %conv, <2 x i64> addrspace(1)* %out
|
||||
ret void
|
||||
}
|
||||
|
||||
; FUNC: @fp_to_uint_v4i64
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: ASHR
|
||||
; EG-DAG: AND_INT
|
||||
; EG-DAG: OR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: LSHL
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: LSHR
|
||||
; EG-DAG: SETGT_UINT
|
||||
; EG-DAG: SETGT_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: XOR_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: SUB_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
; EG-DAG: CNDGE_INT
|
||||
|
||||
; SI: S_ENDPGM
|
||||
define void @fp_to_uint_v4i64(<4 x i64> addrspace(1)* %out, <4 x float> %x) {
|
||||
%conv = fptoui <4 x float> %x to <4 x i64>
|
||||
store <4 x i64> %conv, <4 x i64> addrspace(1)* %out
|
||||
ret void
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue