tree-ssa-dom.c (propagate_rhs_into_lhs): Temporarily work around bug in immediate-use iterator.
* tree-ssa-dom.c (propagate_rhs_into_lhs): Temporarily work around bug in immediate-use iterator. * gcc.c-torture/compile/pr26833.c: New test. * gfortran.fortran-torture/compile/pr26806.f90: New test. From-SVN: r112348
This commit is contained in:
parent
b5b3739a46
commit
243cc8369b
@ -1,3 +1,8 @@
|
||||
2006-03-24 Jeff Law <law@redhat.com>
|
||||
|
||||
* tree-ssa-dom.c (propagate_rhs_into_lhs): Temporarily work
|
||||
around bug in immediate-use iterator.
|
||||
|
||||
2006-03-24 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
PR target/26607
|
||||
|
@ -1,3 +1,8 @@
|
||||
2006-03-24 Jeff Law <law@redhat.com>
|
||||
|
||||
* gcc.c-torture/compile/pr26833.c: New test.
|
||||
* gfortran.fortran-torture/compile/pr26806.f90: New test.
|
||||
|
||||
2006-03-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
* gfortran.dg/endfile_2.f90: Delete temp file.
|
||||
|
19
gcc/testsuite/gcc.c-torture/compile/pr26833.c
Normal file
19
gcc/testsuite/gcc.c-torture/compile/pr26833.c
Normal file
@ -0,0 +1,19 @@
|
||||
void yasm_lc3b__parse_insn( int num_info, int *num_operands
|
||||
, int *operands, int op)
|
||||
{
|
||||
int found = 0;
|
||||
int i;
|
||||
for (; num_info>0 && !found; num_info--)
|
||||
{
|
||||
int mismatch = 0;
|
||||
for(i = 0;op && (i<*num_operands)&& !mismatch; i++)
|
||||
{
|
||||
if (!(int)(operands[i] & 0x1))
|
||||
mismatch = 1;
|
||||
if (mismatch)
|
||||
break;
|
||||
}
|
||||
if (!mismatch)
|
||||
found = 1;
|
||||
}
|
||||
}
|
11
gcc/testsuite/gfortran.fortran-torture/compile/pr26806.f90
Normal file
11
gcc/testsuite/gfortran.fortran-torture/compile/pr26806.f90
Normal file
@ -0,0 +1,11 @@
|
||||
module solv_cap
|
||||
integer, private, save :: Ng1=0, Ng2=0
|
||||
contains
|
||||
subroutine FourirG(G)
|
||||
real, intent(in out), dimension(0:,0:) :: G
|
||||
complex, allocatable, dimension(:,:) :: t
|
||||
allocate( t(0:2*Ng1-1,0:2*Ng2-1) )
|
||||
t(0:Ng1,0:Ng2-1) = G(:,0:Ng2-1) ! Fill one quadrant (one extra row)
|
||||
t(0:Ng1,Ng2:2*Ng2-1) = G(:,Ng2:1:-1) ! This quadrant using symmetry
|
||||
end subroutine FourirG
|
||||
end module solv_cap
|
@ -2134,6 +2134,7 @@ propagate_rhs_into_lhs (tree stmt, tree lhs, tree rhs, bitmap interesting_names)
|
||||
/* Walk over every use of LHS and try to replace the use with RHS.
|
||||
At this point the only reason why such a propagation would not
|
||||
be successful would be if the use occurs in an ASM_EXPR. */
|
||||
repeat:
|
||||
FOR_EACH_IMM_USE_SAFE (use_p, iter, lhs)
|
||||
{
|
||||
tree use_stmt = USE_STMT (use_p);
|
||||
@ -2264,6 +2265,24 @@ propagate_rhs_into_lhs (tree stmt, tree lhs, tree rhs, bitmap interesting_names)
|
||||
}
|
||||
}
|
||||
|
||||
/* Due to a bug in the immediate use iterator code, we can
|
||||
miss visiting uses in some cases when there is more than
|
||||
one use in a statement. Missing a use can cause a multitude
|
||||
of problems if we expected to eliminate all uses and remove
|
||||
the defining statement.
|
||||
|
||||
Until Andrew can fix the iterator, this hack will detect
|
||||
the cases which cause us problems. Namely if ALL is set
|
||||
and we still have some immediate uses, then we must have
|
||||
skipped one or more in the loop above. So just re-execute
|
||||
the loop.
|
||||
|
||||
The maximum number of times we can re-execute the loop is
|
||||
bounded by the maximum number of times a given SSA_NAME
|
||||
appears in a single statement. */
|
||||
if (all && num_imm_uses (lhs) != 0)
|
||||
goto repeat;
|
||||
|
||||
/* If we were able to propagate away all uses of LHS, then
|
||||
we can remove STMT. */
|
||||
if (all)
|
||||
|
Loading…
Reference in New Issue
Block a user