117 lines
3.6 KiB
LLVM
117 lines
3.6 KiB
LLVM
; 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],2
|
|
; 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],2
|
|
; 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: 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: 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: .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-NEXT: .globl bitcast_alias
|
|
; 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
|