1 ; RUN: llc -mcpu=pwr7 < %s | FileCheck %s 2 target datalayout = "E-m:e-i64:64-n32:64" 3 target triple = "powerpc64-unknown-linux-gnu" 4 5 %struct.cd = type { i64, i64, i64 } 6 7 @something = global [33 x i8] c"this is not really code, but...\0A\00", align 1 8 @tls_something = thread_local global %struct.cd zeroinitializer, align 8 9 @extern_something = external global %struct.cd 10 11 ; Function Attrs: nounwind 12 define void @foo() #0 { 13 entry: 14 tail call void bitcast ([33 x i8]* @something to void ()*)() #0 15 ret void 16 17 ; CHECK-LABEL: @foo 18 ; CHECK-DAG: addis [[REG1:[0-9]+]], 2, something@toc@ha 19 ; CHECK-DAG: std 2, 40(1) 20 ; CHECK-DAG: addi [[REG3:[0-9]+]], [[REG1]], something@toc@l 21 ; CHECK-DAG: ld [[REG2:[0-9]+]], 0([[REG3]]) 22 ; CHECK-DAG: ld 11, 16([[REG3]]) 23 ; CHECK-DAG: ld 2, 8([[REG3]]) 24 ; CHECK-DAG: mtctr [[REG2]] 25 ; CHECK: bctrl 26 ; CHECK: ld 2, 40(1) 27 ; CHECK: blr 28 } 29 30 ; Function Attrs: nounwind 31 define void @bar() #0 { 32 entry: 33 tail call void bitcast (%struct.cd* @tls_something to void ()*)() #0 34 ret void 35 36 ; CHECK-LABEL: @bar 37 ; CHECK-DAG: addis [[REG1:[0-9]+]], 13, tls_something@tprel@ha 38 ; CHECK-DAG: std 2, 40(1) 39 ; CHECK-DAG: addi [[REG3:[0-9]+]], [[REG1]], tls_something@tprel@l 40 ; CHECK-DAG: ld [[REG2:[0-9]+]], 0([[REG3]]) 41 ; CHECK-DAG: ld 11, 16([[REG3]]) 42 ; CHECK-DAG: ld 2, 8([[REG3]]) 43 ; CHECK-DAG: mtctr [[REG2]] 44 ; CHECK: bctrl 45 ; CHECK: ld 2, 40(1) 46 ; CHECK: blr 47 } 48 49 ; Function Attrs: nounwind 50 define void @ext() #0 { 51 entry: 52 tail call void bitcast (%struct.cd* @extern_something to void ()*)() #0 53 ret void 54 55 ; CHECK-LABEL: @ext 56 ; CHECK-DAG: addis [[REG1:[0-9]+]], 2, [[NAME:[._A-Za-z0-9]+]]@toc@ha 57 ; CHECK-DAG: std 2, 40(1) 58 ; CHECK-DAG: ld [[REG3:[0-9]+]], [[NAME]]@toc@l(3) 59 ; CHECK-DAG: ld [[REG2:[0-9]+]], 0([[REG3]]) 60 ; CHECK-DAG: ld 11, 16([[REG3]]) 61 ; CHECK-DAG: ld 2, 8([[REG3]]) 62 ; CHECK-DAG: mtctr [[REG2]] 63 ; CHECK: bctrl 64 ; CHECK: ld 2, 40(1) 65 ; CHECK: blr 66 } 67 68 attributes #0 = { nounwind } 69 70