mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-27 15:22:29 +00:00
7eba65d30c
For some reason there are both of these available, except for scalar 64-bit compares which only has u64. I'm not sure why there are both (I'm guessing it's for the one bit inputs we don't use), but for consistency always using the unsigned one. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282832 91177308-0d34-0410-b5e6-96231b3b80d8
650 lines
16 KiB
LLVM
650 lines
16 KiB
LLVM
; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=SI %s
|
|
; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI %s
|
|
|
|
; Since this intrinsic is exposed as a constant after isel, use it to
|
|
; defeat the DAG's compare with constant canonicalizations.
|
|
declare i32 @llvm.amdgcn.groupstaticsize() #1
|
|
|
|
@lds = addrspace(3) global [512 x i32] undef, align 4
|
|
|
|
; GCN-LABEL: {{^}}br_scc_eq_i32_inline_imm:
|
|
; GCN: s_cmp_eq_u32 s{{[0-9]+}}, 4{{$}}
|
|
define void @br_scc_eq_i32_inline_imm(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp eq i32 %cond, 4
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_eq_i32_simm16_max:
|
|
; GCN: s_cmpk_eq_i32 s{{[0-9]+}}, 0x7fff{{$}}
|
|
define void @br_scc_eq_i32_simm16_max(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp eq i32 %cond, 32767
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_eq_i32_simm16_max_p1:
|
|
; GCN: s_cmpk_eq_u32 s{{[0-9]+}}, 0x8000{{$}}
|
|
define void @br_scc_eq_i32_simm16_max_p1(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp eq i32 %cond, 32768
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_ne_i32_simm16_max_p1:
|
|
; GCN: s_cmpk_lg_u32 s{{[0-9]+}}, 0x8000{{$}}
|
|
define void @br_scc_ne_i32_simm16_max_p1(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp ne i32 %cond, 32768
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_eq_i32_simm16_min:
|
|
; GCN: s_cmpk_eq_i32 s{{[0-9]+}}, 0x8000{{$}}
|
|
define void @br_scc_eq_i32_simm16_min(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp eq i32 %cond, -32768
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_eq_i32_simm16_min_m1:
|
|
; GCN: s_cmp_eq_u32 s{{[0-9]+}}, 0xffff7fff{{$}}
|
|
define void @br_scc_eq_i32_simm16_min_m1(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp eq i32 %cond, -32769
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_eq_i32_uimm15_max:
|
|
; GCN: s_cmpk_eq_u32 s{{[0-9]+}}, 0xffff{{$}}
|
|
define void @br_scc_eq_i32_uimm15_max(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp eq i32 %cond, 65535
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_eq_i32_uimm16_max:
|
|
; GCN: s_cmpk_eq_u32 s{{[0-9]+}}, 0xffff{{$}}
|
|
define void @br_scc_eq_i32_uimm16_max(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp eq i32 %cond, 65535
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_eq_i32_uimm16_max_p1:
|
|
; GCN: s_cmp_eq_u32 s{{[0-9]+}}, 0x10000{{$}}
|
|
define void @br_scc_eq_i32_uimm16_max_p1(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp eq i32 %cond, 65536
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
|
|
; GCN-LABEL: {{^}}br_scc_eq_i32:
|
|
; GCN: s_cmpk_eq_i32 s{{[0-9]+}}, 0x41{{$}}
|
|
define void @br_scc_eq_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp eq i32 %cond, 65
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_ne_i32:
|
|
; GCN: s_cmpk_lg_i32 s{{[0-9]+}}, 0x41{{$}}
|
|
define void @br_scc_ne_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp ne i32 %cond, 65
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_sgt_i32:
|
|
; GCN: s_cmpk_gt_i32 s{{[0-9]+}}, 0x41{{$}}
|
|
define void @br_scc_sgt_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp sgt i32 %cond, 65
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_sgt_i32_simm16_max:
|
|
; GCN: s_cmpk_gt_i32 s{{[0-9]+}}, 0x7fff{{$}}
|
|
define void @br_scc_sgt_i32_simm16_max(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp sgt i32 %cond, 32767
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_sgt_i32_simm16_max_p1:
|
|
; GCN: s_cmp_gt_i32 s{{[0-9]+}}, 0x8000{{$}}
|
|
define void @br_scc_sgt_i32_simm16_max_p1(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp sgt i32 %cond, 32768
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_sge_i32:
|
|
; GCN: s_cmpk_ge_i32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @br_scc_sge_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp sge i32 %cond, %size
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_slt_i32:
|
|
; GCN: s_cmpk_lt_i32 s{{[0-9]+}}, 0x41{{$}}
|
|
define void @br_scc_slt_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp slt i32 %cond, 65
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_sle_i32:
|
|
; GCN: s_cmpk_le_i32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @br_scc_sle_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp sle i32 %cond, %size
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_ugt_i32:
|
|
; GCN: s_cmpk_gt_u32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @br_scc_ugt_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp ugt i32 %cond, %size
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_uge_i32:
|
|
; GCN: s_cmpk_ge_u32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @br_scc_uge_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp uge i32 %cond, %size
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_ult_i32:
|
|
; GCN: s_cmpk_lt_u32 s{{[0-9]+}}, 0x41{{$}}
|
|
define void @br_scc_ult_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp ult i32 %cond, 65
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_ult_i32_min_simm16:
|
|
; GCN: s_cmp_lt_u32 s2, 0xffff8000
|
|
define void @br_scc_ult_i32_min_simm16(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp ult i32 %cond, -32768
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_ult_i32_min_simm16_m1:
|
|
; GCN: s_cmp_lt_u32 s{{[0-9]+}}, 0xffff7fff{{$}}
|
|
define void @br_scc_ult_i32_min_simm16_m1(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp ult i32 %cond, -32769
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_ule_i32:
|
|
; GCN: s_cmpk_le_u32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @br_scc_ule_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp ule i32 %cond, %size
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}commute_br_scc_eq_i32:
|
|
; GCN: s_cmpk_eq_i32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @commute_br_scc_eq_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp eq i32 %size, %cond
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}commute_br_scc_ne_i32:
|
|
; GCN: s_cmpk_lg_i32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @commute_br_scc_ne_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp ne i32 %size, %cond
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}commute_br_scc_sgt_i32:
|
|
; GCN: s_cmpk_lt_i32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @commute_br_scc_sgt_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp sgt i32 %size, %cond
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}commute_br_scc_sge_i32:
|
|
; GCN: s_cmpk_le_i32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @commute_br_scc_sge_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp sge i32 %size, %cond
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}commute_br_scc_slt_i32:
|
|
; GCN: s_cmpk_gt_i32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @commute_br_scc_slt_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp slt i32 %size, %cond
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}commute_br_scc_sle_i32:
|
|
; GCN: s_cmpk_ge_i32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @commute_br_scc_sle_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp sle i32 %size, %cond
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}commute_br_scc_ugt_i32:
|
|
; GCN: s_cmpk_lt_u32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @commute_br_scc_ugt_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp ugt i32 %size, %cond
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}commute_br_scc_uge_i32:
|
|
; GCN: s_cmpk_le_u32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @commute_br_scc_uge_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp uge i32 %size, %cond
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}commute_br_scc_ult_i32:
|
|
; GCN: s_cmpk_gt_u32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @commute_br_scc_ult_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp ult i32 %size, %cond
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}commute_br_scc_ule_i32:
|
|
; GCN: s_cmpk_ge_u32 s{{[0-9]+}}, 0x800{{$}}
|
|
define void @commute_br_scc_ule_i32(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%cmp0 = icmp ule i32 %size, %cond
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_ult_i32_non_u16:
|
|
; GCN: s_cmp_lt_u32 s2, 0xfffff7ff
|
|
define void @br_scc_ult_i32_non_u16(i32 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%size = call i32 @llvm.amdgcn.groupstaticsize()
|
|
%not.size = xor i32 %size, -1
|
|
%cmp0 = icmp ult i32 %cond, %not.size
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "; $0", "v"([512 x i32] addrspace(3)* @lds)
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_eq_i64_inline_imm:
|
|
; VI: s_cmp_eq_u64 s{{\[[0-9]+:[0-9]+\]}}, 4
|
|
|
|
; SI: v_cmp_eq_u64_e64
|
|
define void @br_scc_eq_i64_inline_imm(i64 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp eq i64 %cond, 4
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_eq_i64_simm16:
|
|
; VI-DAG: s_movk_i32 s[[K_LO:[0-9]+]], 0x4d2
|
|
; VI-DAG: s_mov_b32 s[[K_HI:[0-9]+]], 0
|
|
; VI: s_cmp_eq_u64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[}}[[K_LO]]:[[K_HI]]{{\]}}
|
|
|
|
; SI: v_cmp_eq_u64_e32
|
|
define void @br_scc_eq_i64_simm16(i64 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp eq i64 %cond, 1234
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_ne_i64_inline_imm:
|
|
; VI: s_cmp_lg_u64 s{{\[[0-9]+:[0-9]+\]}}, 4
|
|
|
|
; SI: v_cmp_ne_u64_e64
|
|
define void @br_scc_ne_i64_inline_imm(i64 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp ne i64 %cond, 4
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}br_scc_ne_i64_simm16:
|
|
; VI-DAG: s_movk_i32 s[[K_LO:[0-9]+]], 0x4d2
|
|
; VI-DAG: s_mov_b32 s[[K_HI:[0-9]+]], 0
|
|
; VI: s_cmp_lg_u64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[}}[[K_LO]]:[[K_HI]]{{\]}}
|
|
|
|
; SI: v_cmp_ne_u64_e32
|
|
define void @br_scc_ne_i64_simm16(i64 %cond, i32 addrspace(1)* %out) #0 {
|
|
entry:
|
|
%cmp0 = icmp ne i64 %cond, 1234
|
|
br i1 %cmp0, label %endif, label %if
|
|
|
|
if:
|
|
call void asm sideeffect "", ""()
|
|
br label %endif
|
|
|
|
endif:
|
|
store volatile i32 1, i32 addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { nounwind }
|
|
attributes #1 = { nounwind readnone }
|