From 60888c95bdf3154e6e99c3ea51b9e4a2af189cb6 Mon Sep 17 00:00:00 2001 From: Erico Nunes Date: Fri, 4 Feb 2022 20:17:26 +0100 Subject: [PATCH] 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 Reviewed-by: Vasily Khoruzhick Part-of: --- .../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);