| ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=SI %s | |
| ; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 amdgpu_kernel 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 } |