tree-optimization/105250 - adjust fold_convertible_p PR105140 fix
The following reverts the original PR105140 fix and goes for instead applying the additional fold_convert constraint for VECTOR_TYPE conversions also to fold_convertible_p. I did not try sanitizing all of this at this point. 2022-04-13 Richard Biener <rguenther@suse.de> PR tree-optimization/105250 * fold-const.cc (fold_convertible_p): Revert r12-7979-geaaf77dd85c333, instead check for size equality of the vector types involved. * gcc.dg/pr105250.c: New testcase.
This commit is contained in:
parent
6e609e0010
commit
4e892de677
|
@ -2379,13 +2379,12 @@ build_zero_vector (tree type)
|
|||
return build_vector_from_val (type, t);
|
||||
}
|
||||
|
||||
/* Returns true, if ARG, an operand or a type, is convertible to TYPE
|
||||
using a NOP_EXPR. */
|
||||
/* Returns true, if ARG is convertible to TYPE using a NOP_EXPR. */
|
||||
|
||||
bool
|
||||
fold_convertible_p (const_tree type, const_tree arg)
|
||||
{
|
||||
const_tree orig = TYPE_P (arg) ? arg : TREE_TYPE (arg);
|
||||
const_tree orig = TREE_TYPE (arg);
|
||||
|
||||
if (type == orig)
|
||||
return true;
|
||||
|
@ -2417,7 +2416,7 @@ fold_convertible_p (const_tree type, const_tree arg)
|
|||
return (VECTOR_TYPE_P (orig)
|
||||
&& known_eq (TYPE_VECTOR_SUBPARTS (type),
|
||||
TYPE_VECTOR_SUBPARTS (orig))
|
||||
&& fold_convertible_p (TREE_TYPE (type), TREE_TYPE (orig)));
|
||||
&& tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (orig)));
|
||||
|
||||
default:
|
||||
return false;
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-w -Wno-psabi -O2" } */
|
||||
|
||||
typedef int __attribute__((__vector_size__(4))) T;
|
||||
typedef int __attribute__((__vector_size__(8))) U;
|
||||
typedef int __attribute__((__vector_size__(16))) V;
|
||||
typedef int __attribute__((__vector_size__(32))) W;
|
||||
typedef _Float32 __attribute__((__vector_size__(16))) F;
|
||||
typedef _Float64 __attribute__((__vector_size__(32))) G;
|
||||
void foo();
|
||||
|
||||
foo(int, int, int, int, U, U, V, V, W, W, int,
|
||||
T, int, U, U, V, V, W, W, T,
|
||||
T, int, U, U, V, V, W, W, T,
|
||||
T, int, W, W, T, T, int, int, int,
|
||||
int, int, int, W, int, int, int, int, int, int,
|
||||
V, W, T, int, int, U, F, int, int, int,
|
||||
int, int, int, G)
|
||||
{
|
||||
foo(0, 0, 0, 0, (U){}, (U){}, (V){}, (V){}, (W){},
|
||||
(W){}, 2, (T){}, 0, 0, 0, 0, (U){}, (U){},
|
||||
(V){}, (V){}, (W){}, (W){}, (T){},
|
||||
(T){}, 0, 0, 0, 0, (U){}, (U){}, (V){},
|
||||
(V){}, (W){}, (W){}, (T){}, (T){}, 0, 0, 0,
|
||||
0, 0, 0, (T){},
|
||||
(T){}, (W){},
|
||||
(W){}, (T){}, (T){}, 0, 0, 0, 0, 0, 0, (W){},
|
||||
(V){}, (W){}, (T){}, 0, 0, (U){}, (F){});
|
||||
}
|
Loading…
Reference in New Issue