Summary: This patch does the following: 1. Make InitTargetOptionsFromCodeGenFlags() accepts Triple as a parameter, because some options' default value is triple dependant. 2. DataSections is turned on by default on AIX for llc. 3. Test cases change accordingly because of the default behaviour change. 4. Clang Driver passes in -fdata-sections by default on AIX. Reviewed By: MaskRay, DiggerLin Differential Revision: https://reviews.llvm.org/D88737
117 lines
3.5 KiB
LLVM
117 lines
3.5 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 < %s | \
|
|
; RUN: FileCheck --check-prefix=ASM %s
|
|
; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \
|
|
; RUN: -mattr=-altivec -data-sections=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
|