https://gcc.gnu.org/g:6e7e5943619a2c20d93fc7089c885483786558bc

commit r14-9936-g6e7e5943619a2c20d93fc7089c885483786558bc
Author: Pan Li <pan2...@intel.com>
Date:   Fri Apr 12 16:38:18 2024 +0800

    RISC-V: Fix Werror=sign-compare in riscv_validate_vector_type
    
    This patch would like to fix the Werror=sign-compare similar to below:
    
    gcc/config/riscv/riscv.cc: In function ‘void
    riscv_validate_vector_type(const_tree, const char*)’:
    gcc/config/riscv/riscv.cc:5614:23: error: comparison of integer
    expressions of different signedness: ‘int’ and ‘unsigned int’
    [-Werror=sign-compare]
     5614 |   if (TARGET_MIN_VLEN < required_min_vlen)
    
    The TARGET_MIN_VLEN is *int* by default but the required_min_vlen
    returned from riscv_vector_required_min_vlen is **unsigned**.  Thus,
    adjust the related function and reference variable(s) to int type
    to avoid such kind of Werror.
    
    The below test suite is passed for this patch.
    * The rv64gcv fully regression tests.
    
    gcc/ChangeLog:
    
            * config/riscv/riscv.cc (riscv_vector_float_type_p): Take int
            as the return value instead of unsigned.
            (riscv_vector_element_bitsize): Ditto.
            (riscv_vector_required_min_vlen): Ditto.
            (riscv_validate_vector_type): Take int type for local variable(s).
    
    Signed-off-by: Pan Li <pan2...@intel.com>

Diff:
---
 gcc/config/riscv/riscv.cc | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index e5f00806bb9..74445bc977c 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -5499,7 +5499,7 @@ riscv_vector_float_type_p (const_tree type)
   return strstr (name, "vfloat") != NULL;
 }
 
-static unsigned
+static int
 riscv_vector_element_bitsize (const_tree type)
 {
   machine_mode mode = TYPE_MODE (type);
@@ -5523,7 +5523,7 @@ riscv_vector_element_bitsize (const_tree type)
   gcc_unreachable ();
 }
 
-static unsigned
+static int
 riscv_vector_required_min_vlen (const_tree type)
 {
   machine_mode mode = TYPE_MODE (type);
@@ -5531,7 +5531,7 @@ riscv_vector_required_min_vlen (const_tree type)
   if (riscv_v_ext_mode_p (mode))
     return TARGET_MIN_VLEN;
 
-  unsigned element_bitsize = riscv_vector_element_bitsize (type);
+  int element_bitsize = riscv_vector_element_bitsize (type);
   const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
 
   if (strstr (name, "bool64") != NULL)
@@ -5569,7 +5569,7 @@ riscv_validate_vector_type (const_tree type, const char 
*hint)
       return;
     }
 
-  unsigned element_bitsize = riscv_vector_element_bitsize (type);
+  int element_bitsize = riscv_vector_element_bitsize (type);
   bool int_type_p = riscv_vector_int_type_p (type);
 
   if (int_type_p && element_bitsize == 64
@@ -5609,7 +5609,7 @@ riscv_validate_vector_type (const_tree type, const char 
*hint)
       return;
     }
 
-  unsigned required_min_vlen = riscv_vector_required_min_vlen (type);
+  int required_min_vlen = riscv_vector_required_min_vlen (type);
 
   if (TARGET_MIN_VLEN < required_min_vlen)
     {

Reply via email to