| ; 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 } |