mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-23 20:29:30 +00:00
e.g. v_cndmask_b32 requires the condition operand be an SGPR. If one of the source operands were an SGPR, that would be considered the one SGPR use and the condition operand would be illegally moved. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218529 91177308-0d34-0410-b5e6-96231b3b80d8
39 lines
1.3 KiB
LLVM
39 lines
1.3 KiB
LLVM
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI %s
|
|
|
|
declare i32 @llvm.r600.read.tidig.x() #1
|
|
|
|
; SI-LABEL: @v_cnd_nan_nosgpr
|
|
; SI: V_CNDMASK_B32_e64 v{{[0-9]}}, v{{[0-9]}}, -1, s{{\[[0-9]+:[0-9]+\]}}
|
|
; SI-DAG: v{{[0-9]}}
|
|
; All nan values are converted to 0xffffffff
|
|
; SI: S_ENDPGM
|
|
define void @v_cnd_nan_nosgpr(float addrspace(1)* %out, i32 %c, float addrspace(1)* %fptr) #0 {
|
|
%idx = call i32 @llvm.r600.read.tidig.x() #1
|
|
%f.gep = getelementptr float addrspace(1)* %fptr, i32 %idx
|
|
%f = load float addrspace(1)* %fptr
|
|
%setcc = icmp ne i32 %c, 0
|
|
%select = select i1 %setcc, float 0xFFFFFFFFE0000000, float %f
|
|
store float %select, float addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
|
|
; This requires slightly trickier SGPR operand legalization since the
|
|
; single constant bus SGPR usage is the last operand, and it should
|
|
; never be moved.
|
|
|
|
; SI-LABEL: @v_cnd_nan
|
|
; SI: V_CNDMASK_B32_e64 v{{[0-9]}}, v{{[0-9]}}, -1, s{{\[[0-9]+:[0-9]+\]}}
|
|
; SI-DAG: v{{[0-9]}}
|
|
; All nan values are converted to 0xffffffff
|
|
; SI: S_ENDPGM
|
|
define void @v_cnd_nan(float addrspace(1)* %out, i32 %c, float %f) #0 {
|
|
%setcc = icmp ne i32 %c, 0
|
|
%select = select i1 %setcc, float 0xFFFFFFFFE0000000, float %f
|
|
store float %select, float addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { nounwind }
|
|
attributes #1 = { nounwind readnone }
|