https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63447

            Bug ID: 63447
           Summary: merge consecutive stw to std
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: carrot at google dot com
            Target: powerpc64le

In bzip2 there are code segment like:

   if (s->state == BZ_X_MAGIC_1) {
      /*initialise the save area*/
      s->save_i           = 0;
      s->save_j           = 0;
      s->save_t           = 0;
      s->save_alphaSize   = 0;
      s->save_nGroups     = 0;
      s->save_nSelectors  = 0;
      s->save_EOB         = 0;
      s->save_groupNo     = 0;
      s->save_groupPos    = 0;
      s->save_nextSym     = 0;
      s->save_nblockMAX   = 0;
      s->save_nblock      = 0;
      s->save_es          = 0;
      s->save_N           = 0;
      s->save_curr        = 0;
      s->save_zt          = 0;
      s->save_zn          = 0;
      s->save_zvec        = 0;
      s->save_zj          = 0;
      s->save_gSel        = 0;
      s->save_gMinlen     = 0;
      s->save_gLimit      = NULL;
      s->save_gBase       = NULL;
      s->save_gPerm       = NULL;
   }

trunk gcc generates:

        li 9,0
        li 10,0
        li 28,0
        li 17,0 
        stw 9,-1500(30)
        stw 9,-1496(30)
        li 26,0 
        li 16,0 
        stw 9,-1492(30)
        stw 9,-1488(30)
        li 0,0
        li 15,0 
        stw 9,-1484(30)
        stw 9,-1480(30)
        li 27,0 
        li 29,0 
        stw 9,-1476(30)
        stw 9,-1472(30)
        li 20,0 
        li 22,0 
        stw 9,-1468(30)
        stw 9,-1464(30)
        li 24,0 
        li 8,0
        stw 9,-1460(30)
        stw 9,-1456(30)
        li 21,0 
        li 19,0 
        stw 9,-1452(30)
        stw 9,-1448(30)
        li 18,0 
        li 14,0 
        stw 9,-1444(30)
        stw 9,-1440(30)
        li 23,0 
        li 11,0
        stw 9,-1436(30)
        stw 9,-1432(30)
        li 7,0
        li 25,0
        stw 9,-1428(30)
        stw 9,-1424(30)
        stw 9,-1420(30)

Consecutive 2 stw instructions can be merged into one std instruction.

My command line options are: -m64 -mvsx -mcpu=power8 -O2 -fno-strict-aliasing

Reply via email to