Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
Revision tags: llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6
# 7d810623 16-May-2024 Pierre van Houtryve <pierre.vanhoutryve@amd.com>

[GlobalISel] Refactor Combiner MatchData & Apply C++ Code Handling (#92239)

Combiners that use C++ code in their "apply" pattern only use that. They
never mix it with MIR patterns as that has littl

[GlobalISel] Refactor Combiner MatchData & Apply C++ Code Handling (#92239)

Combiners that use C++ code in their "apply" pattern only use that. They
never mix it with MIR patterns as that has little added value.

This patch restricts C++ apply code so that if C++ is used, we cannot
use MIR patterns or builtins with it. Adding this restriction allows us
to merge calls to match and apply C++ code together, which in turns
makes it so we can just have MatchData variables on the stack.

So before, we would have
```
GIM_CheckCxxInsnPredicate // match
GIM_CheckCxxInsnPredicate // apply
GIR_Done
```
Alongside a massive C++ struct holding the MatchData of all rules
possible (which was a big space/perf issue).

Now we just have
```
GIR_DoneWithCustomAction
```

And the function being ran just does
```
unsigned SomeMatchData;
if (match(SomeMatchData))
apply(SomeMatchData)
```

This approach solves multiple issues in one:
- MatchData handling is greatly simplified and more efficient, "don't
pay for what you don't use"
- We reduce the size of the match table
- Calling C++ code has a certain overhead (we need a switch), and this
overhead is only paid once now.

Handling of C++ code inside PatFrags is unchanged though, that still
emits a `GIM_CheckCxxInsnPredicate`. This is completely fine as they
can't use MatchDatas.

show more ...


Revision tags: llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2
# 7ec996d4 01-Feb-2024 Pierre van Houtryve <pierre.vanhoutryve@amd.com>

[GlobalISel][TableGen] Support Intrinsics in MIR Patterns (#79278)


Revision tags: llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5
# 96e97864 08-Nov-2023 Pierre van Houtryve <pierre.vanhoutryve@amd.com>

[TableGen][GlobalISel] Add MIFlags matching & rewriting (#71179)

Also disables generation of MutateOpcode. It's almost never used in
combiners anyway.
If we really want to use it, it needs to be i

[TableGen][GlobalISel] Add MIFlags matching & rewriting (#71179)

Also disables generation of MutateOpcode. It's almost never used in
combiners anyway.
If we really want to use it, it needs to be investigated & properly
fixed (see TODO)

Fixes #70780

show more ...


# 573fa770 08-Nov-2023 Pierre van Houtryve <pierre.vanhoutryve@amd.com>

[TableGen][GlobalISel] Add rule-wide type inference (#66377)

The inference is trivial and leverages the MCOI OperandTypes encoded in
CodeGenInstructions to infer types across patterns in a CombineR

[TableGen][GlobalISel] Add rule-wide type inference (#66377)

The inference is trivial and leverages the MCOI OperandTypes encoded in
CodeGenInstructions to infer types across patterns in a CombineRule.
It's thus very limited and only supports CodeGenInstructions (but that's the
main use case so it's fine).

We only try to infer untyped operands in apply patterns when they're
temp reg defs, or immediates. Inference always outputs a `GITypeOf<$x>` where
$x is a named operand from a match pattern.

This allows us to drop the `GITypeOf` in most cases without any errors.

show more ...


Revision tags: llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4
# 844c0da7 25-Aug-2023 pvanhout <pierre.vanhoutryve@amd.com>

[TableGen][GlobalISel] Add MIR Pattern Builtins

Adds a new feature to MIR patterns: builtin instructions.
They offer some additional capabilities that currently cannot be expressed without falling b

[TableGen][GlobalISel] Add MIR Pattern Builtins

Adds a new feature to MIR patterns: builtin instructions.
They offer some additional capabilities that currently cannot be expressed without falling back to C++ code.
There are two builtins added with this patch, but more can be added later as new needs arise:
- GIReplaceReg
- GIEraseRoot

Depends on D158714, D158713

Reviewed By: arsenm, aemerson

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

show more ...


# 4e513f69 23-Aug-2023 pvanhout <pierre.vanhoutryve@amd.com>

[GlobalISel] Cleanup Combine.td

Now that the old backend is gone, clean-up a few things that no longer make sense and tidy up the file a bit.

Depends on D158710

Reviewed By: arsenm

Differential R

[GlobalISel] Cleanup Combine.td

Now that the old backend is gone, clean-up a few things that no longer make sense and tidy up the file a bit.

Depends on D158710

Reviewed By: arsenm

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

show more ...


# 54d0cf58 23-Aug-2023 pvanhout <pierre.vanhoutryve@amd.com>

[TableGen] Remove & Replace old GICombiner Backend

The MatchTable-based GlobalISel Combiner backend is the new default. There are no in-tree users left of the old backend.

- Removed implementation

[TableGen] Remove & Replace old GICombiner Backend

The MatchTable-based GlobalISel Combiner backend is the new default. There are no in-tree users left of the old backend.

- Removed implementation of old MatchDAG-based Combiner, including tests, the backend itself and all supporting code.
- Renamed MatchTable backend to `GlobalISelCombinerEmitter.cpp` + removed "-matchtable" from its CL option.
- no need to have a verbose name as it's the only backend left now.

Reviewed By: aemerson

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

show more ...