1; TODO: Add object generation test when visibility for object generation 2; is implemnted. 3 4; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ 5; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | \ 6; RUN: FileCheck --check-prefix=ASM %s 7; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ 8; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | \ 9; RUN: FileCheck --check-prefix=ASM %s 10 11@var = global i32 42 12@var1 = alias i32, i32* @var 13@var2 = alias i32, i32* @var1 14@var_l = linkonce_odr alias i32, i32* @var 15@var_i = internal alias i32, i32* @var 16@var_h = hidden alias i32, i32* @var 17@var_p = protected alias i32, i32* @var 18 19@array = global [2 x i32] [i32 1, i32 2], align 4 20@x = global i32* bitcast (i8* getelementptr (i8, i8* bitcast ([2 x i32]* @array to i8*), i64 4) to i32*), align 4 21@bitcast_alias = alias i32*, i32** @x 22 23define i32 @fun() { 24 ret i32 0 25} 26 27%FunTy = type i32() 28@fun_weak = weak alias %FunTy, %FunTy* @fun 29@fun_hidden = hidden alias %FunTy, %FunTy* @fun 30@fun_ptr = global i32()* @fun_weak 31 32define i32 @test() { 33entry: 34 %tmp = load i32, i32* @var1 35 %tmp1 = load i32, i32* @var2 36 %tmp0 = load i32, i32* @var_i 37 %tmp2 = call i32 @fun() 38 %tmp3 = add i32 %tmp, %tmp2 39 %tmp4 = call i32 @fun_weak() 40 %tmp5 = add i32 %tmp3, %tmp4 41 %tmp6 = add i32 %tmp1, %tmp5 42 %tmp7 = add i32 %tmp6, %tmp0 43 %fun_ptr1 = alloca i32 ()* 44 store i32 ()* @fun_weak, i32 ()** %fun_ptr1 45 %callee.knr.cast = bitcast i32 ()** %fun_ptr1 to i32 ()* 46 %tmp8 = call i32 %callee.knr.cast() 47 %tmp9 = call i32 @fun_hidden() 48 %tmp10 = add i32 %tmp7, %tmp8 49 %tmp11 = add i32 %tmp10, %tmp9 50 ret i32 %tmp11 51} 52 53; ASM: .globl fun[DS] 54; ASM-NEXT: .globl .fun 55; ASM-NEXT: .align 4 56; ASM-NEXT: .csect fun[DS] 57; ASM-NEXT: fun_weak: # @fun 58; ASM-NEXT: fun_hidden: 59; ASM: .csect .text[PR],5 60; ASM-NEXT: .fun: 61; ASM-NEXT: .fun_weak: 62; ASM-NEXT: .fun_hidden: 63; ASM-NEXT: # %bb.0: 64; ASM-NEXT: li 3, 0 65; ASM-NEXT: blr 66; ASM-NEXT: # -- End function 67; ASM: .csect .text[PR],5 68; ASM-NEXT: .test: 69; ASM-NEXT: # %bb.0: # %entry 70; ASM: bl .fun 71; ASM-NEXT: nop 72; ASM: bl .fun_weak 73; ASM-NEXT: nop 74; ASM: bl .fun_hidden 75; ASM: # -- End function 76; ASM-NEXT: .csect .data[RW] 77; ASM-NEXT: .globl var 78; ASM-NEXT: .globl var1 79; ASM-NEXT: .globl var2 80; ASM-NEXT: .weak var_l 81; ASM-NEXT: .lglobl var_i 82; ASM-NEXT: .globl var_h,hidden 83; ASM-NEXT: .globl var_p,protected 84; ASM: var: 85; ASM-NEXT: var1: 86; ASM-NEXT: var2: 87; ASM-NEXT: var_l: 88; ASM-NEXT: var_i: 89; ASM-NEXT: var_h: 90; ASM-NEXT: var_p: 91; ASM-NEXT: .vbyte 4, 42 92; ASM-NEXT: .globl array 93; ASM: array: 94; ASM-NEXT: .vbyte 4, 1 # 0x1 95; ASM-NEXT: .vbyte 4, 2 # 0x2 96; ASM-NEXT: .globl x 97; ASM-NEXT: .globl bitcast_alias 98; ASM: x: 99; ASM-NEXT: bitcast_alias: 100; ASM-NEXT: .vbyte {{[0-9]+}}, array+4 101; ASM-NEXT: .globl fun_ptr 102; ASM: fun_ptr: 103; ASM-NEXT: .vbyte {{[0-9]+}}, fun_weak 104; ASM-NEXT: .weak fun_weak 105; ASM-NEXT: .weak .fun_weak 106; ASM-NEXT: .globl fun_hidden,hidden 107; ASM-NEXT: .globl .fun_hidden,hidden 108; ASM-NEXT: .toc 109; ASM-NEXT: L..C0: 110; ASM-NEXT: .tc var1[TC],var1 111; ASM-NEXT: L..C1: 112; ASM-NEXT: .tc var2[TC],var2 113; ASM-NEXT: L..C2: 114; ASM-NEXT: .tc var_i[TC],var_i 115; ASM-NEXT: L..C3: 116; ASM-NEXT: .tc fun_weak[TC],fun_weak 117