llvm-6502/test
Chad Rosier b7110cf5b5 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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185094 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-27 19:38:13 +00:00
..
Analysis CostModel: improve the cost model for load/store of non power-of-two types such as <3 x float>, which are popular in graphics. 2013-06-27 17:52:04 +00:00
Archive Fix an ordering problem in the test. 2013-06-21 07:23:14 +00:00
Assembler Added support for the Builtin attribute. 2013-06-27 00:25:01 +00:00
Bindings/Ocaml
Bitcode
BugPoint
CodeGen R600: Remove alu-split.ll test 2013-06-27 17:00:38 +00:00
DebugInfo [SystemZ] Allow LA and LARL to be rematerialized 2013-06-27 09:42:10 +00:00
ExecutionEngine Enable mcjit tests on ppc64 when building with cmake. 2013-06-03 19:17:21 +00:00
Feature Add a new function attribute 'cold' to functions. 2013-05-24 12:26:52 +00:00
FileCheck Add 'CHECK-DAG' support 2013-05-14 20:34:12 +00:00
Instrumentation [asan] workaround for PR16277: don't instrument AllocaInstr with alignment more than the redzone size 2013-06-26 09:49:52 +00:00
Integer Rewrite test/Integer tests to use FileCheck instead of grep 2013-04-08 20:18:15 +00:00
JitListener
Linker Extend RemapInstruction and friends to take an optional new parameter, a ValueMaterializer. 2013-05-28 15:17:05 +00:00
MC Improve the compression of the tablegen DiffLists by introducing a new sort 2013-06-27 19:38:13 +00:00
Object [yaml2obj][ELF] Make symbol table top-level key. 2013-06-22 01:38:00 +00:00
Other Suppress llvm/test/Other/can-execute.txt on msys bash. 2013-06-26 10:56:44 +00:00
TableGen
tools readobj: Dump PE/COFF optional records. 2013-06-12 19:10:33 +00:00
Transforms LoopVectorize: Use vectorized loop invariant gep index anchored in loop 2013-06-27 15:11:55 +00:00
Unit
Verifier Also verify llvm.compiler_used. 2013-04-22 15:16:51 +00:00
YAMLParser
CMakeLists.txt
lit.cfg Suppress llvm/test/Other/can-execute.txt on msys bash. 2013-06-26 10:56:44 +00:00
lit.site.cfg.in Allow host triple to be correctly overridden in CMake builds 2013-05-04 07:36:23 +00:00
Makefile add polly to check-all 2013-05-20 18:49:15 +00:00
Makefile.tests Remove obsolete object file dumpers 2013-04-12 04:07:13 +00:00
TestRunner.sh