------- Comment #5 from sje at cup dot hp dot com 2009-08-04 17:46 ------- Created an attachment (id=18301) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=18301&action=view) Better test case
Here is a better test case that actually shows bad code being generated. In r150335, we extend r32 with 'addp4 r32 = 0, r32' and that is fine. In the new code we combine the addp4 with a move and generate 'addp4 r8 = r32, r0' This is wrong, if we generated 'addp4 - r0, r32' then we would be OK. addp4 is not a symetrical operation and the first argument should be an offset (often zero) and the second argument should be a 32 bit pointer that we want to extend to 64 bits before dereferencing. addp4 uses the REG_POINTER attribute to distinguish between offsets and pointers. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40952