[PATCH] D120887: The [2/2] Fix mangle problem when variable used in inline asm (non-rip for ARR[BaseReg+IndexReg+..])

Xiang Zhang via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 3 21:23:47 PST 2022


xiangzhangllvm added inline comments.


================
Comment at: llvm/lib/MC/MCParser/AsmParser.cpp:5990
+      return false;
+  }
+
----------------
efriedma wrote:
> If I'm understanding correctly, this is trying to detect two adjacent expressions in a specific form, and then transform one of them so they can be concatenated?  This is way too much magic.  If we aren't parsing expressions correctly, please fix the initial parse; don't fudge the expressions afterwards.
I think you understand a part of it.
Here the instruction parsing are finished. The Operands info written into AsmStrRewrites[].
Let me take a example:
Both follow cases will get same Operands info into AsmStrRewrites[i] (ARR) and AsmStrRewrites[i+1] ([edx+eax*4])
Case 1: 
```
  mov     eax,ARR[edx+eax*4]
```
Case 2:
```
 mov     eax,ARR ;   call  dword ptr[edx+eax*4]
```
So here code (line 5967-5990) is just to distinguish the 2 case.

For Case 1, we can not let ARR be a RIP related address, because it already has base reg and index reg. (We can't use 3 regs for a mem address)
For Case 2, it is no problem let ARR use RIP, the [edx+eax*4] are in another instruction.


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

https://reviews.llvm.org/D120887



More information about the llvm-commits mailing list