[llvm] [CodeGen][X86] Fix lowering of tailcalls when `-ms-hotpatch` is used (PR #77245)

Shengchen Kan via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 22 05:40:31 PST 2024


================
@@ -948,24 +948,26 @@ void X86AsmPrinter::LowerASAN_CHECK_MEMACCESS(const MachineInstr &MI) {
 
 void X86AsmPrinter::LowerPATCHABLE_OP(const MachineInstr &MI,
                                       X86MCInstLower &MCIL) {
-  // PATCHABLE_OP minsize, opcode, operands
+  // PATCHABLE_OP minsize
 
   NoAutoPaddingScope NoPadScope(*OutStreamer);
 
-  unsigned MinSize = MI.getOperand(0).getImm();
-  unsigned Opcode = MI.getOperand(1).getImm();
-  // Opcode PATCHABLE_OP is a special case: there is no instruction to wrap,
-  // simply emit a nop of size MinSize.
-  bool EmptyInst = (Opcode == TargetOpcode::PATCHABLE_OP);
-
-  MCInst MCI;
-  MCI.setOpcode(Opcode);
-  for (auto &MO : drop_begin(MI.operands(), 2))
-    if (auto MaybeOperand = MCIL.LowerMachineOperand(&MI, MO))
-      MCI.addOperand(*MaybeOperand);
+  // Find the next MachineInstr in this MBB.
+  const MachineInstr *NextMI = MI.getNextNode();
+  while (NextMI) {
+    if (!NextMI->isMetaInstruction())
+      break;
+    NextMI = NextMI->getNextNode();
+  }
----------------
KanRobert wrote:

```suggestion
  // Find the next MachineInstr in this MBB.
 auto NextMI = std::find_if(MI.getIterator(), MI.getParent()->end(), [](auto &II) { return !II.isMetaInstruction(); });

```

https://github.com/llvm/llvm-project/pull/77245


More information about the llvm-commits mailing list