diff --git a/llvm/test/CodeGen/LoongArch/psabi-restricted-scheduling.ll b/llvm/test/CodeGen/LoongArch/psabi-restricted-scheduling.ll index c7de3dcf2ecfd..1773b8e014997 100644 --- a/llvm/test/CodeGen/LoongArch/psabi-restricted-scheduling.ll +++ b/llvm/test/CodeGen/LoongArch/psabi-restricted-scheduling.ll @@ -1,4 +1,3 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium --relocation-model=pic --post-RA-scheduler=0 < %s \ ; RUN: | FileCheck %s --check-prefix=MEDIUM_NO_SCH ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium --relocation-model=pic --post-RA-scheduler=1 < %s \ @@ -7,6 +6,14 @@ ; RUN: | FileCheck %s --check-prefix=LARGE_NO_SCH ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic --post-RA-scheduler=1 < %s \ ; RUN: | FileCheck %s --check-prefix=LARGE_SCH +; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium --relocation-model=pic --enable-tlsdesc \ +; RUN: --post-RA-scheduler=0 < %s | FileCheck %s --check-prefix=MEDIUMDESC_NO_SCH +; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium --relocation-model=pic --enable-tlsdesc \ +; RUN: --post-RA-scheduler=1 < %s | FileCheck %s --check-prefix=MEDIUMDESC_SCH +; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic --enable-tlsdesc \ +; RUN: --post-RA-scheduler=0 < %s | FileCheck %s --check-prefix=LARGEDESC_NO_SCH +; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic --enable-tlsdesc \ +; RUN: --post-RA-scheduler=1 < %s | FileCheck %s --check-prefix=LARGEDESC_SCH @g = dso_local global i64 zeroinitializer, align 4 @G = global i64 zeroinitializer, align 4 @@ -194,3 +201,69 @@ define void @foo() nounwind { %v_ie = load volatile i64, ptr @ie ret void } + +define void @baz() nounwind { +; MEDIUMDESC_NO_SCH-LABEL: baz: +; MEDIUMDESC_NO_SCH: # %bb.0: +; MEDIUMDESC_NO_SCH-NEXT: addi.d $sp, $sp, -16 +; MEDIUMDESC_NO_SCH-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill +; MEDIUMDESC_NO_SCH-NEXT: pcalau12i $a0, %desc_pc_hi20(gd) +; MEDIUMDESC_NO_SCH-NEXT: addi.d $a0, $a0, %desc_pc_lo12(gd) +; MEDIUMDESC_NO_SCH-NEXT: ld.d $ra, $a0, %desc_ld(gd) +; MEDIUMDESC_NO_SCH-NEXT: jirl $ra, $ra, %desc_call(gd) +; MEDIUMDESC_NO_SCH-NEXT: add.d $a0, $a0, $tp +; MEDIUMDESC_NO_SCH-NEXT: ld.d $zero, $a0, 0 +; MEDIUMDESC_NO_SCH-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload +; MEDIUMDESC_NO_SCH-NEXT: addi.d $sp, $sp, 16 +; MEDIUMDESC_NO_SCH-NEXT: ret +; +; MEDIUMDESC_SCH-LABEL: baz: +; MEDIUMDESC_SCH: # %bb.0: +; MEDIUMDESC_SCH-NEXT: addi.d $sp, $sp, -16 +; MEDIUMDESC_SCH-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill +; MEDIUMDESC_SCH-NEXT: pcalau12i $a0, %desc_pc_hi20(gd) +; MEDIUMDESC_SCH-NEXT: addi.d $a0, $a0, %desc_pc_lo12(gd) +; MEDIUMDESC_SCH-NEXT: ld.d $ra, $a0, %desc_ld(gd) +; MEDIUMDESC_SCH-NEXT: jirl $ra, $ra, %desc_call(gd) +; MEDIUMDESC_SCH-NEXT: add.d $a0, $a0, $tp +; MEDIUMDESC_SCH-NEXT: ld.d $zero, $a0, 0 +; MEDIUMDESC_SCH-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload +; MEDIUMDESC_SCH-NEXT: addi.d $sp, $sp, 16 +; MEDIUMDESC_SCH-NEXT: ret +; +; LARGEDESC_NO_SCH-LABEL: baz: +; LARGEDESC_NO_SCH: # %bb.0: +; LARGEDESC_NO_SCH-NEXT: addi.d $sp, $sp, -16 +; LARGEDESC_NO_SCH-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill +; LARGEDESC_NO_SCH-NEXT: pcalau12i $a0, %desc_pc_hi20(gd) +; LARGEDESC_NO_SCH-NEXT: addi.d $a1, $zero, %desc_pc_lo12(gd) +; LARGEDESC_NO_SCH-NEXT: lu32i.d $a1, %desc64_pc_lo20(gd) +; LARGEDESC_NO_SCH-NEXT: lu52i.d $a1, $a1, %desc64_pc_hi12(gd) +; LARGEDESC_NO_SCH-NEXT: add.d $a0, $a0, $a1 +; LARGEDESC_NO_SCH-NEXT: ld.d $ra, $a0, %desc_ld(gd) +; LARGEDESC_NO_SCH-NEXT: jirl $ra, $ra, %desc_call(gd) +; LARGEDESC_NO_SCH-NEXT: add.d $a0, $a0, $tp +; LARGEDESC_NO_SCH-NEXT: ld.d $zero, $a0, 0 +; LARGEDESC_NO_SCH-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload +; LARGEDESC_NO_SCH-NEXT: addi.d $sp, $sp, 16 +; LARGEDESC_NO_SCH-NEXT: ret +; +; LARGEDESC_SCH-LABEL: baz: +; LARGEDESC_SCH: # %bb.0: +; LARGEDESC_SCH-NEXT: addi.d $sp, $sp, -16 +; LARGEDESC_SCH-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill +; LARGEDESC_SCH-NEXT: addi.d $a1, $zero, %desc_pc_lo12(gd) +; LARGEDESC_SCH-NEXT: pcalau12i $a0, %desc_pc_hi20(gd) +; LARGEDESC_SCH-NEXT: lu32i.d $a1, %desc64_pc_lo20(gd) +; LARGEDESC_SCH-NEXT: lu52i.d $a1, $a1, %desc64_pc_hi12(gd) +; LARGEDESC_SCH-NEXT: add.d $a0, $a0, $a1 +; LARGEDESC_SCH-NEXT: ld.d $ra, $a0, %desc_ld(gd) +; LARGEDESC_SCH-NEXT: jirl $ra, $ra, %desc_call(gd) +; LARGEDESC_SCH-NEXT: add.d $a0, $a0, $tp +; LARGEDESC_SCH-NEXT: ld.d $zero, $a0, 0 +; LARGEDESC_SCH-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload +; LARGEDESC_SCH-NEXT: addi.d $sp, $sp, 16 +; LARGEDESC_SCH-NEXT: ret + %v_gd = load volatile i64, ptr @gd + ret void +}