diff options
| author | Chad Rosier <mcrosier@apple.com> | 2013-06-27 19:38:13 +0000 | 
|---|---|---|
| committer | Chad Rosier <mcrosier@apple.com> | 2013-06-27 19:38:13 +0000 | 
| commit | ccd06643935417c695a808dfbda103c54210703a (patch) | |
| tree | ec8aa0ca2ba50438239a870a4f0361410c207290 /llvm/test/Transforms/LoopVectorize/undef-inst-bug.ll | |
| parent | 3ec1f00b733700a73adda3140e1ca2af551903d6 (diff) | |
| download | bcm5719-llvm-ccd06643935417c695a808dfbda103c54210703a.tar.gz bcm5719-llvm-ccd06643935417c695a808dfbda103c54210703a.zip | |
Improve the compression of the tablegen DiffLists by introducing a new sort
algorithm when assigning EnumValues to the synthesized registers.
The current algorithm, LessRecord, uses the StringRef compare_numeric
function.  This function compares strings, while handling embedded numbers.
For example, the R600 backend registers are sorted as follows:
  T1
  T1_W
  T1_X
  T1_XYZW
  T1_Y
  T1_Z
  T2
  T2_W
  T2_X
  T2_XYZW
  T2_Y
  T2_Z
In this example, the 'scaling factor' is dEnum/dN = 6 because T0, T1, T2
have an EnumValue offset of 6 from one another.  However, in other parts
of the register bank, the scaling factors are different:
dEnum/dN = 5:
  KC0_128_W
  KC0_128_X
  KC0_128_XYZW
  KC0_128_Y
  KC0_128_Z
  KC0_129_W
  KC0_129_X
  KC0_129_XYZW
  KC0_129_Y
  KC0_129_Z
The diff lists do not work correctly because different kinds of registers have
different 'scaling factors'.  This new algorithm, LessRecordRegister, tries to
enforce a scaling factor of 1.  For example, the registers are now sorted as
follows:
  T1
  T2
  T3
  ...
  T0_W
  T1_W
  T2_W
  ...
  T0_X
  T1_X
  T2_X
  ...
  KC0_128_W
  KC0_129_W
  KC0_130_W
  ...
For the Mips and R600 I see a 19% and 6% reduction in size, respectively.  I
did see a few small regressions, but the differences were on the order of a
few bytes (e.g., AArch64 was 16 bytes).  I suspect there will be even
greater wins for targets with larger register files.
Patch reviewed by Jakob.
rdar://14006013
llvm-svn: 185094
Diffstat (limited to 'llvm/test/Transforms/LoopVectorize/undef-inst-bug.ll')
0 files changed, 0 insertions, 0 deletions

