xref: /llvm-project/llvm/test/CodeGen/SystemZ/inline-asm-fp-int-casting.ll (revision 56d92c17583e5f0b5e1e521b5f614be79436fccc)
1b4b4950fSJonas Paulsson; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2b4b4950fSJonas Paulsson; RUN: llc -mtriple=s390x-linux-gnu -mcpu=z15 < %s | FileCheck %s --check-prefixes=CHECK,Z15
3b4b4950fSJonas Paulsson; RUN: llc -mtriple=s390x-linux-gnu -mcpu=z13 < %s | FileCheck %s --check-prefixes=CHECK,Z13
4b4b4950fSJonas Paulsson;
5b4b4950fSJonas Paulsson; Test inline assembly where the operand is bitcasted.
6b4b4950fSJonas Paulsson
7b4b4950fSJonas Paulssondefine signext i32 @int_and_f(i32 signext %cc_dep1) {
8b4b4950fSJonas Paulsson; CHECK-LABEL: int_and_f:
9b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
10b4b4950fSJonas Paulsson; CHECK-NEXT:    vlvgf %v0, %r2, 0
11b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
12b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
13b4b4950fSJonas Paulsson; CHECK-NEXT:    vlgvf %r0, %v0, 0
14b4b4950fSJonas Paulsson; CHECK-NEXT:    lgfr %r2, %r0
15b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
16b4b4950fSJonas Paulssonentry:
17b4b4950fSJonas Paulsson  %0 = tail call i32 asm sideeffect "", "=f,0"(i32 %cc_dep1)
18b4b4950fSJonas Paulsson  ret i32 %0
19b4b4950fSJonas Paulsson}
20b4b4950fSJonas Paulsson
21b4b4950fSJonas Paulssondefine i64 @long_and_f(i64 %cc_dep1) {
22b4b4950fSJonas Paulsson; CHECK-LABEL: long_and_f:
23b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
24b4b4950fSJonas Paulsson; CHECK-NEXT:    ldgr %f0, %r2
25b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
26b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
27b4b4950fSJonas Paulsson; CHECK-NEXT:    lgdr %r2, %f0
28b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
29b4b4950fSJonas Paulssonentry:
30b4b4950fSJonas Paulsson  %0 = tail call i64 asm sideeffect "", "=f,0"(i64 %cc_dep1)
31b4b4950fSJonas Paulsson  ret i64 %0
32b4b4950fSJonas Paulsson}
33b4b4950fSJonas Paulsson
34b4b4950fSJonas Paulssondefine void @__int128_and_f(ptr noalias nocapture writeonly sret(i128) align 8 %agg.result, ptr %0) {
35b4b4950fSJonas Paulsson; Z15-LABEL: __int128_and_f:
36b4b4950fSJonas Paulsson; Z15:       # %bb.0: # %entry
37b4b4950fSJonas Paulsson; Z15-NEXT:    vl %v0, 0(%r3), 3
38b4b4950fSJonas Paulsson; Z15-NEXT:    vrepg %v2, %v0, 1
39b4b4950fSJonas Paulsson; Z15-NEXT:    #APP
40b4b4950fSJonas Paulsson; Z15-NEXT:    #NO_APP
41b4b4950fSJonas Paulsson; Z15-NEXT:    vmrhg %v0, %v0, %v2
42b4b4950fSJonas Paulsson; Z15-NEXT:    vst %v0, 0(%r2), 3
43b4b4950fSJonas Paulsson; Z15-NEXT:    br %r14
44b4b4950fSJonas Paulsson;
45b4b4950fSJonas Paulsson; Z13-LABEL: __int128_and_f:
46b4b4950fSJonas Paulsson; Z13:       # %bb.0: # %entry
47b4b4950fSJonas Paulsson; Z13-NEXT:    ld %f0, 0(%r3)
48b4b4950fSJonas Paulsson; Z13-NEXT:    ld %f2, 8(%r3)
49b4b4950fSJonas Paulsson; Z13-NEXT:    #APP
50b4b4950fSJonas Paulsson; Z13-NEXT:    #NO_APP
51b4b4950fSJonas Paulsson; Z13-NEXT:    std %f0, 0(%r2)
52b4b4950fSJonas Paulsson; Z13-NEXT:    std %f2, 8(%r2)
53b4b4950fSJonas Paulsson; Z13-NEXT:    br %r14
54b4b4950fSJonas Paulssonentry:
55b4b4950fSJonas Paulsson  %cc_dep1 = load i128, ptr %0, align 8
56b4b4950fSJonas Paulsson  %1 = tail call i128 asm sideeffect "", "=f,0"(i128 %cc_dep1)
57b4b4950fSJonas Paulsson  store i128 %1, ptr %agg.result, align 8
58b4b4950fSJonas Paulsson  ret void
59b4b4950fSJonas Paulsson}
60b4b4950fSJonas Paulsson
61b4b4950fSJonas Paulssondefine signext i32 @int_and_v(i32 signext %cc_dep1) {
62b4b4950fSJonas Paulsson; CHECK-LABEL: int_and_v:
63b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
64b4b4950fSJonas Paulsson; CHECK-NEXT:    vlvgf %v0, %r2, 0
65b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
66b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
67b4b4950fSJonas Paulsson; CHECK-NEXT:    vlgvf %r0, %v0, 0
68b4b4950fSJonas Paulsson; CHECK-NEXT:    lgfr %r2, %r0
69b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
70b4b4950fSJonas Paulssonentry:
71b4b4950fSJonas Paulsson  %0 = tail call i32 asm sideeffect "", "=v,0"(i32 %cc_dep1)
72b4b4950fSJonas Paulsson  ret i32 %0
73b4b4950fSJonas Paulsson}
74b4b4950fSJonas Paulsson
75b4b4950fSJonas Paulssondefine i64 @long_and_v(i64 %cc_dep1) {
76b4b4950fSJonas Paulsson; CHECK-LABEL: long_and_v:
77b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
78b4b4950fSJonas Paulsson; CHECK-NEXT:    ldgr %f0, %r2
79b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
80b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
81b4b4950fSJonas Paulsson; CHECK-NEXT:    lgdr %r2, %f0
82b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
83b4b4950fSJonas Paulssonentry:
84b4b4950fSJonas Paulsson  %0 = tail call i64 asm sideeffect "", "=v,0"(i64 %cc_dep1)
85b4b4950fSJonas Paulsson  ret i64 %0
86b4b4950fSJonas Paulsson}
87b4b4950fSJonas Paulsson
88b4b4950fSJonas Paulssondefine void @__int128_and_v(ptr noalias nocapture writeonly sret(i128) align 8 %agg.result, ptr %0) {
89b4b4950fSJonas Paulsson; CHECK-LABEL: __int128_and_v:
90b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
91b4b4950fSJonas Paulsson; CHECK-NEXT:    vl %v0, 0(%r3), 3
92b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
93b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
94b4b4950fSJonas Paulsson; CHECK-NEXT:    vst %v0, 0(%r2), 3
95b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
96b4b4950fSJonas Paulssonentry:
97b4b4950fSJonas Paulsson  %cc_dep1 = load i128, ptr %0, align 8
98b4b4950fSJonas Paulsson  %1 = tail call i128 asm sideeffect "", "=v,0"(i128 %cc_dep1)
99b4b4950fSJonas Paulsson  store i128 %1, ptr %agg.result, align 8
100b4b4950fSJonas Paulsson  ret void
101b4b4950fSJonas Paulsson}
102b4b4950fSJonas Paulsson
103b4b4950fSJonas Paulssondefine float @float_and_r(float %cc_dep1) {
104b4b4950fSJonas Paulsson; CHECK-LABEL: float_and_r:
105b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
106b4b4950fSJonas Paulsson; CHECK-NEXT:    vlgvf %r0, %v0, 0
107b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
108b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
109b4b4950fSJonas Paulsson; CHECK-NEXT:    vlvgf %v0, %r0, 0
110b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
111b4b4950fSJonas Paulssonentry:
112b4b4950fSJonas Paulsson  %0 = tail call float asm sideeffect "", "=r,0"(float %cc_dep1)
113b4b4950fSJonas Paulsson  ret float %0
114b4b4950fSJonas Paulsson}
115b4b4950fSJonas Paulsson
116b4b4950fSJonas Paulssondefine double @double_and_r(double %cc_dep1) {
117b4b4950fSJonas Paulsson; CHECK-LABEL: double_and_r:
118b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
119b4b4950fSJonas Paulsson; CHECK-NEXT:    lgdr %r0, %f0
120b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
121b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
122b4b4950fSJonas Paulsson; CHECK-NEXT:    ldgr %f0, %r0
123b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
124b4b4950fSJonas Paulssonentry:
125b4b4950fSJonas Paulsson  %0 = tail call double asm sideeffect "", "=r,0"(double %cc_dep1)
126b4b4950fSJonas Paulsson  ret double %0
127b4b4950fSJonas Paulsson}
128b4b4950fSJonas Paulsson
129b4b4950fSJonas Paulssondefine void @longdouble_and_r(ptr noalias nocapture writeonly sret(fp128) align 8 %agg.result, ptr %0) {
130b4b4950fSJonas Paulsson; CHECK-LABEL: longdouble_and_r:
131b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
132b4b4950fSJonas Paulsson; CHECK-NEXT:    lg %r1, 8(%r3)
133b4b4950fSJonas Paulsson; CHECK-NEXT:    lg %r0, 0(%r3)
134b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
135b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
136b4b4950fSJonas Paulsson; CHECK-NEXT:    stg %r1, 8(%r2)
137b4b4950fSJonas Paulsson; CHECK-NEXT:    stg %r0, 0(%r2)
138b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
139b4b4950fSJonas Paulssonentry:
140b4b4950fSJonas Paulsson  %cc_dep1 = load fp128, ptr %0, align 8
141b4b4950fSJonas Paulsson  %1 = tail call fp128 asm sideeffect "", "=r,0"(fp128 %cc_dep1)
142b4b4950fSJonas Paulsson  store fp128 %1, ptr %agg.result, align 8
143b4b4950fSJonas Paulsson  ret void
144b4b4950fSJonas Paulsson}
145b4b4950fSJonas Paulsson
146b4b4950fSJonas Paulssondefine float @float_and_v(float %cc_dep1) {
147b4b4950fSJonas Paulsson; CHECK-LABEL: float_and_v:
148b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
149b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
150b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
151b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
152b4b4950fSJonas Paulssonentry:
153b4b4950fSJonas Paulsson  %0 = tail call float asm sideeffect "", "=v,0"(float %cc_dep1)
154b4b4950fSJonas Paulsson  ret float %0
155b4b4950fSJonas Paulsson}
156b4b4950fSJonas Paulsson
157b4b4950fSJonas Paulssondefine double @double_and_v(double %cc_dep1) {
158b4b4950fSJonas Paulsson; CHECK-LABEL: double_and_v:
159b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
160b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
161b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
162b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
163b4b4950fSJonas Paulssonentry:
164b4b4950fSJonas Paulsson  %0 = tail call double asm sideeffect "", "=v,0"(double %cc_dep1)
165b4b4950fSJonas Paulsson  ret double %0
166b4b4950fSJonas Paulsson}
167b4b4950fSJonas Paulsson
168b4b4950fSJonas Paulssondefine void @longdouble_and_v(ptr noalias nocapture writeonly sret(fp128) align 8 %agg.result, ptr %0) {
169b4b4950fSJonas Paulsson; CHECK-LABEL: longdouble_and_v:
170b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
171b4b4950fSJonas Paulsson; CHECK-NEXT:    vl %v0, 0(%r3), 3
172b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
173b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
174b4b4950fSJonas Paulsson; CHECK-NEXT:    vst %v0, 0(%r2), 3
175b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
176b4b4950fSJonas Paulssonentry:
177b4b4950fSJonas Paulsson  %cc_dep1 = load fp128, ptr %0, align 8
178b4b4950fSJonas Paulsson  %1 = tail call fp128 asm sideeffect "", "=v,0"(fp128 %cc_dep1)
179b4b4950fSJonas Paulsson  store fp128 %1, ptr %agg.result, align 8
180b4b4950fSJonas Paulsson  ret void
181b4b4950fSJonas Paulsson}
182b4b4950fSJonas Paulsson
183b4b4950fSJonas Paulssondefine <2 x i16> @vec32_and_r(<2 x i16> %cc_dep1) {
184b4b4950fSJonas Paulsson; CHECK-LABEL: vec32_and_r:
185b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
186b4b4950fSJonas Paulsson; CHECK-NEXT:    vlgvf %r0, %v24, 0
187b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
188b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
189b4b4950fSJonas Paulsson; CHECK-NEXT:    vlvgf %v24, %r0, 0
190b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
191b4b4950fSJonas Paulssonentry:
192b4b4950fSJonas Paulsson  %0 = tail call <2 x i16> asm sideeffect "", "=r,0"(<2 x i16> %cc_dep1)
193b4b4950fSJonas Paulsson  ret <2 x i16> %0
194b4b4950fSJonas Paulsson}
195b4b4950fSJonas Paulsson
196b4b4950fSJonas Paulssondefine <2 x i32> @vec64_and_r(<2 x i32> %cc_dep1) {
197b4b4950fSJonas Paulsson; CHECK-LABEL: vec64_and_r:
198b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
199b4b4950fSJonas Paulsson; CHECK-NEXT:    vlgvg %r0, %v24, 0
200b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
201b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
202b4b4950fSJonas Paulsson; CHECK-NEXT:    vlvgg %v24, %r0, 0
203b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
204b4b4950fSJonas Paulssonentry:
205b4b4950fSJonas Paulsson  %0 = tail call <2 x i32> asm sideeffect "", "=r,0"(<2 x i32> %cc_dep1)
206b4b4950fSJonas Paulsson  ret <2 x i32> %0
207b4b4950fSJonas Paulsson}
208b4b4950fSJonas Paulsson
209b4b4950fSJonas Paulssondefine <4 x i32> @vec128_and_r(<4 x i32> %cc_dep1) {
210b4b4950fSJonas Paulsson; CHECK-LABEL: vec128_and_r:
211b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
212b4b4950fSJonas Paulsson; CHECK-NEXT:    vlgvg %r1, %v24, 1
213b4b4950fSJonas Paulsson; CHECK-NEXT:    vlgvg %r0, %v24, 0
214b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
215b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
216b4b4950fSJonas Paulsson; CHECK-NEXT:    vlvgp %v24, %r0, %r1
217b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
218b4b4950fSJonas Paulssonentry:
219b4b4950fSJonas Paulsson  %0 = tail call <4 x i32> asm sideeffect "", "=r,0"(<4 x i32> %cc_dep1)
220b4b4950fSJonas Paulsson  ret <4 x i32> %0
221b4b4950fSJonas Paulsson}
222b4b4950fSJonas Paulsson
223b4b4950fSJonas Paulssondefine <2 x i16> @vec32_and_f(<2 x i16> %cc_dep1) {
224b4b4950fSJonas Paulsson; CHECK-LABEL: vec32_and_f:
225b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
226b4b4950fSJonas Paulsson; CHECK-NEXT:    vlr %v0, %v24
227b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
228b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
229b4b4950fSJonas Paulsson; CHECK-NEXT:    vlr %v24, %v0
230b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
231b4b4950fSJonas Paulssonentry:
232b4b4950fSJonas Paulsson  %0 = tail call <2 x i16> asm sideeffect "", "=f,0"(<2 x i16> %cc_dep1)
233b4b4950fSJonas Paulsson  ret <2 x i16> %0
234b4b4950fSJonas Paulsson}
235b4b4950fSJonas Paulsson
236b4b4950fSJonas Paulssondefine <2 x i32> @vec64_and_f(<2 x i32> %cc_dep1) {
237b4b4950fSJonas Paulsson; CHECK-LABEL: vec64_and_f:
238b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
239b4b4950fSJonas Paulsson; CHECK-NEXT:    vlr %v0, %v24
240b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
241b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
242b4b4950fSJonas Paulsson; CHECK-NEXT:    vlr %v24, %v0
243b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
244b4b4950fSJonas Paulssonentry:
245b4b4950fSJonas Paulsson  %0 = tail call <2 x i32> asm sideeffect "", "=f,0"(<2 x i32> %cc_dep1)
246b4b4950fSJonas Paulsson  ret <2 x i32> %0
247b4b4950fSJonas Paulsson}
248b4b4950fSJonas Paulsson
249b4b4950fSJonas Paulssondefine <4 x i32> @vec128_and_f(<4 x i32> %cc_dep1) {
250b4b4950fSJonas Paulsson; CHECK-LABEL: vec128_and_f:
251b4b4950fSJonas Paulsson; CHECK:       # %bb.0: # %entry
252e2e3f068SJay Foad; CHECK-NEXT:    vlr %v0, %v24
253*56d92c17SJay Foad; CHECK-NEXT:    vrepg %v2, %v24, 1
254b4b4950fSJonas Paulsson; CHECK-NEXT:    #APP
255b4b4950fSJonas Paulsson; CHECK-NEXT:    #NO_APP
256b4b4950fSJonas Paulsson; CHECK-NEXT:    vmrhg %v24, %v0, %v2
257b4b4950fSJonas Paulsson; CHECK-NEXT:    br %r14
258b4b4950fSJonas Paulssonentry:
259b4b4950fSJonas Paulsson  %0 = tail call <4 x i32> asm sideeffect "", "=f,0"(<4 x i32> %cc_dep1)
260b4b4950fSJonas Paulsson  ret <4 x i32> %0
261b4b4950fSJonas Paulsson}
262b4b4950fSJonas Paulsson
263