xref: /llvm-project/llvm/test/CodeGen/PowerPC/fp-strict-conv-f128.ll (revision b922a3621116b404d868af8b74cab25ab78555be)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
3; RUN:   < %s -mtriple=powerpc64-unknown-linux -mcpu=pwr8 | FileCheck %s\
4; RUN:   -check-prefix=P8
5; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
6; RUN:   < %s -mtriple=powerpc64le-unknown-linux -mcpu=pwr9 | FileCheck %s \
7; RUN:   -check-prefix=P9
8; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
9; RUN:   < %s -mtriple=powerpc64le-unknown-linux -mcpu=pwr8 -mattr=-vsx \
10; RUN:   | FileCheck %s -check-prefix=NOVSX
11
12declare i1 @llvm.experimental.constrained.fptosi.i1.f128(fp128, metadata)
13declare i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128, metadata)
14declare i64 @llvm.experimental.constrained.fptosi.i64.f128(fp128, metadata)
15declare i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128, metadata)
16declare i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128, metadata)
17declare i1 @llvm.experimental.constrained.fptoui.i1.f128(fp128, metadata)
18
19declare i1 @llvm.experimental.constrained.fptosi.i1.ppcf128(ppc_fp128, metadata)
20declare i32 @llvm.experimental.constrained.fptosi.i32.ppcf128(ppc_fp128, metadata)
21declare i64 @llvm.experimental.constrained.fptosi.i64.ppcf128(ppc_fp128, metadata)
22declare i64 @llvm.experimental.constrained.fptoui.i64.ppcf128(ppc_fp128, metadata)
23declare i32 @llvm.experimental.constrained.fptoui.i32.ppcf128(ppc_fp128, metadata)
24declare i1 @llvm.experimental.constrained.fptoui.i1.ppcf128(ppc_fp128, metadata)
25
26declare i128 @llvm.experimental.constrained.fptosi.i128.ppcf128(ppc_fp128, metadata)
27declare i128 @llvm.experimental.constrained.fptoui.i128.ppcf128(ppc_fp128, metadata)
28declare i128 @llvm.experimental.constrained.fptosi.i128.f128(fp128, metadata)
29declare i128 @llvm.experimental.constrained.fptoui.i128.f128(fp128, metadata)
30
31declare fp128 @llvm.experimental.constrained.sitofp.f128.i1(i1, metadata, metadata)
32declare fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32, metadata, metadata)
33declare fp128 @llvm.experimental.constrained.sitofp.f128.i64(i64, metadata, metadata)
34declare fp128 @llvm.experimental.constrained.uitofp.f128.i1(i1, metadata, metadata)
35declare fp128 @llvm.experimental.constrained.uitofp.f128.i32(i32, metadata, metadata)
36declare fp128 @llvm.experimental.constrained.uitofp.f128.i64(i64, metadata, metadata)
37
38declare ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i1(i1, metadata, metadata)
39declare ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i32(i32, metadata, metadata)
40declare ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i64(i64, metadata, metadata)
41declare ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i1(i1, metadata, metadata)
42declare ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i32(i32, metadata, metadata)
43declare ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i64(i64, metadata, metadata)
44
45define i128 @q_to_i128(fp128 %m) #0 {
46; P8-LABEL: q_to_i128:
47; P8:       # %bb.0: # %entry
48; P8-NEXT:    mflr r0
49; P8-NEXT:    stdu r1, -112(r1)
50; P8-NEXT:    std r0, 128(r1)
51; P8-NEXT:    .cfi_def_cfa_offset 112
52; P8-NEXT:    .cfi_offset lr, 16
53; P8-NEXT:    bl __fixkfti
54; P8-NEXT:    nop
55; P8-NEXT:    addi r1, r1, 112
56; P8-NEXT:    ld r0, 16(r1)
57; P8-NEXT:    mtlr r0
58; P8-NEXT:    blr
59;
60; P9-LABEL: q_to_i128:
61; P9:       # %bb.0: # %entry
62; P9-NEXT:    mflr r0
63; P9-NEXT:    stdu r1, -32(r1)
64; P9-NEXT:    std r0, 48(r1)
65; P9-NEXT:    .cfi_def_cfa_offset 32
66; P9-NEXT:    .cfi_offset lr, 16
67; P9-NEXT:    bl __fixkfti
68; P9-NEXT:    nop
69; P9-NEXT:    addi r1, r1, 32
70; P9-NEXT:    ld r0, 16(r1)
71; P9-NEXT:    mtlr r0
72; P9-NEXT:    blr
73;
74; NOVSX-LABEL: q_to_i128:
75; NOVSX:       # %bb.0: # %entry
76; NOVSX-NEXT:    mflr r0
77; NOVSX-NEXT:    stdu r1, -32(r1)
78; NOVSX-NEXT:    std r0, 48(r1)
79; NOVSX-NEXT:    .cfi_def_cfa_offset 32
80; NOVSX-NEXT:    .cfi_offset lr, 16
81; NOVSX-NEXT:    bl __fixkfti
82; NOVSX-NEXT:    nop
83; NOVSX-NEXT:    addi r1, r1, 32
84; NOVSX-NEXT:    ld r0, 16(r1)
85; NOVSX-NEXT:    mtlr r0
86; NOVSX-NEXT:    blr
87entry:
88  %conv = tail call i128 @llvm.experimental.constrained.fptosi.i128.f128(fp128 %m, metadata !"fpexcept.strict") #0
89  ret i128 %conv
90}
91
92define i128 @q_to_u128(fp128 %m) #0 {
93; P8-LABEL: q_to_u128:
94; P8:       # %bb.0: # %entry
95; P8-NEXT:    mflr r0
96; P8-NEXT:    stdu r1, -112(r1)
97; P8-NEXT:    std r0, 128(r1)
98; P8-NEXT:    .cfi_def_cfa_offset 112
99; P8-NEXT:    .cfi_offset lr, 16
100; P8-NEXT:    bl __fixunskfti
101; P8-NEXT:    nop
102; P8-NEXT:    addi r1, r1, 112
103; P8-NEXT:    ld r0, 16(r1)
104; P8-NEXT:    mtlr r0
105; P8-NEXT:    blr
106;
107; P9-LABEL: q_to_u128:
108; P9:       # %bb.0: # %entry
109; P9-NEXT:    mflr r0
110; P9-NEXT:    stdu r1, -32(r1)
111; P9-NEXT:    std r0, 48(r1)
112; P9-NEXT:    .cfi_def_cfa_offset 32
113; P9-NEXT:    .cfi_offset lr, 16
114; P9-NEXT:    bl __fixunskfti
115; P9-NEXT:    nop
116; P9-NEXT:    addi r1, r1, 32
117; P9-NEXT:    ld r0, 16(r1)
118; P9-NEXT:    mtlr r0
119; P9-NEXT:    blr
120;
121; NOVSX-LABEL: q_to_u128:
122; NOVSX:       # %bb.0: # %entry
123; NOVSX-NEXT:    mflr r0
124; NOVSX-NEXT:    stdu r1, -32(r1)
125; NOVSX-NEXT:    std r0, 48(r1)
126; NOVSX-NEXT:    .cfi_def_cfa_offset 32
127; NOVSX-NEXT:    .cfi_offset lr, 16
128; NOVSX-NEXT:    bl __fixunskfti
129; NOVSX-NEXT:    nop
130; NOVSX-NEXT:    addi r1, r1, 32
131; NOVSX-NEXT:    ld r0, 16(r1)
132; NOVSX-NEXT:    mtlr r0
133; NOVSX-NEXT:    blr
134entry:
135  %conv = tail call i128 @llvm.experimental.constrained.fptoui.i128.f128(fp128 %m, metadata !"fpexcept.strict") #0
136  ret i128 %conv
137}
138
139define i1 @q_to_s1(fp128 %m) #0 {
140; P8-LABEL: q_to_s1:
141; P8:       # %bb.0: # %entry
142; P8-NEXT:    mflr r0
143; P8-NEXT:    stdu r1, -112(r1)
144; P8-NEXT:    std r0, 128(r1)
145; P8-NEXT:    .cfi_def_cfa_offset 112
146; P8-NEXT:    .cfi_offset lr, 16
147; P8-NEXT:    bl __fixkfsi
148; P8-NEXT:    nop
149; P8-NEXT:    addi r1, r1, 112
150; P8-NEXT:    ld r0, 16(r1)
151; P8-NEXT:    mtlr r0
152; P8-NEXT:    blr
153;
154; P9-LABEL: q_to_s1:
155; P9:       # %bb.0: # %entry
156; P9-NEXT:    xscvqpswz v2, v2
157; P9-NEXT:    mfvsrwz r3, v2
158; P9-NEXT:    blr
159;
160; NOVSX-LABEL: q_to_s1:
161; NOVSX:       # %bb.0: # %entry
162; NOVSX-NEXT:    mflr r0
163; NOVSX-NEXT:    stdu r1, -32(r1)
164; NOVSX-NEXT:    std r0, 48(r1)
165; NOVSX-NEXT:    .cfi_def_cfa_offset 32
166; NOVSX-NEXT:    .cfi_offset lr, 16
167; NOVSX-NEXT:    bl __fixkfsi
168; NOVSX-NEXT:    nop
169; NOVSX-NEXT:    addi r1, r1, 32
170; NOVSX-NEXT:    ld r0, 16(r1)
171; NOVSX-NEXT:    mtlr r0
172; NOVSX-NEXT:    blr
173entry:
174  %conv = tail call i1 @llvm.experimental.constrained.fptosi.i1.f128(fp128 %m, metadata !"fpexcept.strict") #0
175  ret i1 %conv
176}
177
178define i1 @q_to_u1(fp128 %m) #0 {
179; P8-LABEL: q_to_u1:
180; P8:       # %bb.0: # %entry
181; P8-NEXT:    mflr r0
182; P8-NEXT:    stdu r1, -112(r1)
183; P8-NEXT:    std r0, 128(r1)
184; P8-NEXT:    .cfi_def_cfa_offset 112
185; P8-NEXT:    .cfi_offset lr, 16
186; P8-NEXT:    bl __fixkfsi
187; P8-NEXT:    nop
188; P8-NEXT:    addi r1, r1, 112
189; P8-NEXT:    ld r0, 16(r1)
190; P8-NEXT:    mtlr r0
191; P8-NEXT:    blr
192;
193; P9-LABEL: q_to_u1:
194; P9:       # %bb.0: # %entry
195; P9-NEXT:    xscvqpswz v2, v2
196; P9-NEXT:    mfvsrwz r3, v2
197; P9-NEXT:    blr
198;
199; NOVSX-LABEL: q_to_u1:
200; NOVSX:       # %bb.0: # %entry
201; NOVSX-NEXT:    mflr r0
202; NOVSX-NEXT:    stdu r1, -32(r1)
203; NOVSX-NEXT:    std r0, 48(r1)
204; NOVSX-NEXT:    .cfi_def_cfa_offset 32
205; NOVSX-NEXT:    .cfi_offset lr, 16
206; NOVSX-NEXT:    bl __fixunskfsi
207; NOVSX-NEXT:    nop
208; NOVSX-NEXT:    addi r1, r1, 32
209; NOVSX-NEXT:    ld r0, 16(r1)
210; NOVSX-NEXT:    mtlr r0
211; NOVSX-NEXT:    blr
212entry:
213  %conv = tail call i1 @llvm.experimental.constrained.fptoui.i1.f128(fp128 %m, metadata !"fpexcept.strict") #0
214  ret i1 %conv
215}
216
217define i128 @ppcq_to_i128(ppc_fp128 %m) #0 {
218; P8-LABEL: ppcq_to_i128:
219; P8:       # %bb.0: # %entry
220; P8-NEXT:    mflr r0
221; P8-NEXT:    stdu r1, -112(r1)
222; P8-NEXT:    std r0, 128(r1)
223; P8-NEXT:    .cfi_def_cfa_offset 112
224; P8-NEXT:    .cfi_offset lr, 16
225; P8-NEXT:    bl __fixtfti
226; P8-NEXT:    nop
227; P8-NEXT:    addi r1, r1, 112
228; P8-NEXT:    ld r0, 16(r1)
229; P8-NEXT:    mtlr r0
230; P8-NEXT:    blr
231;
232; P9-LABEL: ppcq_to_i128:
233; P9:       # %bb.0: # %entry
234; P9-NEXT:    mflr r0
235; P9-NEXT:    stdu r1, -32(r1)
236; P9-NEXT:    std r0, 48(r1)
237; P9-NEXT:    .cfi_def_cfa_offset 32
238; P9-NEXT:    .cfi_offset lr, 16
239; P9-NEXT:    bl __fixtfti
240; P9-NEXT:    nop
241; P9-NEXT:    addi r1, r1, 32
242; P9-NEXT:    ld r0, 16(r1)
243; P9-NEXT:    mtlr r0
244; P9-NEXT:    blr
245;
246; NOVSX-LABEL: ppcq_to_i128:
247; NOVSX:       # %bb.0: # %entry
248; NOVSX-NEXT:    mflr r0
249; NOVSX-NEXT:    stdu r1, -32(r1)
250; NOVSX-NEXT:    std r0, 48(r1)
251; NOVSX-NEXT:    .cfi_def_cfa_offset 32
252; NOVSX-NEXT:    .cfi_offset lr, 16
253; NOVSX-NEXT:    bl __fixtfti
254; NOVSX-NEXT:    nop
255; NOVSX-NEXT:    addi r1, r1, 32
256; NOVSX-NEXT:    ld r0, 16(r1)
257; NOVSX-NEXT:    mtlr r0
258; NOVSX-NEXT:    blr
259entry:
260  %conv = tail call i128 @llvm.experimental.constrained.fptosi.i128.ppcf128(ppc_fp128 %m, metadata !"fpexcept.strict") #0
261  ret i128 %conv
262}
263
264define i128 @ppcq_to_u128(ppc_fp128 %m) #0 {
265; P8-LABEL: ppcq_to_u128:
266; P8:       # %bb.0: # %entry
267; P8-NEXT:    mflr r0
268; P8-NEXT:    stdu r1, -112(r1)
269; P8-NEXT:    std r0, 128(r1)
270; P8-NEXT:    .cfi_def_cfa_offset 112
271; P8-NEXT:    .cfi_offset lr, 16
272; P8-NEXT:    bl __fixtfti
273; P8-NEXT:    nop
274; P8-NEXT:    addi r1, r1, 112
275; P8-NEXT:    ld r0, 16(r1)
276; P8-NEXT:    mtlr r0
277; P8-NEXT:    blr
278;
279; P9-LABEL: ppcq_to_u128:
280; P9:       # %bb.0: # %entry
281; P9-NEXT:    mflr r0
282; P9-NEXT:    stdu r1, -32(r1)
283; P9-NEXT:    std r0, 48(r1)
284; P9-NEXT:    .cfi_def_cfa_offset 32
285; P9-NEXT:    .cfi_offset lr, 16
286; P9-NEXT:    bl __fixtfti
287; P9-NEXT:    nop
288; P9-NEXT:    addi r1, r1, 32
289; P9-NEXT:    ld r0, 16(r1)
290; P9-NEXT:    mtlr r0
291; P9-NEXT:    blr
292;
293; NOVSX-LABEL: ppcq_to_u128:
294; NOVSX:       # %bb.0: # %entry
295; NOVSX-NEXT:    mflr r0
296; NOVSX-NEXT:    stdu r1, -32(r1)
297; NOVSX-NEXT:    std r0, 48(r1)
298; NOVSX-NEXT:    .cfi_def_cfa_offset 32
299; NOVSX-NEXT:    .cfi_offset lr, 16
300; NOVSX-NEXT:    bl __fixtfti
301; NOVSX-NEXT:    nop
302; NOVSX-NEXT:    addi r1, r1, 32
303; NOVSX-NEXT:    ld r0, 16(r1)
304; NOVSX-NEXT:    mtlr r0
305; NOVSX-NEXT:    blr
306entry:
307  %conv = tail call i128 @llvm.experimental.constrained.fptosi.i128.ppcf128(ppc_fp128 %m, metadata !"fpexcept.strict") #0
308  ret i128 %conv
309}
310
311define signext i32 @q_to_i32(fp128 %m) #0 {
312; P8-LABEL: q_to_i32:
313; P8:       # %bb.0: # %entry
314; P8-NEXT:    mflr r0
315; P8-NEXT:    stdu r1, -112(r1)
316; P8-NEXT:    std r0, 128(r1)
317; P8-NEXT:    .cfi_def_cfa_offset 112
318; P8-NEXT:    .cfi_offset lr, 16
319; P8-NEXT:    bl __fixkfsi
320; P8-NEXT:    nop
321; P8-NEXT:    extsw r3, r3
322; P8-NEXT:    addi r1, r1, 112
323; P8-NEXT:    ld r0, 16(r1)
324; P8-NEXT:    mtlr r0
325; P8-NEXT:    blr
326;
327; P9-LABEL: q_to_i32:
328; P9:       # %bb.0: # %entry
329; P9-NEXT:    xscvqpswz v2, v2
330; P9-NEXT:    mfvsrwz r3, v2
331; P9-NEXT:    extsw r3, r3
332; P9-NEXT:    blr
333;
334; NOVSX-LABEL: q_to_i32:
335; NOVSX:       # %bb.0: # %entry
336; NOVSX-NEXT:    mflr r0
337; NOVSX-NEXT:    stdu r1, -32(r1)
338; NOVSX-NEXT:    std r0, 48(r1)
339; NOVSX-NEXT:    .cfi_def_cfa_offset 32
340; NOVSX-NEXT:    .cfi_offset lr, 16
341; NOVSX-NEXT:    bl __fixkfsi
342; NOVSX-NEXT:    nop
343; NOVSX-NEXT:    extsw r3, r3
344; NOVSX-NEXT:    addi r1, r1, 32
345; NOVSX-NEXT:    ld r0, 16(r1)
346; NOVSX-NEXT:    mtlr r0
347; NOVSX-NEXT:    blr
348entry:
349  %conv = tail call i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128 %m, metadata !"fpexcept.strict") #0
350  ret i32 %conv
351}
352
353define i64 @q_to_i64(fp128 %m) #0 {
354; P8-LABEL: q_to_i64:
355; P8:       # %bb.0: # %entry
356; P8-NEXT:    mflr r0
357; P8-NEXT:    stdu r1, -112(r1)
358; P8-NEXT:    std r0, 128(r1)
359; P8-NEXT:    .cfi_def_cfa_offset 112
360; P8-NEXT:    .cfi_offset lr, 16
361; P8-NEXT:    bl __fixkfdi
362; P8-NEXT:    nop
363; P8-NEXT:    addi r1, r1, 112
364; P8-NEXT:    ld r0, 16(r1)
365; P8-NEXT:    mtlr r0
366; P8-NEXT:    blr
367;
368; P9-LABEL: q_to_i64:
369; P9:       # %bb.0: # %entry
370; P9-NEXT:    xscvqpsdz v2, v2
371; P9-NEXT:    mfvsrd r3, v2
372; P9-NEXT:    blr
373;
374; NOVSX-LABEL: q_to_i64:
375; NOVSX:       # %bb.0: # %entry
376; NOVSX-NEXT:    mflr r0
377; NOVSX-NEXT:    stdu r1, -32(r1)
378; NOVSX-NEXT:    std r0, 48(r1)
379; NOVSX-NEXT:    .cfi_def_cfa_offset 32
380; NOVSX-NEXT:    .cfi_offset lr, 16
381; NOVSX-NEXT:    bl __fixkfdi
382; NOVSX-NEXT:    nop
383; NOVSX-NEXT:    addi r1, r1, 32
384; NOVSX-NEXT:    ld r0, 16(r1)
385; NOVSX-NEXT:    mtlr r0
386; NOVSX-NEXT:    blr
387entry:
388  %conv = tail call i64 @llvm.experimental.constrained.fptosi.i64.f128(fp128 %m, metadata !"fpexcept.strict") #0
389  ret i64 %conv
390}
391
392define i64 @q_to_u64(fp128 %m) #0 {
393; P8-LABEL: q_to_u64:
394; P8:       # %bb.0: # %entry
395; P8-NEXT:    mflr r0
396; P8-NEXT:    stdu r1, -112(r1)
397; P8-NEXT:    std r0, 128(r1)
398; P8-NEXT:    .cfi_def_cfa_offset 112
399; P8-NEXT:    .cfi_offset lr, 16
400; P8-NEXT:    bl __fixunskfdi
401; P8-NEXT:    nop
402; P8-NEXT:    addi r1, r1, 112
403; P8-NEXT:    ld r0, 16(r1)
404; P8-NEXT:    mtlr r0
405; P8-NEXT:    blr
406;
407; P9-LABEL: q_to_u64:
408; P9:       # %bb.0: # %entry
409; P9-NEXT:    xscvqpudz v2, v2
410; P9-NEXT:    mfvsrd r3, v2
411; P9-NEXT:    blr
412;
413; NOVSX-LABEL: q_to_u64:
414; NOVSX:       # %bb.0: # %entry
415; NOVSX-NEXT:    mflr r0
416; NOVSX-NEXT:    stdu r1, -32(r1)
417; NOVSX-NEXT:    std r0, 48(r1)
418; NOVSX-NEXT:    .cfi_def_cfa_offset 32
419; NOVSX-NEXT:    .cfi_offset lr, 16
420; NOVSX-NEXT:    bl __fixunskfdi
421; NOVSX-NEXT:    nop
422; NOVSX-NEXT:    addi r1, r1, 32
423; NOVSX-NEXT:    ld r0, 16(r1)
424; NOVSX-NEXT:    mtlr r0
425; NOVSX-NEXT:    blr
426entry:
427  %conv = tail call i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128 %m, metadata !"fpexcept.strict") #0
428  ret i64 %conv
429}
430
431define zeroext i32 @q_to_u32(fp128 %m) #0 {
432; P8-LABEL: q_to_u32:
433; P8:       # %bb.0: # %entry
434; P8-NEXT:    mflr r0
435; P8-NEXT:    stdu r1, -112(r1)
436; P8-NEXT:    std r0, 128(r1)
437; P8-NEXT:    .cfi_def_cfa_offset 112
438; P8-NEXT:    .cfi_offset lr, 16
439; P8-NEXT:    bl __fixunskfsi
440; P8-NEXT:    nop
441; P8-NEXT:    addi r1, r1, 112
442; P8-NEXT:    ld r0, 16(r1)
443; P8-NEXT:    mtlr r0
444; P8-NEXT:    blr
445;
446; P9-LABEL: q_to_u32:
447; P9:       # %bb.0: # %entry
448; P9-NEXT:    xscvqpuwz v2, v2
449; P9-NEXT:    mfvsrwz r3, v2
450; P9-NEXT:    blr
451;
452; NOVSX-LABEL: q_to_u32:
453; NOVSX:       # %bb.0: # %entry
454; NOVSX-NEXT:    mflr r0
455; NOVSX-NEXT:    stdu r1, -32(r1)
456; NOVSX-NEXT:    std r0, 48(r1)
457; NOVSX-NEXT:    .cfi_def_cfa_offset 32
458; NOVSX-NEXT:    .cfi_offset lr, 16
459; NOVSX-NEXT:    bl __fixunskfsi
460; NOVSX-NEXT:    nop
461; NOVSX-NEXT:    addi r1, r1, 32
462; NOVSX-NEXT:    ld r0, 16(r1)
463; NOVSX-NEXT:    mtlr r0
464; NOVSX-NEXT:    blr
465entry:
466  %conv = tail call i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128 %m, metadata !"fpexcept.strict") #0
467  ret i32 %conv
468}
469
470define signext i32 @ppcq_to_i32(ppc_fp128 %m) #0 {
471; P8-LABEL: ppcq_to_i32:
472; P8:       # %bb.0: # %entry
473; P8-NEXT:    mffs f0
474; P8-NEXT:    mtfsb1 31
475; P8-NEXT:    mtfsb0 30
476; P8-NEXT:    fadd f1, f2, f1
477; P8-NEXT:    mtfsf 1, f0
478; P8-NEXT:    xscvdpsxws f0, f1
479; P8-NEXT:    mffprwz r3, f0
480; P8-NEXT:    extsw r3, r3
481; P8-NEXT:    blr
482;
483; P9-LABEL: ppcq_to_i32:
484; P9:       # %bb.0: # %entry
485; P9-NEXT:    mffs f0
486; P9-NEXT:    mtfsb1 31
487; P9-NEXT:    mtfsb0 30
488; P9-NEXT:    fadd f1, f2, f1
489; P9-NEXT:    mtfsf 1, f0
490; P9-NEXT:    xscvdpsxws f0, f1
491; P9-NEXT:    mffprwz r3, f0
492; P9-NEXT:    extsw r3, r3
493; P9-NEXT:    blr
494;
495; NOVSX-LABEL: ppcq_to_i32:
496; NOVSX:       # %bb.0: # %entry
497; NOVSX-NEXT:    mffs f0
498; NOVSX-NEXT:    mtfsb1 31
499; NOVSX-NEXT:    mtfsb0 30
500; NOVSX-NEXT:    addi r3, r1, -4
501; NOVSX-NEXT:    fadd f1, f2, f1
502; NOVSX-NEXT:    mtfsf 1, f0
503; NOVSX-NEXT:    fctiwz f0, f1
504; NOVSX-NEXT:    stfiwx f0, 0, r3
505; NOVSX-NEXT:    lwa r3, -4(r1)
506; NOVSX-NEXT:    blr
507entry:
508  %conv = tail call i32 @llvm.experimental.constrained.fptosi.i32.ppcf128(ppc_fp128 %m, metadata !"fpexcept.strict") #0
509  ret i32 %conv
510}
511
512define i64 @ppcq_to_i64(ppc_fp128 %m) #0 {
513; P8-LABEL: ppcq_to_i64:
514; P8:       # %bb.0: # %entry
515; P8-NEXT:    mflr r0
516; P8-NEXT:    stdu r1, -112(r1)
517; P8-NEXT:    std r0, 128(r1)
518; P8-NEXT:    .cfi_def_cfa_offset 112
519; P8-NEXT:    .cfi_offset lr, 16
520; P8-NEXT:    bl __fixtfdi
521; P8-NEXT:    nop
522; P8-NEXT:    addi r1, r1, 112
523; P8-NEXT:    ld r0, 16(r1)
524; P8-NEXT:    mtlr r0
525; P8-NEXT:    blr
526;
527; P9-LABEL: ppcq_to_i64:
528; P9:       # %bb.0: # %entry
529; P9-NEXT:    mflr r0
530; P9-NEXT:    stdu r1, -32(r1)
531; P9-NEXT:    std r0, 48(r1)
532; P9-NEXT:    .cfi_def_cfa_offset 32
533; P9-NEXT:    .cfi_offset lr, 16
534; P9-NEXT:    bl __fixtfdi
535; P9-NEXT:    nop
536; P9-NEXT:    addi r1, r1, 32
537; P9-NEXT:    ld r0, 16(r1)
538; P9-NEXT:    mtlr r0
539; P9-NEXT:    blr
540;
541; NOVSX-LABEL: ppcq_to_i64:
542; NOVSX:       # %bb.0: # %entry
543; NOVSX-NEXT:    mflr r0
544; NOVSX-NEXT:    stdu r1, -32(r1)
545; NOVSX-NEXT:    std r0, 48(r1)
546; NOVSX-NEXT:    .cfi_def_cfa_offset 32
547; NOVSX-NEXT:    .cfi_offset lr, 16
548; NOVSX-NEXT:    bl __fixtfdi
549; NOVSX-NEXT:    nop
550; NOVSX-NEXT:    addi r1, r1, 32
551; NOVSX-NEXT:    ld r0, 16(r1)
552; NOVSX-NEXT:    mtlr r0
553; NOVSX-NEXT:    blr
554entry:
555  %conv = tail call i64 @llvm.experimental.constrained.fptosi.i64.ppcf128(ppc_fp128 %m, metadata !"fpexcept.strict") #0
556  ret i64 %conv
557}
558
559define i64 @ppcq_to_u64(ppc_fp128 %m) #0 {
560; P8-LABEL: ppcq_to_u64:
561; P8:       # %bb.0: # %entry
562; P8-NEXT:    mflr r0
563; P8-NEXT:    stdu r1, -112(r1)
564; P8-NEXT:    std r0, 128(r1)
565; P8-NEXT:    .cfi_def_cfa_offset 112
566; P8-NEXT:    .cfi_offset lr, 16
567; P8-NEXT:    bl __fixunstfdi
568; P8-NEXT:    nop
569; P8-NEXT:    addi r1, r1, 112
570; P8-NEXT:    ld r0, 16(r1)
571; P8-NEXT:    mtlr r0
572; P8-NEXT:    blr
573;
574; P9-LABEL: ppcq_to_u64:
575; P9:       # %bb.0: # %entry
576; P9-NEXT:    mflr r0
577; P9-NEXT:    stdu r1, -32(r1)
578; P9-NEXT:    std r0, 48(r1)
579; P9-NEXT:    .cfi_def_cfa_offset 32
580; P9-NEXT:    .cfi_offset lr, 16
581; P9-NEXT:    bl __fixunstfdi
582; P9-NEXT:    nop
583; P9-NEXT:    addi r1, r1, 32
584; P9-NEXT:    ld r0, 16(r1)
585; P9-NEXT:    mtlr r0
586; P9-NEXT:    blr
587;
588; NOVSX-LABEL: ppcq_to_u64:
589; NOVSX:       # %bb.0: # %entry
590; NOVSX-NEXT:    mflr r0
591; NOVSX-NEXT:    stdu r1, -32(r1)
592; NOVSX-NEXT:    std r0, 48(r1)
593; NOVSX-NEXT:    .cfi_def_cfa_offset 32
594; NOVSX-NEXT:    .cfi_offset lr, 16
595; NOVSX-NEXT:    bl __fixunstfdi
596; NOVSX-NEXT:    nop
597; NOVSX-NEXT:    addi r1, r1, 32
598; NOVSX-NEXT:    ld r0, 16(r1)
599; NOVSX-NEXT:    mtlr r0
600; NOVSX-NEXT:    blr
601entry:
602  %conv = tail call i64 @llvm.experimental.constrained.fptoui.i64.ppcf128(ppc_fp128 %m, metadata !"fpexcept.strict") #0
603  ret i64 %conv
604}
605
606define zeroext i32 @ppcq_to_u32(ppc_fp128 %m) #0 {
607; P8-LABEL: ppcq_to_u32:
608; P8:       # %bb.0: # %entry
609; P8-NEXT:    mflr r0
610; P8-NEXT:    stdu r1, -128(r1)
611; P8-NEXT:    std r0, 144(r1)
612; P8-NEXT:    .cfi_def_cfa_offset 128
613; P8-NEXT:    .cfi_offset lr, 16
614; P8-NEXT:    .cfi_offset r30, -16
615; P8-NEXT:    addis r3, r2, .LCPI13_0@toc@ha
616; P8-NEXT:    xxlxor f3, f3, f3
617; P8-NEXT:    std r30, 112(r1) # 8-byte Folded Spill
618; P8-NEXT:    lfs f0, .LCPI13_0@toc@l(r3)
619; P8-NEXT:    fcmpo cr1, f2, f3
620; P8-NEXT:    lis r3, -32768
621; P8-NEXT:    fcmpo cr0, f1, f0
622; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
623; P8-NEXT:    crandc 4*cr5+gt, lt, eq
624; P8-NEXT:    cror 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
625; P8-NEXT:    isel r30, 0, r3, 4*cr5+lt
626; P8-NEXT:    bc 12, 4*cr5+lt, .LBB13_2
627; P8-NEXT:  # %bb.1: # %entry
628; P8-NEXT:    fmr f3, f0
629; P8-NEXT:  .LBB13_2: # %entry
630; P8-NEXT:    xxlxor f4, f4, f4
631; P8-NEXT:    bl __gcc_qsub
632; P8-NEXT:    nop
633; P8-NEXT:    mffs f0
634; P8-NEXT:    mtfsb1 31
635; P8-NEXT:    mtfsb0 30
636; P8-NEXT:    fadd f1, f2, f1
637; P8-NEXT:    mtfsf 1, f0
638; P8-NEXT:    xscvdpsxws f0, f1
639; P8-NEXT:    mffprwz r3, f0
640; P8-NEXT:    xor r3, r3, r30
641; P8-NEXT:    ld r30, 112(r1) # 8-byte Folded Reload
642; P8-NEXT:    clrldi r3, r3, 32
643; P8-NEXT:    addi r1, r1, 128
644; P8-NEXT:    ld r0, 16(r1)
645; P8-NEXT:    mtlr r0
646; P8-NEXT:    blr
647;
648; P9-LABEL: ppcq_to_u32:
649; P9:       # %bb.0: # %entry
650; P9-NEXT:    mflr r0
651; P9-NEXT:    .cfi_def_cfa_offset 48
652; P9-NEXT:    .cfi_offset lr, 16
653; P9-NEXT:    .cfi_offset r30, -16
654; P9-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
655; P9-NEXT:    stdu r1, -48(r1)
656; P9-NEXT:    addis r3, r2, .LCPI13_0@toc@ha
657; P9-NEXT:    xxlxor f3, f3, f3
658; P9-NEXT:    std r0, 64(r1)
659; P9-NEXT:    lfs f0, .LCPI13_0@toc@l(r3)
660; P9-NEXT:    fcmpo cr1, f2, f3
661; P9-NEXT:    lis r3, -32768
662; P9-NEXT:    fcmpo cr0, f1, f0
663; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
664; P9-NEXT:    crandc 4*cr5+gt, lt, eq
665; P9-NEXT:    cror 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
666; P9-NEXT:    isel r30, 0, r3, 4*cr5+lt
667; P9-NEXT:    bc 12, 4*cr5+lt, .LBB13_2
668; P9-NEXT:  # %bb.1: # %entry
669; P9-NEXT:    fmr f3, f0
670; P9-NEXT:  .LBB13_2: # %entry
671; P9-NEXT:    xxlxor f4, f4, f4
672; P9-NEXT:    bl __gcc_qsub
673; P9-NEXT:    nop
674; P9-NEXT:    mffs f0
675; P9-NEXT:    mtfsb1 31
676; P9-NEXT:    mtfsb0 30
677; P9-NEXT:    fadd f1, f2, f1
678; P9-NEXT:    mtfsf 1, f0
679; P9-NEXT:    xscvdpsxws f0, f1
680; P9-NEXT:    mffprwz r3, f0
681; P9-NEXT:    xor r3, r3, r30
682; P9-NEXT:    clrldi r3, r3, 32
683; P9-NEXT:    addi r1, r1, 48
684; P9-NEXT:    ld r0, 16(r1)
685; P9-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
686; P9-NEXT:    mtlr r0
687; P9-NEXT:    blr
688;
689; NOVSX-LABEL: ppcq_to_u32:
690; NOVSX:       # %bb.0: # %entry
691; NOVSX-NEXT:    mfocrf r12, 32
692; NOVSX-NEXT:    stw r12, 8(r1)
693; NOVSX-NEXT:    mflr r0
694; NOVSX-NEXT:    stdu r1, -48(r1)
695; NOVSX-NEXT:    std r0, 64(r1)
696; NOVSX-NEXT:    .cfi_def_cfa_offset 48
697; NOVSX-NEXT:    .cfi_offset lr, 16
698; NOVSX-NEXT:    .cfi_offset cr2, 8
699; NOVSX-NEXT:    addis r3, r2, .LCPI13_0@toc@ha
700; NOVSX-NEXT:    lfs f0, .LCPI13_0@toc@l(r3)
701; NOVSX-NEXT:    addis r3, r2, .LCPI13_1@toc@ha
702; NOVSX-NEXT:    lfs f4, .LCPI13_1@toc@l(r3)
703; NOVSX-NEXT:    fcmpo cr0, f1, f0
704; NOVSX-NEXT:    fcmpo cr1, f2, f4
705; NOVSX-NEXT:    fmr f3, f4
706; NOVSX-NEXT:    crandc 4*cr5+gt, lt, eq
707; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
708; NOVSX-NEXT:    cror 4*cr2+lt, 4*cr5+gt, 4*cr5+lt
709; NOVSX-NEXT:    bc 12, 4*cr2+lt, .LBB13_2
710; NOVSX-NEXT:  # %bb.1: # %entry
711; NOVSX-NEXT:    fmr f3, f0
712; NOVSX-NEXT:  .LBB13_2: # %entry
713; NOVSX-NEXT:    bl __gcc_qsub
714; NOVSX-NEXT:    nop
715; NOVSX-NEXT:    mffs f0
716; NOVSX-NEXT:    mtfsb1 31
717; NOVSX-NEXT:    mtfsb0 30
718; NOVSX-NEXT:    addi r3, r1, 44
719; NOVSX-NEXT:    fadd f1, f2, f1
720; NOVSX-NEXT:    mtfsf 1, f0
721; NOVSX-NEXT:    fctiwz f0, f1
722; NOVSX-NEXT:    stfiwx f0, 0, r3
723; NOVSX-NEXT:    lis r3, -32768
724; NOVSX-NEXT:    lwz r4, 44(r1)
725; NOVSX-NEXT:    isel r3, 0, r3, 4*cr2+lt
726; NOVSX-NEXT:    xor r3, r4, r3
727; NOVSX-NEXT:    clrldi r3, r3, 32
728; NOVSX-NEXT:    addi r1, r1, 48
729; NOVSX-NEXT:    ld r0, 16(r1)
730; NOVSX-NEXT:    lwz r12, 8(r1)
731; NOVSX-NEXT:    mtlr r0
732; NOVSX-NEXT:    mtocrf 32, r12
733; NOVSX-NEXT:    blr
734entry:
735  %conv = tail call i32 @llvm.experimental.constrained.fptoui.i32.ppcf128(ppc_fp128 %m, metadata !"fpexcept.strict") #0
736  ret i32 %conv
737}
738
739define fp128 @i1_to_q(i1 signext %m) #0 {
740; P8-LABEL: i1_to_q:
741; P8:       # %bb.0: # %entry
742; P8-NEXT:    mflr r0
743; P8-NEXT:    stdu r1, -112(r1)
744; P8-NEXT:    std r0, 128(r1)
745; P8-NEXT:    .cfi_def_cfa_offset 112
746; P8-NEXT:    .cfi_offset lr, 16
747; P8-NEXT:    bl __floatsikf
748; P8-NEXT:    nop
749; P8-NEXT:    addi r1, r1, 112
750; P8-NEXT:    ld r0, 16(r1)
751; P8-NEXT:    mtlr r0
752; P8-NEXT:    blr
753;
754; P9-LABEL: i1_to_q:
755; P9:       # %bb.0: # %entry
756; P9-NEXT:    mtvsrwa v2, r3
757; P9-NEXT:    xscvsdqp v2, v2
758; P9-NEXT:    blr
759;
760; NOVSX-LABEL: i1_to_q:
761; NOVSX:       # %bb.0: # %entry
762; NOVSX-NEXT:    mflr r0
763; NOVSX-NEXT:    stdu r1, -32(r1)
764; NOVSX-NEXT:    std r0, 48(r1)
765; NOVSX-NEXT:    .cfi_def_cfa_offset 32
766; NOVSX-NEXT:    .cfi_offset lr, 16
767; NOVSX-NEXT:    bl __floatsikf
768; NOVSX-NEXT:    nop
769; NOVSX-NEXT:    addi r1, r1, 32
770; NOVSX-NEXT:    ld r0, 16(r1)
771; NOVSX-NEXT:    mtlr r0
772; NOVSX-NEXT:    blr
773entry:
774  %conv = tail call fp128 @llvm.experimental.constrained.sitofp.f128.i1(i1 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
775  ret fp128 %conv
776}
777
778define fp128 @u1_to_q(i1 zeroext %m) #0 {
779; P8-LABEL: u1_to_q:
780; P8:       # %bb.0: # %entry
781; P8-NEXT:    mflr r0
782; P8-NEXT:    stdu r1, -112(r1)
783; P8-NEXT:    std r0, 128(r1)
784; P8-NEXT:    .cfi_def_cfa_offset 112
785; P8-NEXT:    .cfi_offset lr, 16
786; P8-NEXT:    bl __floatsikf
787; P8-NEXT:    nop
788; P8-NEXT:    addi r1, r1, 112
789; P8-NEXT:    ld r0, 16(r1)
790; P8-NEXT:    mtlr r0
791; P8-NEXT:    blr
792;
793; P9-LABEL: u1_to_q:
794; P9:       # %bb.0: # %entry
795; P9-NEXT:    mtvsrwa v2, r3
796; P9-NEXT:    xscvsdqp v2, v2
797; P9-NEXT:    blr
798;
799; NOVSX-LABEL: u1_to_q:
800; NOVSX:       # %bb.0: # %entry
801; NOVSX-NEXT:    mflr r0
802; NOVSX-NEXT:    stdu r1, -32(r1)
803; NOVSX-NEXT:    std r0, 48(r1)
804; NOVSX-NEXT:    .cfi_def_cfa_offset 32
805; NOVSX-NEXT:    .cfi_offset lr, 16
806; NOVSX-NEXT:    bl __floatunsikf
807; NOVSX-NEXT:    nop
808; NOVSX-NEXT:    addi r1, r1, 32
809; NOVSX-NEXT:    ld r0, 16(r1)
810; NOVSX-NEXT:    mtlr r0
811; NOVSX-NEXT:    blr
812entry:
813  %conv = tail call fp128 @llvm.experimental.constrained.uitofp.f128.i1(i1 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
814  ret fp128 %conv
815}
816
817define ppc_fp128 @i1_to_ppcq(i1 signext %m) #0 {
818; P8-LABEL: i1_to_ppcq:
819; P8:       # %bb.0: # %entry
820; P8-NEXT:    mtfprwa f0, r3
821; P8-NEXT:    xxlxor f2, f2, f2
822; P8-NEXT:    xscvsxddp f1, f0
823; P8-NEXT:    blr
824;
825; P9-LABEL: i1_to_ppcq:
826; P9:       # %bb.0: # %entry
827; P9-NEXT:    mtfprwa f0, r3
828; P9-NEXT:    xxlxor f2, f2, f2
829; P9-NEXT:    xscvsxddp f1, f0
830; P9-NEXT:    blr
831;
832; NOVSX-LABEL: i1_to_ppcq:
833; NOVSX:       # %bb.0: # %entry
834; NOVSX-NEXT:    stw r3, -4(r1)
835; NOVSX-NEXT:    addi r3, r1, -4
836; NOVSX-NEXT:    lfiwax f0, 0, r3
837; NOVSX-NEXT:    addis r3, r2, .LCPI16_0@toc@ha
838; NOVSX-NEXT:    lfs f2, .LCPI16_0@toc@l(r3)
839; NOVSX-NEXT:    fcfid f1, f0
840; NOVSX-NEXT:    blr
841entry:
842  %conv = tail call ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i1(i1 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
843  ret ppc_fp128 %conv
844}
845
846define ppc_fp128 @u1_to_ppcq(i1 zeroext %m) #0 {
847; P8-LABEL: u1_to_ppcq:
848; P8:       # %bb.0: # %entry
849; P8-NEXT:    mtfprwa f0, r3
850; P8-NEXT:    xxlxor f2, f2, f2
851; P8-NEXT:    xscvsxddp f1, f0
852; P8-NEXT:    blr
853;
854; P9-LABEL: u1_to_ppcq:
855; P9:       # %bb.0: # %entry
856; P9-NEXT:    mtfprwa f0, r3
857; P9-NEXT:    xxlxor f2, f2, f2
858; P9-NEXT:    xscvsxddp f1, f0
859; P9-NEXT:    blr
860;
861; NOVSX-LABEL: u1_to_ppcq:
862; NOVSX:       # %bb.0: # %entry
863; NOVSX-NEXT:    stw r3, -4(r1)
864; NOVSX-NEXT:    addi r3, r1, -4
865; NOVSX-NEXT:    lfiwax f0, 0, r3
866; NOVSX-NEXT:    addis r3, r2, .LCPI17_0@toc@ha
867; NOVSX-NEXT:    lfs f2, .LCPI17_0@toc@l(r3)
868; NOVSX-NEXT:    fcfid f1, f0
869; NOVSX-NEXT:    blr
870entry:
871  %conv = tail call ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i1(i1 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
872  ret ppc_fp128 %conv
873}
874
875define fp128 @i32_to_q(i32 signext %m) #0 {
876; P8-LABEL: i32_to_q:
877; P8:       # %bb.0: # %entry
878; P8-NEXT:    mflr r0
879; P8-NEXT:    stdu r1, -112(r1)
880; P8-NEXT:    std r0, 128(r1)
881; P8-NEXT:    .cfi_def_cfa_offset 112
882; P8-NEXT:    .cfi_offset lr, 16
883; P8-NEXT:    bl __floatsikf
884; P8-NEXT:    nop
885; P8-NEXT:    addi r1, r1, 112
886; P8-NEXT:    ld r0, 16(r1)
887; P8-NEXT:    mtlr r0
888; P8-NEXT:    blr
889;
890; P9-LABEL: i32_to_q:
891; P9:       # %bb.0: # %entry
892; P9-NEXT:    mtvsrwa v2, r3
893; P9-NEXT:    xscvsdqp v2, v2
894; P9-NEXT:    blr
895;
896; NOVSX-LABEL: i32_to_q:
897; NOVSX:       # %bb.0: # %entry
898; NOVSX-NEXT:    mflr r0
899; NOVSX-NEXT:    stdu r1, -32(r1)
900; NOVSX-NEXT:    std r0, 48(r1)
901; NOVSX-NEXT:    .cfi_def_cfa_offset 32
902; NOVSX-NEXT:    .cfi_offset lr, 16
903; NOVSX-NEXT:    bl __floatsikf
904; NOVSX-NEXT:    nop
905; NOVSX-NEXT:    addi r1, r1, 32
906; NOVSX-NEXT:    ld r0, 16(r1)
907; NOVSX-NEXT:    mtlr r0
908; NOVSX-NEXT:    blr
909entry:
910  %conv = tail call fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
911  ret fp128 %conv
912}
913
914define fp128 @i64_to_q(i64 %m) #0 {
915; P8-LABEL: i64_to_q:
916; P8:       # %bb.0: # %entry
917; P8-NEXT:    mflr r0
918; P8-NEXT:    stdu r1, -112(r1)
919; P8-NEXT:    std r0, 128(r1)
920; P8-NEXT:    .cfi_def_cfa_offset 112
921; P8-NEXT:    .cfi_offset lr, 16
922; P8-NEXT:    bl __floatdikf
923; P8-NEXT:    nop
924; P8-NEXT:    addi r1, r1, 112
925; P8-NEXT:    ld r0, 16(r1)
926; P8-NEXT:    mtlr r0
927; P8-NEXT:    blr
928;
929; P9-LABEL: i64_to_q:
930; P9:       # %bb.0: # %entry
931; P9-NEXT:    mtvsrd v2, r3
932; P9-NEXT:    xscvsdqp v2, v2
933; P9-NEXT:    blr
934;
935; NOVSX-LABEL: i64_to_q:
936; NOVSX:       # %bb.0: # %entry
937; NOVSX-NEXT:    mflr r0
938; NOVSX-NEXT:    stdu r1, -32(r1)
939; NOVSX-NEXT:    std r0, 48(r1)
940; NOVSX-NEXT:    .cfi_def_cfa_offset 32
941; NOVSX-NEXT:    .cfi_offset lr, 16
942; NOVSX-NEXT:    bl __floatdikf
943; NOVSX-NEXT:    nop
944; NOVSX-NEXT:    addi r1, r1, 32
945; NOVSX-NEXT:    ld r0, 16(r1)
946; NOVSX-NEXT:    mtlr r0
947; NOVSX-NEXT:    blr
948entry:
949  %conv = tail call fp128 @llvm.experimental.constrained.sitofp.f128.i64(i64 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
950  ret fp128 %conv
951}
952
953define fp128 @u32_to_q(i32 zeroext %m) #0 {
954; P8-LABEL: u32_to_q:
955; P8:       # %bb.0: # %entry
956; P8-NEXT:    mflr r0
957; P8-NEXT:    stdu r1, -112(r1)
958; P8-NEXT:    std r0, 128(r1)
959; P8-NEXT:    .cfi_def_cfa_offset 112
960; P8-NEXT:    .cfi_offset lr, 16
961; P8-NEXT:    bl __floatunsikf
962; P8-NEXT:    nop
963; P8-NEXT:    addi r1, r1, 112
964; P8-NEXT:    ld r0, 16(r1)
965; P8-NEXT:    mtlr r0
966; P8-NEXT:    blr
967;
968; P9-LABEL: u32_to_q:
969; P9:       # %bb.0: # %entry
970; P9-NEXT:    mtvsrwz v2, r3
971; P9-NEXT:    xscvudqp v2, v2
972; P9-NEXT:    blr
973;
974; NOVSX-LABEL: u32_to_q:
975; NOVSX:       # %bb.0: # %entry
976; NOVSX-NEXT:    mflr r0
977; NOVSX-NEXT:    stdu r1, -32(r1)
978; NOVSX-NEXT:    std r0, 48(r1)
979; NOVSX-NEXT:    .cfi_def_cfa_offset 32
980; NOVSX-NEXT:    .cfi_offset lr, 16
981; NOVSX-NEXT:    bl __floatunsikf
982; NOVSX-NEXT:    nop
983; NOVSX-NEXT:    addi r1, r1, 32
984; NOVSX-NEXT:    ld r0, 16(r1)
985; NOVSX-NEXT:    mtlr r0
986; NOVSX-NEXT:    blr
987entry:
988  %conv = tail call fp128 @llvm.experimental.constrained.uitofp.f128.i32(i32 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
989  ret fp128 %conv
990}
991
992define fp128 @u64_to_q(i64 %m) #0 {
993; P8-LABEL: u64_to_q:
994; P8:       # %bb.0: # %entry
995; P8-NEXT:    mflr r0
996; P8-NEXT:    stdu r1, -112(r1)
997; P8-NEXT:    std r0, 128(r1)
998; P8-NEXT:    .cfi_def_cfa_offset 112
999; P8-NEXT:    .cfi_offset lr, 16
1000; P8-NEXT:    bl __floatundikf
1001; P8-NEXT:    nop
1002; P8-NEXT:    addi r1, r1, 112
1003; P8-NEXT:    ld r0, 16(r1)
1004; P8-NEXT:    mtlr r0
1005; P8-NEXT:    blr
1006;
1007; P9-LABEL: u64_to_q:
1008; P9:       # %bb.0: # %entry
1009; P9-NEXT:    mtvsrd v2, r3
1010; P9-NEXT:    xscvudqp v2, v2
1011; P9-NEXT:    blr
1012;
1013; NOVSX-LABEL: u64_to_q:
1014; NOVSX:       # %bb.0: # %entry
1015; NOVSX-NEXT:    mflr r0
1016; NOVSX-NEXT:    stdu r1, -32(r1)
1017; NOVSX-NEXT:    std r0, 48(r1)
1018; NOVSX-NEXT:    .cfi_def_cfa_offset 32
1019; NOVSX-NEXT:    .cfi_offset lr, 16
1020; NOVSX-NEXT:    bl __floatundikf
1021; NOVSX-NEXT:    nop
1022; NOVSX-NEXT:    addi r1, r1, 32
1023; NOVSX-NEXT:    ld r0, 16(r1)
1024; NOVSX-NEXT:    mtlr r0
1025; NOVSX-NEXT:    blr
1026entry:
1027  %conv = tail call fp128 @llvm.experimental.constrained.uitofp.f128.i64(i64 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1028  ret fp128 %conv
1029}
1030
1031attributes #0 = { strictfp }
1032