[llvm] 1962b33 - [AMDGPU] Added test for MachineLICM reg pressure. NFC.

Stanislav Mekhanoshin via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 6 16:05:19 PDT 2021


Author: Stanislav Mekhanoshin
Date: 2021-08-06T16:00:35-07:00
New Revision: 1962b33d3ff525806c8dacaa64f7f98beeb5a7fc

URL: https://github.com/llvm/llvm-project/commit/1962b33d3ff525806c8dacaa64f7f98beeb5a7fc
DIFF: https://github.com/llvm/llvm-project/commit/1962b33d3ff525806c8dacaa64f7f98beeb5a7fc.diff

LOG: [AMDGPU] Added test for MachineLICM reg pressure. NFC.

The test shows excessive register pressure after the MachineLICM.
This is a pre-commit for the patch fixing it.

Differential Revision:

Added: 
    llvm/test/CodeGen/AMDGPU/licm-regpressure.mir

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/AMDGPU/licm-regpressure.mir b/llvm/test/CodeGen/AMDGPU/licm-regpressure.mir
new file mode 100644
index 000000000000..dcdbe6bd02dc
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/licm-regpressure.mir
@@ -0,0 +1,147 @@
+# 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
+
+# FIXME: MachineLICM hoists all V_CVT instructions out of the loop increasing
+# register pressure. 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:   %23:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY5]], implicit $mode, implicit $exec
+  ; GCN:   %24:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY6]], implicit $mode, implicit $exec
+  ; GCN:   %25:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY7]], implicit $mode, implicit $exec
+  ; GCN:   %26:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY8]], implicit $mode, implicit $exec
+  ; GCN:   %27:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY9]], implicit $mode, implicit $exec
+  ; GCN:   %28:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY10]], implicit $mode, implicit $exec
+  ; GCN:   %29:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY11]], implicit $mode, implicit $exec
+  ; GCN:   %30:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY12]], implicit $mode, implicit $exec
+  ; GCN:   %31:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY13]], implicit $mode, implicit $exec
+  ; GCN:   %32:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY14]], implicit $mode, implicit $exec
+  ; GCN:   %33:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY15]], implicit $mode, implicit $exec
+  ; GCN:   %34:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY16]], implicit $mode, implicit $exec
+  ; GCN:   %35:vreg_64 = nofpexcept V_CVT_F64_I32_e32 [[COPY17]], 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:   $vcc = V_CMP_EQ_U64_e64 $vcc, %23, implicit $exec
+  ; GCN:   $vcc = V_CMP_EQ_U64_e64 $vcc, %24, implicit $exec
+  ; GCN:   $vcc = V_CMP_EQ_U64_e64 $vcc, %25, implicit $exec
+  ; GCN:   $vcc = V_CMP_EQ_U64_e64 $vcc, %26, implicit $exec
+  ; GCN:   $vcc = V_CMP_EQ_U64_e64 $vcc, %27, implicit $exec
+  ; GCN:   $vcc = V_CMP_EQ_U64_e64 $vcc, %28, implicit $exec
+  ; GCN:   $vcc = V_CMP_EQ_U64_e64 $vcc, %29, implicit $exec
+  ; GCN:   $vcc = V_CMP_EQ_U64_e64 $vcc, %30, implicit $exec
+  ; GCN:   $vcc = V_CMP_EQ_U64_e64 $vcc, %31, implicit $exec
+  ; GCN:   $vcc = V_CMP_EQ_U64_e64 $vcc, %32, implicit $exec
+  ; GCN:   $vcc = V_CMP_EQ_U64_e64 $vcc, %33, implicit $exec
+  ; GCN:   $vcc = V_CMP_EQ_U64_e64 $vcc, %34, implicit $exec
+  ; GCN:   $vcc = V_CMP_EQ_U64_e64 $vcc, %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
+
+...


        


More information about the llvm-commits mailing list