130 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=small -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: move.l (c,%pc), %d044; CHECK-NEXT: rts45entry:46 %0 = load i32, ptr @c, align 447 ret i32 %048}49 50; External Linkage, only declaration.51@d = external global i32, align 452 53define i32 @my_access_global_load_d() #0 {54; CHECK-LABEL: my_access_global_load_d:55; CHECK: .cfi_startproc56; CHECK-NEXT: ; %bb.0: ; %entry57; CHECK-NEXT: move.l (d@GOTPCREL,%pc), %a058; CHECK-NEXT: move.l (%a0), %d059; CHECK-NEXT: rts60entry:61 %0 = load i32, ptr @d, align 462 ret i32 %063}64 65; External Linkage, only declaration, store a value.66define i32 @my_access_global_store_d() #0 {67; CHECK-LABEL: my_access_global_store_d:68; CHECK: .cfi_startproc69; CHECK-NEXT: ; %bb.0: ; %entry70; CHECK-NEXT: move.l (d@GOTPCREL,%pc), %a071; CHECK-NEXT: move.l #2, (%a0)72; CHECK-NEXT: moveq #0, %d073; CHECK-NEXT: rts74entry:75 store i32 2, ptr @d, align 476 ret i32 077}78 79; External Linkage, function pointer access.80declare i32 @access_fp(ptr)81declare i32 @foo()82 83define i32 @my_access_fp_foo() #0 {84; CHECK-LABEL: my_access_fp_foo:85; CHECK: .cfi_startproc86; CHECK-NEXT: ; %bb.0: ; %entry87; CHECK-NEXT: suba.l #4, %sp88; CHECK-NEXT: .cfi_def_cfa_offset -889; CHECK-NEXT: move.l (foo@GOTPCREL,%pc), (%sp)90; CHECK-NEXT: jsr (access_fp@PLT,%pc)91; CHECK-NEXT: adda.l #4, %sp92; CHECK-NEXT: rts93entry:94 %call = call i32 @access_fp(ptr @foo)95 ret i32 %call96}97 98; LinkOnceODR Linkage, function pointer access.99 100$bar = comdat any101 102define linkonce_odr i32 @bar() comdat {103; CHECK-LABEL: bar:104; CHECK: .cfi_startproc105; CHECK-NEXT: ; %bb.0: ; %entry106; CHECK-NEXT: moveq #0, %d0107; CHECK-NEXT: rts108entry:109 ret i32 0110}111 112define i32 @my_access_fp_bar() #0 {113; CHECK-LABEL: my_access_fp_bar:114; CHECK: .cfi_startproc115; CHECK-NEXT: ; %bb.0: ; %entry116; CHECK-NEXT: suba.l #4, %sp117; CHECK-NEXT: .cfi_def_cfa_offset -8118; CHECK-NEXT: move.l (bar@GOTPCREL,%pc), (%sp)119; CHECK-NEXT: jsr (access_fp@PLT,%pc)120; CHECK-NEXT: adda.l #4, %sp121; CHECK-NEXT: rts122entry:123 %call = call i32 @access_fp(ptr @bar)124 ret i32 %call125}126 127!llvm.module.flags = !{!0, !1}128!0 = !{i32 1, !"PIC Level", i32 1}129!1 = !{i32 1, !"PIE Level", i32 1}130