Commit 243cc836 by Jeff Law Committed by Jeff Law

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
parent b5b3739a
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> 2006-03-24 Alan Modra <amodra@bigpond.net.au>
PR target/26607 PR target/26607
......
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> 2006-03-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gfortran.dg/endfile_2.f90: Delete temp file. * gfortran.dg/endfile_2.f90: Delete temp file.
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;
}
}
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) ...@@ -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. /* 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 At this point the only reason why such a propagation would not
be successful would be if the use occurs in an ASM_EXPR. */ be successful would be if the use occurs in an ASM_EXPR. */
repeat:
FOR_EACH_IMM_USE_SAFE (use_p, iter, lhs) FOR_EACH_IMM_USE_SAFE (use_p, iter, lhs)
{ {
tree use_stmt = USE_STMT (use_p); tree use_stmt = USE_STMT (use_p);
...@@ -2264,6 +2265,24 @@ propagate_rhs_into_lhs (tree stmt, tree lhs, tree rhs, bitmap interesting_names) ...@@ -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 /* If we were able to propagate away all uses of LHS, then
we can remove STMT. */ we can remove STMT. */
if (all) if (all)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment