diff options
author | Robin Dapp <rdapp@ventanamicro.com> | 2023-06-26 13:30:26 +0200 |
---|---|---|
committer | Robin Dapp <rdapp@ventanamicro.com> | 2023-06-27 22:39:26 +0200 |
commit | d915762ea9043da858d388b60b2d8093ff77eeab (patch) | |
tree | 40e3bd33d92b317cce2d979f96441149558b4627 /gcc | |
parent | 231f6b56c77c50f337f2529b3ae51e2083ce461d (diff) | |
download | gcc-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.pd | 6 |
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) |