Summary: | [3.2 regression] [HP-PA] ICE in emit_move_insn_1, at expr.c:3101 | ||
---|---|---|---|
Product: | gcc | Reporter: | psilord |
Component: | rtl-optimization | Assignee: | John David Anglin <danglin> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | gcc-bugs, reichelt |
Priority: | P3 | Keywords: | ice-on-valid-code |
Version: | 3.2 | ||
Target Milestone: | --- | ||
Host: | Target: | ||
Build: | Known to work: | ||
Known to fail: | Last reconfirmed: |
Description
psilord
2002-11-25 13:16:02 UTC
Fix: A fix has been applied to the PA backend to the 3.3 branch and the trunk to prevent the ICE. < http://gcc.gnu.org/ml/gcc-patches/2003-04/msg01536.html> However, the patch doesn't fix the underlying problem. The loop pass is moving sets of the CCFP condition code register out of loops. This makes it much more difficult to optimize conditional jumps. It also requires that the backend support a means to set the condition code register. The values of condition code registers are not tracked as other registers. Thus, conditional jumps are not simplified in the CSE pass when they involve a CC_MODE register. Conditional jumps can be simplified in the combine pass but only if the set of the CC_MODE register and the jump are together. Thus, moving a set of a CC_MODE register isn't a good idea. A possible real fix might be to define the floating point status register as a register known to GCC, supporting BImode integer operations. State-Changed-From-To: open->analyzed State-Changed-Why: Confirmed. I can reproduce the bug on mips-sgi-irix6.5 (but not on i686-pc-linux-gnu) with gcc 3.1 - 3.2.1. Mainline and 3.0.x are not affected. I can even use a smaller testcase: ------------------------snip here-------------------- void foo(void) { double a=0, eps=0; while (eps) a-=1; } ------------------------snip here-------------------- Responsible-Changed-From-To: unassigned->danglin Responsible-Changed-Why: Assignment. State-Changed-From-To: analyzed->closed State-Changed-Why: Fixed on 3.3 branch and main. <http://gcc.gnu.org/ml/gcc-patches/2003-04/msg01846.html>. |