------- Additional Comments From roger at eyesopen dot com 2004-10-17 19:02 ------- There are clearly a number of problems exposed by this PR (constant folding issues, x86 backend issues, RTL simplification issues, etc...) My personal pick of which is the worst of these is that get_inner_reference returns an SImode "inner" reference in a call to expand_assignment with a QImode source and a QImode target. This is enough to confuse the RTL optimizers and backends which aren't used to this type of unexpected mode change.
For example, changing "unsigned" to "unsigned char" in the testcase generates significantly better code. If get_inner_reference returned a QImode "tem", then the optimizers wouldn't have problems combining the QImode AND with the SImode AND. Funny that we read this field as QImode, and write it as SImode! get_inner_reference is called with: component_ref:QImode (indirect_ref:SImode (parm_decl:SImode)) (field_decl:SImode)) and returns the indirect_ref:SImode. This doesn't seem correct?? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18008