• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; Test strict conversions between integer and float elements on z15.
2;
3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z15 | FileCheck %s
4
5declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata)
6declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata)
7declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
8declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
9
10; Test conversion of f32s to signed i32s.
11define <4 x i32> @f1(<4 x float> %floats) #0 {
12; CHECK-LABEL: f1:
13; CHECK: vcfeb %v24, %v24, 0, 5
14; CHECK: br %r14
15  %words = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float> %floats,
16                                               metadata !"fpexcept.strict") #0
17  ret <4 x i32> %words
18}
19
20; Test conversion of f32s to unsigned i32s.
21define <4 x i32> @f2(<4 x float> %floats) #0 {
22; CHECK-LABEL: f2:
23; CHECK: vclfeb %v24, %v24, 0, 5
24; CHECK: br %r14
25  %words = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float> %floats,
26                                               metadata !"fpexcept.strict") #0
27  ret <4 x i32> %words
28}
29
30; Test conversion of signed i32s to f32s.
31define <4 x float> @f3(<4 x i32> %dwords) #0 {
32; CHECK-LABEL: f3:
33; CHECK: vcefb %v24, %v24, 0, 0
34; CHECK: br %r14
35  %floats = call <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %dwords,
36                                               metadata !"round.dynamic",
37                                               metadata !"fpexcept.strict") #0
38  ret <4 x float> %floats
39}
40
41; Test conversion of unsigned i32s to f32s.
42define <4 x float> @f4(<4 x i32> %dwords) #0 {
43; CHECK-LABEL: f4:
44; CHECK: vcelfb %v24, %v24, 0, 0
45; CHECK: br %r14
46  %floats = call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %dwords,
47                                               metadata !"round.dynamic",
48                                               metadata !"fpexcept.strict") #0
49  ret <4 x float> %floats
50}
51
52attributes #0 = { strictfp }
53