Doloop transform resulting in extra code

Pat Haugen pthaugen@us.ibm.com
Tue May 11 20:05:00 GMT 2004


Zdenek,

Has anyone pointed out to you that the doloop transform in mainline results
in extra code when compared to the 3.4 branch?  Actually, that's not true
for the -m64 case since 3.4 didn't generate a doloop for -m64 but I've
included it anyway since it suffers from the same problem.

Following is example source (trimmed down from bzip2.c) and generated code
for PowerPC target.  The extra tests (one for -m32, two for -m64) will
never be true since the first test guarantees the loop count is > 0.


void hbAssignCodes (int *code,
                    int n,
                    int alphaSize )
{
  int  i;

  for (i = 0; i < alphaSize; i++)
    code[i] = n;
}



-m32

hbAssignCodes:
      li 9,0
      cmpw 7,9,5
      bgelr- 7
      cmpwi 7,5,1
      mtctr 5
      blt- 7,.L13 *** r5 can't be < 1 here
.L8:
      slwi 0,9,2
      addi 9,9,1
      stwx 4,3,0
      bdnz .L8
      blr
.L13:
      li 0,1
      mtctr 0
      b .L8



-m64

.hbAssignCodes:
      li 11,0
      cmpw 7,11,5
      bgelr- 7
      cmpwi 7,5,1
      rldicl 0,5,0,32
      mtctr 0
      blt- 7,.L10 *** r5 can't be < 1 here
      lis 0,0x8000
      cmpw 7,5,0
      beq- 7,.L10 *** r5 can't be MIN(int) here
.L8:
      sldi 0,11,2
      addi 9,11,1
      stwx 4,3,0
      extsw 11,9
      bdnz .L8
      blr
.L10:
      li 0,1
      mtctr 0
      b .L8





More information about the Gcc mailing list