; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck %s -check-prefix=GCN

define amdgpu_cs void @if_then(ptr addrspace(8) inreg %input, ptr addrspace(8) inreg %output, <3 x i32> %LocalInvocationId) {
; GCN-LABEL: if_then:
; GCN:       ; %bb.0: ; %.entry
; GCN-NEXT:    v_mov_b32_e32 v3, 0
; GCN-NEXT:    v_cmp_ne_u32_e32 vcc_lo, 0, v0
; GCN-NEXT:    s_and_saveexec_b32 s0, vcc_lo
; GCN-NEXT:  ; %bb.1: ; %.bb0
; GCN-NEXT:    v_mov_b32_e32 v3, 1
; GCN-NEXT:  ; %bb.2: ; %.merge
; GCN-NEXT:    s_or_b32 exec_lo, exec_lo, s0
; GCN-NEXT:    v_cmp_lt_u32_e32 vcc_lo, 3, v0
; GCN-NEXT:    s_and_saveexec_b32 s0, vcc_lo
; GCN-NEXT:    s_cbranch_execz .LBB0_4
; GCN-NEXT:  ; %bb.3: ; %.then
; GCN-NEXT:    s_or_saveexec_b32 s1, -1
; GCN-NEXT:    v_cndmask_b32_e64 v1, 0, v3, s1
; GCN-NEXT:    v_mov_b32_e32 v2, 0
; GCN-NEXT:    v_mov_b32_dpp v2, v1 row_shr:1 row_mask:0xf bank_mask:0xf
; GCN-NEXT:    s_mov_b32 exec_lo, s1
; GCN-NEXT:    v_mov_b32_e32 v0, v2
; GCN-NEXT:    v_mov_b32_e32 v4, -1
; GCN-NEXT:    v_mov_b32_e32 v3, 0
; GCN-NEXT:    buffer_store_dword v4, v0, s[4:7], 0 offen
; GCN-NEXT:  .LBB0_4: ; %.end
; GCN-NEXT:    s_waitcnt_depctr depctr_vm_vsrc(0)
; GCN-NEXT:    s_or_b32 exec_lo, exec_lo, s0
; GCN-NEXT:    v_mov_b32_e32 v0, -1
; GCN-NEXT:    buffer_store_dword v0, v3, s[4:7], 0 offen
; GCN-NEXT:    s_endpgm
.entry:
  %LocalInvocationId.i0 = extractelement <3 x i32> %LocalInvocationId, i32 0
  %.not10002 = icmp eq i32 %LocalInvocationId.i0, 0
  br i1 %.not10002, label %.merge, label %.bb0

.bb0:
  br label %.merge

.merge:
  %src = phi i32 [ 0, %.entry ], [ 1, %.bb0 ]
  %i530 = icmp ult i32 %LocalInvocationId.i0, 4
  br i1 %i530, label %.end, label %.then

.then:
  %i562 = call i32 @llvm.amdgcn.set.inactive.i32(i32 %src, i32 0)
  %i563 = call i32 @llvm.amdgcn.update.dpp.i32(i32 0, i32 %i562, i32 273, i32 15, i32 15, i1 false)
  %i564 = call i32 @llvm.amdgcn.strict.wwm.i32(i32 %i563)
  call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 -1, ptr addrspace(8) %output, i32 %i564, i32 0, i32 0)
  br label %.end

.end:
  %idx = phi i32 [ 0, %.then ], [ %src, %.merge ]
  call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 -1, ptr addrspace(8) %output, i32 %idx, i32 0, i32 0)
  ret void
}


define amdgpu_cs void @if_else_vgpr_opt(ptr addrspace(8) inreg %input, ptr addrspace(8) inreg %output, <3 x i32> %LocalInvocationId) {
; GCN-LABEL: if_else_vgpr_opt:
; GCN:       ; %bb.0: ; %.entry
; GCN-NEXT:    v_mov_b32_e32 v3, 0
; GCN-NEXT:    v_cmp_ne_u32_e32 vcc_lo, 0, v0
; GCN-NEXT:    s_and_saveexec_b32 s0, vcc_lo
; GCN-NEXT:  ; %bb.1: ; %.bb0
; GCN-NEXT:    v_mov_b32_e32 v3, 1
; GCN-NEXT:  ; %bb.2: ; %.merge
; GCN-NEXT:    s_or_b32 exec_lo, exec_lo, s0
; GCN-NEXT:    v_cmp_lt_u32_e32 vcc_lo, 3, v0
; GCN-NEXT:    s_and_saveexec_b32 s0, vcc_lo
; GCN-NEXT:    s_xor_b32 s0, exec_lo, s0
; GCN-NEXT:    s_cbranch_execnz .LBB1_5
; GCN-NEXT:  ; %bb.3: ; %Flow
; GCN-NEXT:    s_andn2_saveexec_b32 s0, s0
; GCN-NEXT:    s_cbranch_execnz .LBB1_6
; GCN-NEXT:  .LBB1_4: ; %.end
; GCN-NEXT:    s_endpgm
; GCN-NEXT:  .LBB1_5: ; %.else
; GCN-NEXT:    s_or_saveexec_b32 s1, -1
; GCN-NEXT:    v_mov_b32_e32 v1, 0
; GCN-NEXT:    v_cndmask_b32_e64 v2, 0, v3, s1
; GCN-NEXT:    v_mov_b32_dpp v1, v2 row_shr:1 row_mask:0xf bank_mask:0xf
; GCN-NEXT:    s_mov_b32 exec_lo, s1
; GCN-NEXT:    v_mov_b32_e32 v0, v1
; GCN-NEXT:    v_mov_b32_e32 v3, -1
; GCN-NEXT:    buffer_store_dword v3, v0, s[4:7], 0 offen
; GCN-NEXT:    ; implicit-def: $vgpr3
; GCN-NEXT:    s_andn2_saveexec_b32 s0, s0
; GCN-NEXT:    s_cbranch_execz .LBB1_4
; GCN-NEXT:  .LBB1_6: ; %.then
; GCN-NEXT:    v_mov_b32_e32 v0, -1
; GCN-NEXT:    buffer_store_dword v0, v3, s[4:7], 0 offen
; GCN-NEXT:    s_endpgm
.entry:
  %LocalInvocationId.i0 = extractelement <3 x i32> %LocalInvocationId, i32 0
  %.not10002 = icmp eq i32 %LocalInvocationId.i0, 0
  br i1 %.not10002, label %.merge, label %.bb0

.bb0:
  br label %.merge

.merge:
  %src = phi i32 [ 0, %.entry ], [ 1, %.bb0 ]
  %i530 = icmp ult i32 %LocalInvocationId.i0, 4
  br i1 %i530, label %.then, label %.else

.then:
  call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 -1, ptr addrspace(8) %output, i32 %src, i32 0, i32 0)
  br label %.end

.else:
  %i562 = call i32 @llvm.amdgcn.set.inactive.i32(i32 %src, i32 0)
  %i563 = call i32 @llvm.amdgcn.update.dpp.i32(i32 0, i32 %i562, i32 273, i32 15, i32 15, i1 false)
  %i564 = call i32 @llvm.amdgcn.strict.wwm.i32(i32 %i563)
  call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 -1, ptr addrspace(8) %output, i32 %i564, i32 0, i32 0)
  br label %.end

.end:
  ret void
}

declare i32 @llvm.amdgcn.set.inactive.i32(i32, i32) #0
declare i32 @llvm.amdgcn.update.dpp.i32(i32, i32, i32, i32, i32, i1) #0
declare i32 @llvm.amdgcn.strict.wwm.i32(i32) #1
declare void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32, ptr addrspace(8), i32, i32 immarg, i32 immarg) #2

attributes #0 = { convergent nounwind readnone willreturn }
attributes #1 = { convergent nounwind readnone speculatable willreturn }
attributes #2 = { nounwind willreturn writeonly }

