Check if a remateralizable nstruction does not have any virtual register uses. Even though rematerializable RA might not actually rematerialize it in this scenario. In that case we do not want to hoist such instruction out of the loop in a believe RA will sink it back if needed. This already has impact on AMDGPU target which does not check for this condition in its isTriviallyReMaterializable implementation and have instructions with virtual register uses enabled. The other targets are not impacted at this point although will be when D106408 lands. Differential Revision: https://reviews.llvm.org/D107677
148 lines
7.9 KiB
YAML
148 lines
7.9 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
|
# RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass machinelicm -o - %s | FileCheck -check-prefix=GCN %s
|
|
|
|
# MachineLICM shall limit hoisting of V_CVT instructions out of the loop keeping
|
|
# register pressure within the budget. VGPR budget at occupancy 10 is 24 vgprs.
|
|
|
|
---
|
|
name: test
|
|
tracksRegLiveness: true
|
|
body: |
|
|
; GCN-LABEL: name: test
|
|
; GCN: bb.0:
|
|
; GCN: successors: %bb.1(0x80000000)
|
|
; GCN: liveins: $vcc, $vgpr0
|
|
; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY8:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY9:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY10:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY11:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY12:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY13:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY14:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY15:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY16:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: [[COPY17:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN: %18:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY]], implicit $mode, implicit $exec
|
|
; GCN: %19:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY1]], implicit $mode, implicit $exec
|
|
; GCN: %20:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY2]], implicit $mode, implicit $exec
|
|
; GCN: %21:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY3]], implicit $mode, implicit $exec
|
|
; GCN: %22:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY4]], implicit $mode, implicit $exec
|
|
; GCN: bb.1:
|
|
; GCN: successors: %bb.2(0x04000000), %bb.1(0x7c000000)
|
|
; GCN: liveins: $vcc
|
|
; GCN: $vcc = S_AND_B64 $exec, $vcc, implicit-def $scc
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, %18, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, %19, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, %20, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, %21, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, %22, implicit $exec
|
|
; GCN: %23:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY5]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %23, implicit $exec
|
|
; GCN: %24:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY6]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %24, implicit $exec
|
|
; GCN: %25:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY7]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %25, implicit $exec
|
|
; GCN: %26:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY8]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %26, implicit $exec
|
|
; GCN: %27:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY9]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %27, implicit $exec
|
|
; GCN: %28:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY10]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %28, implicit $exec
|
|
; GCN: %29:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY11]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %29, implicit $exec
|
|
; GCN: %30:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY12]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %30, implicit $exec
|
|
; GCN: %31:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY13]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %31, implicit $exec
|
|
; GCN: %32:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY14]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %32, implicit $exec
|
|
; GCN: %33:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY15]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %33, implicit $exec
|
|
; GCN: %34:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY16]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %34, implicit $exec
|
|
; GCN: %35:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY17]], implicit $mode, implicit $exec
|
|
; GCN: $vcc = V_CMP_EQ_U64_e64 $vcc, killed %35, implicit $exec
|
|
; GCN: S_CBRANCH_VCCNZ %bb.1, implicit $vcc
|
|
; GCN: S_BRANCH %bb.2
|
|
; GCN: bb.2:
|
|
; GCN: S_ENDPGM 0
|
|
bb.0:
|
|
successors: %bb.1(0x80000000)
|
|
liveins: $vcc, $vgpr0
|
|
|
|
%0:vgpr_32 = COPY $vgpr0
|
|
%1:vgpr_32 = COPY $vgpr0
|
|
%2:vgpr_32 = COPY $vgpr0
|
|
%3:vgpr_32 = COPY $vgpr0
|
|
%4:vgpr_32 = COPY $vgpr0
|
|
%5:vgpr_32 = COPY $vgpr0
|
|
%6:vgpr_32 = COPY $vgpr0
|
|
%7:vgpr_32 = COPY $vgpr0
|
|
%8:vgpr_32 = COPY $vgpr0
|
|
%9:vgpr_32 = COPY $vgpr0
|
|
%10:vgpr_32 = COPY $vgpr0
|
|
%11:vgpr_32 = COPY $vgpr0
|
|
%12:vgpr_32 = COPY $vgpr0
|
|
%13:vgpr_32 = COPY $vgpr0
|
|
%14:vgpr_32 = COPY $vgpr0
|
|
%15:vgpr_32 = COPY $vgpr0
|
|
%16:vgpr_32 = COPY $vgpr0
|
|
%17:vgpr_32 = COPY $vgpr0
|
|
|
|
bb.1:
|
|
successors: %bb.2(0x04000000), %bb.1(0x7c000000)
|
|
liveins: $vcc
|
|
|
|
$vcc = S_AND_B64 $exec, $vcc, implicit-def $scc
|
|
%18:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %0, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %18, implicit $exec
|
|
%19:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %1, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %19, implicit $exec
|
|
%20:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %2, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %20, implicit $exec
|
|
%21:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %3, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %21, implicit $exec
|
|
%22:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %4, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %22, implicit $exec
|
|
%23:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %5, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %23, implicit $exec
|
|
%24:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %6, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %24, implicit $exec
|
|
%25:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %7, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %25, implicit $exec
|
|
%26:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %8, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %26, implicit $exec
|
|
%27:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %9, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %27, implicit $exec
|
|
%28:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %10, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %28, implicit $exec
|
|
%29:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %11, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %29, implicit $exec
|
|
%30:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %12, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %30, implicit $exec
|
|
%31:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %13, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %31, implicit $exec
|
|
%32:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %14, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %32, implicit $exec
|
|
%33:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %15, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %33, implicit $exec
|
|
%34:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %16, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %34, implicit $exec
|
|
%35:vreg_64 = nofpexcept V_CVT_F64_I32_e32 %17, implicit $mode, implicit $exec
|
|
$vcc = V_CMP_EQ_U64_e64 $vcc, killed %35, implicit $exec
|
|
S_CBRANCH_VCCNZ %bb.1, implicit $vcc
|
|
S_BRANCH %bb.2
|
|
|
|
bb.2:
|
|
S_ENDPGM 0
|
|
|
|
...
|