Mesa (main): lima: fix warning of garbage value access

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Feb 11 22:03:20 UTC 2022


Module: Mesa
Branch: main
Commit: 60888c95bdf3154e6e99c3ea51b9e4a2af189cb6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=60888c95bdf3154e6e99c3ea51b9e4a2af189cb6

Author: Erico Nunes <nunes.erico at gmail.com>
Date:   Fri Feb  4 20:17:26 2022 +0100

lima: fix warning of garbage value access

scan-build complains that an access of reg[j+1] in this code might
return garbage.
Let's take the chance to clean this open coded sorting code up and
just use qsort.

Signed-off-by: Erico Nunes <nunes.erico at gmail.com>
Reviewed-by: Vasily Khoruzhick <anarsoul at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14894>

---

 src/gallium/drivers/lima/ir/gp/reduce_scheduler.c | 17 ++++++++---------
 src/gallium/drivers/lima/ir/pp/scheduler.c        | 14 +++++---------
 2 files changed, 13 insertions(+), 18 deletions(-)

diff --git a/src/gallium/drivers/lima/ir/gp/reduce_scheduler.c b/src/gallium/drivers/lima/ir/gp/reduce_scheduler.c
index 47cc6109e01..bcfe6fd89b0 100644
--- a/src/gallium/drivers/lima/ir/gp/reduce_scheduler.c
+++ b/src/gallium/drivers/lima/ir/gp/reduce_scheduler.c
@@ -31,6 +31,13 @@
  * Author: Vivek Sarkar,  Mauricio J. Serrano,  Barbara B. Simons
  */
 
+static int cmp_float(const void *a, const void *b)
+{
+   const float *fa = (const float *) a;
+   const float *fb = (const float *) b;
+   return (*fa > *fb) - (*fa < *fb);
+}
+
 static void schedule_calc_sched_info(gpir_node *node)
 {
    int n = 0;
@@ -68,15 +75,7 @@ static void schedule_calc_sched_info(gpir_node *node)
    }
 
    /* sort */
-   for (i = 0; i < n - 1; i++) {
-      for (int j = 0; j < n - i - 1; j++) {
-         if (reg[j] > reg[j + 1]) {
-            float tmp = reg[j + 1];
-            reg[j + 1] = reg[j];
-            reg[j] = tmp;
-         }
-      }
-   }
+   qsort(reg, n, sizeof(reg[0]), cmp_float);
 
    for (i = 0; i < n; i++) {
       float pressure = reg[i] + n - (i + 1);
diff --git a/src/gallium/drivers/lima/ir/pp/scheduler.c b/src/gallium/drivers/lima/ir/pp/scheduler.c
index 5e7a17c9bb9..b81e2d61936 100644
--- a/src/gallium/drivers/lima/ir/pp/scheduler.c
+++ b/src/gallium/drivers/lima/ir/pp/scheduler.c
@@ -26,6 +26,10 @@
 
 #include "ppir.h"
 
+static int cmp_int(const void *a, const void *b)
+{
+   return (*(int*)a - *(int*)b);
+}
 
 static void ppir_schedule_calc_sched_info(ppir_instr *instr)
 {
@@ -62,15 +66,7 @@ static void ppir_schedule_calc_sched_info(ppir_instr *instr)
    }
 
    /* sort */
-   for (i = 0; i < n - 1; i++) {
-      for (int j = 0; j < n - i - 1; j++) {
-         if (reg[j] > reg[j + 1]) {
-            int tmp = reg[j + 1];
-            reg[j + 1] = reg[j];
-            reg[j] = tmp;
-         }
-      }
-   }
+   qsort(reg, n, sizeof(reg[0]), cmp_int);
 
    for (i = 0; i < n; i++) {
       int pressure = reg[i] + n - (i + 1);



More information about the mesa-commit mailing list