@@ -554,7 +554,6 @@ void AIE2PInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
554554 MCRegister SrcReg, bool KillSrc) const {
555555 MachineRegisterInfo &MRI = MBB.getParent ()->getRegInfo ();
556556 const TargetRegisterInfo &TRI = *MRI.getTargetRegisterInfo ();
557-
558557 if (AIE2P::mMvSclSrcRegClass .contains (SrcReg) &&
559558 AIE2P::mMvSclDstRegClass .contains (DstReg)) {
560559 // Build MultiSlotPseudo in preference
@@ -753,8 +752,16 @@ void AIE2PInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
753752 getKillRegState (KillSrc));
754753 } else if ((AIE2P::ePSRFLdFRegClass.contains (SrcReg)) &&
755754 (AIE2P::ePSRFLdFRegClass.contains (DstReg))) {
756- copyThroughSubRegs (MBB, MBBI, DL, DstReg, SrcReg, KillSrc);
755+ // copyThroughSubRegs(MBB, MBBI, DL, DstReg, SrcReg, KillSrc);
756+ copyPhysReg (MBB, MBBI, DL, TRI.getSubReg (DstReg, AIE2P::sub_ptr),
757+ TRI.getSubReg (SrcReg, AIE2P::sub_ptr), KillSrc);
758+ copyPhysReg (MBB, MBBI, DL, TRI.getSubReg (DstReg, AIE2P::sub_fifo),
759+ TRI.getSubReg (SrcReg, AIE2P::sub_fifo), KillSrc);
760+ copyPhysReg (MBB, MBBI, DL, TRI.getSubReg (DstReg, AIE2P::sub_avail),
761+ TRI.getSubReg (SrcReg, AIE2P::sub_avail), KillSrc);
757762 } else {
763+ MBBI->dump ();
764+ LLVM_DEBUG (MBBI->dump ());
758765 llvm_unreachable (" unhandled case in copyPhysReg" );
759766 }
760767}
@@ -906,6 +913,14 @@ void AIE2PInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
906913 Opcode = AIE2P::VST_E_SPILL;
907914 } else if (regClassMatches (AIE2P::VEC576RegClass, RC, SrcReg)) {
908915 Opcode = AIE2P::VST_EX_SPILL;
916+ } else if (&AIE2P::spill_acc1024_to_compositeRegClass == RC) {
917+ Opcode = AIE2P::VST_CM_SPILL;
918+ } else if (&AIE2P::spill_acc512_to_compositeRegClass == RC) {
919+ Opcode = AIE2P::VST_dmx_sts_bm_spill;
920+ } else if (&AIE2P::spill_vec1024_to_compositeRegClass == RC) {
921+ Opcode = AIE2P::VST_Y_SPILL;
922+ } else if (&AIE2P::spill_vec512_to_compositeRegClass == RC) {
923+ Opcode = AIE2P::VST_dmx_sts_x_spill;
909924 } else if (regClassMatches (AIE2P::eSRegClass, RC, SrcReg) ||
910925 regClassMatches (AIE2P::spill_eS_to_eRRegClass, RC, SrcReg)) {
911926 // Can't spill these directly. Need to bounce through a GPR.
@@ -962,6 +977,7 @@ void AIE2PInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
962977 } else if (regClassMatches (AIE2P::VEC256RegClass, RC, DstReg)) {
963978 Opcode = AIE2P::VLDA_dmw_lda_w_spill;
964979 } else if (regClassMatches (AIE2P::mBMsRegClass , RC, DstReg)) {
980+ I->dump ();
965981 Opcode = AIE2P::VLDA_dmx_lda_bm_spill;
966982 } else if (regClassMatches (AIE2P::mFifoHLRegRegClass , RC, DstReg)) {
967983 Opcode = AIE2P::VLDA_dmx_lda_fifohl_spill;
@@ -970,6 +986,7 @@ void AIE2PInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
970986 } else if (regClassMatches (AIE2P::ACC2048RegClass, RC, DstReg)) {
971987 Opcode = AIE2P::VLDA_DM_SPILL;
972988 } else if (regClassMatches (AIE2P::ACC1024RegClass, RC, DstReg)) {
989+ I->dump ();
973990 Opcode = AIE2P::VLDA_CM_SPILL;
974991 } else if (regClassMatches (AIE2P::FIFO1024RegClass, RC, DstReg)) {
975992 Opcode = AIE2P::VLDA_FIFO_SPILL;
@@ -987,6 +1004,15 @@ void AIE2PInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
9871004 Opcode = AIE2P::VLDA_E_SPILL;
9881005 } else if (regClassMatches (AIE2P::VEC576RegClass, RC, DstReg)) {
9891006 Opcode = AIE2P::VLDA_EX_SPILL;
1007+ } else if (&AIE2P::spill_acc1024_to_compositeRegClass == RC) {
1008+ Opcode = AIE2P::VLDA_CM_SPILL;
1009+ } else if (&AIE2P::spill_acc512_to_compositeRegClass == RC) {
1010+ // I->dump();
1011+ Opcode = AIE2P::VLDA_dmx_lda_bm_spill;
1012+ } else if (&AIE2P::spill_vec1024_to_compositeRegClass == RC) {
1013+ Opcode = AIE2P::VLDA_Y_SPILL;
1014+ } else if (&AIE2P::spill_vec512_to_compositeRegClass == RC) {
1015+ Opcode = AIE2P::VLDA_dmx_lda_x_spill;
9901016 } else if (regClassMatches (AIE2P::eSRegClass, RC, DstReg) ||
9911017 regClassMatches (AIE2P::spill_eS_to_eRRegClass, RC, DstReg)) {
9921018 // Can't spill these directly. Need to bounce through a GPR.
@@ -999,6 +1025,7 @@ void AIE2PInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
9991025 .addReg (Reg, getKillRegState (true ));
10001026 return ;
10011027 } else {
1028+ I->dump ();
10021029 llvm_unreachable (
10031030 " Can't load this register from stack slot: is it virtual?" );
10041031 }
0 commit comments