138 lines · plain
1; Test v2f64 rounding.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s4 5declare double @llvm.rint.f64(double)6declare double @llvm.nearbyint.f64(double)7declare double @llvm.floor.f64(double)8declare double @llvm.ceil.f64(double)9declare double @llvm.trunc.f64(double)10declare double @llvm.round.f64(double)11declare double @llvm.roundeven.f64(double)12declare <2 x double> @llvm.rint.v2f64(<2 x double>)13declare <2 x double> @llvm.nearbyint.v2f64(<2 x double>)14declare <2 x double> @llvm.floor.v2f64(<2 x double>)15declare <2 x double> @llvm.ceil.v2f64(<2 x double>)16declare <2 x double> @llvm.trunc.v2f64(<2 x double>)17declare <2 x double> @llvm.round.v2f64(<2 x double>)18declare <2 x double> @llvm.roundeven.v2f64(<2 x double>)19 20define <2 x double> @f1(<2 x double> %val) {21; CHECK-LABEL: f1:22; CHECK: vfidb %v24, %v24, 0, 023; CHECK: br %r1424 %res = call <2 x double> @llvm.rint.v2f64(<2 x double> %val)25 ret <2 x double> %res26}27 28define <2 x double> @f2(<2 x double> %val) {29; CHECK-LABEL: f2:30; CHECK: vfidb %v24, %v24, 4, 031; CHECK: br %r1432 %res = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %val)33 ret <2 x double> %res34}35 36define <2 x double> @f3(<2 x double> %val) {37; CHECK-LABEL: f3:38; CHECK: vfidb %v24, %v24, 4, 739; CHECK: br %r1440 %res = call <2 x double> @llvm.floor.v2f64(<2 x double> %val)41 ret <2 x double> %res42}43 44define <2 x double> @f4(<2 x double> %val) {45; CHECK-LABEL: f4:46; CHECK: vfidb %v24, %v24, 4, 647; CHECK: br %r1448 %res = call <2 x double> @llvm.ceil.v2f64(<2 x double> %val)49 ret <2 x double> %res50}51 52define <2 x double> @f5(<2 x double> %val) {53; CHECK-LABEL: f5:54; CHECK: vfidb %v24, %v24, 4, 555; CHECK: br %r1456 %res = call <2 x double> @llvm.trunc.v2f64(<2 x double> %val)57 ret <2 x double> %res58}59 60define <2 x double> @f6(<2 x double> %val) {61; CHECK-LABEL: f6:62; CHECK: vfidb %v24, %v24, 4, 163; CHECK: br %r1464 %res = call <2 x double> @llvm.round.v2f64(<2 x double> %val)65 ret <2 x double> %res66}67 68define <2 x double> @f7(<2 x double> %val) {69; CHECK-LABEL: f7:70; CHECK: vfidb %v24, %v24, 4, 471; CHECK: br %r1472 %res = call <2 x double> @llvm.roundeven.v2f64(<2 x double> %val)73 ret <2 x double> %res74}75 76define double @f8(<2 x double> %val) {77; CHECK-LABEL: f8:78; CHECK: wfidb %f0, %v24, 0, 079; CHECK: br %r1480 %scalar = extractelement <2 x double> %val, i32 081 %res = call double @llvm.rint.f64(double %scalar)82 ret double %res83}84 85define double @f9(<2 x double> %val) {86; CHECK-LABEL: f9:87; CHECK: wfidb %f0, %v24, 4, 088; CHECK: br %r1489 %scalar = extractelement <2 x double> %val, i32 090 %res = call double @llvm.nearbyint.f64(double %scalar)91 ret double %res92}93 94define double @f10(<2 x double> %val) {95; CHECK-LABEL: f10:96; CHECK: wfidb %f0, %v24, 4, 797; CHECK: br %r1498 %scalar = extractelement <2 x double> %val, i32 099 %res = call double @llvm.floor.f64(double %scalar)100 ret double %res101}102 103define double @f11(<2 x double> %val) {104; CHECK-LABEL: f11:105; CHECK: wfidb %f0, %v24, 4, 6106; CHECK: br %r14107 %scalar = extractelement <2 x double> %val, i32 0108 %res = call double @llvm.ceil.f64(double %scalar)109 ret double %res110}111 112define double @f12(<2 x double> %val) {113; CHECK-LABEL: f12:114; CHECK: wfidb %f0, %v24, 4, 5115; CHECK: br %r14116 %scalar = extractelement <2 x double> %val, i32 0117 %res = call double @llvm.trunc.f64(double %scalar)118 ret double %res119}120 121define double @f13(<2 x double> %val) {122; CHECK-LABEL: f13:123; CHECK: wfidb %f0, %v24, 4, 1124; CHECK: br %r14125 %scalar = extractelement <2 x double> %val, i32 0126 %res = call double @llvm.round.f64(double %scalar)127 ret double %res128}129 130define double @f14(<2 x double> %val) {131; CHECK-LABEL: f14:132; CHECK: wfidb %f0, %v24, 4, 4133; CHECK: br %r14134 %scalar = extractelement <2 x double> %val, i32 0135 %res = call double @llvm.roundeven.f64(double %scalar)136 ret double %res137}138