[Bug tree-optimization/43629] [4.3/4.4 Regression] Struct to register optimization fails
rguenth at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Fri Apr 2 11:47:00 GMT 2010
------- Comment #2 from rguenth at gcc dot gnu dot org 2010-04-02 11:47 -------
SRA introduces a use of the uninitialized value when re-constructing the
unsigned long representation. That boils down to later CCP recognizing
the result as undefined and thus:
Visiting statement:
SR.16_25 = (unsigned int) result$A3_24(D);
which is likely UNDEFINED
Visiting statement:
SR.17_26 = (long unsigned int) SR.16_25;
which is likely UNDEFINED
Visiting statement:
SR.18_27 = SR.17_26 << 32;
which is likely UNDEFINED
Visiting statement:
SR.3_34 = SR.18_27 & 0x0ffffffff00000000;
which is likely UNDEFINED
Visiting PHI node: SR.3_2 = PHI <12885032961(2), SR.3_34(3)>
Argument #0 (2 -> 4 executable)
12885032961 Value: CONSTANT 12885032961
Argument #1 (3 -> 4 executable)
SR.3_34 Value: UNDEFINED
PHI node value: CONSTANT 12885032961
Lattice value changed to CONSTANT 12885032961.
and we completely ignore the taken path.
One issue is that
Visiting statement:
SR.3_34 = SR.18_27 & 0x0ffffffff00000000;
which is likely UNDEFINED
is not 100% true - the value is only partially undefined (only the defined
pieces will be used later). But of course that's splitting hairs somewhat
(but it might be the easiest fix for this bug).
tree-ssa-ccp.c:likely_value needs to look at regular rhs operands for
literal constants (see trunk version) but also make sure to re-set
all_undefined_operands if it encounters such.
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |rguenth at gcc dot gnu dot
|dot org |org
Status|NEW |ASSIGNED
Last reconfirmed|2010-04-02 11:31:52 |2010-04-02 11:47:23
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43629
More information about the Gcc-bugs
mailing list