aco: move attempt to find strided register into get_reg_simple()
authorDaniel Schürmann <daniel@schuermann.dev>
Mon, 13 Apr 2020 12:16:00 +0000 (13:16 +0100)
committerMarge Bot <eric+marge@anholt.net>
Wed, 22 Apr 2020 18:23:23 +0000 (18:23 +0000)
This simplifies code and helps some shaders

Totals from affected shaders:
Code Size: 51227172 -> 51202216 (-0.05 %) bytes
Max Waves: 19955 -> 19948 (-0.04 %)

Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4573>

src/amd/compiler/aco_register_allocation.cpp

index 4eaf9b1742aecbb40236b7f3b6fa1b071798c7f0..0857084a486e8817a9faf1deea5b004e2b229ef0 100644 (file)
@@ -395,6 +395,14 @@ std::pair<PhysReg, bool> get_reg_simple(ra_ctx& ctx,
 
    /* best fit algorithm: find the smallest gap to fit in the variable */
    if (stride == 1) {
+
+      if (rc.type() == RegType::vgpr && (size == 4 || size == 8)) {
+         info.stride = 4;
+         std::pair<PhysReg, bool> res = get_reg_simple(ctx, reg_file, info);
+         if (res.second)
+            return res;
+      }
+
       unsigned best_pos = 0xFFFF;
       unsigned gap_size = 0xFFFF;
       unsigned next_pos = 0xFFFF;
@@ -935,14 +943,7 @@ PhysReg get_reg(ra_ctx& ctx,
    DefInfo info(ctx, instr, temp.regClass());
 
    /* try to find space without live-range splits */
-   std::pair<PhysReg, bool> res;
-   if (info.rc.type() == RegType::vgpr && (info.size == 4 || info.size == 8)) {
-      DefInfo info_strided = {info.lb, info.ub, info.size, 4, info.rc};
-      std::pair<PhysReg, bool> res = get_reg_simple(ctx, reg_file, info_strided);
-   }
-   if (!res.second)
-      res = get_reg_simple(ctx, reg_file, info);
-
+   std::pair<PhysReg, bool> res = get_reg_simple(ctx, reg_file, info);
 
    if (res.second)
       return res.first;