This repository has been archived by the owner on Jan 1, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 63
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212773 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Showing
6 changed files
with
404 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|
||
; 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 | ||
; 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 | ||
|
||
; 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 | ||
} |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.