@@ -812,6 +812,8 @@ Register AIE2PInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
812812  case  AIE2P::LDA_DS_SPILL:
813813  case  AIE2P::VLDA_EX_SPILL:
814814  case  AIE2P::VLDA_E_SPILL:
815+   case  AIE2P::VLDA_512_COMPOSED_REG_SPILL:
816+   case  AIE2P::VLDA_1024_COMPOSED_REG_SPILL:
815817    break ;
816818  }
817819
@@ -845,6 +847,8 @@ Register AIE2PInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
845847  case  AIE2P::VST_Y_SPILL:
846848  case  AIE2P::VST_E_SPILL:
847849  case  AIE2P::VST_EX_SPILL:
850+   case  AIE2P::VST_512_COMPOSED_REG_SPILL:
851+   case  AIE2P::VST_1024_COMPOSED_REG_SPILL:
848852    break ;
849853  }
850854
@@ -883,6 +887,10 @@ void AIE2PInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
883887                    << " \n "  );
884888  if  (regClassMatches (AIE2P::mSclStRegClass , RC, SrcReg)) {
885889    Opcode = AIE2P::ST_R_SPILL;
890+   } else  if  (&AIE2P::spill_vec1024_to_compositeRegClass == RC) {
891+     Opcode = AIE2P::VST_1024_COMPOSED_REG_SPILL;
892+   } else  if  (&AIE2P::spill_vec512_to_compositeRegClass == RC) {
893+     Opcode = AIE2P::VST_512_COMPOSED_REG_SPILL;
886894  } else  if  (regClassMatches (AIE2P::mQQssRegClass , RC, SrcReg)) {
887895    Opcode = AIE2P::ST_dmv_sts_q_spill;
888896  } else  if  (regClassMatches (AIE2P::mBMsRegClass , RC, SrcReg)) {
@@ -913,14 +921,6 @@ void AIE2PInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
913921    Opcode = AIE2P::VST_E_SPILL;
914922  } else  if  (regClassMatches (AIE2P::VEC576RegClass, RC, SrcReg)) {
915923    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;
924924  } else  if  (regClassMatches (AIE2P::eSRegClass, RC, SrcReg) ||
925925             regClassMatches (AIE2P::spill_eS_to_eRRegClass, RC, SrcReg)) {
926926    //  Can't spill these directly.  Need to bounce through a GPR.
@@ -972,12 +972,17 @@ void AIE2PInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
972972  RC = constrainRegClass (MBB.getParent ()->getRegInfo (), RC, DstReg);
973973  if  (regClassMatches (AIE2P::mLdaSclRegClass , RC, DstReg)) {
974974    Opcode = AIE2P::LDA_R_SPILL;
975+   } else  if  (&AIE2P::spill_vec1024_to_compositeRegClass == RC) {
976+     Opcode = AIE2P::VLDA_1024_COMPOSED_REG_SPILL;
977+   } else  if  (&AIE2P::spill_vec512_to_compositeRegClass == RC) {
978+     //  I->dump();
979+     Opcode = AIE2P::VLDA_512_COMPOSED_REG_SPILL;
975980  } else  if  (regClassMatches (AIE2P::mQQssRegClass , RC, DstReg)) {
976981    Opcode = AIE2P::LDA_dmv_lda_q_spill;
977982  } else  if  (regClassMatches (AIE2P::VEC256RegClass, RC, DstReg)) {
978983    Opcode = AIE2P::VLDA_dmw_lda_w_spill;
979984  } else  if  (regClassMatches (AIE2P::mBMsRegClass , RC, DstReg)) {
980-     I->dump ();
985+     //   I->dump();
981986    Opcode = AIE2P::VLDA_dmx_lda_bm_spill;
982987  } else  if  (regClassMatches (AIE2P::mFifoHLRegRegClass , RC, DstReg)) {
983988    Opcode = AIE2P::VLDA_dmx_lda_fifohl_spill;
@@ -986,7 +991,7 @@ void AIE2PInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
986991  } else  if  (regClassMatches (AIE2P::ACC2048RegClass, RC, DstReg)) {
987992    Opcode = AIE2P::VLDA_DM_SPILL;
988993  } else  if  (regClassMatches (AIE2P::ACC1024RegClass, RC, DstReg)) {
989-     I->dump ();
994+     //   I->dump();
990995    Opcode = AIE2P::VLDA_CM_SPILL;
991996  } else  if  (regClassMatches (AIE2P::FIFO1024RegClass, RC, DstReg)) {
992997    Opcode = AIE2P::VLDA_FIFO_SPILL;
@@ -1004,15 +1009,6 @@ void AIE2PInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
10041009    Opcode = AIE2P::VLDA_E_SPILL;
10051010  } else  if  (regClassMatches (AIE2P::VEC576RegClass, RC, DstReg)) {
10061011    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;
10161012  } else  if  (regClassMatches (AIE2P::eSRegClass, RC, DstReg) ||
10171013             regClassMatches (AIE2P::spill_eS_to_eRRegClass, RC, DstReg)) {
10181014    //  Can't spill these directly.  Need to bounce through a GPR.
@@ -1082,7 +1078,9 @@ AIE2PInstrInfo::getSpillPseudoExpandInfo(const MachineInstr &MI) const {
10821078            {AIE2P::ST_dms_sts_spill, AIE2P::sub_hi_dim_then_sub_dim_size},
10831079            {AIE2P::ST_dms_sts_spill, AIE2P::sub_hi_dim_then_sub_dim_stride},
10841080            {AIE2P::ST_dms_sts_spill, AIE2P::sub_hi_dim_then_sub_dim_count}};
1085- 
1081+   case  AIE2P::VST_1024_COMPOSED_REG_SPILL:
1082+     return  {{AIE2P::VST_512_COMPOSED_REG_SPILL, AIE2P::sub_512_lo},
1083+             {AIE2P::VST_512_COMPOSED_REG_SPILL, AIE2P::sub_512_hi}};
10861084  case  AIE2P::LDA_R_SPILL:
10871085    return  {{AIE2P::LDA_dms_lda_spill, AIE2P::NoSubRegister, 4 }};
10881086  case  AIE2P::VLDA_L_SPILL:
@@ -1132,6 +1130,11 @@ AIE2PInstrInfo::getSpillPseudoExpandInfo(const MachineInstr &MI) const {
11321130  case  AIE2P::VST_EX_SPILL:
11331131    return  {{AIE2P::VST_dmx_sts_x_spill, AIE2P::sub_bfp16_x},
11341132            {AIE2P::VST_E_SPILL, AIE2P::sub_bfp16_e}};
1133+   case  AIE2P::VLDA_1024_COMPOSED_REG_SPILL:
1134+     return  {{AIE2P::VLDA_512_COMPOSED_REG_SPILL, AIE2P::sub_512_lo},
1135+             {AIE2P::VLDA_512_COMPOSED_REG_SPILL, AIE2P::sub_512_hi}};
1136+   case  AIE2P::VLDA_512_COMPOSED_REG_SPILL:
1137+     return  {};
11351138  }
11361139  llvm_unreachable (" Un-implemented"  );
11371140}
@@ -1222,6 +1225,34 @@ bool AIE2PInstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
12221225    MI.eraseFromParent ();
12231226    return  true ;
12241227  }
1228+   case  AIE2P::VLDA_512_COMPOSED_REG_SPILL: {
1229+     unsigned  int  Opcode;
1230+     if  (AIE2P::VEC512RegClass.contains (MI.getOperand (0 ).getReg ())) {
1231+       Opcode = AIE2P::VLDA_dmx_lda_x_spill;
1232+     } else  if  (AIE2P::FIFO512RegClass.contains (MI.getOperand (0 ).getReg ())) {
1233+       Opcode = AIE2P::VLDA_dmx_lda_fifohl_spill;
1234+     } else  if  (AIE2P::ACC512RegClass.contains (MI.getOperand (0 ).getReg ())) {
1235+       Opcode = AIE2P::VLDA_dmx_lda_bm_spill;
1236+     } else  {
1237+       llvm_unreachable (" Not a valid register for VST_512_COMPOSED_REG_SPILL"  );
1238+     }
1239+     MI.setDesc (get (Opcode));
1240+     return  false ;
1241+   }
1242+   case  AIE2P::VST_512_COMPOSED_REG_SPILL: {
1243+     unsigned  int  Opcode;
1244+     if  (AIE2P::VEC512RegClass.contains (MI.getOperand (0 ).getReg ())) {
1245+       Opcode = AIE2P::VST_dmx_sts_x_spill;
1246+     } else  if  (AIE2P::FIFO512RegClass.contains (MI.getOperand (0 ).getReg ())) {
1247+       Opcode = AIE2P::VST_dmx_sts_fifohl_spill;
1248+     } else  if  (AIE2P::ACC512RegClass.contains (MI.getOperand (0 ).getReg ())) {
1249+       Opcode = AIE2P::VST_dmx_sts_bm_spill;
1250+     } else  {
1251+       llvm_unreachable (" Not a valid register for VST_512_COMPOSED_REG_SPILL"  );
1252+     }
1253+     MI.setDesc (get (Opcode));
1254+     return  false ;
1255+   }
12251256  }
12261257  return  false ;
12271258}
0 commit comments