Reimplement HInstruction::Is##type().

Use a table-based implementation for abstract kinds. This
implementation can be fully inlined and even eliminated if
the range of possible kinds is known.

There is a small (<0.5%) improvement of dex2oat compile
time for a big app (sum of "Compile Dex File Quick" dumped
for --dump-timings with the timing of compiler passes hacked
away) on aosp_taimen-userdebug, little cores, -j4. The sizes
of libart-compiler.so have changed:
  - lib/libart-compiler.so: 2178608 -> 2169136 (-9472)
    .rodata: 0xd36c -> 0xd55c (+496)
    .text: 0x175914 -> 0x175f44 (+1584)
    .data.rel.ro: 0xa858 -> 0x84e8 (-9072)
  - lib64/libart-compiler.so: 3091432 -> 3064248 (-27184)
    .rodata: 0x15aa4 -> 0x15c94 (+496)
    .text: 0x203304 -> 0x202294 (-4208)
    .data.rel.ro: 0x151d8 -> 0x10a68 (-18288)
Note that .data.rel.ro is always dirty memory, .rodata and
.text is always clean.

Test: Rely on TreeHugger
Change-Id: I95e6040ecd23cad83f024970c3bf785d32169deb
1 file changed