Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / SystemZ / vec-strict-conv-03.ll
blobfd3825f04692e1cfeab8d1b1f66df5147d8ab941
1 ; Test strict conversions between integer and float elements on z15.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z15 | FileCheck %s
5 declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata)
6 declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata)
7 declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
8 declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
10 ; Test conversion of f32s to signed i32s.
11 define <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
20 ; Test conversion of f32s to unsigned i32s.
21 define <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
30 ; Test conversion of signed i32s to f32s.
31 define <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
41 ; Test conversion of unsigned i32s to f32s.
42 define <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
52 attributes #0 = { strictfp }