[PATCH] D30903: [AArch64] Use alias analysis in the load/store optimization pass.

Chad Rosier via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 13 12:04:04 PDT 2017


mcrosier added a comment.

In https://reviews.llvm.org/D30903#699555, @gberry wrote:

> I would be interested to see load/store pair stats differences and compile time impact of this change.


I'll work on getting the compile-time difference, Geoff.

Here are the static opcode diffs for SPEC2000 for those benchmarks with more that 5 static instructions removed:

> ./spec2000/eon/diffs/eon_base.arm_linux.diff <
------------------------------------------------

Opcode static count diff summary:

     -30  ldr x [x #]
     -14  str x [x #]
      -4  str w [x #]
      -2  ldr d [x #]
      -2  ldr q [x #]
      -2  stp w w [x #]
      -2  str q [x #]
       1  ldp d d [x #]
       1  ldp q q [x #]
       1  stp q q [x #]
       7  ldp x x [x #]
       9  stp x x [x #]
      13  mov x x
  -------------------------
      32  added (excluding nops)
      56  removed (excluding nops)
     -24  net (excluding nops)

> ./spec2000/twolf/diffs/twolf_base.arm_linux.diff <
----------------------------------------------------

Opcode static count diff summary:

      -8  str w [x #]
      -7  ldr w [x #]
      -3  ldrsw x [x #]
       1  sxtw x w
       1  ldpsw x x [x #]
       4  ldp w w [x #]
       4  stp w w [x #]
  -------------------------
      10  added (excluding nops)
      18  removed (excluding nops)
      -8  net (excluding nops)

> ./spec2000/gcc/diffs/cc1_base.arm_linux.diff <
------------------------------------------------

Opcode static count diff summary:

     -38  ldr x [x #]
     -31  str x [x #]
     -12  str w [x #]
      -8  ldr w [x #]
       4  ldp w w [x #]
       5  stp w w [x #]
      16  stp x x [x #]
      19  ldp x x [x #]
  -------------------------
      44  added (excluding nops)
      89  removed (excluding nops)
     -45  net (excluding nops)

> ./spec2000/perlbmk/diffs/perlbmk_base.arm_linux.diff <
--------------------------------------------------------

Opcode static count diff summary:

     -32  ldr x [x #]
     -16  str x [x #]
      -8  ldr w [x #]
      -2  str w [x #]
       1  stp w w [x #]
       4  ldp w w [x #]
       8  stp x x [x #]
      16  ldp x x [x #]
  -------------------------
      29  added (excluding nops)
      58  removed (excluding nops)
     -29  net (excluding nops)

> ./spec2000/crafty/diffs/crafty_base.arm_linux.diff <
------------------------------------------------------

Opcode static count diff summary:

     -22  str x [x #]
      -8  str w [x #]
      -6  ldr x [x #]
       3  ldp x x [x #]
       4  stp w w [x #]
      11  stp x x [x #]
  -------------------------
      18  added (excluding nops)
      36  removed (excluding nops)
     -18  net (excluding nops)

> ./spec2000/mesa/diffs/mesa_base.arm_linux.diff <
--------------------------------------------------

Opcode static count diff summary:

     -66  ldr s [x #]
     -36  str q [x #]
     -24  str s [x #]
     -14  ldr w [x #]
     -12  str q [x #] #
      -2  str w [x #]
      -2  ldr q [x #]
       1  ldp q q [x #]
       1  stp w w [x #]
       7  ldp w w [x #]
      12  stp s s [x #]
      12  add x x #
      24  stp q q [x #]
      33  ldp s s [x #]
  -------------------------
      90  added (excluding nops)
     156  removed (excluding nops)
     -66  net (excluding nops)

> ./spec2000/vortex/diffs/vortex_base.arm_linux.diff <
------------------------------------------------------

Opcode static count diff summary:

    -168  str x [x #]
     -38  str w [x #]
     -16  ldr w [x #]
      -4  ldr x [x #]
       2  ldp x x [x #]
       8  ldp w w [x #]
      15  stp w w [x #]
      86  stp x x [x #]
  -------------------------
     111  added (excluding nops)
     226  removed (excluding nops)
    -115  net (excluding nops)

Here are the static opcode diffs for SPEC2006 for those benchmarks with more that 5 static instructions removed:

> ./spec2006/h264ref/diffs/h264ref_base.arm_linux.diff <
--------------------------------------------------------

Opcode static count diff summary:

     -95  str w [x #]
     -62  str x [x #]
     -24  ldr w [x #]
      -6  ldr x [x #]
      -2  ldr q [x #]
      -2  str q [x #]
      -1  scvtf s w
      -1  fdiv s s s
      -1  adrp x  
      -1  fcvtzs w s
      -1  add x x #
       1  ldp q q [x #]
       1  stp q q [x #]
       3  ldp x x [x #]
      12  ldp w w [x #]
      33  stp x x [x #]
      43  stp w w [x #]
  -------------------------
      93  added (excluding nops)
     196  removed (excluding nops)
    -103  net (excluding nops)

> ./spec2006/povray/diffs/povray_base.arm_linux.diff <
------------------------------------------------------

Opcode static count diff summary:

     -65  str x [x #]
     -42  ldr x [x #]
      -8  ldr s [x #]
      -6  ldr d [x #]
      -6  str s [x #]
      -6  str w [x #]
      -5  ldr w [x #]
      -4  ldr q [x #]
      -4  str q [x #]
      -4  str d [x #]
      -1  ldrsw x [x #]
       1  sxtw x w
       2  stp q q [x #]
       2  ldp q q [x #]
       2  stp w w [x #]
       2  stp d d [x #]
       3  ldp d d [x #]
       3  stp s s [x #]
       3  ldp w w [x #]
       4  ldp s s [x #]
      21  ldp x x [x #]
      33  stp x x [x #]
  -------------------------
      76  added (excluding nops)
     151  removed (excluding nops)
     -75  net (excluding nops)

> ./spec2006/gcc/diffs/gcc_base.arm_linux.diff <
------------------------------------------------

Opcode static count diff summary:

     -62  str x [x #]
     -20  ldr x [x #]
     -14  str w [x #]
      -2  ldr w [x #]
       1  ldp w w [x #]
       7  stp w w [x #]
      10  ldp x x [x #]
      31  stp x x [x #]
  -------------------------
      49  added (excluding nops)
      98  removed (excluding nops)
     -49  net (excluding nops)

> ./spec2006/perlbench/diffs/perlbench_base.arm_linux.diff <
------------------------------------------------------------

Opcode static count diff summary:

     -50  ldr x [x #]
     -19  str x [x #]
     -10  ldr w [x #]
      -8  str w [x #]
       3  stp w w [x #]
       5  ldp w w [x #]
      10  stp x x [x #]
      25  ldp x x [x #]
  -------------------------
      43  added (excluding nops)
      87  removed (excluding nops)
     -44  net (excluding nops)

> ./spec2006/dealII/diffs/dealII_base.arm_linux.diff <
------------------------------------------------------

Opcode static count diff summary:

    -362  str x [x #]
     -64  str w [x #]
     -42  ldr x [x #]
     -12  ldr q [x #]
      -8  str q [x #]
      -2  ldr w [x #]
      -2  str d [x #]
      -1  sub x x #
       1  stp x x [x #] #
       1  ldp w w [x #]
       1  stp d d [x #]
       4  stp q q [x #]
       6  ldp q q [x #]
      21  ldp x x [x #]
      32  stp w w [x #]
     180  stp x x [x #]
  -------------------------
     246  added (excluding nops)
     493  removed (excluding nops)
    -247  net (excluding nops)

> ./spec2006/xalancbmk/diffs/Xalan_base.arm_linux.diff <
--------------------------------------------------------

Opcode static count diff summary:

     -86  str x [x #]
     -23  ldr x [x #]
      -8  str q [x #]
      -4  ldr q [x #]
       1  mov x x
       2  ldp q q [x #]
       4  stp q q [x #]
      11  ldp x x [x #]
      43  stp x x [x #]
  -------------------------
      61  added (excluding nops)
     121  removed (excluding nops)
     -60  net (excluding nops)

> ./spec2006/gobmk/diffs/gobmk_base.arm_linux.diff <
----------------------------------------------------

Opcode static count diff summary:

     -36  str w [x #]
      -4  ldr w [x #]
      -2  ldr q [x #]
       1  ldp q q [x #]
       2  ldp w w [x #]
      18  stp w w [x #]
  -------------------------
      21  added (excluding nops)
      42  removed (excluding nops)
     -21  net (excluding nops)


https://reviews.llvm.org/D30903





More information about the llvm-commits mailing list