1*4cce1074Sknickish; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2*4cce1074Sknickish; RUN: llc < %s -O2 -mtriple=m68k -verify-machineinstrs \ 3*4cce1074Sknickish; RUN: -code-model=large -relocation-model=pic \ 4*4cce1074Sknickish; RUN: | FileCheck %s 5*4cce1074Sknickish 6*4cce1074Sknickish; External Linkage 7*4cce1074Sknickish@a = global i32 0, align 4 8*4cce1074Sknickish 9*4cce1074Sknickishdefine i32 @my_access_global_a() #0 { 10*4cce1074Sknickish; CHECK-LABEL: my_access_global_a: 11*4cce1074Sknickish; CHECK: .cfi_startproc 12*4cce1074Sknickish; CHECK-NEXT: ; %bb.0: ; %entry 13*4cce1074Sknickish; CHECK-NEXT: lea (_GLOBAL_OFFSET_TABLE_@GOTPCREL,%pc), %a0 14*4cce1074Sknickish; CHECK-NEXT: move.l #a@GOTOFF, %d0 15*4cce1074Sknickish; CHECK-NEXT: move.l (0,%a0,%d0), %d0 16*4cce1074Sknickish; CHECK-NEXT: rts 17*4cce1074Sknickishentry: 18*4cce1074Sknickish %0 = load i32, ptr @a, align 4 19*4cce1074Sknickish ret i32 %0 20*4cce1074Sknickish} 21*4cce1074Sknickish 22*4cce1074Sknickish; WeakAny Linkage 23*4cce1074Sknickish@b = weak global i32 0, align 4 24*4cce1074Sknickish 25*4cce1074Sknickishdefine i32 @my_access_global_b() #0 { 26*4cce1074Sknickish; CHECK-LABEL: my_access_global_b: 27*4cce1074Sknickish; CHECK: .cfi_startproc 28*4cce1074Sknickish; CHECK-NEXT: ; %bb.0: ; %entry 29*4cce1074Sknickish; CHECK-NEXT: lea (_GLOBAL_OFFSET_TABLE_@GOTPCREL,%pc), %a0 30*4cce1074Sknickish; CHECK-NEXT: move.l #b@GOTOFF, %d0 31*4cce1074Sknickish; CHECK-NEXT: move.l (0,%a0,%d0), %d0 32*4cce1074Sknickish; CHECK-NEXT: rts 33*4cce1074Sknickishentry: 34*4cce1074Sknickish %0 = load i32, ptr @b, align 4 35*4cce1074Sknickish ret i32 %0 36*4cce1074Sknickish} 37*4cce1074Sknickish 38*4cce1074Sknickish; Internal Linkage 39*4cce1074Sknickish@c = internal global i32 0, align 4 40*4cce1074Sknickish 41*4cce1074Sknickishdefine i32 @my_access_global_c() #0 { 42*4cce1074Sknickish; CHECK-LABEL: my_access_global_c: 43*4cce1074Sknickish; CHECK: .cfi_startproc 44*4cce1074Sknickish; CHECK-NEXT: ; %bb.0: ; %entry 45*4cce1074Sknickish; CHECK-NEXT: lea (_GLOBAL_OFFSET_TABLE_@GOTPCREL,%pc), %a0 46*4cce1074Sknickish; CHECK-NEXT: move.l #c@GOTOFF, %d0 47*4cce1074Sknickish; CHECK-NEXT: move.l (0,%a0,%d0), %d0 48*4cce1074Sknickish; CHECK-NEXT: rts 49*4cce1074Sknickishentry: 50*4cce1074Sknickish %0 = load i32, ptr @c, align 4 51*4cce1074Sknickish ret i32 %0 52*4cce1074Sknickish} 53*4cce1074Sknickish 54*4cce1074Sknickish; External Linkage, only declaration. 55*4cce1074Sknickish@d = external global i32, align 4 56*4cce1074Sknickish 57*4cce1074Sknickishdefine i32 @my_access_global_load_d() #0 { 58*4cce1074Sknickish; CHECK-LABEL: my_access_global_load_d: 59*4cce1074Sknickish; CHECK: .cfi_startproc 60*4cce1074Sknickish; CHECK-NEXT: ; %bb.0: ; %entry 61*4cce1074Sknickish; CHECK-NEXT: lea (_GLOBAL_OFFSET_TABLE_@GOTPCREL,%pc), %a0 62*4cce1074Sknickish; CHECK-NEXT: move.l #d@GOTOFF, %d0 63*4cce1074Sknickish; CHECK-NEXT: move.l (0,%a0,%d0), %d0 64*4cce1074Sknickish; CHECK-NEXT: rts 65*4cce1074Sknickishentry: 66*4cce1074Sknickish %0 = load i32, ptr @d, align 4 67*4cce1074Sknickish ret i32 %0 68*4cce1074Sknickish} 69*4cce1074Sknickish 70*4cce1074Sknickish; External Linkage, only declaration, store a value. 71*4cce1074Sknickishdefine i32 @my_access_global_store_d() #0 { 72*4cce1074Sknickish; CHECK-LABEL: my_access_global_store_d: 73*4cce1074Sknickish; CHECK: .cfi_startproc 74*4cce1074Sknickish; CHECK-NEXT: ; %bb.0: ; %entry 75*4cce1074Sknickish; CHECK-NEXT: lea (_GLOBAL_OFFSET_TABLE_@GOTPCREL,%pc), %a0 76*4cce1074Sknickish; CHECK-NEXT: move.l #d@GOTOFF, %d0 77*4cce1074Sknickish; CHECK-NEXT: move.l #2, (0,%a0,%d0) 78*4cce1074Sknickish; CHECK-NEXT: moveq #0, %d0 79*4cce1074Sknickish; CHECK-NEXT: rts 80*4cce1074Sknickishentry: 81*4cce1074Sknickish store i32 2, ptr @d, align 4 82*4cce1074Sknickish ret i32 0 83*4cce1074Sknickish} 84*4cce1074Sknickish 85*4cce1074Sknickish; External Linkage, function pointer access. 86*4cce1074Sknickishdeclare i32 @access_fp(ptr) 87*4cce1074Sknickishdeclare i32 @foo() 88*4cce1074Sknickish 89*4cce1074Sknickishdefine i32 @my_access_fp_foo() #0 { 90*4cce1074Sknickish; CHECK-LABEL: my_access_fp_foo: 91*4cce1074Sknickish; CHECK: .cfi_startproc 92*4cce1074Sknickish; CHECK-NEXT: ; %bb.0: ; %entry 93*4cce1074Sknickish; CHECK-NEXT: suba.l #4, %sp 94*4cce1074Sknickish; CHECK-NEXT: .cfi_def_cfa_offset -8 95*4cce1074Sknickish; CHECK-NEXT: lea (_GLOBAL_OFFSET_TABLE_@GOTPCREL,%pc), %a0 96*4cce1074Sknickish; CHECK-NEXT: adda.l #foo@GOTOFF, %a0 97*4cce1074Sknickish; CHECK-NEXT: move.l %a0, (%sp) 98*4cce1074Sknickish; CHECK-NEXT: jsr (access_fp@PLT,%pc) 99*4cce1074Sknickish; CHECK-NEXT: adda.l #4, %sp 100*4cce1074Sknickish; CHECK-NEXT: rts 101*4cce1074Sknickishentry: 102*4cce1074Sknickish %call = call i32 @access_fp(ptr @foo) 103*4cce1074Sknickish ret i32 %call 104*4cce1074Sknickish} 105*4cce1074Sknickish 106*4cce1074Sknickish; LinkOnceODR Linkage, function pointer access. 107*4cce1074Sknickish 108*4cce1074Sknickish$bar = comdat any 109*4cce1074Sknickish 110*4cce1074Sknickishdefine linkonce_odr i32 @bar() comdat { 111*4cce1074Sknickish; CHECK-LABEL: bar: 112*4cce1074Sknickish; CHECK: .cfi_startproc 113*4cce1074Sknickish; CHECK-NEXT: ; %bb.0: ; %entry 114*4cce1074Sknickish; CHECK-NEXT: moveq #0, %d0 115*4cce1074Sknickish; CHECK-NEXT: rts 116*4cce1074Sknickishentry: 117*4cce1074Sknickish ret i32 0 118*4cce1074Sknickish} 119*4cce1074Sknickish 120*4cce1074Sknickishdefine i32 @my_access_fp_bar() #0 { 121*4cce1074Sknickish; CHECK-LABEL: my_access_fp_bar: 122*4cce1074Sknickish; CHECK: .cfi_startproc 123*4cce1074Sknickish; CHECK-NEXT: ; %bb.0: ; %entry 124*4cce1074Sknickish; CHECK-NEXT: suba.l #4, %sp 125*4cce1074Sknickish; CHECK-NEXT: .cfi_def_cfa_offset -8 126*4cce1074Sknickish; CHECK-NEXT: lea (_GLOBAL_OFFSET_TABLE_@GOTPCREL,%pc), %a0 127*4cce1074Sknickish; CHECK-NEXT: adda.l #bar@GOTOFF, %a0 128*4cce1074Sknickish; CHECK-NEXT: move.l %a0, (%sp) 129*4cce1074Sknickish; CHECK-NEXT: jsr (access_fp@PLT,%pc) 130*4cce1074Sknickish; CHECK-NEXT: adda.l #4, %sp 131*4cce1074Sknickish; CHECK-NEXT: rts 132*4cce1074Sknickishentry: 133*4cce1074Sknickish %call = call i32 @access_fp(ptr @bar) 134*4cce1074Sknickish ret i32 %call 135*4cce1074Sknickish} 136*4cce1074Sknickish 137*4cce1074Sknickish!llvm.module.flags = !{!0, !1} 138*4cce1074Sknickish!0 = !{i32 1, !"PIC Level", i32 1} 139*4cce1074Sknickish!1 = !{i32 1, !"PIE Level", i32 1} 140