[PATCH] D133257: [GISel] Fix match tree emitter.

Kai Nacke via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 16 13:44:35 PDT 2022


Kai added inline comments.


================
Comment at: llvm/utils/TableGen/GlobalISel/CodeExpansions.h:27-28
   void declare(StringRef Name, StringRef Expansion) {
-    bool Inserted = Expansions.try_emplace(Name, Expansion).second;
-    assert(Inserted && "Declared variable twice");
-    (void)Inserted;
+    // Duplicates are not inserted. The expansion refers to different operands
+    // but to the same virtual register.
+    Expansions.try_emplace(Name, Expansion);
----------------
arsenm wrote:
> Comment doesn't read right. Maybe you meant "refers not to different operands"?
What I am trying to describe: Consider

```
  (match (MUL $t, $s1, $s2),
         (SUB $d, $t, $s3)),

```
the variable `$t` appears twice in the pattern, and `declare()` is called twice.

  - One replacement is `MIs[0]->getOperand(1)`, that is, the use in the SUB instruction
 - The other replacement is `MIs[1]->getOperand(0)`, the definition in the MUL instruction

Thus the operands are different (even of different instructions), but both refer to the same virtual register.



CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133257/new/

https://reviews.llvm.org/D133257



More information about the llvm-commits mailing list