brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.2 KiB · 3390f7f Raw
270 lines · plain
1; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium --relocation-model=pic --post-RA-scheduler=0 < %s \2; RUN:     | FileCheck %s --check-prefix=MEDIUM_NO_SCH3; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium --relocation-model=pic --post-RA-scheduler=1 < %s \4; RUN:     | FileCheck %s --check-prefix=MEDIUM_SCH5; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic --post-RA-scheduler=0 < %s \6; RUN:     | FileCheck %s --check-prefix=LARGE_NO_SCH7; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic --post-RA-scheduler=1 < %s \8; RUN:     | FileCheck %s --check-prefix=LARGE_SCH9; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium --relocation-model=pic --enable-tlsdesc \10; RUN:     --post-RA-scheduler=0 < %s | FileCheck %s --check-prefix=MEDIUMDESC_NO_SCH11; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium --relocation-model=pic --enable-tlsdesc \12; RUN:     --post-RA-scheduler=1 < %s | FileCheck %s --check-prefix=MEDIUMDESC_SCH13; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic --enable-tlsdesc \14; RUN:     --post-RA-scheduler=0 < %s | FileCheck %s --check-prefix=LARGEDESC_NO_SCH15; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic --enable-tlsdesc \16; RUN:     --post-RA-scheduler=1 < %s | FileCheck %s --check-prefix=LARGEDESC_SCH17 18@g = dso_local global i64 zeroinitializer, align 419@G = global i64 zeroinitializer, align 420@gd = external thread_local global i6421@ld = external thread_local(localdynamic) global i6422@ie = external thread_local(initialexec) global i6423 24declare ptr @bar(i64)25 26define void @foo() nounwind {27; MEDIUM_NO_SCH-LABEL: foo:28; MEDIUM_NO_SCH:       # %bb.0:29; MEDIUM_NO_SCH-NEXT:    addi.d $sp, $sp, -1630; MEDIUM_NO_SCH-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill31; MEDIUM_NO_SCH-NEXT:    pcalau12i $a0, %got_pc_hi20(G)32; MEDIUM_NO_SCH-NEXT:    ld.d $a0, $a0, %got_pc_lo12(G)33; MEDIUM_NO_SCH-NEXT:    ld.d $zero, $a0, 034; MEDIUM_NO_SCH-NEXT:    pcalau12i $a0, %pc_hi20(.Lg$local)35; MEDIUM_NO_SCH-NEXT:    ld.d $zero, $a0, %pc_lo12(.Lg$local)36; MEDIUM_NO_SCH-NEXT:    ori $a0, $zero, 137; MEDIUM_NO_SCH-NEXT:    pcaddu18i $ra, %call36(bar)38; MEDIUM_NO_SCH-NEXT:    jirl $ra, $ra, 039; MEDIUM_NO_SCH-NEXT:    pcalau12i $a0, %gd_pc_hi20(gd)40; MEDIUM_NO_SCH-NEXT:    addi.d $a0, $a0, %got_pc_lo12(gd)41; MEDIUM_NO_SCH-NEXT:    pcaddu18i $ra, %call36(__tls_get_addr)42; MEDIUM_NO_SCH-NEXT:    jirl $ra, $ra, 043; MEDIUM_NO_SCH-NEXT:    ld.d $zero, $a0, 044; MEDIUM_NO_SCH-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)45; MEDIUM_NO_SCH-NEXT:    addi.d $a0, $a0, %got_pc_lo12(ld)46; MEDIUM_NO_SCH-NEXT:    pcaddu18i $ra, %call36(__tls_get_addr)47; MEDIUM_NO_SCH-NEXT:    jirl $ra, $ra, 048; MEDIUM_NO_SCH-NEXT:    pcalau12i $a1, %ie_pc_hi20(ie)49; MEDIUM_NO_SCH-NEXT:    ld.d $a1, $a1, %ie_pc_lo12(ie)50; MEDIUM_NO_SCH-NEXT:    ld.d $zero, $a0, 051; MEDIUM_NO_SCH-NEXT:    ldx.d $zero, $a1, $tp52; MEDIUM_NO_SCH-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload53; MEDIUM_NO_SCH-NEXT:    addi.d $sp, $sp, 1654; MEDIUM_NO_SCH-NEXT:    ret55;56; MEDIUM_SCH-LABEL: foo:57; MEDIUM_SCH:       # %bb.0:58; MEDIUM_SCH-NEXT:    addi.d $sp, $sp, -1659; MEDIUM_SCH-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill60; MEDIUM_SCH-NEXT:    pcalau12i $a0, %got_pc_hi20(G)61; MEDIUM_SCH-NEXT:    ld.d $a0, $a0, %got_pc_lo12(G)62; MEDIUM_SCH-NEXT:    ld.d $zero, $a0, 063; MEDIUM_SCH-NEXT:    pcalau12i $a0, %pc_hi20(.Lg$local)64; MEDIUM_SCH-NEXT:    ld.d $zero, $a0, %pc_lo12(.Lg$local)65; MEDIUM_SCH-NEXT:    ori $a0, $zero, 166; MEDIUM_SCH-NEXT:    pcaddu18i $ra, %call36(bar)67; MEDIUM_SCH-NEXT:    jirl $ra, $ra, 068; MEDIUM_SCH-NEXT:    pcalau12i $a0, %gd_pc_hi20(gd)69; MEDIUM_SCH-NEXT:    addi.d $a0, $a0, %got_pc_lo12(gd)70; MEDIUM_SCH-NEXT:    pcaddu18i $ra, %call36(__tls_get_addr)71; MEDIUM_SCH-NEXT:    jirl $ra, $ra, 072; MEDIUM_SCH-NEXT:    ld.d $zero, $a0, 073; MEDIUM_SCH-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)74; MEDIUM_SCH-NEXT:    addi.d $a0, $a0, %got_pc_lo12(ld)75; MEDIUM_SCH-NEXT:    pcaddu18i $ra, %call36(__tls_get_addr)76; MEDIUM_SCH-NEXT:    jirl $ra, $ra, 077; MEDIUM_SCH-NEXT:    pcalau12i $a1, %ie_pc_hi20(ie)78; MEDIUM_SCH-NEXT:    ld.d $zero, $a0, 079; MEDIUM_SCH-NEXT:    ld.d $a1, $a1, %ie_pc_lo12(ie)80; MEDIUM_SCH-NEXT:    ldx.d $zero, $a1, $tp81; MEDIUM_SCH-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload82; MEDIUM_SCH-NEXT:    addi.d $sp, $sp, 1683; MEDIUM_SCH-NEXT:    ret84;85; LARGE_NO_SCH-LABEL: foo:86; LARGE_NO_SCH:       # %bb.0:87; LARGE_NO_SCH-NEXT:    addi.d $sp, $sp, -1688; LARGE_NO_SCH-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill89; LARGE_NO_SCH-NEXT:    pcalau12i $a0, %got_pc_hi20(G)90; LARGE_NO_SCH-NEXT:    addi.d $a1, $zero, %got_pc_lo12(G)91; LARGE_NO_SCH-NEXT:    lu32i.d $a1, %got64_pc_lo20(G)92; LARGE_NO_SCH-NEXT:    lu52i.d $a1, $a1, %got64_pc_hi12(G)93; LARGE_NO_SCH-NEXT:    ldx.d $a0, $a1, $a094; LARGE_NO_SCH-NEXT:    ld.d $zero, $a0, 095; LARGE_NO_SCH-NEXT:    pcalau12i $a0, %pc_hi20(.Lg$local)96; LARGE_NO_SCH-NEXT:    addi.d $a1, $zero, %pc_lo12(.Lg$local)97; LARGE_NO_SCH-NEXT:    lu32i.d $a1, %pc64_lo20(.Lg$local)98; LARGE_NO_SCH-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(.Lg$local)99; LARGE_NO_SCH-NEXT:    ldx.d $zero, $a1, $a0100; LARGE_NO_SCH-NEXT:    ori $a0, $zero, 1101; LARGE_NO_SCH-NEXT:    pcalau12i $a1, %got_pc_hi20(bar)102; LARGE_NO_SCH-NEXT:    addi.d $ra, $zero, %got_pc_lo12(bar)103; LARGE_NO_SCH-NEXT:    lu32i.d $ra, %got64_pc_lo20(bar)104; LARGE_NO_SCH-NEXT:    lu52i.d $ra, $ra, %got64_pc_hi12(bar)105; LARGE_NO_SCH-NEXT:    ldx.d $ra, $ra, $a1106; LARGE_NO_SCH-NEXT:    jirl $ra, $ra, 0107; LARGE_NO_SCH-NEXT:    pcalau12i $a0, %gd_pc_hi20(gd)108; LARGE_NO_SCH-NEXT:    addi.d $a1, $zero, %got_pc_lo12(gd)109; LARGE_NO_SCH-NEXT:    lu32i.d $a1, %got64_pc_lo20(gd)110; LARGE_NO_SCH-NEXT:    lu52i.d $a1, $a1, %got64_pc_hi12(gd)111; LARGE_NO_SCH-NEXT:    add.d $a0, $a1, $a0112; LARGE_NO_SCH-NEXT:    pcalau12i $a1, %got_pc_hi20(__tls_get_addr)113; LARGE_NO_SCH-NEXT:    addi.d $ra, $zero, %got_pc_lo12(__tls_get_addr)114; LARGE_NO_SCH-NEXT:    lu32i.d $ra, %got64_pc_lo20(__tls_get_addr)115; LARGE_NO_SCH-NEXT:    lu52i.d $ra, $ra, %got64_pc_hi12(__tls_get_addr)116; LARGE_NO_SCH-NEXT:    ldx.d $ra, $ra, $a1117; LARGE_NO_SCH-NEXT:    jirl $ra, $ra, 0118; LARGE_NO_SCH-NEXT:    ld.d $zero, $a0, 0119; LARGE_NO_SCH-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)120; LARGE_NO_SCH-NEXT:    addi.d $a1, $zero, %got_pc_lo12(ld)121; LARGE_NO_SCH-NEXT:    lu32i.d $a1, %got64_pc_lo20(ld)122; LARGE_NO_SCH-NEXT:    lu52i.d $a1, $a1, %got64_pc_hi12(ld)123; LARGE_NO_SCH-NEXT:    add.d $a0, $a1, $a0124; LARGE_NO_SCH-NEXT:    pcalau12i $a1, %got_pc_hi20(__tls_get_addr)125; LARGE_NO_SCH-NEXT:    addi.d $ra, $zero, %got_pc_lo12(__tls_get_addr)126; LARGE_NO_SCH-NEXT:    lu32i.d $ra, %got64_pc_lo20(__tls_get_addr)127; LARGE_NO_SCH-NEXT:    lu52i.d $ra, $ra, %got64_pc_hi12(__tls_get_addr)128; LARGE_NO_SCH-NEXT:    ldx.d $ra, $ra, $a1129; LARGE_NO_SCH-NEXT:    jirl $ra, $ra, 0130; LARGE_NO_SCH-NEXT:    ld.d $zero, $a0, 0131; LARGE_NO_SCH-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)132; LARGE_NO_SCH-NEXT:    addi.d $a1, $zero, %ie_pc_lo12(ie)133; LARGE_NO_SCH-NEXT:    lu32i.d $a1, %ie64_pc_lo20(ie)134; LARGE_NO_SCH-NEXT:    lu52i.d $a1, $a1, %ie64_pc_hi12(ie)135; LARGE_NO_SCH-NEXT:    ldx.d $a0, $a1, $a0136; LARGE_NO_SCH-NEXT:    ldx.d $zero, $a0, $tp137; LARGE_NO_SCH-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload138; LARGE_NO_SCH-NEXT:    addi.d $sp, $sp, 16139; LARGE_NO_SCH-NEXT:    ret140;141; LARGE_SCH-LABEL: foo:142; LARGE_SCH:       # %bb.0:143; LARGE_SCH-NEXT:    addi.d $sp, $sp, -16144; LARGE_SCH-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill145; LARGE_SCH-NEXT:    pcalau12i $a0, %got_pc_hi20(G)146; LARGE_SCH-NEXT:    addi.d $a1, $zero, %got_pc_lo12(G)147; LARGE_SCH-NEXT:    lu32i.d $a1, %got64_pc_lo20(G)148; LARGE_SCH-NEXT:    lu52i.d $a1, $a1, %got64_pc_hi12(G)149; LARGE_SCH-NEXT:    ldx.d $a0, $a1, $a0150; LARGE_SCH-NEXT:    ld.d $zero, $a0, 0151; LARGE_SCH-NEXT:    pcalau12i $a0, %pc_hi20(.Lg$local)152; LARGE_SCH-NEXT:    addi.d $a1, $zero, %pc_lo12(.Lg$local)153; LARGE_SCH-NEXT:    lu32i.d $a1, %pc64_lo20(.Lg$local)154; LARGE_SCH-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(.Lg$local)155; LARGE_SCH-NEXT:    ldx.d $zero, $a1, $a0156; LARGE_SCH-NEXT:    ori $a0, $zero, 1157; LARGE_SCH-NEXT:    pcalau12i $a1, %got_pc_hi20(bar)158; LARGE_SCH-NEXT:    addi.d $ra, $zero, %got_pc_lo12(bar)159; LARGE_SCH-NEXT:    lu32i.d $ra, %got64_pc_lo20(bar)160; LARGE_SCH-NEXT:    lu52i.d $ra, $ra, %got64_pc_hi12(bar)161; LARGE_SCH-NEXT:    ldx.d $ra, $ra, $a1162; LARGE_SCH-NEXT:    jirl $ra, $ra, 0163; LARGE_SCH-NEXT:    pcalau12i $a0, %gd_pc_hi20(gd)164; LARGE_SCH-NEXT:    addi.d $a1, $zero, %got_pc_lo12(gd)165; LARGE_SCH-NEXT:    lu32i.d $a1, %got64_pc_lo20(gd)166; LARGE_SCH-NEXT:    lu52i.d $a1, $a1, %got64_pc_hi12(gd)167; LARGE_SCH-NEXT:    add.d $a0, $a1, $a0168; LARGE_SCH-NEXT:    pcalau12i $a1, %got_pc_hi20(__tls_get_addr)169; LARGE_SCH-NEXT:    addi.d $ra, $zero, %got_pc_lo12(__tls_get_addr)170; LARGE_SCH-NEXT:    lu32i.d $ra, %got64_pc_lo20(__tls_get_addr)171; LARGE_SCH-NEXT:    lu52i.d $ra, $ra, %got64_pc_hi12(__tls_get_addr)172; LARGE_SCH-NEXT:    ldx.d $ra, $ra, $a1173; LARGE_SCH-NEXT:    jirl $ra, $ra, 0174; LARGE_SCH-NEXT:    ld.d $zero, $a0, 0175; LARGE_SCH-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)176; LARGE_SCH-NEXT:    addi.d $a1, $zero, %got_pc_lo12(ld)177; LARGE_SCH-NEXT:    lu32i.d $a1, %got64_pc_lo20(ld)178; LARGE_SCH-NEXT:    lu52i.d $a1, $a1, %got64_pc_hi12(ld)179; LARGE_SCH-NEXT:    add.d $a0, $a1, $a0180; LARGE_SCH-NEXT:    pcalau12i $a1, %got_pc_hi20(__tls_get_addr)181; LARGE_SCH-NEXT:    addi.d $ra, $zero, %got_pc_lo12(__tls_get_addr)182; LARGE_SCH-NEXT:    lu32i.d $ra, %got64_pc_lo20(__tls_get_addr)183; LARGE_SCH-NEXT:    lu52i.d $ra, $ra, %got64_pc_hi12(__tls_get_addr)184; LARGE_SCH-NEXT:    ldx.d $ra, $ra, $a1185; LARGE_SCH-NEXT:    jirl $ra, $ra, 0186; LARGE_SCH-NEXT:    ld.d $zero, $a0, 0187; LARGE_SCH-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)188; LARGE_SCH-NEXT:    addi.d $a1, $zero, %ie_pc_lo12(ie)189; LARGE_SCH-NEXT:    lu32i.d $a1, %ie64_pc_lo20(ie)190; LARGE_SCH-NEXT:    lu52i.d $a1, $a1, %ie64_pc_hi12(ie)191; LARGE_SCH-NEXT:    ldx.d $a0, $a1, $a0192; LARGE_SCH-NEXT:    ldx.d $zero, $a0, $tp193; LARGE_SCH-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload194; LARGE_SCH-NEXT:    addi.d $sp, $sp, 16195; LARGE_SCH-NEXT:    ret196  %V = load volatile i64, ptr @G197  %v = load volatile i64, ptr @g198  call void @bar(i64 1)199  %v_gd = load volatile i64, ptr @gd200  %v_ld = load volatile i64, ptr @ld201  %v_ie = load volatile i64, ptr @ie202  ret void203}204 205define void @baz() nounwind {206; MEDIUMDESC_NO_SCH-LABEL: baz:207; MEDIUMDESC_NO_SCH:       # %bb.0:208; MEDIUMDESC_NO_SCH-NEXT:    addi.d $sp, $sp, -16209; MEDIUMDESC_NO_SCH-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill210; MEDIUMDESC_NO_SCH-NEXT:    pcalau12i $a0, %desc_pc_hi20(gd)211; MEDIUMDESC_NO_SCH-NEXT:    addi.d $a0, $a0, %desc_pc_lo12(gd)212; MEDIUMDESC_NO_SCH-NEXT:    ld.d $ra, $a0, %desc_ld(gd)213; MEDIUMDESC_NO_SCH-NEXT:    jirl $ra, $ra, %desc_call(gd)214; MEDIUMDESC_NO_SCH-NEXT:    add.d $a0, $a0, $tp215; MEDIUMDESC_NO_SCH-NEXT:    ld.d $zero, $a0, 0216; MEDIUMDESC_NO_SCH-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload217; MEDIUMDESC_NO_SCH-NEXT:    addi.d $sp, $sp, 16218; MEDIUMDESC_NO_SCH-NEXT:    ret219;220; MEDIUMDESC_SCH-LABEL: baz:221; MEDIUMDESC_SCH:       # %bb.0:222; MEDIUMDESC_SCH-NEXT:    addi.d $sp, $sp, -16223; MEDIUMDESC_SCH-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill224; MEDIUMDESC_SCH-NEXT:    pcalau12i $a0, %desc_pc_hi20(gd)225; MEDIUMDESC_SCH-NEXT:    addi.d $a0, $a0, %desc_pc_lo12(gd)226; MEDIUMDESC_SCH-NEXT:    ld.d $ra, $a0, %desc_ld(gd)227; MEDIUMDESC_SCH-NEXT:    jirl $ra, $ra, %desc_call(gd)228; MEDIUMDESC_SCH-NEXT:    add.d $a0, $a0, $tp229; MEDIUMDESC_SCH-NEXT:    ld.d $zero, $a0, 0230; MEDIUMDESC_SCH-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload231; MEDIUMDESC_SCH-NEXT:    addi.d $sp, $sp, 16232; MEDIUMDESC_SCH-NEXT:    ret233;234; LARGEDESC_NO_SCH-LABEL: baz:235; LARGEDESC_NO_SCH:       # %bb.0:236; LARGEDESC_NO_SCH-NEXT:    addi.d $sp, $sp, -16237; LARGEDESC_NO_SCH-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill238; LARGEDESC_NO_SCH-NEXT:    pcalau12i $a0, %desc_pc_hi20(gd)239; LARGEDESC_NO_SCH-NEXT:    addi.d $a1, $zero, %desc_pc_lo12(gd)240; LARGEDESC_NO_SCH-NEXT:    lu32i.d $a1, %desc64_pc_lo20(gd)241; LARGEDESC_NO_SCH-NEXT:    lu52i.d $a1, $a1, %desc64_pc_hi12(gd)242; LARGEDESC_NO_SCH-NEXT:    add.d $a0, $a0, $a1243; LARGEDESC_NO_SCH-NEXT:    ld.d $ra, $a0, %desc_ld(gd)244; LARGEDESC_NO_SCH-NEXT:    jirl $ra, $ra, %desc_call(gd)245; LARGEDESC_NO_SCH-NEXT:    add.d $a0, $a0, $tp246; LARGEDESC_NO_SCH-NEXT:    ld.d $zero, $a0, 0247; LARGEDESC_NO_SCH-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload248; LARGEDESC_NO_SCH-NEXT:    addi.d $sp, $sp, 16249; LARGEDESC_NO_SCH-NEXT:    ret250;251; LARGEDESC_SCH-LABEL: baz:252; LARGEDESC_SCH:       # %bb.0:253; LARGEDESC_SCH-NEXT:    addi.d $sp, $sp, -16254; LARGEDESC_SCH-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill255; LARGEDESC_SCH-NEXT:    pcalau12i $a0, %desc_pc_hi20(gd)256; LARGEDESC_SCH-NEXT:    addi.d $a1, $zero, %desc_pc_lo12(gd)257; LARGEDESC_SCH-NEXT:    lu32i.d $a1, %desc64_pc_lo20(gd)258; LARGEDESC_SCH-NEXT:    lu52i.d $a1, $a1, %desc64_pc_hi12(gd)259; LARGEDESC_SCH-NEXT:    add.d $a0, $a0, $a1260; LARGEDESC_SCH-NEXT:    ld.d $ra, $a0, %desc_ld(gd)261; LARGEDESC_SCH-NEXT:    jirl $ra, $ra, %desc_call(gd)262; LARGEDESC_SCH-NEXT:    add.d $a0, $a0, $tp263; LARGEDESC_SCH-NEXT:    ld.d $zero, $a0, 0264; LARGEDESC_SCH-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload265; LARGEDESC_SCH-NEXT:    addi.d $sp, $sp, 16266; LARGEDESC_SCH-NEXT:    ret267  %v_gd = load volatile i64, ptr @gd268  ret void269}270