aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRobin Dapp <rdapp@ventanamicro.com>2023-06-26 13:30:26 +0200
committerRobin Dapp <rdapp@ventanamicro.com>2023-06-27 22:39:26 +0200
commitd915762ea9043da858d388b60b2d8093ff77eeab (patch)
tree40e3bd33d92b317cce2d979f96441149558b4627 /gcc
parent231f6b56c77c50f337f2529b3ae51e2083ce461d (diff)
downloadgcc-d915762ea9043da858d388b60b2d8093ff77eeab.zip
gcc-d915762ea9043da858d388b60b2d8093ff77eeab.tar.gz
gcc-d915762ea9043da858d388b60b2d8093ff77eeab.tar.bz2
match.pd: Use element_mode instead of TYPE_MODE.
This patch changes TYPE_MODE into element_mode in a match.pd simplification. As the simplification can be also called with vector types real_can_shorten_arithmetic would ICE in REAL_MODE_FORMAT which expects a scalar mode. Therefore, use element_mode instead of TYPE_MODE. Additionally, check if the target supports the resulting operation. One target that supports e.g. a float addition but not a _Float16 addition is the RISC-V vector extension Zvfhmin. gcc/ChangeLog: * match.pd: Use element_mode and check if target supports operation with new type.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/match.pd6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/match.pd b/gcc/match.pd
index 33ccda3..83bcefa 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -7454,10 +7454,12 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
values representable in the TYPE to be within the
range of normal values of ITYPE. */
(if (element_precision (newtype) < element_precision (itype)
+ && (!VECTOR_MODE_P (TYPE_MODE (newtype))
+ || target_supports_op_p (newtype, op, optab_default))
&& (flag_unsafe_math_optimizations
|| (element_precision (newtype) == element_precision (type)
- && real_can_shorten_arithmetic (TYPE_MODE (itype),
- TYPE_MODE (type))
+ && real_can_shorten_arithmetic (element_mode (itype),
+ element_mode (type))
&& !excess_precision_type (newtype)))
&& !types_match (itype, newtype))
(convert:type (op (convert:newtype @1)