[llvm] [CodeGen] Add laneBitmask as new MachineOperand type, utilised by newly defined COPY_LANEMASK instruction (PR #151944)
Diana Picus via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 18 04:58:58 PDT 2025
================
@@ -2414,6 +2414,39 @@ void MachineVerifier::visitMachineInstrBefore(const MachineInstr *MI) {
}
break;
}
+ case TargetOpcode::COPY_LANEMASK: {
+ const MachineOperand &DstOp = MI->getOperand(0);
+ const MachineOperand &SrcOp = MI->getOperand(1);
+ const MachineOperand &LaneMaskOp = MI->getOperand(2);
+ const Register SrcReg = SrcOp.getReg();
+ const Register DstReg = DstOp.getReg();
+ const LaneBitmask LaneMask = LaneMaskOp.getLaneMask();
+ LaneBitmask SrcMaxLanemask = LaneBitmask::getAll();
+
+ if (DstOp.getSubReg())
+ report("COPY_LANEMASK must not use a subregister index", &DstOp, 0);
+
+ if (SrcOp.getSubReg())
+ report("COPY_LANEMASK must not use a subregister index", &SrcOp, 1);
+
+ if (LaneMask.none())
+ report("COPY_LANEMASK must read at least one lane", MI);
+
+ if (SrcReg.isPhysical()) {
----------------
rovka wrote:
The description in TargetOpcodes.def says this is a copy between physical registers, but this code suggests vregs are also allowed. Can you please clarify?
https://github.com/llvm/llvm-project/pull/151944
More information about the llvm-commits
mailing list