xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/ppc64-i128-abi.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s -check-prefix=CHECK-LE
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s -check-prefix=CHECK-BE
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s -check-prefix=CHECK-NOVSX
4*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s -check-prefix=CHECK-NOVSX
5*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s -check-prefix=CHECK-BE-NOVSX
6*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s -check-prefix=CHECK-LE-NOVSX
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker@x = common global <1 x i128> zeroinitializer, align 16
9*9880d681SAndroid Build Coastguard Worker@y = common global <1 x i128> zeroinitializer, align 16
10*9880d681SAndroid Build Coastguard Worker@a = common global i128 zeroinitializer, align 16
11*9880d681SAndroid Build Coastguard Worker@b = common global i128 zeroinitializer, align 16
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; VSX:
14*9880d681SAndroid Build Coastguard Worker;   %a is passed in register 34
15*9880d681SAndroid Build Coastguard Worker;   The value of 1 is stored in the TOC.
16*9880d681SAndroid Build Coastguard Worker;   On LE, ensure the value of 1 is swapped before being used (using xxswapd).
17*9880d681SAndroid Build Coastguard Worker; VMX (no VSX):
18*9880d681SAndroid Build Coastguard Worker;   %a is passed in register 2
19*9880d681SAndroid Build Coastguard Worker;   The value of 1 is stored in the TOC.
20*9880d681SAndroid Build Coastguard Worker;   No swaps are necessary when using P8 Vector instructions on LE
21*9880d681SAndroid Build Coastguard Workerdefine <1 x i128> @v1i128_increment_by_one(<1 x i128> %a) nounwind {
22*9880d681SAndroid Build Coastguard Worker       %tmp = add <1 x i128> %a, <i128 1>
23*9880d681SAndroid Build Coastguard Worker       ret <1 x i128> %tmp
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker; FIXME: Seems a 128-bit literal is materialized by loading from the TOC. There
26*9880d681SAndroid Build Coastguard Worker;        should be a better way of doing this.
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @v1i128_increment_by_one
29*9880d681SAndroid Build Coastguard Worker; CHECK-LE: lxvd2x [[VAL:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
30*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd 35, [[VAL]]
31*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vadduqm 2, 2, 3
32*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: @v1i128_increment_by_one
35*9880d681SAndroid Build Coastguard Worker; CHECK-BE: lxvd2x 35, {{[0-9]+}}, {{[0-9]+}}
36*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOT: xxswapd
37*9880d681SAndroid Build Coastguard Worker; CHECK-BE: vadduqm 2, 2, 3
38*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOT: xxswapd 34, {{[0-9]+}}
39*9880d681SAndroid Build Coastguard Worker; CHECK-BE: blr
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-LABEL: @v1i128_increment_by_one
42*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-NOT: xxswapd {{[0-9]+}}, {{[0-9]+}}
43*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-NOT: stxvd2x {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
44*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: lvx [[VAL:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
45*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-NOT: lxvd2x {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
46*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-NOT: xxswapd {{[0-9]+}}, {{[0-9]+}}
47*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: vadduqm 2, 2, [[VAL]]
48*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: blr
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker; VSX:
52*9880d681SAndroid Build Coastguard Worker;   %a is passed in register 34
53*9880d681SAndroid Build Coastguard Worker;   %b is passed in register 35
54*9880d681SAndroid Build Coastguard Worker;   No swaps are necessary when using P8 Vector instructions on LE
55*9880d681SAndroid Build Coastguard Worker; VMX (no VSX):
56*9880d681SAndroid Build Coastguard Worker;   %a is passewd in register 2
57*9880d681SAndroid Build Coastguard Worker;   %b is passed in register 3
58*9880d681SAndroid Build Coastguard Worker;   On LE, do not need to swap contents of 2 and 3 because the lvx/stvx
59*9880d681SAndroid Build Coastguard Worker;   instructions no not swap elements
60*9880d681SAndroid Build Coastguard Workerdefine <1 x i128> @v1i128_increment_by_val(<1 x i128> %a, <1 x i128> %b) nounwind {
61*9880d681SAndroid Build Coastguard Worker       %tmp = add <1 x i128> %a, %b
62*9880d681SAndroid Build Coastguard Worker       ret <1 x i128> %tmp
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @v1i128_increment_by_val
65*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NOT: xxswapd
66*9880d681SAndroid Build Coastguard Worker; CHECK-LE: adduqm 2, 2, 3
67*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: @v1i128_increment_by_val
70*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOT: xxswapd {{[0-9]+}}, 34
71*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOT: xxswapd {{[0-9]+}}, 35
72*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOT: xxswapd 34, [[RESULT]]
73*9880d681SAndroid Build Coastguard Worker; CHECK-BE: adduqm 2, 2, 3
74*9880d681SAndroid Build Coastguard Worker; CHECK-BE: blr
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-LABEL: @v1i128_increment_by_val
77*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-NOT: xxswapd 34, [[RESULT]]
78*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: adduqm 2, 2, 3
79*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: blr
80*9880d681SAndroid Build Coastguard Worker}
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Worker; Little Endian (VSX and VMX):
83*9880d681SAndroid Build Coastguard Worker;   Lower 64-bits of %a are passed in register 3
84*9880d681SAndroid Build Coastguard Worker;   Upper 64-bits of %a are passed in register 4
85*9880d681SAndroid Build Coastguard Worker;   Increment lower 64-bits using addic (immediate value of 1)
86*9880d681SAndroid Build Coastguard Worker;   Increment upper 64-bits using add zero extended
87*9880d681SAndroid Build Coastguard Worker;   Results are placed in registers 3 and 4
88*9880d681SAndroid Build Coastguard Worker; Big Endian (VSX and VMX)
89*9880d681SAndroid Build Coastguard Worker;   Lower 64-bits of %a are passed in register 4
90*9880d681SAndroid Build Coastguard Worker;   Upper 64-bits of %a are passed in register 3
91*9880d681SAndroid Build Coastguard Worker;   Increment lower 64-bits using addic (immediate value of 1)
92*9880d681SAndroid Build Coastguard Worker;   Increment upper 64-bits using add zero extended
93*9880d681SAndroid Build Coastguard Worker;   Results are placed in registers 3 and 4
94*9880d681SAndroid Build Coastguard Workerdefine i128 @i128_increment_by_one(i128 %a) nounwind {
95*9880d681SAndroid Build Coastguard Worker       %tmp =  add i128 %a,  1
96*9880d681SAndroid Build Coastguard Worker       ret i128 %tmp
97*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @i128_increment_by_one
98*9880d681SAndroid Build Coastguard Worker; CHECK-LE: addic 3, 3, 1
99*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: addze 4, 4
100*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: @i128_increment_by_one
103*9880d681SAndroid Build Coastguard Worker; CHECK-BE: addic 4, 4, 1
104*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: addze 3, 3
105*9880d681SAndroid Build Coastguard Worker; CHECK-BE: blr
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NOVSX-LABEL: @i128_increment_by_one
108*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NOVSX: addic 3, 3, 1
109*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NOVSX-NEXT: addze 4, 4
110*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NOVSX: blr
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOVSX-LABEL: @i128_increment_by_one
113*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOVSX: addic 4, 4, 1
114*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOVSX-NEXT: addze 3, 3
115*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOVSX: blr
116*9880d681SAndroid Build Coastguard Worker}
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Worker; Little Endian (VSX and VMX):
119*9880d681SAndroid Build Coastguard Worker;   Lower 64-bits of %a are passed in register 3
120*9880d681SAndroid Build Coastguard Worker;   Upper 64-bits of %a are passed in register 4
121*9880d681SAndroid Build Coastguard Worker;   Lower 64-bits of %b are passed in register 5
122*9880d681SAndroid Build Coastguard Worker;   Upper 64-bits of %b are passed in register 6
123*9880d681SAndroid Build Coastguard Worker;   Add the lower 64-bits using addc on registers 3 and 5
124*9880d681SAndroid Build Coastguard Worker;   Add the upper 64-bits using adde on registers 4 and 6
125*9880d681SAndroid Build Coastguard Worker;   Registers 3 and 4 should hold the result
126*9880d681SAndroid Build Coastguard Worker; Big Endian (VSX and VMX):
127*9880d681SAndroid Build Coastguard Worker;   Upper 64-bits of %a are passed in register 3
128*9880d681SAndroid Build Coastguard Worker;   Lower 64-bits of %a are passed in register 4
129*9880d681SAndroid Build Coastguard Worker;   Upper 64-bits of %b are passed in register 5
130*9880d681SAndroid Build Coastguard Worker;   Lower 64-bits of %b are passed in register 6
131*9880d681SAndroid Build Coastguard Worker;   Add the lower 64-bits using addc on registers 4 and 6
132*9880d681SAndroid Build Coastguard Worker;   Add the upper 64-bits using adde on registers 3 and 5
133*9880d681SAndroid Build Coastguard Worker;   Registers 3 and 4 should hold the result
134*9880d681SAndroid Build Coastguard Workerdefine i128 @i128_increment_by_val(i128 %a, i128 %b) nounwind {
135*9880d681SAndroid Build Coastguard Worker       %tmp =  add i128 %a, %b
136*9880d681SAndroid Build Coastguard Worker       ret i128 %tmp
137*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @i128_increment_by_val
138*9880d681SAndroid Build Coastguard Worker; CHECK-LE: addc 3, 3, 5
139*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: adde 4, 4, 6
140*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: @i128_increment_by_val
143*9880d681SAndroid Build Coastguard Worker; CHECK-BE: addc 4, 4, 6
144*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: adde 3, 3, 5
145*9880d681SAndroid Build Coastguard Worker; CHECK-BE: blr
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NOVSX-LABEL: @i128_increment_by_val
148*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NOVSX: addc 3, 3, 5
149*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NOVSX-NEXT: adde 4, 4, 6
150*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NOVSX: blr
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOVSX-LABEL: @i128_increment_by_val
153*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOVSX: addc 4, 4, 6
154*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOVSX-NEXT: adde 3, 3, 5
155*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOVSX: blr
156*9880d681SAndroid Build Coastguard Worker}
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Worker; Callsites for the routines defined above.
160*9880d681SAndroid Build Coastguard Worker; Ensure the parameters are loaded in the same order that is expected by the
161*9880d681SAndroid Build Coastguard Worker; callee. See comments for individual functions above for details on registers
162*9880d681SAndroid Build Coastguard Worker; used for parameters.
163*9880d681SAndroid Build Coastguard Workerdefine <1 x i128> @call_v1i128_increment_by_one() nounwind {
164*9880d681SAndroid Build Coastguard Worker       %tmp = load <1 x i128>, <1 x i128>* @x, align 16
165*9880d681SAndroid Build Coastguard Worker       %ret = call <1 x i128> @v1i128_increment_by_one(<1 x i128> %tmp)
166*9880d681SAndroid Build Coastguard Worker       ret <1 x i128> %ret
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @call_v1i128_increment_by_one
169*9880d681SAndroid Build Coastguard Worker; CHECK-LE: lxvd2x [[PARAM:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
170*9880d681SAndroid Build Coastguard Worker; CHECK-LE: xxswapd 34, [[PARAM]]
171*9880d681SAndroid Build Coastguard Worker; CHECK-LE: bl v1i128_increment_by_one
172*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: @call_v1i128_increment_by_one
175*9880d681SAndroid Build Coastguard Worker; CHECK-BE: lxvw4x 34, {{[0-9]+}}, {{[0-9]+}}
176*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOT: xxswapd 34, {{[0-9]+}}
177*9880d681SAndroid Build Coastguard Worker; CHECK-BE: bl v1i128_increment_by_one
178*9880d681SAndroid Build Coastguard Worker; CHECK-BE: blr
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-LABEL: @call_v1i128_increment_by_one
181*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: lvx 2, {{[0-9]+}}, {{[0-9]+}}
182*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-NOT: xxswapd {{[0-9]+}}, {{[0-9]+}}
183*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: bl v1i128_increment_by_one
184*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: blr
185*9880d681SAndroid Build Coastguard Worker}
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Workerdefine <1 x i128> @call_v1i128_increment_by_val() nounwind {
188*9880d681SAndroid Build Coastguard Worker       %tmp = load <1 x i128>, <1 x i128>* @x, align 16
189*9880d681SAndroid Build Coastguard Worker       %tmp2 = load <1 x i128>, <1 x i128>* @y, align 16
190*9880d681SAndroid Build Coastguard Worker       %ret = call <1 x i128> @v1i128_increment_by_val(<1 x i128> %tmp, <1 x i128> %tmp2)
191*9880d681SAndroid Build Coastguard Worker       ret <1 x i128> %ret
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @call_v1i128_increment_by_val
194*9880d681SAndroid Build Coastguard Worker; CHECK-LE: lxvd2x [[PARAM1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
195*9880d681SAndroid Build Coastguard Worker; CHECK-LE: lxvd2x [[PARAM2:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
196*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: xxswapd 34, [[PARAM1]]
197*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: xxswapd 35, [[PARAM2]]
198*9880d681SAndroid Build Coastguard Worker; CHECK-LE: bl v1i128_increment_by_val
199*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: @call_v1i128_increment_by_val
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Worker; CHECK-BE-DAG: lxvw4x 35, {{[0-9]+}}, {{[0-9]+}}
205*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOT: xxswapd 34, {{[0-9]+}}
206*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NOT: xxswapd 35, {{[0-9]+}}
207*9880d681SAndroid Build Coastguard Worker; CHECK-BE: bl v1i128_increment_by_val
208*9880d681SAndroid Build Coastguard Worker; CHECK-BE: blr
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-LABEL: @call_v1i128_increment_by_val
211*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-DAG: lvx 2, {{[0-9]+}}, {{[0-9]+}}
212*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-DAG: lvx 3, {{[0-9]+}}, {{[0-9]+}}
213*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-NOT: xxswapd 34, {{[0-9]+}}
214*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-NOT: xxswapd 35, {{[0-9]+}}
215*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: bl v1i128_increment_by_val
216*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: blr
217*9880d681SAndroid Build Coastguard Worker
218*9880d681SAndroid Build Coastguard Worker}
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Workerdefine i128 @call_i128_increment_by_one() nounwind {
221*9880d681SAndroid Build Coastguard Worker       %tmp = load i128, i128* @a, align 16
222*9880d681SAndroid Build Coastguard Worker       %ret = call i128 @i128_increment_by_one(i128 %tmp)
223*9880d681SAndroid Build Coastguard Worker       ret i128 %ret
224*9880d681SAndroid Build Coastguard Worker;       %ret4 = call i128 @i128_increment_by_val(i128 %tmp2, i128 %tmp2)
225*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @call_i128_increment_by_one
226*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: ld 3, 0([[BASEREG:[0-9]+]])
227*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: ld 4, 8([[BASEREG]])
228*9880d681SAndroid Build Coastguard Worker; CHECK-LE: bl i128_increment_by_one
229*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: @call_i128_increment_by_one
232*9880d681SAndroid Build Coastguard Worker; CHECK-BE-DAG: ld 3, 0([[BASEREG:[0-9]+]])
233*9880d681SAndroid Build Coastguard Worker; CHECK-BE-DAG: ld 4, 8([[BASEREG]])
234*9880d681SAndroid Build Coastguard Worker; CHECK-BE: bl i128_increment_by_one
235*9880d681SAndroid Build Coastguard Worker; CHECK-BE: blr
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-LABEL: @call_i128_increment_by_one
238*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-DAG: ld 3, 0([[BASEREG:[0-9]+]])
239*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-DAG: ld 4, 8([[BASEREG]])
240*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: bl i128_increment_by_one
241*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: blr
242*9880d681SAndroid Build Coastguard Worker}
243*9880d681SAndroid Build Coastguard Worker
244*9880d681SAndroid Build Coastguard Workerdefine i128 @call_i128_increment_by_val() nounwind {
245*9880d681SAndroid Build Coastguard Worker       %tmp = load i128, i128* @a, align 16
246*9880d681SAndroid Build Coastguard Worker       %tmp2 = load i128, i128* @b, align 16
247*9880d681SAndroid Build Coastguard Worker       %ret = call i128 @i128_increment_by_val(i128 %tmp, i128 %tmp2)
248*9880d681SAndroid Build Coastguard Worker       ret i128 %ret
249*9880d681SAndroid Build Coastguard Worker; CHECK-LE-LABEL: @call_i128_increment_by_val
250*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: ld 3, 0([[P1BASEREG:[0-9]+]])
251*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: ld 4, 8([[P1BASEREG]])
252*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: ld 5, 0([[P2BASEREG:[0-9]+]])
253*9880d681SAndroid Build Coastguard Worker; CHECK-LE-DAG: ld 6, 8([[P2BASEREG]])
254*9880d681SAndroid Build Coastguard Worker; CHECK-LE: bl i128_increment_by_val
255*9880d681SAndroid Build Coastguard Worker; CHECK-LE: blr
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: @call_i128_increment_by_val
258*9880d681SAndroid Build Coastguard Worker; CHECK-BE-DAG: ld 3, 0([[P1BASEREG:[0-9]+]])
259*9880d681SAndroid Build Coastguard Worker; CHECK-BE-DAG: ld 4, 8([[P1BASEREG]])
260*9880d681SAndroid Build Coastguard Worker; CHECK-BE-DAG: ld 5, 0([[P2BASEREG:[0-9]+]])
261*9880d681SAndroid Build Coastguard Worker; CHECK-BE-DAG: ld 6, 8([[P2BASEREG]])
262*9880d681SAndroid Build Coastguard Worker; CHECK-BE: bl i128_increment_by_val
263*9880d681SAndroid Build Coastguard Worker; CHECK-BE: blr
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-LABEL: @call_i128_increment_by_val
266*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-DAG: ld 3, 0([[P1BASEREG:[0-9]+]])
267*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-DAG: ld 4, 8([[P1BASEREG]])
268*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-DAG: ld 5, 0([[P2BASEREG:[0-9]+]])
269*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX-DAG: ld 6, 8([[P2BASEREG]])
270*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: bl i128_increment_by_val
271*9880d681SAndroid Build Coastguard Worker; CHECK-NOVSX: blr
272*9880d681SAndroid Build Coastguard Worker}
273*9880d681SAndroid Build Coastguard Worker
274*9880d681SAndroid Build Coastguard Worker
275