[all-commits] [llvm/llvm-project] ae3518: [GISel] Fix match tree emitter.

Kai Nacke via All-commits all-commits at lists.llvm.org
Sat Sep 17 17:04:24 PDT 2022

  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: ae35188f973eb77f5fb22e55d0b8bdac0d15e89b
  Author: Kai Nacke <kai.peter.nacke at ibm.com>
  Date:   2022-09-18 (Sun, 18 Sep 2022)

  Changed paths:
    M llvm/include/llvm/CodeGen/GlobalISel/CombinerHelper.h
    M llvm/include/llvm/Target/GlobalISel/Combine.td
    M llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
    M llvm/test/TableGen/GICombinerEmitter/match-tree.td
    M llvm/utils/TableGen/GlobalISel/CodeExpansions.h
    M llvm/utils/TableGen/GlobalISel/GIMatchTree.cpp

  Log Message:
  [GISel] Fix match tree emitter.

The following changes are necessasy to get the generated tree
matcher to compile:

- In CodeExpansions::declare(), the assert() prevents connecting
  two instructions. E.g. the match code
    (match (MUL $t, $s1, $s2),
           (SUB $d, $t, $s3)),
  results in two declarations of $t, one for the def and one for
  the use. Removing the assertion allows this construct.
  If $t is later used, it is one of the operands, which should be
  perfectly fine.
- The code emitted in GIMatchTreeVRegDefPartitioner::generatePartitionSelectorCode()
  is not compilable:
  - The value of NewInstrID should be emitted, not the name
  - Both calls involving getOperand() end with one parenthesis too many
- Swaps generated condition for the partition code in the latter function

It also changes the rules i2p_to_p2i, fabs_fabs_fold, and fneg_fneg_fold
to use the tree matcher for a linear match. These rules are tested by:


Reviewed By: arsenm

Differential Revision: https://reviews.llvm.org/D133257

More information about the All-commits mailing list