================ @@ -568,6 +568,131 @@ bool X86ExpandPseudo::expandMI(MachineBasicBlock &MBB, MI.setDesc(TII->get(Opc)); return true; } + // TILEPAIRLOAD is just for TILEPair spill, we don't have corresponding + // AMX instruction to support it. So, split it to 2 load instructions: + // "TILEPAIRLOAD TMM0:TMM1, Base, Scale, Index, Offset, Segment" --> + // "TILELOAD TMM0, Base, Scale, Index, Offset, Segment" + + // "TILELOAD TMM1, Base, Scale, Index, Offset + TMM_SIZE, Segment" + case X86::PTILEPAIRLOAD: { + int64_t Disp = MBBI->getOperand(1 + X86::AddrDisp).getImm(); + Register TReg = MBBI->getOperand(0).getReg(); + bool DstIsDead = MBBI->getOperand(0).isDead(); + Register TReg0 = TRI->getSubReg(TReg, X86::sub_t0); + Register TReg1 = TRI->getSubReg(TReg, X86::sub_t1); + unsigned TmmSize = TRI->getRegSizeInBits(X86::TILERegClass) / 8; + + MachineInstrBuilder MIBLo = + BuildMI(MBB, MBBI, DL, TII->get(X86::TILELOADD)) + .addReg(TReg0, RegState::Define | getDeadRegState(DstIsDead)); + MachineInstrBuilder MIBHi = + BuildMI(MBB, MBBI, DL, TII->get(X86::TILELOADD)) + .addReg(TReg1, RegState::Define | getDeadRegState(DstIsDead)); + + for (int i = 0; i < X86::AddrNumOperands; ++i) { + MIBLo.add(MBBI->getOperand(1 + i)); + if (i == X86::AddrDisp) + MIBHi.addImm(Disp + TmmSize); + else + MIBHi.add(MBBI->getOperand(1 + i)); + } + + // Make sure the first stride reg used in first tileload is alive. + MachineOperand &Stride = + MIBLo.getInstr()->getOperand(1 + X86::AddrIndexReg); + Stride.setIsKill(false); + + // Split the memory operand, adjusting the offset and size for the halves. + MachineMemOperand *OldMMO = MBBI->memoperands().front(); + MachineFunction *MF = MBB.getParent(); + MachineMemOperand *MMOLo = MF->getMachineMemOperand(OldMMO, 0, TmmSize); + MachineMemOperand *MMOHi = + MF->getMachineMemOperand(OldMMO, TmmSize, TmmSize); + + MIBLo.setMemRefs(MMOLo); + MIBHi.setMemRefs(MMOHi); + + // Delete the pseudo. + MBB.erase(MBBI); + return true; + } + // Smilar with TILEPAIRLOAD, TILEPAIRSTORE is just for TILEPair spill, no ---------------- phoebewang wrote:
Done, thanks! https://github.com/llvm/llvm-project/pull/113532 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits