brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.7 KiB · 57cf3db Raw
289 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -relocation-model=static < %s \3; RUN:   | FileCheck %s --check-prefix=RV32-STATIC4; RUN: llc -mtriple=riscv32 -relocation-model=pic < %s \5; RUN:   | FileCheck %s --check-prefix=RV32-PIC6; RUN: llc -mtriple=riscv64 -relocation-model=static < %s \7; RUN:   | FileCheck %s --check-prefix=RV64-STATIC8; RUN: llc -mtriple=riscv64 -relocation-model=pic < %s \9; RUN:   | FileCheck %s --check-prefix=RV64-PIC10 11@preemptable_var = dso_preemptable global i32 4212define ptr @get_preemptable_var() nounwind {13; RV32-STATIC-LABEL: get_preemptable_var:14; RV32-STATIC:       # %bb.0:15; RV32-STATIC-NEXT:    lui a0, %hi(preemptable_var)16; RV32-STATIC-NEXT:    addi a0, a0, %lo(preemptable_var)17; RV32-STATIC-NEXT:    ret18;19; RV32-PIC-LABEL: get_preemptable_var:20; RV32-PIC:       # %bb.0:21; RV32-PIC-NEXT:  .Lpcrel_hi0:22; RV32-PIC-NEXT:    auipc a0, %got_pcrel_hi(preemptable_var)23; RV32-PIC-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi0)(a0)24; RV32-PIC-NEXT:    ret25;26; RV64-STATIC-LABEL: get_preemptable_var:27; RV64-STATIC:       # %bb.0:28; RV64-STATIC-NEXT:    lui a0, %hi(preemptable_var)29; RV64-STATIC-NEXT:    addi a0, a0, %lo(preemptable_var)30; RV64-STATIC-NEXT:    ret31;32; RV64-PIC-LABEL: get_preemptable_var:33; RV64-PIC:       # %bb.0:34; RV64-PIC-NEXT:  .Lpcrel_hi0:35; RV64-PIC-NEXT:    auipc a0, %got_pcrel_hi(preemptable_var)36; RV64-PIC-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi0)(a0)37; RV64-PIC-NEXT:    ret38  ret ptr @preemptable_var39}40 41@dsolocal_var = dso_local global i32 4242define ptr @get_dsolocal_var() nounwind {43; RV32-STATIC-LABEL: get_dsolocal_var:44; RV32-STATIC:       # %bb.0:45; RV32-STATIC-NEXT:    lui a0, %hi(dsolocal_var)46; RV32-STATIC-NEXT:    addi a0, a0, %lo(dsolocal_var)47; RV32-STATIC-NEXT:    ret48;49; RV32-PIC-LABEL: get_dsolocal_var:50; RV32-PIC:       # %bb.0:51; RV32-PIC-NEXT:  .Lpcrel_hi1:52; RV32-PIC-NEXT:    auipc a0, %pcrel_hi(.Ldsolocal_var$local)53; RV32-PIC-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi1)54; RV32-PIC-NEXT:    ret55;56; RV64-STATIC-LABEL: get_dsolocal_var:57; RV64-STATIC:       # %bb.0:58; RV64-STATIC-NEXT:    lui a0, %hi(dsolocal_var)59; RV64-STATIC-NEXT:    addi a0, a0, %lo(dsolocal_var)60; RV64-STATIC-NEXT:    ret61;62; RV64-PIC-LABEL: get_dsolocal_var:63; RV64-PIC:       # %bb.0:64; RV64-PIC-NEXT:  .Lpcrel_hi1:65; RV64-PIC-NEXT:    auipc a0, %pcrel_hi(.Ldsolocal_var$local)66; RV64-PIC-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi1)67; RV64-PIC-NEXT:    ret68  ret ptr @dsolocal_var69}70 71@weak_dsolocal_var = weak dso_local global i32 4272define ptr @get_weak_dsolocal_var() nounwind {73; RV32-STATIC-LABEL: get_weak_dsolocal_var:74; RV32-STATIC:       # %bb.0:75; RV32-STATIC-NEXT:    lui a0, %hi(weak_dsolocal_var)76; RV32-STATIC-NEXT:    addi a0, a0, %lo(weak_dsolocal_var)77; RV32-STATIC-NEXT:    ret78;79; RV32-PIC-LABEL: get_weak_dsolocal_var:80; RV32-PIC:       # %bb.0:81; RV32-PIC-NEXT:  .Lpcrel_hi2:82; RV32-PIC-NEXT:    auipc a0, %pcrel_hi(weak_dsolocal_var)83; RV32-PIC-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi2)84; RV32-PIC-NEXT:    ret85;86; RV64-STATIC-LABEL: get_weak_dsolocal_var:87; RV64-STATIC:       # %bb.0:88; RV64-STATIC-NEXT:    lui a0, %hi(weak_dsolocal_var)89; RV64-STATIC-NEXT:    addi a0, a0, %lo(weak_dsolocal_var)90; RV64-STATIC-NEXT:    ret91;92; RV64-PIC-LABEL: get_weak_dsolocal_var:93; RV64-PIC:       # %bb.0:94; RV64-PIC-NEXT:  .Lpcrel_hi2:95; RV64-PIC-NEXT:    auipc a0, %pcrel_hi(weak_dsolocal_var)96; RV64-PIC-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi2)97; RV64-PIC-NEXT:    ret98  ret ptr @weak_dsolocal_var99}100 101@hidden_var = hidden global i32 42102define ptr @get_hidden_var() nounwind {103; RV32-STATIC-LABEL: get_hidden_var:104; RV32-STATIC:       # %bb.0:105; RV32-STATIC-NEXT:    lui a0, %hi(hidden_var)106; RV32-STATIC-NEXT:    addi a0, a0, %lo(hidden_var)107; RV32-STATIC-NEXT:    ret108;109; RV32-PIC-LABEL: get_hidden_var:110; RV32-PIC:       # %bb.0:111; RV32-PIC-NEXT:  .Lpcrel_hi3:112; RV32-PIC-NEXT:    auipc a0, %pcrel_hi(hidden_var)113; RV32-PIC-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi3)114; RV32-PIC-NEXT:    ret115;116; RV64-STATIC-LABEL: get_hidden_var:117; RV64-STATIC:       # %bb.0:118; RV64-STATIC-NEXT:    lui a0, %hi(hidden_var)119; RV64-STATIC-NEXT:    addi a0, a0, %lo(hidden_var)120; RV64-STATIC-NEXT:    ret121;122; RV64-PIC-LABEL: get_hidden_var:123; RV64-PIC:       # %bb.0:124; RV64-PIC-NEXT:  .Lpcrel_hi3:125; RV64-PIC-NEXT:    auipc a0, %pcrel_hi(hidden_var)126; RV64-PIC-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi3)127; RV64-PIC-NEXT:    ret128  ret ptr @hidden_var129}130 131@protected_var = protected global i32 42132define ptr @get_protected_var() nounwind {133; RV32-STATIC-LABEL: get_protected_var:134; RV32-STATIC:       # %bb.0:135; RV32-STATIC-NEXT:    lui a0, %hi(protected_var)136; RV32-STATIC-NEXT:    addi a0, a0, %lo(protected_var)137; RV32-STATIC-NEXT:    ret138;139; RV32-PIC-LABEL: get_protected_var:140; RV32-PIC:       # %bb.0:141; RV32-PIC-NEXT:  .Lpcrel_hi4:142; RV32-PIC-NEXT:    auipc a0, %pcrel_hi(protected_var)143; RV32-PIC-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi4)144; RV32-PIC-NEXT:    ret145;146; RV64-STATIC-LABEL: get_protected_var:147; RV64-STATIC:       # %bb.0:148; RV64-STATIC-NEXT:    lui a0, %hi(protected_var)149; RV64-STATIC-NEXT:    addi a0, a0, %lo(protected_var)150; RV64-STATIC-NEXT:    ret151;152; RV64-PIC-LABEL: get_protected_var:153; RV64-PIC:       # %bb.0:154; RV64-PIC-NEXT:  .Lpcrel_hi4:155; RV64-PIC-NEXT:    auipc a0, %pcrel_hi(protected_var)156; RV64-PIC-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi4)157; RV64-PIC-NEXT:    ret158  ret ptr @protected_var159}160 161define dso_preemptable ptr @preemptable_func() nounwind {162; RV32-STATIC-LABEL: preemptable_func:163; RV32-STATIC:       # %bb.0:164; RV32-STATIC-NEXT:    lui a0, %hi(preemptable_func)165; RV32-STATIC-NEXT:    addi a0, a0, %lo(preemptable_func)166; RV32-STATIC-NEXT:    ret167;168; RV32-PIC-LABEL: preemptable_func:169; RV32-PIC:       # %bb.0:170; RV32-PIC-NEXT:  .Lpcrel_hi5:171; RV32-PIC-NEXT:    auipc a0, %got_pcrel_hi(preemptable_func)172; RV32-PIC-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi5)(a0)173; RV32-PIC-NEXT:    ret174;175; RV64-STATIC-LABEL: preemptable_func:176; RV64-STATIC:       # %bb.0:177; RV64-STATIC-NEXT:    lui a0, %hi(preemptable_func)178; RV64-STATIC-NEXT:    addi a0, a0, %lo(preemptable_func)179; RV64-STATIC-NEXT:    ret180;181; RV64-PIC-LABEL: preemptable_func:182; RV64-PIC:       # %bb.0:183; RV64-PIC-NEXT:  .Lpcrel_hi5:184; RV64-PIC-NEXT:    auipc a0, %got_pcrel_hi(preemptable_func)185; RV64-PIC-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi5)(a0)186; RV64-PIC-NEXT:    ret187  ret ptr @preemptable_func188}189 190define dso_local ptr @dsolocal_func() nounwind {191; RV32-STATIC-LABEL: dsolocal_func:192; RV32-STATIC:       # %bb.0:193; RV32-STATIC-NEXT:    lui a0, %hi(dsolocal_func)194; RV32-STATIC-NEXT:    addi a0, a0, %lo(dsolocal_func)195; RV32-STATIC-NEXT:    ret196;197; RV32-PIC-LABEL: dsolocal_func:198; RV32-PIC:       # %bb.0:199; RV32-PIC-NEXT:  .Lpcrel_hi6:200; RV32-PIC-NEXT:    auipc a0, %pcrel_hi(.Ldsolocal_func$local)201; RV32-PIC-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi6)202; RV32-PIC-NEXT:    ret203;204; RV64-STATIC-LABEL: dsolocal_func:205; RV64-STATIC:       # %bb.0:206; RV64-STATIC-NEXT:    lui a0, %hi(dsolocal_func)207; RV64-STATIC-NEXT:    addi a0, a0, %lo(dsolocal_func)208; RV64-STATIC-NEXT:    ret209;210; RV64-PIC-LABEL: dsolocal_func:211; RV64-PIC:       # %bb.0:212; RV64-PIC-NEXT:  .Lpcrel_hi6:213; RV64-PIC-NEXT:    auipc a0, %pcrel_hi(.Ldsolocal_func$local)214; RV64-PIC-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi6)215; RV64-PIC-NEXT:    ret216  ret ptr @dsolocal_func217}218 219define weak dso_local ptr @weak_dsolocal_func() nounwind {220; RV32-STATIC-LABEL: weak_dsolocal_func:221; RV32-STATIC:       # %bb.0:222; RV32-STATIC-NEXT:    lui a0, %hi(weak_dsolocal_func)223; RV32-STATIC-NEXT:    addi a0, a0, %lo(weak_dsolocal_func)224; RV32-STATIC-NEXT:    ret225;226; RV32-PIC-LABEL: weak_dsolocal_func:227; RV32-PIC:       # %bb.0:228; RV32-PIC-NEXT:  .Lpcrel_hi7:229; RV32-PIC-NEXT:    auipc a0, %pcrel_hi(weak_dsolocal_func)230; RV32-PIC-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi7)231; RV32-PIC-NEXT:    ret232;233; RV64-STATIC-LABEL: weak_dsolocal_func:234; RV64-STATIC:       # %bb.0:235; RV64-STATIC-NEXT:    lui a0, %hi(weak_dsolocal_func)236; RV64-STATIC-NEXT:    addi a0, a0, %lo(weak_dsolocal_func)237; RV64-STATIC-NEXT:    ret238;239; RV64-PIC-LABEL: weak_dsolocal_func:240; RV64-PIC:       # %bb.0:241; RV64-PIC-NEXT:  .Lpcrel_hi7:242; RV64-PIC-NEXT:    auipc a0, %pcrel_hi(weak_dsolocal_func)243; RV64-PIC-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi7)244; RV64-PIC-NEXT:    ret245  ret ptr @weak_dsolocal_func246}247 248;; call .Ldsolocal_func$local either resolves to a constant at assembly time249;; or produces a relocation referencing a non-preemptible local symbol.250define dso_local void @call_dsolocal_func() nounwind {251; RV32-STATIC-LABEL: call_dsolocal_func:252; RV32-STATIC:       # %bb.0:253; RV32-STATIC-NEXT:    addi sp, sp, -16254; RV32-STATIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill255; RV32-STATIC-NEXT:    call dsolocal_func256; RV32-STATIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload257; RV32-STATIC-NEXT:    addi sp, sp, 16258; RV32-STATIC-NEXT:    ret259;260; RV32-PIC-LABEL: call_dsolocal_func:261; RV32-PIC:       # %bb.0:262; RV32-PIC-NEXT:    addi sp, sp, -16263; RV32-PIC-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill264; RV32-PIC-NEXT:    call .Ldsolocal_func$local265; RV32-PIC-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload266; RV32-PIC-NEXT:    addi sp, sp, 16267; RV32-PIC-NEXT:    ret268;269; RV64-STATIC-LABEL: call_dsolocal_func:270; RV64-STATIC:       # %bb.0:271; RV64-STATIC-NEXT:    addi sp, sp, -16272; RV64-STATIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill273; RV64-STATIC-NEXT:    call dsolocal_func274; RV64-STATIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload275; RV64-STATIC-NEXT:    addi sp, sp, 16276; RV64-STATIC-NEXT:    ret277;278; RV64-PIC-LABEL: call_dsolocal_func:279; RV64-PIC:       # %bb.0:280; RV64-PIC-NEXT:    addi sp, sp, -16281; RV64-PIC-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill282; RV64-PIC-NEXT:    call .Ldsolocal_func$local283; RV64-PIC-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload284; RV64-PIC-NEXT:    addi sp, sp, 16285; RV64-PIC-NEXT:    ret286  call ptr @dsolocal_func()287  ret void288}289