diff options
Diffstat (limited to 'llvm/test/CodeGen/AMDGPU/multilevel-break.ll')
-rw-r--r-- | llvm/test/CodeGen/AMDGPU/multilevel-break.ll | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/llvm/test/CodeGen/AMDGPU/multilevel-break.ll b/llvm/test/CodeGen/AMDGPU/multilevel-break.ll index 216ca1973b5..c4e2f1e3487 100644 --- a/llvm/test/CodeGen/AMDGPU/multilevel-break.ll +++ b/llvm/test/CodeGen/AMDGPU/multilevel-break.ll @@ -10,11 +10,12 @@ ; ; OPT: Flow: ; -; Ensure two else.break calls, for both the inner and outer loops +; Ensure two if.break calls, for both the inner and outer loops -; OPT: call i64 @llvm.amdgcn.else.break(i64 [[if_exec]], -; OPT-NEXT: call i64 @llvm.amdgcn.else.break(i64 [[if_exec]], -; OPT-NEXT: call void @llvm.amdgcn.end.cf +; OPT: call void @llvm.amdgcn.end.cf +; OPT-NEXT: call i64 @llvm.amdgcn.if.break(i1 +; OPT-NEXT: call i1 @llvm.amdgcn.loop(i64 +; OPT-NEXT: call i64 @llvm.amdgcn.if.break(i1 ; ; OPT: Flow1: @@ -30,10 +31,9 @@ ; Ensure extra or eliminated ; GCN-NEXT: s_or_b64 exec, exec, [[SAVE_BREAK]] -; GCN-NEXT: s_mov_b64 -; GCN-NEXT: s_and_b64 [[MASKED_SAVE_BREAK:s\[[0-9]+:[0-9]+\]]], exec, [[SAVE_BREAK]] -; GCN-NEXT: s_or_b64 [[OR_BREAK:s\[[0-9]+:[0-9]+\]]], [[MASKED_SAVE_BREAK]], s{{\[[0-9]+:[0-9]+\]}} -; TODO: get rid of redundant loop counter moves +; GCN-NEXT: v_cmp_ne_u32_e32 vcc, 0, v{{[0-9]+}} +; GCN-NEXT: s_or_b64 [[OR_BREAK:s\[[0-9]+:[0-9]+\]]], vcc, s{{\[[0-9]+:[0-9]+\]}} +; GCN-NEXT: v_cmp_ne_u32_e32 vcc, 0, v{{[0-9]+}} ; GCN-NEXT: v_mov_b32_e32 ; GCN-NEXT: s_andn2_b64 exec, exec, [[OR_BREAK]] ; GCN-NEXT: s_cbranch_execnz [[INNER_LOOP]] @@ -43,8 +43,9 @@ ; Ensure copy is eliminated ; GCN-NEXT: s_or_b64 exec, exec, [[OR_BREAK]] -; GCN-NEXT: s_and_b64 [[MASKED2_SAVE_BREAK:s\[[0-9]+:[0-9]+\]]], exec, [[SAVE_BREAK]] +; GCN-NEXT: s_and_b64 [[MASKED2_SAVE_BREAK:s\[[0-9]+:[0-9]+\]]], exec, vcc ; GCN-NEXT: s_or_b64 [[OUTER_OR_BREAK:s\[[0-9]+:[0-9]+\]]], [[MASKED2_SAVE_BREAK]], s{{\[[0-9]+:[0-9]+\]}} +; GCN-NEXT: s_mov_b64 ; GCN-NEXT: v_mov_b32_e32 ; GCN-NEXT: s_andn2_b64 exec, exec, [[OUTER_OR_BREAK]] ; GCN-NEXT: s_cbranch_execnz [[OUTER_LOOP]] @@ -71,9 +72,8 @@ ENDIF: ; preds = %LOOP } ; OPT-LABEL: define amdgpu_kernel void @multi_if_break_loop( -; OPT: llvm.amdgcn.break -; OPT: llvm.amdgcn.loop ; OPT: llvm.amdgcn.if.break +; OPT: llvm.amdgcn.loop ; OPT: llvm.amdgcn.if.break ; OPT: llvm.amdgcn.end.cf @@ -82,9 +82,10 @@ ENDIF: ; preds = %LOOP ; GCN: [[LOOP:BB[0-9]+_[0-9]+]]: ; %bb1{{$}} -; Uses a copy intsead of an or -; GCN: s_mov_b64 [[COPY:s\[[0-9]+:[0-9]+\]]], [[BREAK_REG]] -; GCN: s_or_b64 [[BREAK_REG]], exec, [[BREAK_REG]] +; GCN: s_or_b64 [[BREAK_REG]], vcc, [[BREAK_REG]] +; GCN: s_andn2_b64 exec, exec, [[BREAK_REG]] +; GCN-NEXT: s_cbranch_execnz + define amdgpu_kernel void @multi_if_break_loop(i32 %arg) #0 { bb: %id = call i32 @llvm.amdgcn.workitem.id.x() |