https://gcc.gnu.org/g:3db8dd4139a7a5ce941684f1fc05ee0652e35544

commit r15-649-g3db8dd4139a7a5ce941684f1fc05ee0652e35544
Author: Eric Botcazou <ebotca...@adacore.com>
Date:   Sun May 19 11:38:40 2024 +0200

    Fix oversight in latest change to can_mult_highpart_p
    
    gcc/
            * optabs-query.cc (can_mult_highpart_p): Test for the existence of
            a wider mode instead of requiring it.

Diff:
---
 gcc/optabs-query.cc | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/gcc/optabs-query.cc b/gcc/optabs-query.cc
index de145be7075f..5149de57468d 100644
--- a/gcc/optabs-query.cc
+++ b/gcc/optabs-query.cc
@@ -510,17 +510,16 @@ int
 can_mult_highpart_p (machine_mode mode, bool uns_p)
 {
   optab op;
-  scalar_int_mode int_mode;
+  scalar_int_mode int_mode, wider_mode;
 
   op = uns_p ? umul_highpart_optab : smul_highpart_optab;
   if (optab_handler (op, mode) != CODE_FOR_nothing)
     return 1;
 
   /* If the mode is integral, synth from widening or larger operations.  */
-  if (is_a <scalar_int_mode> (mode, &int_mode))
+  if (is_a <scalar_int_mode> (mode, &int_mode)
+      && GET_MODE_WIDER_MODE (int_mode).exists (&wider_mode))
     {
-      scalar_int_mode wider_mode = GET_MODE_WIDER_MODE (int_mode).require ();
-
       op = uns_p ? umul_widen_optab : smul_widen_optab;
       if (convert_optab_handler (op, wider_mode, mode) != CODE_FOR_nothing)
        return 2;

Reply via email to