R600/SI: Expand vector fp <-> int conversions
llvm-svn: 187421
This commit is contained in:
		
							parent
							
								
									9744ffd652
								
							
						
					
					
						commit
						aa313d0a74
					
				| 
						 | 
					@ -101,13 +101,17 @@ AMDGPUTargetLowering::AMDGPUTargetLowering(TargetMachine &TM) :
 | 
				
			||||||
    //Expand the following operations for the current type by default
 | 
					    //Expand the following operations for the current type by default
 | 
				
			||||||
    setOperationAction(ISD::ADD,  VT, Expand);
 | 
					    setOperationAction(ISD::ADD,  VT, Expand);
 | 
				
			||||||
    setOperationAction(ISD::AND,  VT, Expand);
 | 
					    setOperationAction(ISD::AND,  VT, Expand);
 | 
				
			||||||
 | 
					    setOperationAction(ISD::FP_TO_SINT, VT, Expand);
 | 
				
			||||||
 | 
					    setOperationAction(ISD::FP_TO_UINT, VT, Expand);
 | 
				
			||||||
    setOperationAction(ISD::MUL,  VT, Expand);
 | 
					    setOperationAction(ISD::MUL,  VT, Expand);
 | 
				
			||||||
    setOperationAction(ISD::OR,   VT, Expand);
 | 
					    setOperationAction(ISD::OR,   VT, Expand);
 | 
				
			||||||
    setOperationAction(ISD::SHL,  VT, Expand);
 | 
					    setOperationAction(ISD::SHL,  VT, Expand);
 | 
				
			||||||
 | 
					    setOperationAction(ISD::SINT_TO_FP, VT, Expand);
 | 
				
			||||||
    setOperationAction(ISD::SRL,  VT, Expand);
 | 
					    setOperationAction(ISD::SRL,  VT, Expand);
 | 
				
			||||||
    setOperationAction(ISD::SRA,  VT, Expand);
 | 
					    setOperationAction(ISD::SRA,  VT, Expand);
 | 
				
			||||||
    setOperationAction(ISD::SUB,  VT, Expand);
 | 
					    setOperationAction(ISD::SUB,  VT, Expand);
 | 
				
			||||||
    setOperationAction(ISD::UDIV, VT, Expand);
 | 
					    setOperationAction(ISD::UDIV, VT, Expand);
 | 
				
			||||||
 | 
					    setOperationAction(ISD::UINT_TO_FP, VT, Expand);
 | 
				
			||||||
    setOperationAction(ISD::UREM, VT, Expand);
 | 
					    setOperationAction(ISD::UREM, VT, Expand);
 | 
				
			||||||
    setOperationAction(ISD::VSELECT, VT, Expand);
 | 
					    setOperationAction(ISD::VSELECT, VT, Expand);
 | 
				
			||||||
    setOperationAction(ISD::XOR,  VT, Expand);
 | 
					    setOperationAction(ISD::XOR,  VT, Expand);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,10 +43,6 @@ R600TargetLowering::R600TargetLowering(TargetMachine &TM) :
 | 
				
			||||||
  setOperationAction(ISD::FCOS, MVT::f32, Custom);
 | 
					  setOperationAction(ISD::FCOS, MVT::f32, Custom);
 | 
				
			||||||
  setOperationAction(ISD::FSIN, MVT::f32, Custom);
 | 
					  setOperationAction(ISD::FSIN, MVT::f32, Custom);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setOperationAction(ISD::FP_TO_SINT, MVT::v4i32, Expand);
 | 
					 | 
				
			||||||
  setOperationAction(ISD::FP_TO_UINT, MVT::v4i32, Expand);
 | 
					 | 
				
			||||||
  setOperationAction(ISD::SINT_TO_FP, MVT::v4i32, Expand);
 | 
					 | 
				
			||||||
  setOperationAction(ISD::UINT_TO_FP, MVT::v4i32, Expand);
 | 
					 | 
				
			||||||
  setOperationAction(ISD::SETCC, MVT::v4i32, Expand);
 | 
					  setOperationAction(ISD::SETCC, MVT::v4i32, Expand);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setOperationAction(ISD::BR_CC, MVT::i32, Expand);
 | 
					  setOperationAction(ISD::BR_CC, MVT::i32, Expand);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,16 @@
 | 
				
			||||||
; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s
 | 
					; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s --check-prefix=R600-CHECK
 | 
				
			||||||
 | 
					; RUN: llc < %s -march=r600 -mcpu=SI | FileCheck %s --check-prefix=SI-CHECK
 | 
				
			||||||
 | 
					
 | 
				
			||||||
; CHECK: @fp_to_sint_v4i32
 | 
					; R600-CHECK: @fp_to_sint_v4i32
 | 
				
			||||||
; CHECK: FLT_TO_INT {{[* ]*}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
 | 
					; R600-CHECK: FLT_TO_INT {{[* ]*}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
 | 
				
			||||||
; CHECK: FLT_TO_INT {{[* ]*}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
 | 
					; R600-CHECK: FLT_TO_INT {{[* ]*}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
 | 
				
			||||||
; CHECK: FLT_TO_INT {{[* ]*}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
 | 
					; R600-CHECK: FLT_TO_INT {{[* ]*}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
 | 
				
			||||||
; 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define void @fp_to_sint_v4i32(<4 x i32> addrspace(1)* %out, <4 x float> addrspace(1)* %in) {
 | 
					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
 | 
					  %value = load <4 x float> addrspace(1) * %in
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,16 @@
 | 
				
			||||||
; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s
 | 
					; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s --check-prefix=R600-CHECK
 | 
				
			||||||
 | 
					; RUN: llc < %s -march=r600 -mcpu=SI | FileCheck %s --check-prefix=SI-CHECK
 | 
				
			||||||
; CHECK: @sint_to_fp_v4i32
 | 
					 | 
				
			||||||
; CHECK: INT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
					 | 
				
			||||||
; CHECK: INT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
					 | 
				
			||||||
; CHECK: INT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
					 | 
				
			||||||
; CHECK: INT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; R600-CHECK: @sint_to_fp_v4i32
 | 
				
			||||||
 | 
					; R600-CHECK: INT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
				
			||||||
 | 
					; R600-CHECK: INT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
				
			||||||
 | 
					; R600-CHECK: INT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
				
			||||||
 | 
					; R600-CHECK: INT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
				
			||||||
 | 
					; SI-CHECK: @sint_to_fp_v4i32
 | 
				
			||||||
 | 
					; SI-CHECK: V_CVT_F32_I32_e32
 | 
				
			||||||
 | 
					; SI-CHECK: V_CVT_F32_I32_e32
 | 
				
			||||||
 | 
					; SI-CHECK: V_CVT_F32_I32_e32
 | 
				
			||||||
 | 
					; SI-CHECK: V_CVT_F32_I32_e32
 | 
				
			||||||
define void @sint_to_fp_v4i32(<4 x float> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
 | 
					define void @sint_to_fp_v4i32(<4 x float> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
 | 
				
			||||||
  %value = load <4 x i32> addrspace(1) * %in
 | 
					  %value = load <4 x i32> addrspace(1) * %in
 | 
				
			||||||
  %result = sitofp <4 x i32> %value to <4 x float>
 | 
					  %result = sitofp <4 x i32> %value to <4 x float>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,16 @@
 | 
				
			||||||
; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s
 | 
					; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s --check-prefix=R600-CHECK
 | 
				
			||||||
 | 
					; RUN: llc < %s -march=r600 -mcpu=SI | FileCheck %s --check-prefix=SI-CHECK
 | 
				
			||||||
; CHECK: @uint_to_fp_v4i32
 | 
					 | 
				
			||||||
; CHECK: UINT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
					 | 
				
			||||||
; CHECK: UINT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
					 | 
				
			||||||
; CHECK: UINT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
					 | 
				
			||||||
; CHECK: UINT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; R600-CHECK: @uint_to_fp_v4i32
 | 
				
			||||||
 | 
					; R600-CHECK: UINT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
				
			||||||
 | 
					; R600-CHECK: UINT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
				
			||||||
 | 
					; R600-CHECK: UINT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
				
			||||||
 | 
					; R600-CHECK: UINT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
 | 
				
			||||||
 | 
					; SI-CHECK: @uint_to_fp_v4i32
 | 
				
			||||||
 | 
					; SI-CHECK: V_CVT_F32_U32_e32
 | 
				
			||||||
 | 
					; SI-CHECK: V_CVT_F32_U32_e32
 | 
				
			||||||
 | 
					; SI-CHECK: V_CVT_F32_U32_e32
 | 
				
			||||||
 | 
					; SI-CHECK: V_CVT_F32_U32_e32
 | 
				
			||||||
define void @uint_to_fp_v4i32(<4 x float> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
 | 
					define void @uint_to_fp_v4i32(<4 x float> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
 | 
				
			||||||
  %value = load <4 x i32> addrspace(1) * %in
 | 
					  %value = load <4 x i32> addrspace(1) * %in
 | 
				
			||||||
  %result = uitofp <4 x i32> %value to <4 x float>
 | 
					  %result = uitofp <4 x i32> %value to <4 x float>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,16 +0,0 @@
 | 
				
			||||||
;RUN: llc < %s -march=r600 -mcpu=verde | FileCheck %s
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
;CHECK: V_CVT_F32_U32_e32
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define void @main(i32 %p) #0 {
 | 
					 | 
				
			||||||
main_body:
 | 
					 | 
				
			||||||
  %0 = uitofp i32 %p to float
 | 
					 | 
				
			||||||
  call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 0, float %0, float %0, float %0, float %0)
 | 
					 | 
				
			||||||
  ret void
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
declare void @llvm.SI.export(i32, i32, i32, i32, i32, float, float, float, float)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
attributes #0 = { "ShaderType"="0" }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
!0 = metadata !{metadata !"const", null, i32 1}
 | 
					 | 
				
			||||||
		Loading…
	
		Reference in New Issue