1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc --mtriple=loongarch32 -mattr=+d --relocation-model=static < %s | FileCheck %s --check-prefix=LA32NOPIC 3; RUN: llc --mtriple=loongarch32 -mattr=+d --relocation-model=pic < %s | FileCheck %s --check-prefix=LA32PIC 4; RUN: llc --mtriple=loongarch64 -mattr=+d --relocation-model=static < %s | FileCheck %s --check-prefix=LA64NOPIC 5; RUN: llc --mtriple=loongarch64 -mattr=+d --relocation-model=pic < %s | FileCheck %s --check-prefix=LA64PIC 6; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=static < %s | FileCheck %s --check-prefix=LA64LARGENOPIC 7; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic < %s | FileCheck %s --check-prefix=LA64LARGEPIC 8 9@g = dso_local global i32 zeroinitializer, align 4 10@G = global i32 zeroinitializer, align 4 11 12define void @foo() nounwind { 13; LA32NOPIC-LABEL: foo: 14; LA32NOPIC: # %bb.0: 15; LA32NOPIC-NEXT: pcalau12i $a0, %got_pc_hi20(G) 16; LA32NOPIC-NEXT: ld.w $a0, $a0, %got_pc_lo12(G) 17; LA32NOPIC-NEXT: ld.w $zero, $a0, 0 18; LA32NOPIC-NEXT: pcalau12i $a0, %pc_hi20(g) 19; LA32NOPIC-NEXT: ld.w $zero, $a0, %pc_lo12(g) 20; LA32NOPIC-NEXT: ret 21; 22; LA32PIC-LABEL: foo: 23; LA32PIC: # %bb.0: 24; LA32PIC-NEXT: pcalau12i $a0, %got_pc_hi20(G) 25; LA32PIC-NEXT: ld.w $a0, $a0, %got_pc_lo12(G) 26; LA32PIC-NEXT: ld.w $zero, $a0, 0 27; LA32PIC-NEXT: pcalau12i $a0, %pc_hi20(.Lg$local) 28; LA32PIC-NEXT: ld.w $zero, $a0, %pc_lo12(.Lg$local) 29; LA32PIC-NEXT: ret 30; 31; LA64NOPIC-LABEL: foo: 32; LA64NOPIC: # %bb.0: 33; LA64NOPIC-NEXT: pcalau12i $a0, %got_pc_hi20(G) 34; LA64NOPIC-NEXT: ld.d $a0, $a0, %got_pc_lo12(G) 35; LA64NOPIC-NEXT: ld.w $zero, $a0, 0 36; LA64NOPIC-NEXT: pcalau12i $a0, %pc_hi20(g) 37; LA64NOPIC-NEXT: ld.w $zero, $a0, %pc_lo12(g) 38; LA64NOPIC-NEXT: ret 39; 40; LA64PIC-LABEL: foo: 41; LA64PIC: # %bb.0: 42; LA64PIC-NEXT: pcalau12i $a0, %got_pc_hi20(G) 43; LA64PIC-NEXT: ld.d $a0, $a0, %got_pc_lo12(G) 44; LA64PIC-NEXT: ld.w $zero, $a0, 0 45; LA64PIC-NEXT: pcalau12i $a0, %pc_hi20(.Lg$local) 46; LA64PIC-NEXT: ld.w $zero, $a0, %pc_lo12(.Lg$local) 47; LA64PIC-NEXT: ret 48; 49; LA64LARGENOPIC-LABEL: foo: 50; LA64LARGENOPIC: # %bb.0: 51; LA64LARGENOPIC-NEXT: pcalau12i $a0, %got_pc_hi20(G) 52; LA64LARGENOPIC-NEXT: addi.d $a1, $zero, %got_pc_lo12(G) 53; LA64LARGENOPIC-NEXT: lu32i.d $a1, %got64_pc_lo20(G) 54; LA64LARGENOPIC-NEXT: lu52i.d $a1, $a1, %got64_pc_hi12(G) 55; LA64LARGENOPIC-NEXT: ldx.d $a0, $a1, $a0 56; LA64LARGENOPIC-NEXT: ld.w $zero, $a0, 0 57; LA64LARGENOPIC-NEXT: pcalau12i $a0, %pc_hi20(g) 58; LA64LARGENOPIC-NEXT: addi.d $a1, $zero, %pc_lo12(g) 59; LA64LARGENOPIC-NEXT: lu32i.d $a1, %pc64_lo20(g) 60; LA64LARGENOPIC-NEXT: lu52i.d $a1, $a1, %pc64_hi12(g) 61; LA64LARGENOPIC-NEXT: ldx.w $zero, $a1, $a0 62; LA64LARGENOPIC-NEXT: ret 63; 64; LA64LARGEPIC-LABEL: foo: 65; LA64LARGEPIC: # %bb.0: 66; LA64LARGEPIC-NEXT: pcalau12i $a0, %got_pc_hi20(G) 67; LA64LARGEPIC-NEXT: addi.d $a1, $zero, %got_pc_lo12(G) 68; LA64LARGEPIC-NEXT: lu32i.d $a1, %got64_pc_lo20(G) 69; LA64LARGEPIC-NEXT: lu52i.d $a1, $a1, %got64_pc_hi12(G) 70; LA64LARGEPIC-NEXT: ldx.d $a0, $a1, $a0 71; LA64LARGEPIC-NEXT: ld.w $zero, $a0, 0 72; LA64LARGEPIC-NEXT: pcalau12i $a0, %pc_hi20(.Lg$local) 73; LA64LARGEPIC-NEXT: addi.d $a1, $zero, %pc_lo12(.Lg$local) 74; LA64LARGEPIC-NEXT: lu32i.d $a1, %pc64_lo20(.Lg$local) 75; LA64LARGEPIC-NEXT: lu52i.d $a1, $a1, %pc64_hi12(.Lg$local) 76; LA64LARGEPIC-NEXT: ldx.w $zero, $a1, $a0 77; LA64LARGEPIC-NEXT: ret 78 %V = load volatile i32, ptr @G 79 %v = load volatile i32, ptr @g 80 ret void 81} 82