173 lines · plain
1; Test strict v2f64 rounding.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s4 5declare double @llvm.experimental.constrained.rint.f64(double, metadata, metadata)6declare double @llvm.experimental.constrained.nearbyint.f64(double, metadata, metadata)7declare double @llvm.experimental.constrained.floor.f64(double, metadata)8declare double @llvm.experimental.constrained.ceil.f64(double, metadata)9declare double @llvm.experimental.constrained.trunc.f64(double, metadata)10declare double @llvm.experimental.constrained.round.f64(double, metadata)11declare double @llvm.experimental.constrained.roundeven.f64(double, metadata)12declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata)13declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata)14declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata)15declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata)16declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata)17declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata)18declare <2 x double> @llvm.experimental.constrained.roundeven.v2f64(<2 x double>, metadata)19 20define <2 x double> @f1(<2 x double> %val) #0 {21; CHECK-LABEL: f1:22; CHECK: vfidb %v24, %v24, 0, 023; CHECK: br %r1424 %res = call <2 x double> @llvm.experimental.constrained.rint.v2f64(25 <2 x double> %val,26 metadata !"round.dynamic",27 metadata !"fpexcept.strict") #028 ret <2 x double> %res29}30 31define <2 x double> @f2(<2 x double> %val) #0 {32; CHECK-LABEL: f2:33; CHECK: vfidb %v24, %v24, 4, 034; CHECK: br %r1435 %res = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(36 <2 x double> %val,37 metadata !"round.dynamic",38 metadata !"fpexcept.strict") #039 ret <2 x double> %res40}41 42define <2 x double> @f3(<2 x double> %val) #0 {43; CHECK-LABEL: f3:44; CHECK: vfidb %v24, %v24, 4, 745; CHECK: br %r1446 %res = call <2 x double> @llvm.experimental.constrained.floor.v2f64(47 <2 x double> %val,48 metadata !"fpexcept.strict") #049 ret <2 x double> %res50}51 52define <2 x double> @f4(<2 x double> %val) #0 {53; CHECK-LABEL: f4:54; CHECK: vfidb %v24, %v24, 4, 655; CHECK: br %r1456 %res = call <2 x double> @llvm.experimental.constrained.ceil.v2f64(57 <2 x double> %val,58 metadata !"fpexcept.strict") #059 ret <2 x double> %res60}61 62define <2 x double> @f5(<2 x double> %val) #0 {63; CHECK-LABEL: f5:64; CHECK: vfidb %v24, %v24, 4, 565; CHECK: br %r1466 %res = call <2 x double> @llvm.experimental.constrained.trunc.v2f64(67 <2 x double> %val,68 metadata !"fpexcept.strict") #069 ret <2 x double> %res70}71 72define <2 x double> @f6(<2 x double> %val) #0 {73; CHECK-LABEL: f6:74; CHECK: vfidb %v24, %v24, 4, 175; CHECK: br %r1476 %res = call <2 x double> @llvm.experimental.constrained.round.v2f64(77 <2 x double> %val,78 metadata !"fpexcept.strict") #079 ret <2 x double> %res80}81 82define <2 x double> @f7(<2 x double> %val) #0 {83; CHECK-LABEL: f7:84; CHECK: vfidb %v24, %v24, 4, 485; CHECK: br %r1486 %res = call <2 x double> @llvm.experimental.constrained.roundeven.v2f64(87 <2 x double> %val,88 metadata !"fpexcept.strict") #089 ret <2 x double> %res90}91 92define double @f8(<2 x double> %val) #0 {93; CHECK-LABEL: f8:94; CHECK: wfidb %f0, %v24, 0, 095; CHECK: br %r1496 %scalar = extractelement <2 x double> %val, i32 097 %res = call double @llvm.experimental.constrained.rint.f64(98 double %scalar,99 metadata !"round.dynamic",100 metadata !"fpexcept.strict") #0101 ret double %res102}103 104define double @f9(<2 x double> %val) #0 {105; CHECK-LABEL: f9:106; CHECK: wfidb %f0, %v24, 4, 0107; CHECK: br %r14108 %scalar = extractelement <2 x double> %val, i32 0109 %res = call double @llvm.experimental.constrained.nearbyint.f64(110 double %scalar,111 metadata !"round.dynamic",112 metadata !"fpexcept.strict") #0113 ret double %res114}115 116define double @f10(<2 x double> %val) #0 {117; CHECK-LABEL: f10:118; CHECK: wfidb %f0, %v24, 4, 7119; CHECK: br %r14120 %scalar = extractelement <2 x double> %val, i32 0121 %res = call double @llvm.experimental.constrained.floor.f64(122 double %scalar,123 metadata !"fpexcept.strict") #0124 ret double %res125}126 127 128define double @f11(<2 x double> %val) #0 {129; CHECK-LABEL: f11:130; CHECK: wfidb %f0, %v24, 4, 6131; CHECK: br %r14132 %scalar = extractelement <2 x double> %val, i32 0133 %res = call double @llvm.experimental.constrained.ceil.f64(134 double %scalar,135 metadata !"fpexcept.strict") #0136 ret double %res137}138 139define double @f12(<2 x double> %val) #0 {140; CHECK-LABEL: f12:141; CHECK: wfidb %f0, %v24, 4, 5142; CHECK: br %r14143 %scalar = extractelement <2 x double> %val, i32 0144 %res = call double @llvm.experimental.constrained.trunc.f64(145 double %scalar,146 metadata !"fpexcept.strict") #0147 ret double %res148}149 150define double @f13(<2 x double> %val) #0 {151; CHECK-LABEL: f13:152; CHECK: wfidb %f0, %v24, 4, 1153; CHECK: br %r14154 %scalar = extractelement <2 x double> %val, i32 0155 %res = call double @llvm.experimental.constrained.round.f64(156 double %scalar,157 metadata !"fpexcept.strict") #0158 ret double %res159}160 161define double @f14(<2 x double> %val) #0 {162; CHECK-LABEL: f14:163; CHECK: wfidb %f0, %v24, 4, 4164; CHECK: br %r14165 %scalar = extractelement <2 x double> %val, i32 0166 %res = call double @llvm.experimental.constrained.roundeven.f64(167 double %scalar,168 metadata !"fpexcept.strict") #0169 ret double %res170}171 172attributes #0 = { strictfp }173