tree-optimization/105263 - reassoc and DFP
reassoc has certain tricks which in the end depend on the ability to undo them. For DFP creating a -1. constant is easy but re-identifying is appearantly not - real_minus_onep rejects those outright for DFP. So we have to disable (at least) this one trick. 2022-04-13 Richard Biener <rguenther@suse.de> PR tree-optimization/105263 * tree-ssa-reassoc.cc (try_special_add_to_ops): Do not consume negates in multiplication chains with DFP. * gcc.dg/pr105263.c: New testcase.
This commit is contained in:
parent
29c46490de
commit
ca145c6306
15
gcc/testsuite/gcc.dg/pr105263.c
Normal file
15
gcc/testsuite/gcc.dg/pr105263.c
Normal file
@ -0,0 +1,15 @@
|
||||
/* { dg-do compile { target dfp } } */
|
||||
/* { dg-options "-O -ffast-math -w -Wno-psabi" } */
|
||||
|
||||
typedef _Decimal64 __attribute__((__vector_size__ (8))) U;
|
||||
typedef _Decimal64 __attribute__((__vector_size__ (16))) V;
|
||||
|
||||
V v;
|
||||
|
||||
U
|
||||
foo (U u)
|
||||
{
|
||||
u *= u;
|
||||
u *= -(U){ v[1] };
|
||||
return u;
|
||||
}
|
@ -5857,7 +5857,9 @@ try_special_add_to_ops (vec<operand_entry *> *ops,
|
||||
&& gimple_assign_rhs_code (def_stmt) == NEGATE_EXPR
|
||||
&& !HONOR_SNANS (TREE_TYPE (op))
|
||||
&& (!HONOR_SIGNED_ZEROS (TREE_TYPE (op))
|
||||
|| !COMPLEX_FLOAT_TYPE_P (TREE_TYPE (op))))
|
||||
|| !COMPLEX_FLOAT_TYPE_P (TREE_TYPE (op)))
|
||||
&& (!FLOAT_TYPE_P (TREE_TYPE (op))
|
||||
|| !DECIMAL_FLOAT_MODE_P (element_mode (op))))
|
||||
{
|
||||
tree rhs1 = gimple_assign_rhs1 (def_stmt);
|
||||
tree cst = build_minus_one_cst (TREE_TYPE (op));
|
||||
|
Loading…
Reference in New Issue
Block a user