forked from OSchip/llvm-project
e032d0dc63
We allow to generate more ops than what are needed for replacing the matched root op. Only the last N static values generated are used as replacement; the others serve as auxiliary ops/values for building the replacement. With the introduction of multi-result op support, an op, if used as a whole, may be used to replace multiple static values of the matched root op. We need to consider this when calculating the result range an generated op is to replace. For example, we can have the following pattern: ```tblgen def : Pattern<(ThreeResultOp ...), [(OneResultOp ...), (OneResultOp ...), (OneResultOp ...)]>; // Two op to replace all three results def : Pattern<(ThreeResultOp ...), [(TwoResultOp ...), (OneResultOp ...)]>; // One op to replace all three results def : Pat<(ThreeResultOp ...), (ThreeResultOp ...)>; def : Pattern<(ThreeResultOp ...), [(AuxiliaryOp ...), (ThreeResultOp ...)]>; ``` PiperOrigin-RevId: 261017235 |
||
---|---|---|
.. | ||
AffineOps | ||
Analysis | ||
Conversion | ||
Dialect | ||
EDSC | ||
ExecutionEngine | ||
IR | ||
LLVMIR | ||
Linalg | ||
Parser | ||
Pass | ||
Quantizer | ||
SDBM | ||
StandardOps | ||
Support | ||
TableGen | ||
Target | ||
Transforms | ||
Translation | ||
VectorOps | ||
CMakeLists.txt |