; TODO: Add object generation test when visibility for object generation ; is implemnted. ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ ; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | \ ; RUN: FileCheck --check-prefix=ASM %s ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ ; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | \ ; RUN: FileCheck --check-prefix=ASM %s @var = global i32 42 @var1 = alias i32, i32* @var @var2 = alias i32, i32* @var1 @var_l = linkonce_odr alias i32, i32* @var @var_i = internal alias i32, i32* @var @var_h = hidden alias i32, i32* @var @var_p = protected alias i32, i32* @var @array = global [2 x i32] [i32 1, i32 2], align 4 @x = global i32* bitcast (i8* getelementptr (i8, i8* bitcast ([2 x i32]* @array to i8*), i64 4) to i32*), align 4 @bitcast_alias = alias i32*, i32** @x define i32 @fun() { ret i32 0 } %FunTy = type i32() @fun_weak = weak alias %FunTy, %FunTy* @fun @fun_hidden = hidden alias %FunTy, %FunTy* @fun @fun_ptr = global i32()* @fun_weak define i32 @test() { entry: %tmp = load i32, i32* @var1 %tmp1 = load i32, i32* @var2 %tmp0 = load i32, i32* @var_i %tmp2 = call i32 @fun() %tmp3 = add i32 %tmp, %tmp2 %tmp4 = call i32 @fun_weak() %tmp5 = add i32 %tmp3, %tmp4 %tmp6 = add i32 %tmp1, %tmp5 %tmp7 = add i32 %tmp6, %tmp0 %fun_ptr1 = alloca i32 ()* store i32 ()* @fun_weak, i32 ()** %fun_ptr1 %callee.knr.cast = bitcast i32 ()** %fun_ptr1 to i32 ()* %tmp8 = call i32 %callee.knr.cast() %tmp9 = call i32 @fun_hidden() %tmp10 = add i32 %tmp7, %tmp8 %tmp11 = add i32 %tmp10, %tmp9 ret i32 %tmp11 } ; ASM: .globl fun[DS] ; ASM-NEXT: .globl .fun ; ASM-NEXT: .align 4 ; ASM-NEXT: .csect fun[DS] ; ASM-NEXT: fun_weak: # @fun ; ASM-NEXT: fun_hidden: ; ASM: .csect .text[PR],5 ; ASM-NEXT: .fun: ; ASM-NEXT: .fun_weak: ; ASM-NEXT: .fun_hidden: ; ASM-NEXT: # %bb.0: ; ASM-NEXT: li 3, 0 ; ASM-NEXT: blr ; ASM-NEXT: # -- End function ; ASM: .csect .text[PR],5 ; ASM-NEXT: .test: ; ASM-NEXT: # %bb.0: # %entry ; ASM: bl .fun ; ASM-NEXT: nop ; ASM: bl .fun_weak ; ASM-NEXT: nop ; ASM: bl .fun_hidden ; ASM: # -- End function ; ASM-NEXT: .csect .data[RW] ; ASM-NEXT: .globl var ; ASM-NEXT: .globl var1 ; ASM-NEXT: .globl var2 ; ASM-NEXT: .weak var_l ; ASM-NEXT: .lglobl var_i ; ASM-NEXT: .globl var_h,hidden ; ASM-NEXT: .globl var_p,protected ; ASM: var: ; ASM-NEXT: var1: ; ASM-NEXT: var2: ; ASM-NEXT: var_l: ; ASM-NEXT: var_i: ; ASM-NEXT: var_h: ; ASM-NEXT: var_p: ; ASM-NEXT: .vbyte 4, 42 ; ASM-NEXT: .globl array ; ASM: array: ; ASM-NEXT: .vbyte 4, 1 # 0x1 ; ASM-NEXT: .vbyte 4, 2 # 0x2 ; ASM-NEXT: .globl x ; ASM-NEXT: .globl bitcast_alias ; ASM: x: ; ASM-NEXT: bitcast_alias: ; ASM-NEXT: .vbyte {{[0-9]+}}, array+4 ; ASM-NEXT: .globl fun_ptr ; ASM: fun_ptr: ; ASM-NEXT: .vbyte {{[0-9]+}}, fun_weak ; ASM-NEXT: .weak fun_weak ; ASM-NEXT: .weak .fun_weak ; ASM-NEXT: .globl fun_hidden,hidden ; ASM-NEXT: .globl .fun_hidden,hidden ; ASM-NEXT: .toc ; ASM-NEXT: L..C0: ; ASM-NEXT: .tc var1[TC],var1 ; ASM-NEXT: L..C1: ; ASM-NEXT: .tc var2[TC],var2 ; ASM-NEXT: L..C2: ; ASM-NEXT: .tc var_i[TC],var_i ; ASM-NEXT: L..C3: ; ASM-NEXT: .tc fun_weak[TC],fun_weak