mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-17 20:11:06 +08:00
re PR tree-optimization/23115 (-ftree-vectorize generates wrong code)
PR tree-optimization/23115 * tree-if-conv.c (find_phi_replacement_condition): Check domninated_by relation. * gcc.dg/tree-ssa/pr23115.c: New. From-SVN: r106653
This commit is contained in:
parent
30c0559542
commit
90b11b9814
@ -1,3 +1,9 @@
|
||||
2005-11-08 Devang Patel <dpatel@apple.com>
|
||||
|
||||
PR tree-optimization/23115
|
||||
* tree-if-conv.c (find_phi_replacement_condition): Check domninated_by
|
||||
relation.
|
||||
|
||||
2005-11-08 Joseph S. Myers <joseph@codesourcery.com>
|
||||
|
||||
* config/rs6000/t-fprules (MULTILIB_MATCHES_FLOAT): Include
|
||||
|
@ -1,3 +1,8 @@
|
||||
2005-11-08 Devang Patel <dpatel@apple.com>
|
||||
|
||||
PR tree-optimization/23115
|
||||
* gcc.dg/tree-ssa/pr23115.c: New.
|
||||
|
||||
2005-11-08 David Edelsohn <edelsohn@gnu.org>
|
||||
|
||||
* g++.dg/ext/altivec-{1-13}.C: XFAIL on AIX and SPE.
|
||||
|
29
gcc/testsuite/gcc.dg/tree-ssa/pr23115.c
Normal file
29
gcc/testsuite/gcc.dg/tree-ssa/pr23115.c
Normal file
@ -0,0 +1,29 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -ftree-vectorize" } */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
#define MIN2(a,b) (((a)<(b)) ? (a) : (b))
|
||||
#define MAX2(a,b) (((a)>(b)) ? (a) : (b))
|
||||
|
||||
double p[2] = { 4., 5. };
|
||||
|
||||
int main()
|
||||
{
|
||||
long j;
|
||||
double R, n, x;
|
||||
|
||||
n = 1.e300;
|
||||
x = -1.e300;
|
||||
for( j=0; j < 2; j++ )
|
||||
{
|
||||
x = MAX2(x,p[j]);
|
||||
n = MIN2(n,p[j]);
|
||||
}
|
||||
R = x-n;
|
||||
|
||||
if( R < 0.1 )
|
||||
abort ();
|
||||
|
||||
return 0;
|
||||
}
|
@ -679,7 +679,7 @@ find_phi_replacement_condition (struct loop *loop,
|
||||
S2: x = c ? b : a;
|
||||
|
||||
S2 is preferred over S1. Make 'b' first_bb and use its condition.
|
||||
|
||||
|
||||
2) Do not make loop header first_bb.
|
||||
|
||||
3)
|
||||
@ -691,7 +691,10 @@ find_phi_replacement_condition (struct loop *loop,
|
||||
S3: x = (c == d) ? b : a;
|
||||
|
||||
S3 is preferred over S1 and S2*, Make 'b' first_bb and use
|
||||
its condition. */
|
||||
its condition.
|
||||
|
||||
4) If pred B is dominated by pred A then use pred B's condition.
|
||||
See PR23115. */
|
||||
|
||||
/* Select condition that is not TRUTH_NOT_EXPR. */
|
||||
tmp_cond = first_bb->aux;
|
||||
@ -703,8 +706,10 @@ find_phi_replacement_condition (struct loop *loop,
|
||||
second_bb = tmp_bb;
|
||||
}
|
||||
|
||||
/* Check if FIRST_BB is loop header or not. */
|
||||
if (first_bb == loop->header)
|
||||
/* Check if FIRST_BB is loop header or not and make sure that
|
||||
FIRST_BB does not dominate SECOND_BB. */
|
||||
if (first_bb == loop->header
|
||||
|| dominated_by_p (CDI_DOMINATORS, second_bb, first_bb))
|
||||
{
|
||||
tmp_cond = second_bb->aux;
|
||||
if (TREE_CODE (tmp_cond) == TRUTH_NOT_EXPR)
|
||||
|
Loading…
x
Reference in New Issue
Block a user