From a9587c1342ff0748ca19c6f35913365d09b9a635 Mon Sep 17 00:00:00 2001 From: Christudasan Devadasan Date: Thu, 14 Nov 2024 14:11:44 +0530 Subject: [PATCH] [CodeGen] Introduce MI flag for Live Range split instructions For some targets, it is required to identify the COPY instruction corresponds to the RA inserted live range split. Adding the new flag `MachineInstr::LRSplit` to serve the purpose. --- llvm/include/llvm/CodeGen/MachineInstr.h | 3 ++- llvm/lib/CodeGen/SplitKit.cpp | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/CodeGen/MachineInstr.h b/llvm/include/llvm/CodeGen/MachineInstr.h index 4fcb7f36e0238..c270e8d1fb385 100644 --- a/llvm/include/llvm/CodeGen/MachineInstr.h +++ b/llvm/include/llvm/CodeGen/MachineInstr.h @@ -123,8 +123,9 @@ class MachineInstr NoUSWrap = 1 << 20, // Instruction supports geps // no unsigned signed wrap. SameSign = 1 << 21, // Both operands have the same sign. - InBounds = 1 << 22 // Pointer arithmetic remains inbounds. + InBounds = 1 << 22, // Pointer arithmetic remains inbounds. // Implies NoUSWrap. + LRSplit = 1 << 23 // Instruction for live range split. }; private: diff --git a/llvm/lib/CodeGen/SplitKit.cpp b/llvm/lib/CodeGen/SplitKit.cpp index f9ecb2c97b2e0..589b9ca39d633 100644 --- a/llvm/lib/CodeGen/SplitKit.cpp +++ b/llvm/lib/CodeGen/SplitKit.cpp @@ -531,6 +531,7 @@ SlotIndex SplitEditor::buildSingleSubRegCopy( | getInternalReadRegState(!FirstCopy), SubIdx) .addReg(FromReg, 0, SubIdx); + CopyMI->setFlag(MachineInstr::LRSplit); SlotIndexes &Indexes = *LIS.getSlotIndexes(); if (FirstCopy) { Def = Indexes.insertMachineInstrInMaps(*CopyMI, Late).getRegSlot(); @@ -550,6 +551,7 @@ SlotIndex SplitEditor::buildCopy(Register FromReg, Register ToReg, // The full vreg is copied. MachineInstr *CopyMI = BuildMI(MBB, InsertBefore, DebugLoc(), Desc, ToReg).addReg(FromReg); + CopyMI->setFlag(MachineInstr::LRSplit); return Indexes.insertMachineInstrInMaps(*CopyMI, Late).getRegSlot(); }