1; RUN: llc -mcpu=pwr7 < %s | FileCheck %s 2target datalayout = "E-m:e-i64:64-n32:64" 3target 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 12define void @foo() #0 { 13entry: 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 31define void @bar() #0 { 32entry: 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 50define void @ext() #0 { 51entry: 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 68attributes #0 = { nounwind } 69 70