@@ -406,6 +406,11 @@ bool LoongArchInstrInfo::isSchedulingBoundary(const MachineInstr &MI,
406406 // lu32i.d $a1, %ie64_pc_lo20(s)
407407 // lu52i.d $a1, $a1, %ie64_pc_hi12(s)
408408 //
409+ // * pcalau12i $a0, %desc_pc_hi20(s)
410+ // addi.d $a1, $zero, %desc_pc_lo12(s)
411+ // lu32i.d $a1, %desc64_pc_lo20(s)
412+ // lu52i.d $a1, $a1, %desc64_pc_hi12(s)
413+ //
409414 // For simplicity, only pcalau12i and lu52i.d are marked as scheduling
410415 // boundaries, and the instructions between them are guaranteed to be
411416 // ordered according to data dependencies.
@@ -430,12 +435,16 @@ bool LoongArchInstrInfo::isSchedulingBoundary(const MachineInstr &MI,
430435 if (MO0 == LoongArchII::MO_IE_PC_HI && MO1 == LoongArchII::MO_IE_PC_LO &&
431436 MO2 == LoongArchII::MO_IE_PC64_LO)
432437 return true ;
438+ if (MO0 == LoongArchII::MO_DESC_PC_HI &&
439+ MO1 == LoongArchII::MO_DESC_PC_LO &&
440+ MO2 == LoongArchII::MO_DESC64_PC_LO)
441+ return true ;
433442 break ;
434443 }
435444 case LoongArch::LU52I_D: {
436445 auto MO = MI.getOperand (2 ).getTargetFlags ();
437446 if (MO == LoongArchII::MO_PCREL64_HI || MO == LoongArchII::MO_GOT_PC64_HI ||
438- MO == LoongArchII::MO_IE_PC64_HI)
447+ MO == LoongArchII::MO_IE_PC64_HI || MO == LoongArchII::MO_DESC64_PC_HI )
439448 return true ;
440449 break ;
441450 }
0 commit comments