]> granicus.if.org Git - llvm/commit
[globalisel][tablegen] Add support for multi-insn emission
authorDaniel Sanders <daniel_l_sanders@apple.com>
Wed, 1 Nov 2017 19:57:57 +0000 (19:57 +0000)
committerDaniel Sanders <daniel_l_sanders@apple.com>
Wed, 1 Nov 2017 19:57:57 +0000 (19:57 +0000)
commit4d7894c6d831b2129c10b90ebe1c389ec1a3d758
tree6c8c4d1f4f27576cc726edf45260c83afe072c30
parentdca3eaa1fc679a20101e708dcbce3ecda56f46b0
[globalisel][tablegen] Add support for multi-insn emission

The importer will now accept nested instructions in the result pattern such as
(ADDWrr $a, (SUBWrr $b, $c)). This is only valid when the nested instruction
def's a single vreg and the parent instruction consumes a single vreg where a
nested instruction is specified. The importer will automatically create a vreg
to connect the two using the type information from the pattern. This vreg will
be constrained to the register classes given in the instruction definitions*.

* REG_SEQUENCE is explicitly rejected because of this. The definition doesn't
  constrain to a register class and it therefore needs special handling.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@317117 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/GlobalISel/InstructionSelector.h
include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h
test/CodeGen/AArch64/GlobalISel/select-bitcast-bigendian.mir [new file with mode: 0644]
test/CodeGen/AArch64/GlobalISel/select-intrinsic-crypto-aesmc.mir [new file with mode: 0644]
test/TableGen/GlobalISelEmitter.td
utils/TableGen/GlobalISelEmitter.cpp