xref: /llvm-project/llvm/test/CodeGen/RISCV/tagged-globals.ll (revision 1456b68686808fa7c6ed7327aba65b639f81d5b8)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no-generate-body-for-unused-prefixes
2; RUN: llc -mtriple=riscv64 --relocation-model=pic < %s | FileCheck %s
3; RUN: llc -mtriple=riscv64 --relocation-model=static < %s | FileCheck %s
4
5@global_ext = external global i32
6@global_int = internal global i32 0
7declare void @func()
8
9define ptr @global_addr() #0 {
10; CHECK-LABEL: global_addr:
11; CHECK:       # %bb.0:
12; CHECK-NEXT:  .Lpcrel_hi0:
13; CHECK-NEXT:    auipc a0, %got_pcrel_hi(global_ext)
14; CHECK-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi0)(a0)
15; CHECK-NEXT:    ret
16  ret ptr @global_ext
17}
18
19define i32 @global_load() #0 {
20; CHECK-LABEL: global_load:
21; CHECK:       # %bb.0:
22; CHECK-NEXT:  .Lpcrel_hi1:
23; CHECK-NEXT:    auipc a0, %got_pcrel_hi(global_ext)
24; CHECK-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi1)(a0)
25; CHECK-NEXT:    lw a0, 0(a0)
26; CHECK-NEXT:    ret
27  %load = load i32, ptr @global_ext
28  ret i32 %load
29}
30
31define void @global_store() #0 {
32; CHECK-LABEL: global_store:
33; CHECK:       # %bb.0:
34; CHECK-NEXT:  .Lpcrel_hi2:
35; CHECK-NEXT:    auipc a0, %got_pcrel_hi(global_ext)
36; CHECK-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi2)(a0)
37; CHECK-NEXT:    sw zero, 0(a0)
38; CHECK-NEXT:    ret
39  store i32 0, ptr @global_ext
40  ret void
41}
42
43define ptr @global_int_addr() #0 {
44; CHECK-LABEL: global_int_addr:
45; CHECK:       # %bb.0:
46; CHECK-NEXT:  .Lpcrel_hi3:
47; CHECK-NEXT:    auipc a0, %got_pcrel_hi(global_int)
48; CHECK-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi3)(a0)
49; CHECK-NEXT:    ret
50  ret ptr @global_int
51}
52
53define i32 @global_int_load() #0 {
54; CHECK-LABEL: global_int_load:
55; CHECK:       # %bb.0:
56; CHECK-NEXT:  .Lpcrel_hi4:
57; CHECK-NEXT:    auipc a0, %got_pcrel_hi(global_int)
58; CHECK-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi4)(a0)
59; CHECK-NEXT:    lw a0, 0(a0)
60; CHECK-NEXT:    ret
61  %load = load i32, ptr @global_int
62  ret i32 %load
63}
64
65define void @global_int_store() #0 {
66; CHECK-LABEL: global_int_store:
67; CHECK:       # %bb.0:
68; CHECK-NEXT:  .Lpcrel_hi5:
69; CHECK-NEXT:    auipc a0, %got_pcrel_hi(global_int)
70; CHECK-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi5)(a0)
71; CHECK-NEXT:    sw zero, 0(a0)
72; CHECK-NEXT:    ret
73  store i32 0, ptr @global_int
74  ret void
75}
76
77define ptr @func_addr() #0 {
78; CHECK-LABEL: func_addr:
79; CHECK:       # %bb.0:
80; CHECK-NEXT:  .Lpcrel_hi6:
81; CHECK-NEXT:    auipc a0, %got_pcrel_hi(func)
82; CHECK-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi6)(a0)
83; CHECK-NEXT:    ret
84  ret ptr @func
85}
86
87attributes #0 = { "target-features"="+tagged-globals" }
88