blob: 2eb2e1b7c399ba9377be75884898e53ce2b65f1b [file] [log] [blame]
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -verify-machineinstrs --stress-regalloc=2 -start-before=greedy,0 -stop-after=virtregrewriter,1 -o - %s | FileCheck -check-prefix=GCN %s
---
name: test_remat_v_mov_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mov_b32_e32
; GCN: renamable $vgpr0 = V_MOV_B32_e32 1, implicit $exec
; GCN: renamable $vgpr1 = V_MOV_B32_e32 2, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MOV_B32_e32 3, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_MOV_B32_e32 1, implicit $exec
%1:vgpr_32 = V_MOV_B32_e32 2, implicit $exec
%2:vgpr_32 = V_MOV_B32_e32 3, implicit $exec
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_no_remat_v_mov_b32_e32_impuse
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_mov_b32_e32_impuse
; GCN: $m0 = IMPLICIT_DEF
; GCN: renamable $vgpr0 = V_MOV_B32_e32 1, implicit $exec, implicit $m0
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_MOV_B32_e32 2, implicit $exec, implicit $m0
; GCN: renamable $vgpr0 = V_MOV_B32_e32 3, implicit $exec, implicit $m0
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
$m0 = IMPLICIT_DEF
%0:vgpr_32 = V_MOV_B32_e32 1, implicit $exec, implicit $m0
%1:vgpr_32 = V_MOV_B32_e32 2, implicit $exec, implicit $m0
%2:vgpr_32 = V_MOV_B32_e32 3, implicit $exec, implicit $m0
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_mov_b32_e32_exec_def
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mov_b32_e32_exec_def
; GCN: renamable $vgpr0 = V_MOV_B32_e32 1, implicit $exec
; GCN: renamable $vgpr1 = V_MOV_B32_e32 2, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MOV_B32_e32 3, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: $exec = S_ANDN2_B64_term $exec, undef renamable $sgpr0_sgpr1, implicit-def $scc
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_MOV_B32_e32 1, implicit $exec
%1:vgpr_32 = V_MOV_B32_e32 2, implicit $exec
%2:vgpr_32 = V_MOV_B32_e32 3, implicit $exec
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
$exec = S_ANDN2_B64_term $exec, undef %4:sreg_64, implicit-def $scc
S_ENDPGM 0
...
---
name: test_remat_v_mov_b32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mov_b32_e64
; GCN: renamable $vgpr0 = V_MOV_B32_e64 1, implicit $exec
; GCN: renamable $vgpr1 = V_MOV_B32_e64 2, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MOV_B32_e64 3, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_MOV_B32_e64 1, implicit $exec
%1:vgpr_32 = V_MOV_B32_e64 2, implicit $exec
%2:vgpr_32 = V_MOV_B32_e64 3, implicit $exec
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_no_remat_v_mov_b32_dpp
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_mov_b32_dpp
; GCN: renamable $vgpr0 = V_MOV_B32_dpp undef $vgpr0, undef $vgpr0, 1, 15, 15, 1, implicit $exec
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_MOV_B32_dpp undef $vgpr1, undef $vgpr0, 1, 15, 15, 1, implicit $exec
; GCN: renamable $vgpr0 = V_MOV_B32_dpp undef $vgpr0, undef $vgpr0, 1, 15, 15, 1, implicit $exec
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MOV_B32_dpp undef %1:vgpr_32, undef %0:vgpr_32, 1, 15, 15, 1, implicit $exec
%2:vgpr_32 = V_MOV_B32_dpp undef %2:vgpr_32, undef %0:vgpr_32, 1, 15, 15, 1, implicit $exec
%3:vgpr_32 = V_MOV_B32_dpp undef %3:vgpr_32, undef %0:vgpr_32, 1, 15, 15, 1, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_accvgpr_read_b32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_accvgpr_read_b32
; GCN: renamable $vgpr0 = V_ACCVGPR_READ_B32_e64 undef $agpr0, implicit $exec
; GCN: renamable $vgpr1 = V_ACCVGPR_READ_B32_e64 undef $agpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_ACCVGPR_READ_B32_e64 undef $agpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_ACCVGPR_READ_B32_e64 undef $agpr0, implicit $exec
%1:vgpr_32 = V_ACCVGPR_READ_B32_e64 undef $agpr0, implicit $exec
%2:vgpr_32 = V_ACCVGPR_READ_B32_e64 undef $agpr0, implicit $exec
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_accvgpr_write_b32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_accvgpr_write_b32
; GCN: renamable $agpr0 = V_ACCVGPR_WRITE_B32_e64 1, implicit $exec
; GCN: renamable $agpr1 = V_ACCVGPR_WRITE_B32_e64 2, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $agpr0
; GCN: S_NOP 0, implicit killed renamable $agpr1
; GCN: renamable $agpr0 = V_ACCVGPR_WRITE_B32_e64 3, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $agpr0
; GCN: S_ENDPGM 0
%0:agpr_32 = V_ACCVGPR_WRITE_B32_e64 1, implicit $exec
%1:agpr_32 = V_ACCVGPR_WRITE_B32_e64 2, implicit $exec
%2:agpr_32 = V_ACCVGPR_WRITE_B32_e64 3, implicit $exec
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_mov_b64_pseudo
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mov_b64_pseudo
; GCN: renamable $vgpr0_vgpr1 = V_MOV_B64_PSEUDO 1, implicit $exec
; GCN: renamable $vgpr2_vgpr3 = V_MOV_B64_PSEUDO 2, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = V_MOV_B64_PSEUDO 3, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%0:vreg_64_align2 = V_MOV_B64_PSEUDO 1, implicit $exec
%1:vreg_64_align2 = V_MOV_B64_PSEUDO 2, implicit $exec
%2:vreg_64_align2 = V_MOV_B64_PSEUDO 3, implicit $exec
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_i32_f64_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_i32_f64_e32
; GCN: renamable $vgpr0 = nofpexcept V_CVT_I32_F64_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_CVT_I32_F64_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_CVT_I32_F64_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_CVT_I32_F64_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_CVT_I32_F64_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_CVT_I32_F64_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
name: test_no_remat_v_cvt_i32_f64_e32_fp_except
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_cvt_i32_f64_e32_fp_except
; GCN: renamable $vgpr0 = V_CVT_I32_F64_e32 1, implicit $exec, implicit $mode
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_CVT_I32_F64_e32 2, implicit $exec, implicit $mode
; GCN: renamable $vgpr0 = V_CVT_I32_F64_e32 3, implicit $exec, implicit $mode
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_CVT_I32_F64_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_CVT_I32_F64_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_CVT_I32_F64_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
# Cannot rematerialize if MODE register is modified anywhere
name: test_no_remat_v_cvt_i32_f64_e32_mode_def
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_cvt_i32_f64_e32_mode_def
; GCN: $mode = IMPLICIT_DEF
; GCN: renamable $vgpr0 = nofpexcept V_CVT_I32_F64_e32 1, implicit $exec, implicit $mode
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = nofpexcept V_CVT_I32_F64_e32 2, implicit $exec, implicit $mode
; GCN: renamable $vgpr0 = nofpexcept V_CVT_I32_F64_e32 3, implicit $exec, implicit $mode
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
$mode = IMPLICIT_DEF
%0:vgpr_32 = nofpexcept V_CVT_I32_F64_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_CVT_I32_F64_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_CVT_I32_F64_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_i32_f64_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_i32_f64_e64
; GCN: renamable $vgpr0 = nofpexcept V_CVT_I32_F64_e64 0, 1, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_CVT_I32_F64_e64 0, 2, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_CVT_I32_F64_e64 0, 3, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_CVT_I32_F64_e64 0, 1, 0, 0, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_CVT_I32_F64_e64 0, 2, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_CVT_I32_F64_e64 0, 3, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_i32_f64_e64_undef
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_i32_f64_e64_undef
; GCN: renamable $vgpr0 = nofpexcept V_CVT_I32_F64_e64 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_CVT_I32_F64_e64 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_CVT_I32_F64_e64 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_CVT_I32_F64_e64 0, undef %0:vreg_64, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_CVT_I32_F64_e64 0, undef %0:vreg_64, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_CVT_I32_F64_e64 0, undef %0:vreg_64, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_no_remat_v_cvt_i32_f64_dpp
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_cvt_i32_f64_dpp
; GCN: renamable $vgpr0 = V_CVT_I32_F64_dpp undef $vgpr0, 0, undef $vgpr0_vgpr1, 336, 0, 0, 0, implicit $exec, implicit $mode
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_CVT_I32_F64_dpp undef $vgpr1, 0, undef $vgpr0_vgpr1, 336, 0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr0 = V_CVT_I32_F64_dpp undef $vgpr0, 0, undef $vgpr0_vgpr1, 336, 0, 0, 0, implicit $exec, implicit $mode
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CVT_I32_F64_dpp undef %1:vgpr_32, 0, undef %0:vreg_64_align2, 336, 0, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = V_CVT_I32_F64_dpp undef %2:vgpr_32, 0, undef %0:vreg_64_align2, 336, 0, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = V_CVT_I32_F64_dpp undef %3:vgpr_32, 0, undef %0:vreg_64_align2, 336, 0, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_no_remat_v_cvt_i32_f64_e32_imp_def
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_cvt_i32_f64_e32_imp_def
; GCN: renamable $vgpr0 = V_CVT_I32_F64_e32 1, implicit $exec, implicit $mode, implicit-def $m0
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_CVT_I32_F64_e32 2, implicit $exec, implicit $mode, implicit-def $m0
; GCN: renamable $vgpr0 = V_CVT_I32_F64_e32 3, implicit $exec, implicit $mode, implicit-def $m0
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_CVT_I32_F64_e32 1, implicit $exec, implicit $mode, implicit-def $m0
%1:vgpr_32 = V_CVT_I32_F64_e32 2, implicit $exec, implicit $mode, implicit-def $m0
%2:vgpr_32 = V_CVT_I32_F64_e32 3, implicit $exec, implicit $mode, implicit-def $m0
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_no_remat_v_cvt_i32_f64_e32_imp_use
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_cvt_i32_f64_e32_imp_use
; GCN: renamable $vgpr0 = V_CVT_I32_F64_e32 1, implicit $exec, implicit $mode, implicit $m0
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_CVT_I32_F64_e32 2, implicit $exec, implicit $mode, implicit $m0
; GCN: renamable $vgpr0 = V_CVT_I32_F64_e32 3, implicit $exec, implicit $mode, implicit $m0
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_CVT_I32_F64_e32 1, implicit $exec, implicit $mode, implicit $m0
%1:vgpr_32 = V_CVT_I32_F64_e32 2, implicit $exec, implicit $mode, implicit $m0
%2:vgpr_32 = V_CVT_I32_F64_e32 3, implicit $exec, implicit $mode, implicit $m0
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_f64_i32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_f64_i32_e32
; GCN: renamable $vgpr0_vgpr1 = V_CVT_F64_I32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = V_CVT_F64_I32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = V_CVT_F64_I32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%0:vreg_64_align2 = V_CVT_F64_I32_e32 1, implicit $exec, implicit $mode
%1:vreg_64_align2 = V_CVT_F64_I32_e32 2, implicit $exec, implicit $mode
%2:vreg_64_align2 = V_CVT_F64_I32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_f32_f64_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_f32_f64_e32
; GCN: renamable $vgpr0 = nofpexcept V_CVT_F32_F64_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_CVT_F32_F64_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_CVT_F32_F64_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_CVT_F32_F64_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_CVT_F32_F64_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_CVT_F32_F64_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_f64_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_f64_f32_e32
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_CVT_F64_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_CVT_F64_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_CVT_F64_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%0:vreg_64_align2 = nofpexcept V_CVT_F64_F32_e32 1, implicit $exec, implicit $mode
%1:vreg_64_align2 = nofpexcept V_CVT_F64_F32_e32 2, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_CVT_F64_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_u32_f64_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_u32_f64_e32
; GCN: renamable $vgpr0 = nofpexcept V_CVT_U32_F64_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_CVT_U32_F64_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_CVT_U32_F64_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_CVT_U32_F64_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_CVT_U32_F64_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_CVT_U32_F64_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_f64_u32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_f64_u32_e32
; GCN: renamable $vgpr0_vgpr1 = V_CVT_F64_U32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = V_CVT_F64_U32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = V_CVT_F64_U32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%0:vreg_64_align2 = V_CVT_F64_U32_e32 1, implicit $exec, implicit $mode
%1:vreg_64_align2 = V_CVT_F64_U32_e32 2, implicit $exec, implicit $mode
%2:vreg_64_align2 = V_CVT_F64_U32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_f32_i32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_f32_i32_e32
; GCN: renamable $vgpr0 = V_CVT_F32_I32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_CVT_F32_I32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CVT_F32_I32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_CVT_F32_I32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_CVT_F32_I32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_CVT_F32_I32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_f32_i32_sdwa
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_f32_i32_sdwa
; GCN: renamable $vgpr0 = V_CVT_F32_I32_sdwa 0, undef $vgpr0, 0, 0, 0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_CVT_F32_I32_sdwa 0, undef $vgpr0, 0, 0, 0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CVT_F32_I32_sdwa 0, undef $vgpr0, 0, 0, 0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CVT_F32_I32_sdwa 0, undef %0:vgpr_32, 0, 0, 0, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = V_CVT_F32_I32_sdwa 0, undef %0:vgpr_32, 0, 0, 0, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = V_CVT_F32_I32_sdwa 0, undef %0:vgpr_32, 0, 0, 0, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
# SDWA instruction with UNUSED_PRESERVE cannot be rematerialized due to partial
# dst write. This is handled because it always has a tied-def implicit operand.
name: test_no_remat_v_cvt_f32_i32_sdwa_dst_unused_preserve
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_cvt_f32_i32_sdwa_dst_unused_preserve
; GCN: renamable $vgpr0 = V_CVT_F32_I32_sdwa 0, undef $vgpr0, 0, 0, 0, 2, 0, implicit $exec, implicit $mode, implicit undef $vgpr0(tied-def 0)
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_CVT_F32_I32_sdwa 0, undef $vgpr0, 0, 0, 0, 2, 0, implicit $exec, implicit $mode, implicit undef $vgpr1(tied-def 0)
; GCN: renamable $vgpr0 = V_CVT_F32_I32_sdwa 0, undef $vgpr0, 0, 0, 0, 2, 0, implicit $exec, implicit $mode, implicit undef $vgpr0(tied-def 0)
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CVT_F32_I32_sdwa 0, undef %0:vgpr_32, 0, 0, 0, 2, 0, implicit $exec, implicit $mode, implicit undef %1:vgpr_32(tied-def 0)
%2:vgpr_32 = V_CVT_F32_I32_sdwa 0, undef %0:vgpr_32, 0, 0, 0, 2, 0, implicit $exec, implicit $mode, implicit undef %2:vgpr_32(tied-def 0)
%3:vgpr_32 = V_CVT_F32_I32_sdwa 0, undef %0:vgpr_32, 0, 0, 0, 2, 0, implicit $exec, implicit $mode, implicit undef %3:vgpr_32(tied-def 0)
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_cvt_f32_u32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_f32_u32_e32
; GCN: renamable $vgpr0 = V_CVT_F32_U32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_CVT_F32_U32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CVT_F32_U32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_CVT_F32_U32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_CVT_F32_U32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_CVT_F32_U32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_u32_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_u32_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_CVT_U32_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_CVT_U32_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_CVT_U32_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_i32_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_i32_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_CVT_I32_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_CVT_I32_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_CVT_I32_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_CVT_I32_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_CVT_I32_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_CVT_I32_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_f32_f16_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_f32_f16_e32
; GCN: renamable $vgpr0 = nofpexcept V_CVT_F32_F16_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_CVT_F32_F16_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_CVT_F32_F16_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_rpi_i32_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_rpi_i32_f32_e32
; GCN: renamable $vgpr0 = V_CVT_RPI_I32_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_CVT_RPI_I32_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CVT_RPI_I32_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_CVT_RPI_I32_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_CVT_RPI_I32_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_CVT_RPI_I32_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_flr_i32_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_flr_i32_f32_e32
; GCN: renamable $vgpr0 = V_CVT_FLR_I32_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_CVT_FLR_I32_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CVT_FLR_I32_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_CVT_FLR_I32_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_CVT_FLR_I32_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_CVT_FLR_I32_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_off_f32_i4_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_off_f32_i4_e32
; GCN: renamable $vgpr0 = V_CVT_OFF_F32_I4_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_CVT_OFF_F32_I4_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CVT_OFF_F32_I4_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_CVT_OFF_F32_I4_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_CVT_OFF_F32_I4_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_CVT_OFF_F32_I4_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cvt_f32_ubyte0_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_f32_ubyte0_e32
; GCN: renamable $vgpr0 = V_CVT_F32_UBYTE0_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_CVT_F32_UBYTE0_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CVT_F32_UBYTE0_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_CVT_F32_UBYTE0_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_CVT_F32_UBYTE0_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_CVT_F32_UBYTE0_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_fract_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_fract_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_FRACT_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_FRACT_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_FRACT_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_FRACT_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_FRACT_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_FRACT_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_trunc_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_trunc_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_TRUNC_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_TRUNC_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_TRUNC_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_TRUNC_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_TRUNC_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_TRUNC_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_ceil_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_ceil_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_CEIL_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_CEIL_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_CEIL_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_CEIL_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_CEIL_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_CEIL_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_rndne_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_rndne_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_RNDNE_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_RNDNE_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_RNDNE_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_RNDNE_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_RNDNE_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_RNDNE_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_floor_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_floor_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_FLOOR_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_FLOOR_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_FLOOR_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_FLOOR_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_FLOOR_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_FLOOR_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_exp_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_exp_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_EXP_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_EXP_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_EXP_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_EXP_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_EXP_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_EXP_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_log_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_log_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_LOG_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_LOG_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_LOG_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_LOG_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_LOG_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_LOG_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_rcp_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_rcp_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_RCP_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_RCP_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_RCP_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_RCP_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_RCP_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_RCP_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_rcp_iflag_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_rcp_iflag_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_RCP_IFLAG_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_RCP_IFLAG_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_RCP_IFLAG_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_RCP_IFLAG_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_RCP_IFLAG_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_RCP_IFLAG_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_rsq_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_rsq_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_RSQ_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_RSQ_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_RSQ_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_RSQ_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_RSQ_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_RSQ_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_sqrt_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_sqrt_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_SQRT_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_SQRT_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_SQRT_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_SQRT_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_SQRT_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_SQRT_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_rcp_f64_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_rcp_f64_e32
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_RCP_F64_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_RCP_F64_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_RCP_F64_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%0:vreg_64_align2 = nofpexcept V_RCP_F64_e32 1, implicit $exec, implicit $mode
%1:vreg_64_align2 = nofpexcept V_RCP_F64_e32 2, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_RCP_F64_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_rsq_f64_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_rsq_f64_e32
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_RSQ_F64_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_RSQ_F64_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_RSQ_F64_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%0:vreg_64_align2 = nofpexcept V_RSQ_F64_e32 1, implicit $exec, implicit $mode
%1:vreg_64_align2 = nofpexcept V_RSQ_F64_e32 2, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_RSQ_F64_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_sqrt_f64_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_sqrt_f64_e32
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_SQRT_F64_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_SQRT_F64_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_SQRT_F64_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%0:vreg_64_align2 = nofpexcept V_SQRT_F64_e32 1, implicit $exec, implicit $mode
%1:vreg_64_align2 = nofpexcept V_SQRT_F64_e32 2, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_SQRT_F64_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_sin_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_sin_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_SIN_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_SIN_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_SIN_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_SIN_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_SIN_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_SIN_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_cos_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cos_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_COS_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_COS_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_COS_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_COS_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_COS_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_COS_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_not_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_not_b32_e32
; GCN: renamable $vgpr0 = V_NOT_B32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_NOT_B32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_NOT_B32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_NOT_B32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_NOT_B32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_NOT_B32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_bfrev_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_bfrev_b32_e32
; GCN: renamable $vgpr0 = V_BFREV_B32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_BFREV_B32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_BFREV_B32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_BFREV_B32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_BFREV_B32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_BFREV_B32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_ffbh_u32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_ffbh_u32_e32
; GCN: renamable $vgpr0 = V_FFBH_U32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_FFBH_U32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_FFBH_U32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_FFBH_U32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_FFBH_U32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_FFBH_U32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_ffbl_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_ffbl_b32_e32
; GCN: renamable $vgpr0 = V_FFBL_B32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_FFBL_B32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_FFBL_B32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_FFBL_B32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_FFBL_B32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_FFBL_B32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_ffbh_i32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_ffbh_i32_e32
; GCN: renamable $vgpr0 = V_FFBH_I32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_FFBH_I32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_FFBH_I32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_FFBH_I32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_FFBH_I32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_FFBH_I32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_frexp_exp_i32_f64_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_frexp_exp_i32_f64_e32
; GCN: renamable $vgpr0 = nofpexcept V_FREXP_EXP_I32_F64_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_FREXP_EXP_I32_F64_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_FREXP_EXP_I32_F64_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_FREXP_EXP_I32_F64_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_FREXP_EXP_I32_F64_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_FREXP_EXP_I32_F64_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_frexp_mant_f64_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_frexp_mant_f64_e32
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_FREXP_MANT_F64_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_FREXP_MANT_F64_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_FREXP_MANT_F64_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%0:vreg_64_align2 = nofpexcept V_FREXP_MANT_F64_e32 1, implicit $exec, implicit $mode
%1:vreg_64_align2 = nofpexcept V_FREXP_MANT_F64_e32 2, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_FREXP_MANT_F64_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_fract_f64_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_fract_f64_e32
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_FRACT_F64_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_FRACT_F64_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_FRACT_F64_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%0:vreg_64_align2 = nofpexcept V_FRACT_F64_e32 1, implicit $exec, implicit $mode
%1:vreg_64_align2 = nofpexcept V_FRACT_F64_e32 2, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_FRACT_F64_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_frexp_exp_i32_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_frexp_exp_i32_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_FREXP_EXP_I32_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_FREXP_EXP_I32_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_FREXP_EXP_I32_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_FREXP_EXP_I32_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_FREXP_EXP_I32_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_FREXP_EXP_I32_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_frexp_mant_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_frexp_mant_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_FREXP_MANT_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_FREXP_MANT_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_FREXP_MANT_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_FREXP_MANT_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_FREXP_MANT_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_FREXP_MANT_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_exp_legacy_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_exp_legacy_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_EXP_LEGACY_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_EXP_LEGACY_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_EXP_LEGACY_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_EXP_LEGACY_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_EXP_LEGACY_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_EXP_LEGACY_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_log_legacy_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_log_legacy_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_LOG_LEGACY_F32_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_LOG_LEGACY_F32_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_LOG_LEGACY_F32_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = nofpexcept V_LOG_LEGACY_F32_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = nofpexcept V_LOG_LEGACY_F32_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_LOG_LEGACY_F32_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_sat_pk_u8_i16_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_sat_pk_u8_i16_e32
; GCN: renamable $vgpr0 = V_SAT_PK_U8_I16_e32 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_SAT_PK_U8_I16_e32 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_SAT_PK_U8_I16_e32 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%0:vgpr_32 = V_SAT_PK_U8_I16_e32 1, implicit $exec, implicit $mode
%1:vgpr_32 = V_SAT_PK_U8_I16_e32 2, implicit $exec, implicit $mode
%2:vgpr_32 = V_SAT_PK_U8_I16_e32 3, implicit $exec, implicit $mode
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_remat_v_accvgpr_mov_b32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_accvgpr_mov_b32
; GCN: renamable $agpr0 = V_ACCVGPR_MOV_B32 undef $agpr0, implicit $exec
; GCN: renamable $agpr1 = V_ACCVGPR_MOV_B32 undef $agpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $agpr0
; GCN: S_NOP 0, implicit killed renamable $agpr1
; GCN: renamable $agpr0 = V_ACCVGPR_MOV_B32 undef $agpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $agpr0
; GCN: S_ENDPGM 0
%0:agpr_32 = V_ACCVGPR_MOV_B32 undef $agpr0, implicit $exec
%1:agpr_32 = V_ACCVGPR_MOV_B32 undef $agpr0, implicit $exec
%2:agpr_32 = V_ACCVGPR_MOV_B32 undef $agpr0, implicit $exec
S_NOP 0, implicit %0
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_ENDPGM 0
...
---
name: test_no_remat_v_cndmask_b32_e32
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_cndmask_b32_e32
; GCN: renamable $vgpr0 = V_CNDMASK_B32_e32 1, undef $vgpr0, implicit $exec, implicit undef $vcc
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_CNDMASK_B32_e32 1, undef $vgpr0, implicit $exec, implicit undef $vcc
; GCN: renamable $vgpr0 = V_CNDMASK_B32_e32 1, undef $vgpr0, implicit $exec, implicit undef $vcc
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CNDMASK_B32_e32 1, undef %0:vgpr_32, implicit $exec, implicit undef $vcc
%2:vgpr_32 = V_CNDMASK_B32_e32 1, undef %0:vgpr_32, implicit $exec, implicit undef $vcc
%3:vgpr_32 = V_CNDMASK_B32_e32 1, undef %0:vgpr_32, implicit $exec, implicit undef $vcc
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_no_remat_v_cndmask_b32_sdwa
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_cndmask_b32_sdwa
; GCN: renamable $vgpr0 = V_CNDMASK_B32_sdwa 0, undef $vgpr0, 0, undef $vgpr0, 0, 0, 0, 0, 0, implicit $exec, implicit undef $vcc
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_CNDMASK_B32_sdwa 0, undef $vgpr0, 0, undef $vgpr0, 0, 0, 0, 0, 0, implicit $exec, implicit undef $vcc
; GCN: renamable $vgpr0 = V_CNDMASK_B32_sdwa 0, undef $vgpr0, 0, undef $vgpr0, 0, 0, 0, 0, 0, implicit $exec, implicit undef $vcc
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CNDMASK_B32_sdwa 0, undef %0:vgpr_32, 0, undef %0:vgpr_32, 0, 0, 0, 0, 0, implicit $exec, implicit undef $vcc
%2:vgpr_32 = V_CNDMASK_B32_sdwa 0, undef %0:vgpr_32, 0, undef %0:vgpr_32, 0, 0, 0, 0, 0, implicit $exec, implicit undef $vcc
%3:vgpr_32 = V_CNDMASK_B32_sdwa 0, undef %0:vgpr_32, 0, undef %0:vgpr_32, 0, 0, 0, 0, 0, implicit $exec, implicit undef $vcc
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_no_remat_v_cndmask_b32_dpp
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_cndmask_b32_dpp
; GCN: renamable $vgpr0 = V_CNDMASK_B32_dpp undef $vgpr0, 0, undef $vgpr0, 0, undef $vgpr0, 1, 15, 15, 10, implicit $exec, implicit undef $vcc
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_CNDMASK_B32_dpp undef $vgpr1, 0, undef $vgpr0, 0, undef $vgpr0, 1, 15, 15, 10, implicit $exec, implicit undef $vcc
; GCN: renamable $vgpr0 = V_CNDMASK_B32_dpp undef $vgpr0, 0, undef $vgpr0, 0, undef $vgpr0, 1, 15, 15, 10, implicit $exec, implicit undef $vcc
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CNDMASK_B32_dpp undef %1:vgpr_32, 0, undef %0:vgpr_32, 0, undef %0:vgpr_32, 1, 15, 15, 10, implicit $exec, implicit undef $vcc
%2:vgpr_32 = V_CNDMASK_B32_dpp undef %2:vgpr_32, 0, undef %0:vgpr_32, 0, undef %0:vgpr_32, 1, 15, 15, 10, implicit $exec, implicit undef $vcc
%3:vgpr_32 = V_CNDMASK_B32_dpp undef %3:vgpr_32, 0, undef %0:vgpr_32, 0, undef %0:vgpr_32, 1, 15, 15, 10, implicit $exec, implicit undef $vcc
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_cndmask_b32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cndmask_b32_e64
; GCN: renamable $vgpr0 = V_CNDMASK_B32_e64 0, 1, 0, 2, undef $sgpr0_sgpr1, implicit $exec
; GCN: renamable $vgpr1 = V_CNDMASK_B32_e64 0, 1, 0, 2, undef $sgpr0_sgpr1, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CNDMASK_B32_e64 0, 1, 0, 2, undef $sgpr0_sgpr1, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CNDMASK_B32_e64 0, 1, 0, 2, undef %0:sreg_64_xexec, implicit $exec
%2:vgpr_32 = V_CNDMASK_B32_e64 0, 1, 0, 2, undef %0:sreg_64_xexec, implicit $exec
%3:vgpr_32 = V_CNDMASK_B32_e64 0, 1, 0, 2, undef %0:sreg_64_xexec, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_madmk_f32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_madmk_f32
; GCN: renamable $vgpr0 = nofpexcept V_MADMK_F32 1, 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_MADMK_F32 2, 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_MADMK_F32 3, 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_MADMK_F32 1, 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_MADMK_F32 2, 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_MADMK_F32 3, 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_add_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_add_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_ADD_F32_e32 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_ADD_F32_e32 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_ADD_F32_e32 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_ADD_F32_e32 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_ADD_F32_e32 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_ADD_F32_e32 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_add_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_add_f32_e64
; GCN: renamable $vgpr0 = nofpexcept V_ADD_F32_e64 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_ADD_F32_e64 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_ADD_F32_e64 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_ADD_F32_e64 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_ADD_F32_e64 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_ADD_F32_e64 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_add_f32_sdwa
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_add_f32_sdwa
; GCN: renamable $vgpr0 = nofpexcept V_ADD_F32_sdwa 0, undef $vgpr0, 0, undef $vgpr0, 0, 0, 0, 0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_ADD_F32_sdwa 0, undef $vgpr0, 0, undef $vgpr0, 0, 0, 0, 0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_ADD_F32_sdwa 0, undef $vgpr0, 0, undef $vgpr0, 0, 0, 0, 0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_ADD_F32_sdwa 0, undef %0:vgpr_32, 0, undef %0:vgpr_32, 0, 0, 0, 0, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_ADD_F32_sdwa 0, undef %0:vgpr_32, 0, undef %0:vgpr_32, 0, 0, 0, 0, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_ADD_F32_sdwa 0, undef %0:vgpr_32, 0, undef %0:vgpr_32, 0, 0, 0, 0, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_no_remat_v_add_f32_dpp
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_add_f32_dpp
; GCN: renamable $vgpr0 = nofpexcept V_ADD_F32_dpp undef $vgpr0, 0, undef $vgpr0, 0, undef $vgpr0, 1, 15, 15, 10, implicit $exec, implicit $mode
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = nofpexcept V_ADD_F32_dpp undef $vgpr1, 0, undef $vgpr0, 0, undef $vgpr0, 1, 15, 15, 10, implicit $exec, implicit $mode
; GCN: renamable $vgpr0 = nofpexcept V_ADD_F32_dpp undef $vgpr0, 0, undef $vgpr0, 0, undef $vgpr0, 1, 15, 15, 10, implicit $exec, implicit $mode
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_ADD_F32_dpp undef %1:vgpr_32, 0, undef %0:vgpr_32, 0, undef %0:vgpr_32, 1, 15, 15, 10, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_ADD_F32_dpp undef %2:vgpr_32, 0, undef %0:vgpr_32, 0, undef %0:vgpr_32, 1, 15, 15, 10, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_ADD_F32_dpp undef %3:vgpr_32, 0, undef %0:vgpr_32, 0, undef %0:vgpr_32, 1, 15, 15, 10, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_sub_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_sub_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_SUB_F32_e32 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_SUB_F32_e32 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_SUB_F32_e32 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_SUB_F32_e32 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_SUB_F32_e32 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_SUB_F32_e32 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_subrev_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_subrev_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_SUBREV_F32_e32 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_SUBREV_F32_e32 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_SUBREV_F32_e32 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_SUBREV_F32_e32 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_SUBREV_F32_e32 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_SUBREV_F32_e32 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mul_legacy_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mul_legacy_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_MUL_LEGACY_F32_e32 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_MUL_LEGACY_F32_e32 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_MUL_LEGACY_F32_e32 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_MUL_LEGACY_F32_e32 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_MUL_LEGACY_F32_e32 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_MUL_LEGACY_F32_e32 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mul_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mul_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_MUL_F32_e32 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_MUL_F32_e32 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_MUL_F32_e32 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_MUL_F32_e32 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_MUL_F32_e32 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_MUL_F32_e32 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mul_i32_i24_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mul_i32_i24_e32
; GCN: renamable $vgpr0 = V_MUL_I32_I24_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MUL_I32_I24_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MUL_I32_I24_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MUL_I32_I24_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MUL_I32_I24_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MUL_I32_I24_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mul_hi_i32_i24_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mul_hi_i32_i24_e32
; GCN: renamable $vgpr0 = V_MUL_HI_I32_I24_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MUL_HI_I32_I24_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MUL_HI_I32_I24_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MUL_HI_I32_I24_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MUL_HI_I32_I24_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MUL_HI_I32_I24_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mul_u32_u24_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mul_u32_u24_e32
; GCN: renamable $vgpr0 = V_MUL_U32_U24_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MUL_U32_U24_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MUL_U32_U24_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MUL_U32_U24_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MUL_U32_U24_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MUL_U32_U24_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mul_hi_u32_u24_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mul_hi_u32_u24_e32
; GCN: renamable $vgpr0 = V_MUL_HI_U32_U24_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MUL_HI_U32_U24_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MUL_HI_U32_U24_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MUL_HI_U32_U24_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MUL_HI_U32_U24_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MUL_HI_U32_U24_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_min_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_min_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_MIN_F32_e32 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_MIN_F32_e32 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_MIN_F32_e32 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_MIN_F32_e32 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_MIN_F32_e32 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_MIN_F32_e32 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_max_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_max_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_MAX_F32_e32 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_MAX_F32_e32 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_MAX_F32_e32 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_MAX_F32_e32 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_MAX_F32_e32 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_MAX_F32_e32 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_min_i32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_min_i32_e32
; GCN: renamable $vgpr0 = V_MIN_I32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MIN_I32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MIN_I32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MIN_I32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MIN_I32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MIN_I32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_max_i32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_max_i32_e32
; GCN: renamable $vgpr0 = V_MAX_I32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MAX_I32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MAX_I32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MAX_I32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MAX_I32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MAX_I32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_min_u32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_min_u32_e32
; GCN: renamable $vgpr0 = V_MIN_U32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MIN_U32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MIN_U32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MIN_U32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MIN_U32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MIN_U32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_max_u32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_max_u32_e32
; GCN: renamable $vgpr0 = V_MAX_U32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MAX_U32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MAX_U32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MAX_U32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MAX_U32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MAX_U32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_lshrrev_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_lshrrev_b32_e32
; GCN: renamable $vgpr0 = V_LSHRREV_B32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_LSHRREV_B32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_LSHRREV_B32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_LSHRREV_B32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_LSHRREV_B32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_LSHRREV_B32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_lshlrev_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_lshlrev_b32_e32
; GCN: renamable $vgpr0 = V_LSHLREV_B32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_LSHLREV_B32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_LSHLREV_B32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_LSHLREV_B32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_LSHLREV_B32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_LSHLREV_B32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_ashrrev_i32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_ashrrev_i32_e32
; GCN: renamable $vgpr0 = V_ASHRREV_I32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_ASHRREV_I32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_ASHRREV_I32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_ASHRREV_I32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_ASHRREV_I32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_ASHRREV_I32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_and_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_and_b32_e32
; GCN: renamable $vgpr0 = V_AND_B32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_AND_B32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_AND_B32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_AND_B32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_AND_B32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_AND_B32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_or_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_or_b32_e32
; GCN: renamable $vgpr0 = V_OR_B32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_OR_B32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_OR_B32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_OR_B32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_OR_B32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_OR_B32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_xor_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_xor_b32_e32
; GCN: renamable $vgpr0 = V_XOR_B32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_XOR_B32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_XOR_B32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_XOR_B32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_XOR_B32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_XOR_B32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_madak_f32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_madak_f32
; GCN: renamable $vgpr0 = nofpexcept V_MADAK_F32 1, undef $vgpr0, 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_MADAK_F32 2, undef $vgpr0, 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_MADAK_F32 3, undef $vgpr0, 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_MADAK_F32 1, undef %0:vgpr_32, 1, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_MADAK_F32 2, undef %0:vgpr_32, 2, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_MADAK_F32 3, undef %0:vgpr_32, 3, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_add_u32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_add_u32_e32
; GCN: renamable $vgpr0 = V_ADD_U32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_ADD_U32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_ADD_U32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_ADD_U32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_ADD_U32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_ADD_U32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_sub_u32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_sub_u32_e32
; GCN: renamable $vgpr0 = V_SUB_U32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_SUB_U32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_SUB_U32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_SUB_U32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_SUB_U32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_SUB_U32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_subrev_u32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_subrev_u32_e32
; GCN: renamable $vgpr0 = V_SUBREV_U32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_SUBREV_U32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_SUBREV_U32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_SUBREV_U32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_SUBREV_U32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_SUBREV_U32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_bfm_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_bfm_b32_e32
; GCN: renamable $vgpr0 = V_BFM_B32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_BFM_B32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_BFM_B32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_BFM_B32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_BFM_B32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_BFM_B32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_bcnt_u32_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_bcnt_u32_b32_e32
; GCN: renamable $vgpr0 = V_BCNT_U32_B32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_BCNT_U32_B32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_BCNT_U32_B32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_BCNT_U32_B32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_BCNT_U32_B32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_BCNT_U32_B32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mbcnt_lo_u32_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mbcnt_lo_u32_b32_e32
; GCN: renamable $vgpr0 = V_MBCNT_LO_U32_B32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MBCNT_LO_U32_B32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MBCNT_LO_U32_B32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MBCNT_LO_U32_B32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MBCNT_LO_U32_B32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MBCNT_LO_U32_B32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mbcnt_hi_u32_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mbcnt_hi_u32_b32_e32
; GCN: renamable $vgpr0 = V_MBCNT_HI_U32_B32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MBCNT_HI_U32_B32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MBCNT_HI_U32_B32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MBCNT_HI_U32_B32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MBCNT_HI_U32_B32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MBCNT_HI_U32_B32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_ldexp_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_ldexp_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_LDEXP_F32_e32 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_LDEXP_F32_e32 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_LDEXP_F32_e32 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_LDEXP_F32_e32 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_LDEXP_F32_e32 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_LDEXP_F32_e32 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_cvt_pknorm_i16_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_pknorm_i16_f32_e32
; GCN: renamable $vgpr0 = V_CVT_PKNORM_I16_F32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_CVT_PKNORM_I16_F32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CVT_PKNORM_I16_F32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CVT_PKNORM_I16_F32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_CVT_PKNORM_I16_F32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_CVT_PKNORM_I16_F32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_cvt_pknorm_u16_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_pknorm_u16_f32_e32
; GCN: renamable $vgpr0 = V_CVT_PKNORM_U16_F32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_CVT_PKNORM_U16_F32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CVT_PKNORM_U16_F32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CVT_PKNORM_U16_F32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_CVT_PKNORM_U16_F32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_CVT_PKNORM_U16_F32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_cvt_pkrtz_f16_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_pkrtz_f16_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_CVT_PKRTZ_F16_F32_e32 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_CVT_PKRTZ_F16_F32_e32 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_CVT_PKRTZ_F16_F32_e32 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_CVT_PKRTZ_F16_F32_e32 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_CVT_PKRTZ_F16_F32_e32 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_CVT_PKRTZ_F16_F32_e32 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_cvt_pk_u16_u32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_pk_u16_u32_e32
; GCN: renamable $vgpr0 = V_CVT_PK_U16_U32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_CVT_PK_U16_U32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CVT_PK_U16_U32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CVT_PK_U16_U32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_CVT_PK_U16_U32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_CVT_PK_U16_U32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_cvt_pk_i16_i32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_pk_i16_i32_e32
; GCN: renamable $vgpr0 = V_CVT_PK_I16_I32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_CVT_PK_I16_I32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CVT_PK_I16_I32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CVT_PK_I16_I32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_CVT_PK_I16_I32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_CVT_PK_I16_I32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_min_legacy_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_min_legacy_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_MIN_LEGACY_F32_e32 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_MIN_LEGACY_F32_e32 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_MIN_LEGACY_F32_e32 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_MIN_LEGACY_F32_e32 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_MIN_LEGACY_F32_e32 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_MIN_LEGACY_F32_e32 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_max_legacy_f32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_max_legacy_f32_e32
; GCN: renamable $vgpr0 = nofpexcept V_MAX_LEGACY_F32_e32 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_MAX_LEGACY_F32_e32 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_MAX_LEGACY_F32_e32 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_MAX_LEGACY_F32_e32 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_MAX_LEGACY_F32_e32 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_MAX_LEGACY_F32_e32 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_lshr_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_lshr_b32_e32
; GCN: renamable $vgpr0 = V_LSHR_B32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_LSHR_B32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_LSHR_B32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_LSHR_B32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_LSHR_B32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_LSHR_B32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_lshl_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_lshl_b32_e32
; GCN: renamable $vgpr0 = V_LSHL_B32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_LSHL_B32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_LSHL_B32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_LSHL_B32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_LSHL_B32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_LSHL_B32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_ashr_i32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_ashr_i32_e32
; GCN: renamable $vgpr0 = V_ASHR_I32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_ASHR_I32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_ASHR_I32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_ASHR_I32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_ASHR_I32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_ASHR_I32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_no_remat_v_ldexp_f16_e32
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_ldexp_f16_e32
; GCN: renamable $vgpr0 = nofpexcept V_LDEXP_F16_e32 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = nofpexcept V_LDEXP_F16_e32 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr0 = nofpexcept V_LDEXP_F16_e32 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_LDEXP_F16_e32 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_LDEXP_F16_e32 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_LDEXP_F16_e32 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_no_remat_v_lshrrev_b16_e32
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_lshrrev_b16_e32
; GCN: renamable $vgpr0 = V_LSHRREV_B16_e32 1, undef $vgpr0, implicit $exec
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_LSHRREV_B16_e32 2, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr0 = V_LSHRREV_B16_e32 3, undef $vgpr0, implicit $exec
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_LSHRREV_B16_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_LSHRREV_B16_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_LSHRREV_B16_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_no_remat_v_lshlrev_b16_e32
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_lshlrev_b16_e32
; GCN: renamable $vgpr0 = V_LSHLREV_B16_e32 1, undef $vgpr0, implicit $exec
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_LSHLREV_B16_e32 2, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr0 = V_LSHLREV_B16_e32 3, undef $vgpr0, implicit $exec
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_LSHLREV_B16_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_LSHLREV_B16_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_LSHLREV_B16_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_no_remat_v_ashrrev_i16_e32
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: $sgpr32
body: |
bb.0:
; GCN-LABEL: name: test_no_remat_v_ashrrev_i16_e32
; GCN: renamable $vgpr0 = V_ASHRREV_I16_e32 1, undef $vgpr0, implicit $exec
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
; GCN: renamable $vgpr1 = V_ASHRREV_I16_e32 2, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr0 = V_ASHRREV_I16_e32 3, undef $vgpr0, implicit $exec
; GCN: SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.1, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = SI_SPILL_V32_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_ASHRREV_I16_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_ASHRREV_I16_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_ASHRREV_I16_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_xnor_b32_e32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_xnor_b32_e32
; GCN: renamable $vgpr0 = V_XNOR_B32_e32 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_XNOR_B32_e32 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_XNOR_B32_e32 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_XNOR_B32_e32 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_XNOR_B32_e32 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_XNOR_B32_e32 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_fmamk_f32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_fmamk_f32
; GCN: renamable $vgpr0 = nofpexcept V_FMAMK_F32 1, 1, undef $vgpr0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_FMAMK_F32 2, 2, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_FMAMK_F32 3, 3, undef $vgpr0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_FMAMK_F32 1, 1, undef %0:vgpr_32, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_FMAMK_F32 2, 2, undef %0:vgpr_32, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_FMAMK_F32 3, 3, undef %0:vgpr_32, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_fmaak_f32
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_fmaak_f32
; GCN: renamable $vgpr0 = nofpexcept V_FMAAK_F32 1, undef $vgpr0, 1, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_FMAAK_F32 2, undef $vgpr0, 2, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_FMAAK_F32 3, undef $vgpr0, 3, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_FMAAK_F32 1, undef %0:vgpr_32, 1, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_FMAAK_F32 2, undef %0:vgpr_32, 2, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_FMAAK_F32 3, undef %0:vgpr_32, 3, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mad_legacy_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mad_legacy_f32_e64
; GCN: renamable $vgpr0 = nofpexcept V_MAD_LEGACY_F32_e64 0, 1, 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_MAD_LEGACY_F32_e64 0, 2, 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_MAD_LEGACY_F32_e64 0, 3, 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_MAD_LEGACY_F32_e64 0, 1, 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_MAD_LEGACY_F32_e64 0, 2, 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_MAD_LEGACY_F32_e64 0, 3, 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mad_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mad_f32_e64
; GCN: renamable $vgpr0 = nofpexcept V_MAD_F32_e64 0, 1, 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_MAD_F32_e64 0, 2, 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_MAD_F32_e64 0, 3, 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_MAD_F32_e64 0, 1, 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_MAD_F32_e64 0, 2, 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_MAD_F32_e64 0, 3, 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_fma_legacy_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_fma_legacy_f32_e64
; GCN: renamable $vgpr0 = nofpexcept V_FMA_LEGACY_F32_e64 0, 1, 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_FMA_LEGACY_F32_e64 0, 2, 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_FMA_LEGACY_F32_e64 0, 3, 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_FMA_LEGACY_F32_e64 0, 1, 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_FMA_LEGACY_F32_e64 0, 2, 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_FMA_LEGACY_F32_e64 0, 3, 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_fma_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_fma_f32_e64
; GCN: renamable $vgpr0 = nofpexcept V_FMA_F32_e64 0, 1, 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_FMA_F32_e64 0, 2, 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_FMA_F32_e64 0, 3, 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_FMA_F32_e64 0, 1, 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_FMA_F32_e64 0, 2, 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_FMA_F32_e64 0, 3, 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mad_i32_i24_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mad_i32_i24_e64
; GCN: renamable $vgpr0 = V_MAD_I32_I24_e64 1, 1, undef $vgpr0, 0, implicit $exec
; GCN: renamable $vgpr1 = V_MAD_I32_I24_e64 2, 2, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MAD_I32_I24_e64 3, 3, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MAD_I32_I24_e64 1, 1, undef %0:vgpr_32, 0, implicit $exec
%2:vgpr_32 = V_MAD_I32_I24_e64 2, 2, undef %0:vgpr_32, 0, implicit $exec
%3:vgpr_32 = V_MAD_I32_I24_e64 3, 3, undef %0:vgpr_32, 0, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mad_u32_u24_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mad_u32_u24_e64
; GCN: renamable $vgpr0 = V_MAD_U32_U24_e64 1, 1, undef $vgpr0, 0, implicit $exec
; GCN: renamable $vgpr1 = V_MAD_U32_U24_e64 2, 2, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MAD_U32_U24_e64 3, 3, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MAD_U32_U24_e64 1, 1, undef %0:vgpr_32, 0, implicit $exec
%2:vgpr_32 = V_MAD_U32_U24_e64 2, 2, undef %0:vgpr_32, 0, implicit $exec
%3:vgpr_32 = V_MAD_U32_U24_e64 3, 3, undef %0:vgpr_32, 0, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_lerp_u8_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_lerp_u8_e64
; GCN: renamable $vgpr0 = V_LERP_U8_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_LERP_U8_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_LERP_U8_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_LERP_U8_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_LERP_U8_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_LERP_U8_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_fma_f64_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_fma_f64_e64
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_FMA_F64_e64 0, 1, 0, 1, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_FMA_F64_e64 0, 2, 0, 2, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_FMA_F64_e64 0, 3, 0, 3, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%1:vreg_64_align2 = nofpexcept V_FMA_F64_e64 0, 1, 0, 1, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_FMA_F64_e64 0, 2, 0, 2, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
%3:vreg_64_align2 = nofpexcept V_FMA_F64_e64 0, 3, 0, 3, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_add_f64_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_add_f64_e64
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_ADD_F64_e64 0, 1, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_ADD_F64_e64 0, 2, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_ADD_F64_e64 0, 3, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%1:vreg_64_align2 = nofpexcept V_ADD_F64_e64 0, 1, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_ADD_F64_e64 0, 2, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
%3:vreg_64_align2 = nofpexcept V_ADD_F64_e64 0, 3, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mul_f64_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mul_f64_e64
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_MUL_F64_e64 0, 1, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_MUL_F64_e64 0, 2, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_MUL_F64_e64 0, 3, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%1:vreg_64_align2 = nofpexcept V_MUL_F64_e64 0, 1, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_MUL_F64_e64 0, 2, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
%3:vreg_64_align2 = nofpexcept V_MUL_F64_e64 0, 3, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_min_f64_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_min_f64_e64
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_MIN_F64_e64 0, 1, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_MIN_F64_e64 0, 2, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_MIN_F64_e64 0, 3, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%1:vreg_64_align2 = nofpexcept V_MIN_F64_e64 0, 1, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_MIN_F64_e64 0, 2, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
%3:vreg_64_align2 = nofpexcept V_MIN_F64_e64 0, 3, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_max_f64_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_max_f64_e64
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_MAX_F64_e64 0, 1, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_MAX_F64_e64 0, 2, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_MAX_F64_e64 0, 3, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%1:vreg_64_align2 = nofpexcept V_MAX_F64_e64 0, 1, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_MAX_F64_e64 0, 2, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
%3:vreg_64_align2 = nofpexcept V_MAX_F64_e64 0, 3, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mul_lo_u32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mul_lo_u32_e64
; GCN: renamable $vgpr0 = V_MUL_LO_U32_e64 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MUL_LO_U32_e64 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MUL_LO_U32_e64 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MUL_LO_U32_e64 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MUL_LO_U32_e64 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MUL_LO_U32_e64 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mul_hi_u32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mul_hi_u32_e64
; GCN: renamable $vgpr0 = V_MUL_HI_U32_e64 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MUL_HI_U32_e64 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MUL_HI_U32_e64 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MUL_HI_U32_e64 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MUL_HI_U32_e64 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MUL_HI_U32_e64 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mul_lo_i32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mul_lo_i32_e64
; GCN: renamable $vgpr0 = V_MUL_LO_I32_e64 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MUL_LO_I32_e64 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MUL_LO_I32_e64 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MUL_LO_I32_e64 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MUL_LO_I32_e64 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MUL_LO_I32_e64 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_mul_hi_i32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_mul_hi_i32_e64
; GCN: renamable $vgpr0 = V_MUL_HI_I32_e64 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MUL_HI_I32_e64 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MUL_HI_I32_e64 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MUL_HI_I32_e64 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MUL_HI_I32_e64 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MUL_HI_I32_e64 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_cubeid_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cubeid_f32_e64
; GCN: renamable $vgpr0 = V_CUBEID_F32_e64 0, 1, 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_CUBEID_F32_e64 0, 2, 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CUBEID_F32_e64 0, 3, 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CUBEID_F32_e64 0, 1, 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = V_CUBEID_F32_e64 0, 2, 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = V_CUBEID_F32_e64 0, 3, 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_cubesc_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cubesc_f32_e64
; GCN: renamable $vgpr0 = V_CUBESC_F32_e64 0, 1, 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_CUBESC_F32_e64 0, 2, 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CUBESC_F32_e64 0, 3, 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CUBESC_F32_e64 0, 1, 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = V_CUBESC_F32_e64 0, 2, 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = V_CUBESC_F32_e64 0, 3, 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_cubetc_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cubetc_f32_e64
; GCN: renamable $vgpr0 = V_CUBETC_F32_e64 0, 1, 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_CUBETC_F32_e64 0, 2, 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CUBETC_F32_e64 0, 3, 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CUBETC_F32_e64 0, 1, 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = V_CUBETC_F32_e64 0, 2, 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = V_CUBETC_F32_e64 0, 3, 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_cubema_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cubema_f32_e64
; GCN: renamable $vgpr0 = V_CUBEMA_F32_e64 0, 1, 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_CUBEMA_F32_e64 0, 2, 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_CUBEMA_F32_e64 0, 3, 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_CUBEMA_F32_e64 0, 1, 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = V_CUBEMA_F32_e64 0, 2, 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = V_CUBEMA_F32_e64 0, 3, 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_bfe_u32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_bfe_u32_e64
; GCN: renamable $vgpr0 = V_BFE_U32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_BFE_U32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_BFE_U32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_BFE_U32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_BFE_U32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_BFE_U32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_bfe_i32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_bfe_i32_e64
; GCN: renamable $vgpr0 = V_BFE_I32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_BFE_I32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_BFE_I32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_BFE_I32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_BFE_I32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_BFE_I32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_bfi_b32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_bfi_b32_e64
; GCN: renamable $vgpr0 = V_BFI_B32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_BFI_B32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_BFI_B32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_BFI_B32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_BFI_B32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_BFI_B32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_alignbit_b32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_alignbit_b32_e64
; GCN: renamable $vgpr0 = V_ALIGNBIT_B32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_ALIGNBIT_B32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_ALIGNBIT_B32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_ALIGNBIT_B32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_ALIGNBIT_B32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_ALIGNBIT_B32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_alignbyte_b32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_alignbyte_b32_e64
; GCN: renamable $vgpr0 = V_ALIGNBYTE_B32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_ALIGNBYTE_B32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_ALIGNBYTE_B32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_ALIGNBYTE_B32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_ALIGNBYTE_B32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_ALIGNBYTE_B32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_min3_i32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_min3_i32_e64
; GCN: renamable $vgpr0 = V_MIN3_I32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MIN3_I32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MIN3_I32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MIN3_I32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MIN3_I32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MIN3_I32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_min3_u32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_min3_u32_e64
; GCN: renamable $vgpr0 = V_MIN3_U32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MIN3_U32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MIN3_U32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MIN3_U32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MIN3_U32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MIN3_U32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_max3_i32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_max3_i32_e64
; GCN: renamable $vgpr0 = V_MAX3_I32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MAX3_I32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MAX3_I32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MAX3_I32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MAX3_I32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MAX3_I32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_max3_u32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_max3_u32_e64
; GCN: renamable $vgpr0 = V_MAX3_U32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MAX3_U32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MAX3_U32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MAX3_U32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MAX3_U32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MAX3_U32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_med3_i32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_med3_i32_e64
; GCN: renamable $vgpr0 = V_MED3_I32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MED3_I32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MED3_I32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MED3_I32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MED3_I32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MED3_I32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_med3_u32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_med3_u32_e64
; GCN: renamable $vgpr0 = V_MED3_U32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_MED3_U32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MED3_U32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MED3_U32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_MED3_U32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_MED3_U32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_min3_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_min3_f32_e64
; GCN: renamable $vgpr0 = V_MIN3_F32_e64 0, 1, 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_MIN3_F32_e64 0, 2, 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MIN3_F32_e64 0, 3, 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MIN3_F32_e64 0, 1, 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = V_MIN3_F32_e64 0, 2, 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = V_MIN3_F32_e64 0, 3, 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_max3_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_max3_f32_e64
; GCN: renamable $vgpr0 = V_MAX3_F32_e64 0, 1, 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_MAX3_F32_e64 0, 2, 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MAX3_F32_e64 0, 3, 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MAX3_F32_e64 0, 1, 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = V_MAX3_F32_e64 0, 2, 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = V_MAX3_F32_e64 0, 3, 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_med3_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_med3_f32_e64
; GCN: renamable $vgpr0 = V_MED3_F32_e64 0, 1, 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = V_MED3_F32_e64 0, 2, 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MED3_F32_e64 0, 3, 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MED3_F32_e64 0, 1, 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vgpr_32 = V_MED3_F32_e64 0, 2, 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vgpr_32 = V_MED3_F32_e64 0, 3, 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_sad_u8_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_sad_u8_e64
; GCN: renamable $vgpr0 = V_SAD_U8_e64 1, 1, undef $vgpr0, 0, implicit $exec
; GCN: renamable $vgpr1 = V_SAD_U8_e64 2, 2, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_SAD_U8_e64 3, 3, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_SAD_U8_e64 1, 1, undef %0:vgpr_32, 0, implicit $exec
%2:vgpr_32 = V_SAD_U8_e64 2, 2, undef %0:vgpr_32, 0, implicit $exec
%3:vgpr_32 = V_SAD_U8_e64 3, 3, undef %0:vgpr_32, 0, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_sad_hi_u8_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_sad_hi_u8_e64
; GCN: renamable $vgpr0 = V_SAD_HI_U8_e64 1, 1, undef $vgpr0, 0, implicit $exec
; GCN: renamable $vgpr1 = V_SAD_HI_U8_e64 2, 2, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_SAD_HI_U8_e64 3, 3, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_SAD_HI_U8_e64 1, 1, undef %0:vgpr_32, 0, implicit $exec
%2:vgpr_32 = V_SAD_HI_U8_e64 2, 2, undef %0:vgpr_32, 0, implicit $exec
%3:vgpr_32 = V_SAD_HI_U8_e64 3, 3, undef %0:vgpr_32, 0, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_sad_u16_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_sad_u16_e64
; GCN: renamable $vgpr0 = V_SAD_U16_e64 1, 1, undef $vgpr0, 0, implicit $exec
; GCN: renamable $vgpr1 = V_SAD_U16_e64 2, 2, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_SAD_U16_e64 3, 3, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_SAD_U16_e64 1, 1, undef %0:vgpr_32, 0, implicit $exec
%2:vgpr_32 = V_SAD_U16_e64 2, 2, undef %0:vgpr_32, 0, implicit $exec
%3:vgpr_32 = V_SAD_U16_e64 3, 3, undef %0:vgpr_32, 0, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_sad_u32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_sad_u32_e64
; GCN: renamable $vgpr0 = V_SAD_U32_e64 1, 1, undef $vgpr0, 0, implicit $exec
; GCN: renamable $vgpr1 = V_SAD_U32_e64 2, 2, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_SAD_U32_e64 3, 3, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_SAD_U32_e64 1, 1, undef %0:vgpr_32, 0, implicit $exec
%2:vgpr_32 = V_SAD_U32_e64 2, 2, undef %0:vgpr_32, 0, implicit $exec
%3:vgpr_32 = V_SAD_U32_e64 3, 3, undef %0:vgpr_32, 0, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_cvt_pk_u8_f32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_cvt_pk_u8_f32_e64
; GCN: renamable $vgpr0 = nofpexcept V_CVT_PK_U8_F32_e64 0, 1, 0, 1, 0, undef $vgpr0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr1 = nofpexcept V_CVT_PK_U8_F32_e64 0, 2, 0, 2, 0, undef $vgpr0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = nofpexcept V_CVT_PK_U8_F32_e64 0, 3, 0, 3, 0, undef $vgpr0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = nofpexcept V_CVT_PK_U8_F32_e64 0, 1, 0, 1, 0, undef %0:vgpr_32, 0, implicit $exec, implicit $mode
%2:vgpr_32 = nofpexcept V_CVT_PK_U8_F32_e64 0, 2, 0, 2, 0, undef %0:vgpr_32, 0, implicit $exec, implicit $mode
%3:vgpr_32 = nofpexcept V_CVT_PK_U8_F32_e64 0, 3, 0, 3, 0, undef %0:vgpr_32, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_div_fixup_f64_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_div_fixup_f64_e64
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_DIV_FIXUP_F64_e64 0, 1, 0, 1, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_DIV_FIXUP_F64_e64 0, 2, 0, 2, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_DIV_FIXUP_F64_e64 0, 3, 0, 3, 0, undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%1:vreg_64_align2 = nofpexcept V_DIV_FIXUP_F64_e64 0, 1, 0, 1, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_DIV_FIXUP_F64_e64 0, 2, 0, 2, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
%3:vreg_64_align2 = nofpexcept V_DIV_FIXUP_F64_e64 0, 3, 0, 3, 0, undef %0:vreg_64_align2, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_ldexp_f64_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_ldexp_f64_e64
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_LDEXP_F64_e64 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_LDEXP_F64_e64 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_LDEXP_F64_e64 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%1:vreg_64_align2 = nofpexcept V_LDEXP_F64_e64 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_LDEXP_F64_e64 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vreg_64_align2 = nofpexcept V_LDEXP_F64_e64 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_msad_u8_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_msad_u8_e64
; GCN: renamable $vgpr0 = V_MSAD_U8_e64 1, 1, undef $vgpr0, 0, implicit $exec
; GCN: renamable $vgpr1 = V_MSAD_U8_e64 2, 2, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_MSAD_U8_e64 3, 3, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_MSAD_U8_e64 1, 1, undef %0:vgpr_32, 0, implicit $exec
%2:vgpr_32 = V_MSAD_U8_e64 2, 2, undef %0:vgpr_32, 0, implicit $exec
%3:vgpr_32 = V_MSAD_U8_e64 3, 3, undef %0:vgpr_32, 0, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_trig_preop_f64_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_trig_preop_f64_e64
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_TRIG_PREOP_F64_e64 0, 1, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: renamable $vgpr2_vgpr3 = nofpexcept V_TRIG_PREOP_F64_e64 0, 2, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = nofpexcept V_TRIG_PREOP_F64_e64 0, 3, 0, undef $vgpr0, 0, 0, implicit $exec, implicit $mode
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%1:vreg_64_align2 = nofpexcept V_TRIG_PREOP_F64_e64 0, 1, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%2:vreg_64_align2 = nofpexcept V_TRIG_PREOP_F64_e64 0, 2, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
%3:vreg_64_align2 = nofpexcept V_TRIG_PREOP_F64_e64 0, 3, 0, undef %0:vgpr_32, 0, 0, implicit $exec, implicit $mode
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_lshlrev_b64_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_lshlrev_b64_e64
; GCN: renamable $vgpr0_vgpr1 = V_LSHLREV_B64_e64 1, undef $vgpr0_vgpr1, implicit $exec
; GCN: renamable $vgpr2_vgpr3 = V_LSHLREV_B64_e64 2, undef $vgpr0_vgpr1, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = V_LSHLREV_B64_e64 3, undef $vgpr0_vgpr1, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%1:vreg_64_align2 = V_LSHLREV_B64_e64 1, undef %0:vreg_64_align2, implicit $exec
%2:vreg_64_align2 = V_LSHLREV_B64_e64 2, undef %0:vreg_64_align2, implicit $exec
%3:vreg_64_align2 = V_LSHLREV_B64_e64 3, undef %0:vreg_64_align2, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_lshrrev_b64_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_lshrrev_b64_e64
; GCN: renamable $vgpr0_vgpr1 = V_LSHRREV_B64_e64 1, undef $vgpr0_vgpr1, implicit $exec
; GCN: renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 2, undef $vgpr0_vgpr1, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = V_LSHRREV_B64_e64 3, undef $vgpr0_vgpr1, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%1:vreg_64_align2 = V_LSHRREV_B64_e64 1, undef %0:vreg_64_align2, implicit $exec
%2:vreg_64_align2 = V_LSHRREV_B64_e64 2, undef %0:vreg_64_align2, implicit $exec
%3:vreg_64_align2 = V_LSHRREV_B64_e64 3, undef %0:vreg_64_align2, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_ashrrev_i64_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_ashrrev_i64_e64
; GCN: renamable $vgpr0_vgpr1 = V_ASHRREV_I64_e64 1, undef $vgpr0_vgpr1, implicit $exec
; GCN: renamable $vgpr2_vgpr3 = V_ASHRREV_I64_e64 2, undef $vgpr0_vgpr1, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_NOP 0, implicit killed renamable $vgpr2_vgpr3
; GCN: renamable $vgpr0_vgpr1 = V_ASHRREV_I64_e64 3, undef $vgpr0_vgpr1, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0_vgpr1
; GCN: S_ENDPGM 0
%1:vreg_64_align2 = V_ASHRREV_I64_e64 1, undef %0:vreg_64_align2, implicit $exec
%2:vreg_64_align2 = V_ASHRREV_I64_e64 2, undef %0:vreg_64_align2, implicit $exec
%3:vreg_64_align2 = V_ASHRREV_I64_e64 3, undef %0:vreg_64_align2, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_perm_b32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_perm_b32_e64
; GCN: renamable $vgpr0 = V_PERM_B32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_PERM_B32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_PERM_B32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_PERM_B32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_PERM_B32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_PERM_B32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_add3_u32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_add3_u32_e64
; GCN: renamable $vgpr0 = V_ADD3_U32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_ADD3_U32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_ADD3_U32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_ADD3_U32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_ADD3_U32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_ADD3_U32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_and_or_b32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_and_or_b32_e64
; GCN: renamable $vgpr0 = V_AND_OR_B32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_AND_OR_B32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_AND_OR_B32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_AND_OR_B32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_AND_OR_B32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_AND_OR_B32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_or3_b32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_or3_b32_e64
; GCN: renamable $vgpr0 = V_OR3_B32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_OR3_B32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_OR3_B32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_OR3_B32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_OR3_B32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_OR3_B32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_xad_u32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_xad_u32_e64
; GCN: renamable $vgpr0 = V_XAD_U32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_XAD_U32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_XAD_U32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_XAD_U32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_XAD_U32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_XAD_U32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_add_i32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_add_i32_e64
; GCN: renamable $vgpr0 = V_ADD_I32_e64 1, undef $vgpr0, 0, implicit $exec
; GCN: renamable $vgpr1 = V_ADD_I32_e64 2, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_ADD_I32_e64 3, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_ADD_I32_e64 1, undef %0:vgpr_32, 0, implicit $exec
%2:vgpr_32 = V_ADD_I32_e64 2, undef %0:vgpr_32, 0, implicit $exec
%3:vgpr_32 = V_ADD_I32_e64 3, undef %0:vgpr_32, 0, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_add_lshl_u32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_add_lshl_u32_e64
; GCN: renamable $vgpr0 = V_ADD_LSHL_U32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_ADD_LSHL_U32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_ADD_LSHL_U32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_ADD_LSHL_U32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_ADD_LSHL_U32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_ADD_LSHL_U32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_sub_i32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_sub_i32_e64
; GCN: renamable $vgpr0 = V_SUB_I32_e64 1, undef $vgpr0, 0, implicit $exec
; GCN: renamable $vgpr1 = V_SUB_I32_e64 2, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_SUB_I32_e64 3, undef $vgpr0, 0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_SUB_I32_e64 1, undef %0:vgpr_32, 0, implicit $exec
%2:vgpr_32 = V_SUB_I32_e64 2, undef %0:vgpr_32, 0, implicit $exec
%3:vgpr_32 = V_SUB_I32_e64 3, undef %0:vgpr_32, 0, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_lshl_add_u32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_lshl_add_u32_e64
; GCN: renamable $vgpr0 = V_LSHL_ADD_U32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_LSHL_ADD_U32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_LSHL_ADD_U32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_LSHL_ADD_U32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_LSHL_ADD_U32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_LSHL_ADD_U32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...
---
name: test_remat_v_lshl_or_b32_e64
tracksRegLiveness: true
body: |
bb.0:
; GCN-LABEL: name: test_remat_v_lshl_or_b32_e64
; GCN: renamable $vgpr0 = V_LSHL_OR_B32_e64 1, 1, undef $vgpr0, implicit $exec
; GCN: renamable $vgpr1 = V_LSHL_OR_B32_e64 2, 2, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_NOP 0, implicit killed renamable $vgpr1
; GCN: renamable $vgpr0 = V_LSHL_OR_B32_e64 3, 3, undef $vgpr0, implicit $exec
; GCN: S_NOP 0, implicit killed renamable $vgpr0
; GCN: S_ENDPGM 0
%1:vgpr_32 = V_LSHL_OR_B32_e64 1, 1, undef %0:vgpr_32, implicit $exec
%2:vgpr_32 = V_LSHL_OR_B32_e64 2, 2, undef %0:vgpr_32, implicit $exec
%3:vgpr_32 = V_LSHL_OR_B32_e64 3, 3, undef %0:vgpr_32, implicit $exec
S_NOP 0, implicit %1
S_NOP 0, implicit %2
S_NOP 0, implicit %3
S_ENDPGM 0
...