252 lines · plain
1; RUN: llc -mtriple x86_64-apple-darwin \2; RUN: -relocation-model=static < %s | FileCheck %s3; RUN: llc -mtriple x86_64-apple-darwin \4; RUN: -relocation-model=pic < %s | FileCheck %s5; RUN: llc -mtriple x86_64-apple-darwin \6; RUN: -relocation-model=dynamic-no-pic < %s | FileCheck %s7 8; 32 bits9 10; RUN: llc -mtriple i386-apple-darwin \11; RUN: -relocation-model=static < %s | FileCheck --check-prefix=DARWIN32_S %s12; RUN: llc -mtriple i386-apple-darwin \13; RUN: -relocation-model=pic < %s | FileCheck --check-prefix=DARWIN32 %s14; RUN: llc -mtriple i386-apple-darwin \15; RUN: -relocation-model=dynamic-no-pic < %s | \16; RUN: FileCheck --check-prefix=DARWIN32_DNP %s17 18; globals19 20@strong_default_global = global i32 4221define ptr @get_strong_default_global() {22 ret ptr @strong_default_global23}24; CHECK: leaq _strong_default_global(%rip), %rax25; DARWIN32: leal _strong_default_global-L{{.*}}$pb(%eax), %eax26; DARWIN32_S: movl $_strong_default_global, %eax27; DARWIN32_DNP: movl $_strong_default_global, %eax28 29@weak_default_global = weak global i32 4230define ptr @get_weak_default_global() {31 ret ptr @weak_default_global32}33; CHECK: movq _weak_default_global@GOTPCREL(%rip), %rax34; DARWIN32: movl L_weak_default_global$non_lazy_ptr-L{{.*}}$pb(%eax), %eax35; DARWIN32_S: movl $_weak_default_global, %eax36; DARWIN32_DNP: movl L_weak_default_global$non_lazy_ptr, %eax37 38@external_default_global = external global i3239define ptr @get_external_default_global() {40 ret ptr @external_default_global41}42; CHECK: movq _external_default_global@GOTPCREL(%rip), %rax43; DARWIN32: movl L_external_default_global$non_lazy_ptr-L{{.*}}$pb(%eax), %eax44; DARWIN32_S: movl $_external_default_global, %eax45; DARWIN32_DNP: movl L_external_default_global$non_lazy_ptr, %eax46 47@strong_local_global = dso_local global i32 4248define ptr @get_strong_local_global() {49 ret ptr @strong_local_global50}51; CHECK: leaq _strong_local_global(%rip), %rax52; DARWIN32: leal _strong_local_global-L{{.*}}$pb(%eax), %eax53; DARWIN32_S: movl $_strong_local_global, %eax54; DARWIN32_DNP: movl $_strong_local_global, %eax55 56@weak_local_global = weak dso_local global i32 4257define ptr @get_weak_local_global() {58 ret ptr @weak_local_global59}60; CHECK: leaq _weak_local_global(%rip), %rax61; DARWIN32: leal _weak_local_global-L{{.}}$pb(%eax), %eax62; DARWIN32_S: movl $_weak_local_global, %eax63; DARWIN32_DNP: movl $_weak_local_global, %eax64 65@external_local_global = external dso_local global i3266define ptr @get_external_local_global() {67 ret ptr @external_local_global68}69; CHECK: leaq _external_local_global(%rip), %rax70; DARWIN32: movl L_external_local_global$non_lazy_ptr-L{{.*}}$pb(%eax), %eax71; DARWIN32_S: movl $_external_local_global, %eax72; DARWIN32_DNP: movl $_external_local_global, %eax73 74@strong_preemptable_global = dso_preemptable global i32 4275define ptr @get_strong_preemptable_global() {76 ret ptr @strong_preemptable_global77}78; CHECK: leaq _strong_preemptable_global(%rip), %rax79; DARWIN32: leal _strong_preemptable_global-L{{.*}}$pb(%eax), %eax80; DARWIN32_S: movl $_strong_preemptable_global, %eax81; DARWIN32_DNP: movl $_strong_preemptable_global, %eax82 83@weak_preemptable_global = weak dso_preemptable global i32 4284define ptr @get_weak_preemptable_global() {85 ret ptr @weak_preemptable_global86}87; CHECK: movq _weak_preemptable_global@GOTPCREL(%rip), %rax88; DARWIN32: movl L_weak_preemptable_global$non_lazy_ptr-L{{.*}}$pb(%eax), %eax89; DARWIN32_S: movl $_weak_preemptable_global, %eax90; DARWIN32_DNP: movl L_weak_preemptable_global$non_lazy_ptr, %eax91 92@external_preemptable_global = external dso_preemptable global i3293define ptr @get_external_preemptable_global() {94 ret ptr @external_preemptable_global95}96; CHECK: movq _external_preemptable_global@GOTPCREL(%rip), %rax97; DARWIN32: movl L_external_preemptable_global$non_lazy_ptr-L{{.*}}$pb(%eax), %eax98; DARWIN32_S: movl $_external_preemptable_global, %eax99; DARWIN32_DNP: movl L_external_preemptable_global$non_lazy_ptr, %eax100 101; aliases102@aliasee = global i32 42103 104@strong_default_alias = alias i32, ptr @aliasee105define ptr @get_strong_default_alias() {106 ret ptr @strong_default_alias107}108; CHECK: leaq _strong_default_alias(%rip), %rax109; DARWIN32: leal _strong_default_alias-L{{.*}}$pb(%eax), %eax110; DARWIN32_S: movl $_strong_default_alias, %eax111; DARWIN32_DNP: movl $_strong_default_alias, %eax112 113@weak_default_alias = weak alias i32, ptr @aliasee114define ptr @get_weak_default_alias() {115 ret ptr @weak_default_alias116}117; CHECK: movq _weak_default_alias@GOTPCREL(%rip), %rax118; DARWIN32: movl L_weak_default_alias$non_lazy_ptr-L{{.*}}$pb(%eax), %eax119; DARWIN32_S: movl $_weak_default_alias, %eax120; DARWIN32_DNP: movl L_weak_default_alias$non_lazy_ptr, %eax121 122@strong_local_alias = dso_local alias i32, ptr @aliasee123define ptr @get_strong_local_alias() {124 ret ptr @strong_local_alias125}126; CHECK: leaq _strong_local_alias(%rip), %rax127; DARWIN32: leal _strong_local_alias-L{{.*}}$pb(%eax), %eax128; DARWIN32_S: movl $_strong_local_alias, %eax129; DARWIN32_DNP: movl $_strong_local_alias, %eax130 131@weak_local_alias = weak dso_local alias i32, ptr @aliasee132define ptr @get_weak_local_alias() {133 ret ptr @weak_local_alias134}135; CHECK: leaq _weak_local_alias(%rip), %rax136; DARWIN32: leal _weak_local_alias-L{{.*}}$pb(%eax), %eax137; DARWIN32_S: movl $_weak_local_alias, %eax138; DARWIN32_DNP: movl $_weak_local_alias, %eax139 140@strong_preemptable_alias = dso_preemptable alias i32, ptr @aliasee141define ptr @get_strong_preemptable_alias() {142 ret ptr @strong_preemptable_alias143}144; CHECK: leaq _strong_preemptable_alias(%rip), %rax145; DARWIN32: leal _strong_preemptable_alias-L{{.*}}$pb(%eax), %eax146; DARWIN32_S: movl $_strong_preemptable_alias, %eax147; DARWIN32_DNP: movl $_strong_preemptable_alias, %eax148 149@weak_preemptable_alias = weak dso_preemptable alias i32, ptr @aliasee150define ptr @get_weak_preemptable_alias() {151 ret ptr @weak_preemptable_alias152}153; CHECK: movq _weak_preemptable_alias@GOTPCREL(%rip), %rax154; DARWIN32: movl L_weak_preemptable_alias$non_lazy_ptr-L{{.*}}$pb(%eax), %eax155; DARWIN32_S: movl $_weak_preemptable_alias, %eax156; DARWIN32_DNP: movl L_weak_preemptable_alias$non_lazy_ptr, %eax157 158; functions159 160define void @strong_default_function() {161 ret void162}163define ptr @get_strong_default_function() {164 ret ptr @strong_default_function165}166; CHECK: leaq _strong_default_function(%rip), %rax167; DARWIN32: leal _strong_default_function-L{{.*}}$pb(%eax), %eax168; DARWIN32_S: movl $_strong_default_function, %eax169; DARWIN32_DNP: movl $_strong_default_function, %eax170 171define weak void @weak_default_function() {172 ret void173}174define ptr @get_weak_default_function() {175 ret ptr @weak_default_function176}177; CHECK: movq _weak_default_function@GOTPCREL(%rip), %rax178; DARWIN32: movl L_weak_default_function$non_lazy_ptr-L{{.*}}$pb(%eax), %eax179; DARWIN32_S: movl $_weak_default_function, %eax180; DARWIN32_DNP: movl L_weak_default_function$non_lazy_ptr, %eax181 182declare void @external_default_function()183define ptr @get_external_default_function() {184 ret ptr @external_default_function185}186; CHECK: movq _external_default_function@GOTPCREL(%rip), %rax187; DARWIN32: movl L_external_default_function$non_lazy_ptr-L{{.*}}$pb(%eax), %eax188; DARWIN32_S: movl $_external_default_function, %eax189; DARWIN32_DNP: movl L_external_default_function$non_lazy_ptr, %eax190 191define dso_local void @strong_local_function() {192 ret void193}194define ptr @get_strong_local_function() {195 ret ptr @strong_local_function196}197; CHECK: leaq _strong_local_function(%rip), %rax198; DARWIN32: leal _strong_local_function-L{{.*}}$pb(%eax), %eax199; DARWIN32_S: movl $_strong_local_function, %eax200; DARWIN32_DNP: movl $_strong_local_function, %eax201 202define weak dso_local void @weak_local_function() {203 ret void204}205define ptr @get_weak_local_function() {206 ret ptr @weak_local_function207}208; CHECK: leaq _weak_local_function(%rip), %rax209; DARWIN32: leal _weak_local_function-L{{.*}}$pb(%eax), %eax210; DARWIN32_S: movl $_weak_local_function, %eax211; DARWIN32_DNP: movl $_weak_local_function, %eax212 213declare dso_local void @external_local_function()214define ptr @get_external_local_function() {215 ret ptr @external_local_function216}217; CHECK: leaq _external_local_function(%rip), %rax218; DARWIN32: movl L_external_local_function$non_lazy_ptr-L{{.*}}$pb(%eax), %eax219; DARWIN32_S: movl $_external_local_function, %eax220; DARWIN32_DNP: movl $_external_local_function, %eax221 222define dso_preemptable void @strong_preemptable_function() {223 ret void224}225define ptr @get_strong_preemptable_function() {226 ret ptr @strong_preemptable_function227}228; CHECK: leaq _strong_preemptable_function(%rip), %rax229; DARWIN32: leal _strong_preemptable_function-L{{.*}}$pb(%eax), %eax230; DARWIN32_S: movl $_strong_preemptable_function, %eax231; DARWIN32_DNP: movl $_strong_preemptable_function, %eax232 233define weak dso_preemptable void @weak_preemptable_function() {234 ret void235}236define ptr @get_weak_preemptable_function() {237 ret ptr @weak_preemptable_function238}239; CHECK: movq _weak_preemptable_function@GOTPCREL(%rip), %rax240; DARWIN32: movl L_weak_preemptable_function$non_lazy_ptr-L{{.*}}$pb(%eax), %eax241; DARWIN32_S: movl $_weak_preemptable_function, %eax242; DARWIN32_DNP: movl L_weak_preemptable_function$non_lazy_ptr, %eax243 244declare dso_preemptable void @external_preemptable_function()245define ptr @get_external_preemptable_function() {246 ret ptr @external_preemptable_function247}248; CHECK: movq _external_preemptable_function@GOTPCREL(%rip), %rax249; DARWIN32: movl L_external_preemptable_function$non_lazy_ptr-L{{.*}}$pb(%eax), %eax250; DARWIN32_S: movl $_external_preemptable_function, %eax251; DARWIN32_DNP: movl L_external_preemptable_function$non_lazy_ptr, %eax252