mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-24 12:51:15 +08:00
re PR tree-optimization/36891 (ICE with vector division and -ffast-math and LIM)
2008-09-28 Andrew Pinski <andrew_pinski@playstation.sony.com> Kaushal Kantawala <kaushal_kantawala@playstation.sony.com> PR tree-opt/36891 * tree-ssa-loop-im.c (rewrite_reciprocal): Set DECL_GIMPLE_REG_P on the newly created variable. Create a VECTOR_CST of all 1s for vector types. 2008-09-28 Andrew Pinski <andrew_pinski@playstation.sony.com> Kaushal Kantawala <kaushal_kantawala@playstation.sony.com> PR tree-opt/36891 * gcc.dg/torture/pr36891.c: New testcase. Co-Authored-By: Kaushal Kantawala <Kaushal_Kantawala@playstation.sony.com> From-SVN: r140738
This commit is contained in:
parent
0d5f7a16eb
commit
f50d67f64e
gcc
@ -1,3 +1,11 @@
|
||||
2008-09-28 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
||||
Kaushal Kantawala <kaushal_kantawala@playstation.sony.com>
|
||||
|
||||
PR tree-opt/36891
|
||||
* tree-ssa-loop-im.c (rewrite_reciprocal): Set DECL_GIMPLE_REG_P on
|
||||
the newly created variable.
|
||||
Create a VECTOR_CST of all 1s for vector types.
|
||||
|
||||
2008-09-28 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR middle-end/36575
|
||||
|
@ -1,3 +1,9 @@
|
||||
2008-09-28 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
||||
Kaushal Kantawala <kaushal_kantawala@playstation.sony.com>
|
||||
|
||||
PR tree-opt/36891
|
||||
* gcc.dg/torture/pr36891.c: New testcase.
|
||||
|
||||
2008-09-28 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/conv_decimal.adb: New test.
|
||||
|
17
gcc/testsuite/gcc.dg/torture/pr36891.c
Normal file
17
gcc/testsuite/gcc.dg/torture/pr36891.c
Normal file
@ -0,0 +1,17 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-ffast-math" } */
|
||||
|
||||
#define __vector __attribute__((vector_size(16) ))
|
||||
__vector float f(void);
|
||||
void g(__vector float);
|
||||
void RRB( __vector float vdist, __vector float vx)
|
||||
{
|
||||
int detail;
|
||||
for(detail = 0; detail < 5;++detail)
|
||||
{
|
||||
__vector float frand = f();
|
||||
__vector float pullperc = frand/ vdist;
|
||||
__vector float pullx = vx * pullperc;
|
||||
g(pullx);
|
||||
}
|
||||
}
|
@ -763,6 +763,7 @@ rewrite_reciprocal (gimple_stmt_iterator *bsi)
|
||||
{
|
||||
gimple stmt, stmt1, stmt2;
|
||||
tree var, name, lhs, type;
|
||||
tree real_one;
|
||||
|
||||
stmt = gsi_stmt (*bsi);
|
||||
lhs = gimple_assign_lhs (stmt);
|
||||
@ -770,9 +771,24 @@ rewrite_reciprocal (gimple_stmt_iterator *bsi)
|
||||
|
||||
var = create_tmp_var (type, "reciptmp");
|
||||
add_referenced_var (var);
|
||||
DECL_GIMPLE_REG_P (var) = 1;
|
||||
|
||||
/* For vectors, create a VECTOR_CST full of 1's. */
|
||||
if (TREE_CODE (type) == VECTOR_TYPE)
|
||||
{
|
||||
int i, len;
|
||||
tree list = NULL_TREE;
|
||||
real_one = build_real (TREE_TYPE (type), dconst1);
|
||||
len = TYPE_VECTOR_SUBPARTS (type);
|
||||
for (i = 0; i < len; i++)
|
||||
list = tree_cons (NULL, real_one, list);
|
||||
real_one = build_vector (type, list);
|
||||
}
|
||||
else
|
||||
real_one = build_real (type, dconst1);
|
||||
|
||||
stmt1 = gimple_build_assign_with_ops (RDIV_EXPR,
|
||||
var, build_real (type, dconst1), gimple_assign_rhs2 (stmt));
|
||||
var, real_one, gimple_assign_rhs2 (stmt));
|
||||
name = make_ssa_name (var, stmt1);
|
||||
gimple_assign_set_lhs (stmt1, name);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user