xref: /llvm-project/llvm/test/CodeGen/PowerPC/aix-alias.ll (revision 4b1254e7d4c30c7e15669e8879f405814c1790ee)
1; TODO: Add object generation test when visibility for object generation
2;       is implemented.
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, ptr @var
13@var2 = alias i32, ptr @var1
14@var_l = linkonce_odr alias i32, ptr @var
15@var_i = internal alias i32, ptr @var
16@var_h = hidden alias i32, ptr @var
17@var_p = protected alias i32, ptr @var
18
19@array = global [2 x i32] [i32 1, i32 2], align 4
20@x = global ptr getelementptr (i8, ptr @array, i64 4), align 4
21@bitcast_alias = alias ptr, ptr @x
22
23define i32 @fun() {
24  ret i32 0
25}
26
27%FunTy = type i32()
28@fun_weak = weak alias %FunTy, ptr @fun
29@fun_hidden = hidden alias %FunTy, ptr @fun
30@fun_ptr = global ptr @fun_weak
31
32define i32 @test() {
33entry:
34   %tmp = load i32, ptr @var1
35   %tmp1 = load i32, ptr @var2
36   %tmp0 = load i32, ptr @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 ptr
44   store ptr @fun_weak, ptr %fun_ptr1
45   %tmp8 = call i32 %fun_ptr1()
46   %tmp9 = call i32 @fun_hidden()
47   %tmp10 = add i32 %tmp7, %tmp8
48   %tmp11 = add i32 %tmp10, %tmp9
49   ret i32 %tmp11
50}
51
52; ASM:         .globl  fun[DS]
53; ASM-NEXT:    .globl  .fun
54; ASM-NEXT:    .align  4
55; ASM-NEXT:    .csect fun[DS]
56; ASM-NEXT:  fun_weak:                               # @fun
57; ASM-NEXT:  fun_hidden:
58; ASM:         .csect ..text..[PR],5
59; ASM-NEXT:  .fun:
60; ASM-NEXT:  .fun_weak:
61; ASM-NEXT:  .fun_hidden:
62; ASM-NEXT:  # %bb.0:
63; ASM-NEXT:    li 3, 0
64; ASM-NEXT:    blr
65; ASM-NEXT:                                          # -- End function
66; ASM:       .csect ..text..[PR],5
67; ASM-NEXT:  .test:
68; ASM-NEXT:  # %bb.0:                                # %entry
69; ASM:         bl .fun
70; ASM-NEXT:    nop
71; ASM:         bl .fun_weak
72; ASM-NEXT:    nop
73; ASM:         bl .fun_hidden
74; ASM:                                               # -- End function
75; ASM-NEXT:    .csect .data[RW]
76; ASM-NEXT:    .globl  var
77; ASM-NEXT:    .globl  var1
78; ASM-NEXT:    .globl  var2
79; ASM-NEXT:    .weak   var_l
80; ASM-NEXT:    .lglobl var_i
81; ASM-NEXT:    .globl  var_h,hidden
82; ASM-NEXT:    .globl  var_p,protected
83; ASM:       var:
84; ASM-NEXT:  var1:
85; ASM-NEXT:  var2:
86; ASM-NEXT:  var_l:
87; ASM-NEXT:  var_i:
88; ASM-NEXT:  var_h:
89; ASM-NEXT:  var_p:
90; ASM-NEXT:    .vbyte  4, 42
91; ASM-NEXT:    .globl array
92; ASM:       array:
93; ASM-NEXT:    .vbyte 4, 1 # 0x1
94; ASM-NEXT:    .vbyte 4, 2 # 0x2
95; ASM-NEXT:    .globl x
96; ASM-NEXT:    .globl  bitcast_alias
97; ASM:       x:
98; ASM-NEXT:  bitcast_alias:
99; ASM-NEXT:    .vbyte  {{[0-9]+}}, array+4
100; ASM-NEXT:    .globl  fun_ptr
101; ASM:       fun_ptr:
102; ASM-NEXT:    .vbyte  {{[0-9]+}}, fun_weak
103; ASM-NEXT:    .weak fun_weak
104; ASM-NEXT:    .weak .fun_weak
105; ASM-NEXT:    .globl  fun_hidden,hidden
106; ASM-NEXT:    .globl  .fun_hidden,hidden
107; ASM-NEXT:    .toc
108; ASM-NEXT:  L..C0:
109; ASM-NEXT:    .tc var1[TC],var1
110; ASM-NEXT:  L..C1:
111; ASM-NEXT:    .tc var2[TC],var2
112; ASM-NEXT:  L..C2:
113; ASM-NEXT:    .tc var_i[TC],var_i
114; ASM-NEXT:  L..C3:
115; ASM-NEXT:    .tc fun_weak[TC],fun_weak
116