When emitting insns, we have an early assertion to ensure the input
operand's mode and the expanded operand's mode are the same; however, it
does not perform this check if the pattern does not have an explicit
machine mode specifying the operand. In this scenario, it will always
assume that mode = Pmode to correctly satisfy the
maybe_legitimize_operand check, however, there may be problems when
working in 32 bit environments.

Make the assert unconditional

gcc/ChangeLog:

        * config/riscv/riscv-v.cc: Move assert out of conditional block

Signed-off-by: Edwin Lu <e...@rivosinc.com>
---
 gcc/config/riscv/riscv-v.cc | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc
index 8911f5783c8..6387727833f 100644
--- a/gcc/config/riscv/riscv-v.cc
+++ b/gcc/config/riscv/riscv-v.cc
@@ -290,11 +290,11 @@ public:
           always Pmode.  */
        if (mode == VOIDmode)
          mode = Pmode;
-       else
-         /* Early assertion ensures same mode since maybe_legitimize_operand
-            will check this.  */
-         gcc_assert (GET_MODE (ops[opno]) == VOIDmode
-                     || GET_MODE (ops[opno]) == mode);
+
+       /* Early assertion ensures same mode since maybe_legitimize_operand
+          will check this.  */
+       gcc_assert (GET_MODE (ops[opno]) == VOIDmode
+                 || GET_MODE (ops[opno]) == mode);
 
        add_input_operand (ops[opno], mode);
       }
-- 
2.34.1

Reply via email to