Skip to content

Commit 67ff11e

Browse files
authored
[LoongArch] Avoid scheduling tls-desc code sequence in large code model (#121541)
1 parent 27f3002 commit 67ff11e

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

llvm/lib/Target/LoongArch/LoongArchInstrInfo.cpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -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
}

llvm/test/CodeGen/LoongArch/psabi-restricted-scheduling.ll

+1-1
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,8 @@ define void @baz() nounwind {
252252
; LARGEDESC_SCH: # %bb.0:
253253
; LARGEDESC_SCH-NEXT: addi.d $sp, $sp, -16
254254
; LARGEDESC_SCH-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill
255-
; LARGEDESC_SCH-NEXT: addi.d $a1, $zero, %desc_pc_lo12(gd)
256255
; LARGEDESC_SCH-NEXT: pcalau12i $a0, %desc_pc_hi20(gd)
256+
; LARGEDESC_SCH-NEXT: addi.d $a1, $zero, %desc_pc_lo12(gd)
257257
; LARGEDESC_SCH-NEXT: lu32i.d $a1, %desc64_pc_lo20(gd)
258258
; LARGEDESC_SCH-NEXT: lu52i.d $a1, $a1, %desc64_pc_hi12(gd)
259259
; LARGEDESC_SCH-NEXT: add.d $a0, $a0, $a1

0 commit comments

Comments
 (0)