132 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -O2 -mtriple=m68k -verify-machineinstrs \3; RUN: -code-model=medium -relocation-model=pic \4; RUN: | FileCheck %s5 6; External Linkage7@a = global i32 0, align 48 9define i32 @my_access_global_a() #0 {10; CHECK-LABEL: my_access_global_a:11; CHECK: .cfi_startproc12; CHECK-NEXT: ; %bb.0: ; %entry13; CHECK-NEXT: move.l (a@GOTPCREL,%pc), %a014; CHECK-NEXT: move.l (%a0), %d015; CHECK-NEXT: rts16entry:17 %0 = load i32, ptr @a, align 418 ret i32 %019}20 21; WeakAny Linkage22@b = weak global i32 0, align 423 24define i32 @my_access_global_b() #0 {25; CHECK-LABEL: my_access_global_b:26; CHECK: .cfi_startproc27; CHECK-NEXT: ; %bb.0: ; %entry28; CHECK-NEXT: move.l (b@GOTPCREL,%pc), %a029; CHECK-NEXT: move.l (%a0), %d030; CHECK-NEXT: rts31entry:32 %0 = load i32, ptr @b, align 433 ret i32 %034}35 36; Internal Linkage37@c = internal global i32 0, align 438 39define i32 @my_access_global_c() #0 {40; CHECK-LABEL: my_access_global_c:41; CHECK: .cfi_startproc42; CHECK-NEXT: ; %bb.0: ; %entry43; CHECK-NEXT: lea (_GLOBAL_OFFSET_TABLE_@GOTPCREL,%pc), %a044; CHECK-NEXT: move.l #c@GOTOFF, %d045; CHECK-NEXT: move.l (0,%a0,%d0), %d046; CHECK-NEXT: rts47entry:48 %0 = load i32, ptr @c, align 449 ret i32 %050}51 52; External Linkage, only declaration.53@d = external global i32, align 454 55define i32 @my_access_global_load_d() #0 {56; CHECK-LABEL: my_access_global_load_d:57; CHECK: .cfi_startproc58; CHECK-NEXT: ; %bb.0: ; %entry59; CHECK-NEXT: move.l (d@GOTPCREL,%pc), %a060; CHECK-NEXT: move.l (%a0), %d061; CHECK-NEXT: rts62entry:63 %0 = load i32, ptr @d, align 464 ret i32 %065}66 67; External Linkage, only declaration, store a value.68define i32 @my_access_global_store_d() #0 {69; CHECK-LABEL: my_access_global_store_d:70; CHECK: .cfi_startproc71; CHECK-NEXT: ; %bb.0: ; %entry72; CHECK-NEXT: move.l (d@GOTPCREL,%pc), %a073; CHECK-NEXT: move.l #2, (%a0)74; CHECK-NEXT: moveq #0, %d075; CHECK-NEXT: rts76entry:77 store i32 2, ptr @d, align 478 ret i32 079}80 81; External Linkage, function pointer access.82declare i32 @access_fp(ptr)83declare i32 @foo()84 85define i32 @my_access_fp_foo() #0 {86; CHECK-LABEL: my_access_fp_foo:87; CHECK: .cfi_startproc88; CHECK-NEXT: ; %bb.0: ; %entry89; CHECK-NEXT: suba.l #4, %sp90; CHECK-NEXT: .cfi_def_cfa_offset -891; CHECK-NEXT: move.l (foo@GOTPCREL,%pc), (%sp)92; CHECK-NEXT: jsr (access_fp@PLT,%pc)93; CHECK-NEXT: adda.l #4, %sp94; CHECK-NEXT: rts95entry:96 %call = call i32 @access_fp(ptr @foo)97 ret i32 %call98}99 100; LinkOnceODR Linkage, function pointer access.101 102$bar = comdat any103 104define linkonce_odr i32 @bar() comdat {105; CHECK-LABEL: bar:106; CHECK: .cfi_startproc107; CHECK-NEXT: ; %bb.0: ; %entry108; CHECK-NEXT: moveq #0, %d0109; CHECK-NEXT: rts110entry:111 ret i32 0112}113 114define i32 @my_access_fp_bar() #0 {115; CHECK-LABEL: my_access_fp_bar:116; CHECK: .cfi_startproc117; CHECK-NEXT: ; %bb.0: ; %entry118; CHECK-NEXT: suba.l #4, %sp119; CHECK-NEXT: .cfi_def_cfa_offset -8120; CHECK-NEXT: move.l (bar@GOTPCREL,%pc), (%sp)121; CHECK-NEXT: jsr (access_fp@PLT,%pc)122; CHECK-NEXT: adda.l #4, %sp123; CHECK-NEXT: rts124entry:125 %call = call i32 @access_fp(ptr @bar)126 ret i32 %call127}128 129!llvm.module.flags = !{!0, !1}130!0 = !{i32 1, !"PIC Level", i32 1}131!1 = !{i32 1, !"PIE Level", i32 1}132