]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
expand: Allow fixed-point arithmetic for RDIV_EXPR.
authorRobin Dapp <rdapp@ventanamicro.com>
Tue, 15 Jul 2025 08:55:36 +0000 (10:55 +0200)
committerRobin Dapp <rdapp@ventanamicro.com>
Wed, 16 Jul 2025 07:30:07 +0000 (09:30 +0200)
r16-2175-g5aa21765236730 introduced an assert for floating-point modes
when expanding an RDIV_EXPR but forgot fixed-point modes.  This patch
adds ALL_FIXED_POINT_MODE_P to the assert.

PR middle-end/121065

gcc/ChangeLog:

* cfgexpand.cc (expand_debug_expr): Allow fixed-point modes for
RDIV_EXPR.
* optabs-tree.cc (optab_for_tree_code): Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/arm/pr121065.c: New test.

gcc/cfgexpand.cc
gcc/optabs-tree.cc
gcc/testsuite/gcc.target/arm/pr121065.c [new file with mode: 0644]

index a656ccebf176db2942663461bdabdddbd8516dff..8a55f4f472a2cd121e03256dc0d545456bca5338 100644 (file)
@@ -5358,7 +5358,8 @@ expand_debug_expr (tree exp)
       return simplify_gen_binary (MULT, mode, op0, op1);
 
     case RDIV_EXPR:
-      gcc_assert (FLOAT_MODE_P (mode));
+      gcc_assert (FLOAT_MODE_P (mode)
+                 || ALL_FIXED_POINT_MODE_P (mode));
       /* Fall through.  */
     case TRUNC_DIV_EXPR:
     case EXACT_DIV_EXPR:
index 9308a6dfd65c38c6b31cff426a2adcef4c4763a4..0de74c7966afd85deb11cb3addede16dae114ca4 100644 (file)
@@ -82,7 +82,8 @@ optab_for_tree_code (enum tree_code code, const_tree type,
        return unknown_optab;
       /* FALLTHRU */
     case RDIV_EXPR:
-      gcc_assert (FLOAT_TYPE_P (type));
+      gcc_assert (FLOAT_TYPE_P (type)
+                 || ALL_FIXED_POINT_MODE_P (TYPE_MODE (type)));
       /* FALLTHRU */
     case TRUNC_DIV_EXPR:
     case EXACT_DIV_EXPR:
diff --git a/gcc/testsuite/gcc.target/arm/pr121065.c b/gcc/testsuite/gcc.target/arm/pr121065.c
new file mode 100644 (file)
index 0000000..dfc6059
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-mcpu=cortex-m55" } */
+
+_Accum sa;
+char c;
+
+void
+div_csa ()
+{
+  c /= sa;
+}