1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s 4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \ 5; RUN: -verify-machineinstrs < %s | FileCheck %s 6 7declare <2 x half> @llvm.experimental.constrained.sqrt.v2f16(<2 x half>, metadata, metadata) 8 9define <2 x half> @vfsqrt_v2f16(<2 x half> %v) strictfp { 10; CHECK-LABEL: vfsqrt_v2f16: 11; CHECK: # %bb.0: 12; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 13; CHECK-NEXT: vfsqrt.v v8, v8 14; CHECK-NEXT: ret 15 %r = call <2 x half> @llvm.experimental.constrained.sqrt.v2f16(<2 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict") 16 ret <2 x half> %r 17} 18 19declare <4 x half> @llvm.experimental.constrained.sqrt.v4f16(<4 x half>, metadata, metadata) 20 21define <4 x half> @vfsqrt_v4f16(<4 x half> %v) strictfp { 22; CHECK-LABEL: vfsqrt_v4f16: 23; CHECK: # %bb.0: 24; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 25; CHECK-NEXT: vfsqrt.v v8, v8 26; CHECK-NEXT: ret 27 %r = call <4 x half> @llvm.experimental.constrained.sqrt.v4f16(<4 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict") 28 ret <4 x half> %r 29} 30 31declare <8 x half> @llvm.experimental.constrained.sqrt.v8f16(<8 x half>, metadata, metadata) 32 33define <8 x half> @vfsqrt_v8f16(<8 x half> %v) strictfp { 34; CHECK-LABEL: vfsqrt_v8f16: 35; CHECK: # %bb.0: 36; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 37; CHECK-NEXT: vfsqrt.v v8, v8 38; CHECK-NEXT: ret 39 %r = call <8 x half> @llvm.experimental.constrained.sqrt.v8f16(<8 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict") 40 ret <8 x half> %r 41} 42 43declare <16 x half> @llvm.experimental.constrained.sqrt.v16f16(<16 x half>, metadata, metadata) 44 45define <16 x half> @vfsqrt_v16f16(<16 x half> %v) strictfp { 46; CHECK-LABEL: vfsqrt_v16f16: 47; CHECK: # %bb.0: 48; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 49; CHECK-NEXT: vfsqrt.v v8, v8 50; CHECK-NEXT: ret 51 %r = call <16 x half> @llvm.experimental.constrained.sqrt.v16f16(<16 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict") 52 ret <16 x half> %r 53} 54 55declare <32 x half> @llvm.experimental.constrained.sqrt.v32f16(<32 x half>, metadata, metadata) 56 57define <32 x half> @vfsqrt_v32f16(<32 x half> %v) strictfp { 58; CHECK-LABEL: vfsqrt_v32f16: 59; CHECK: # %bb.0: 60; CHECK-NEXT: li a0, 32 61; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 62; CHECK-NEXT: vfsqrt.v v8, v8 63; CHECK-NEXT: ret 64 %r = call <32 x half> @llvm.experimental.constrained.sqrt.v32f16(<32 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict") 65 ret <32 x half> %r 66} 67 68declare <2 x float> @llvm.experimental.constrained.sqrt.v2f32(<2 x float>, metadata, metadata) 69 70define <2 x float> @vfsqrt_v2f32(<2 x float> %v) strictfp { 71; CHECK-LABEL: vfsqrt_v2f32: 72; CHECK: # %bb.0: 73; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 74; CHECK-NEXT: vfsqrt.v v8, v8 75; CHECK-NEXT: ret 76 %r = call <2 x float> @llvm.experimental.constrained.sqrt.v2f32(<2 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict") 77 ret <2 x float> %r 78} 79 80declare <4 x float> @llvm.experimental.constrained.sqrt.v4f32(<4 x float>, metadata, metadata) 81 82define <4 x float> @vfsqrt_v4f32(<4 x float> %v) strictfp { 83; CHECK-LABEL: vfsqrt_v4f32: 84; CHECK: # %bb.0: 85; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 86; CHECK-NEXT: vfsqrt.v v8, v8 87; CHECK-NEXT: ret 88 %r = call <4 x float> @llvm.experimental.constrained.sqrt.v4f32(<4 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict") 89 ret <4 x float> %r 90} 91 92declare <8 x float> @llvm.experimental.constrained.sqrt.v8f32(<8 x float>, metadata, metadata) 93 94define <8 x float> @vfsqrt_v8f32(<8 x float> %v) strictfp { 95; CHECK-LABEL: vfsqrt_v8f32: 96; CHECK: # %bb.0: 97; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 98; CHECK-NEXT: vfsqrt.v v8, v8 99; CHECK-NEXT: ret 100 %r = call <8 x float> @llvm.experimental.constrained.sqrt.v8f32(<8 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict") 101 ret <8 x float> %r 102} 103 104declare <16 x float> @llvm.experimental.constrained.sqrt.v16f32(<16 x float>, metadata, metadata) 105 106define <16 x float> @vfsqrt_v16f32(<16 x float> %v) strictfp { 107; CHECK-LABEL: vfsqrt_v16f32: 108; CHECK: # %bb.0: 109; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 110; CHECK-NEXT: vfsqrt.v v8, v8 111; CHECK-NEXT: ret 112 %r = call <16 x float> @llvm.experimental.constrained.sqrt.v16f32(<16 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict") 113 ret <16 x float> %r 114} 115 116declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata) 117 118define <2 x double> @vfsqrt_v2f64(<2 x double> %v) strictfp { 119; CHECK-LABEL: vfsqrt_v2f64: 120; CHECK: # %bb.0: 121; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 122; CHECK-NEXT: vfsqrt.v v8, v8 123; CHECK-NEXT: ret 124 %r = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict") 125 ret <2 x double> %r 126} 127 128declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata) 129 130define <4 x double> @vfsqrt_v4f64(<4 x double> %v) strictfp { 131; CHECK-LABEL: vfsqrt_v4f64: 132; CHECK: # %bb.0: 133; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 134; CHECK-NEXT: vfsqrt.v v8, v8 135; CHECK-NEXT: ret 136 %r = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict") 137 ret <4 x double> %r 138} 139 140declare <8 x double> @llvm.experimental.constrained.sqrt.v8f64(<8 x double>, metadata, metadata) 141 142define <8 x double> @vfsqrt_v8f64(<8 x double> %v) strictfp { 143; CHECK-LABEL: vfsqrt_v8f64: 144; CHECK: # %bb.0: 145; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 146; CHECK-NEXT: vfsqrt.v v8, v8 147; CHECK-NEXT: ret 148 %r = call <8 x double> @llvm.experimental.constrained.sqrt.v8f64(<8 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict") 149 ret <8 x double> %r 150} 151