[PATCH] D30539: [tablegen][globalisel] Add support for nested instruction matching.
    Daniel Sanders via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Thu Mar  2 08:50:24 PST 2017
    
    
  
dsanders created this revision.
Herald added subscribers: kristof.beyls, dberris.
Herald added a reviewer: javed.absar.
Lift the restrictions that prevented the tree walking introduced in the
previous change and add support for patterns like:
  (G_ADD (G_MUL (G_SEXT $src1), (G_SEXT $src2)), $src3) -> SMADDWrrr $dst, $src1, $src2, $src3
Also adds support for G_SEXT and G_ZEXT to support these cases.
One particular aspect of this that I should draw attention to is that I've
tried to be overly conservative in determining the safety of matches that
involve non-adjacent instructions and multiple basic blocks. This is intended
to be used as a cheap initial check and we may add a more expensive check in
the future. The current rules are:
- Reject if any instruction may load/store (we'd need to check for intervening memory operations.
- Reject if any instruction has implicit operands.
- Reject if any instruction has unmodelled side-effects.
See isObviouslySafeToFold().
Another important detail is that (aside from the root of the match) dead
instructions are not yet deleted by the instruction selector. I'll be looking
into this next.
https://reviews.llvm.org/D30539
Files:
  include/llvm/CodeGen/GlobalISel/InstructionSelector.h
  include/llvm/Target/GlobalISel/SelectionDAGCompat.td
  lib/CodeGen/GlobalISel/InstructionSelector.cpp
  lib/Target/AArch64/AArch64InstructionSelector.cpp
  test/CodeGen/AArch64/GlobalISel/arm64-instructionselect-muladd.mir
  test/CodeGen/AArch64/GlobalISel/arm64-instructionselect-sext.mir
  test/CodeGen/AArch64/GlobalISel/arm64-instructionselect-zext.mir
  utils/TableGen/GlobalISelEmitter.cpp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D30539.90345.patch
Type: text/x-patch
Size: 18930 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170302/6ea310f9/attachment.bin>
    
    
More information about the llvm-commits
mailing list