@@ -406,6 +406,11 @@ bool LoongArchInstrInfo::isSchedulingBoundary(const MachineInstr &MI,
406
406
// lu32i.d $a1, %ie64_pc_lo20(s)
407
407
// lu52i.d $a1, $a1, %ie64_pc_hi12(s)
408
408
//
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
+ //
409
414
// For simplicity, only pcalau12i and lu52i.d are marked as scheduling
410
415
// boundaries, and the instructions between them are guaranteed to be
411
416
// ordered according to data dependencies.
@@ -430,12 +435,16 @@ bool LoongArchInstrInfo::isSchedulingBoundary(const MachineInstr &MI,
430
435
if (MO0 == LoongArchII::MO_IE_PC_HI && MO1 == LoongArchII::MO_IE_PC_LO &&
431
436
MO2 == LoongArchII::MO_IE_PC64_LO)
432
437
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 ;
433
442
break ;
434
443
}
435
444
case LoongArch::LU52I_D: {
436
445
auto MO = MI.getOperand (2 ).getTargetFlags ();
437
446
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 )
439
448
return true ;
440
449
break ;
441
450
}
0 commit comments