122 lines · plain
1; RUN: llc -mtriple=ppc64le -relocation-model=static < %s | FileCheck %s2 3@default = global i32 554define dso_local ptr @get_default_global() {5; CHECK-LABEL: get_default_global:6; CHECK: addis 3, 2, .LC{{.*}}@toc@ha7; CHECK-NEXT: ld 3, .LC{{.*}}@toc@l(3)8; CHECK-NEXT: blr9 ret ptr @default10}11 12@local_global = dso_local global i32 5513define dso_local ptr @get_local_global() {14; CHECK-LABEL: get_local_global:15; CHECK: addis 3, 2, local_global@toc@ha16; CHECK-NEXT: addi 3, 3, local_global@toc@l17; CHECK-NEXT: blr18 ret ptr @local_global19}20 21@preemptable_global = dso_preemptable global i32 4222define dso_local ptr @get_preemptable_global() {23; CHECK-LABEL: get_preemptable_global:24; CHECK: addis 3, 2, .LC{{.*}}@toc@ha25; CHECK-NEXT: ld 3, .LC{{.*}}@toc@l(3)26; CHECK-NEXT: blr27 ret ptr @preemptable_global28}29 30 31@external_default_global = external global i3232define dso_local ptr @get_external_default_global() {33; CHECK-LABEL: get_external_default_global:34; CHECK: addis 3, 2, .LC{{.*}}@toc@ha35; CHECK-NEXT: ld 3, .LC{{.*}}@toc@l(3)36; CHECK-NEXT: blr37 ret ptr @external_default_global38}39 40@external_local_global = external dso_local global i3241define dso_local ptr @get_external_local_global() {42; CHECK-LABEL: get_external_local_global:43; CHECK: addis 3, 2, external_local_global@toc@ha44; CHECK-NEXT: addi 3, 3, external_local_global@toc@l45; CHECK-NEXT: blr46 ret ptr @external_local_global47}48 49@external_preemptable_global = external dso_preemptable global i3250define dso_local ptr @get_external_preemptable_global() {51; CHECK-LABEL: get_external_preemptable_global:52; CHECK: addis 3, 2, .LC{{.*}}@toc@ha53; CHECK-NEXT: ld 3, .LC{{.*}}@toc@l(3)54; CHECK-NEXT: blr55 ret ptr @external_preemptable_global56}57 58 59; functions60define signext i32 @default_function(i32 %i) {61 ret i32 %i62}63define dso_local signext i32 @default_function_caller(i32 %i) {64; CHECK-LABEL: default_function_caller:65; CHECK: bl default_function66; CHECK-NEXT: nop67 %call = notail call signext i32 @default_function(i32 signext %i)68 ret i32 %call69}70 71define dso_local signext i32 @local_function(i32 %i) {72 ret i32 %i73}74define dso_local signext i32 @local_function_caller(i32 %i) {75; CHECK-LABEL: local_function_caller:76; CHECK: bl local_function77; CHECK-NOT: nop78; CHECK: blr79 %call = notail call signext i32 @local_function(i32 signext %i)80 ret i32 %call81}82 83define dso_preemptable signext i32 @preemptable_function(i32 %i) {84 ret i32 %i85}86define dso_local signext i32 @preemptable_function_caller(i32 %i) {87; CHECK-LABEL: preemptable_function_caller:88; CHECK: bl preemptable_function89; CHECK-NEXT: nop90 %call = notail call signext i32 @preemptable_function(i32 signext %i)91 ret i32 %call92}93 94 95declare i32 @external_default_function(i32 %i)96define dso_local i32 @external_default_function_caller(i32 %i) {97; CHECK-LABEL: external_default_function_caller:98; CHECK: bl external_default_function99; CHECK-NEXT: nop100; CHECK: blr101 %call = notail call signext i32 @external_default_function(i32 signext %i)102 ret i32 %call103}104 105declare dso_local i32 @external_local_function(i32 %i)106define dso_local i32 @external_local_function_caller(i32 %i) {107; CHECK-LABEL: external_local_function_caller:108; CHECK: bl external_local_function109; CHECK-NEXT: nop110 %call = notail call signext i32 @external_local_function(i32 signext %i)111 ret i32 %call112}113 114declare dso_preemptable i32 @external_preemptable_function(i32 %i)115define dso_local i32 @external_preemptable_function_caller(i32 %i) {116; CHECK-LABEL: external_preemptable_function_caller:117; CHECK: bl external_preemptable_function118; CHECK-NEXT: nop119 %call = notail call signext i32 @external_preemptable_function(i32 signext %i)120 ret i32 %call121}122