Take the following code:
#define OSSwapHostToBigInt32
void foo(char *input) {
  input[0] = 'H';
  input[1] = 'e';
  input[2] = 'l';
  input[3] = 'l';
  input[4] = 'o';
  input[5] = ' ';
  input[6] = 'w';
  input[7] = 'o';
  input[8] = 'r';
  input[9] = 'l';
  input[10] = 'd';
  input[11] = '\0';
}

void bar(char *input) {
  ((unsigned int *)input)[0] = OSSwapHostToBigInt32('Hell');
  ((unsigned int *)input)[1] = OSSwapHostToBigInt32('o wo');
  ((unsigned int *)input)[2] = OSSwapHostToBigInt32('rld\0');
}

They should generate the same asm but currently don't.  Note change 
OSSwapHostToBigInt32 to correct 
for little endian.

-- 
           Summary: Combine stores for non strict alignment targets
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: enhancement
          Priority: P2
         Component: rtl-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: pinskia at gcc dot gnu dot org
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23684

Reply via email to