206 lines · plain
1; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s2 3;;; Test vector floating reciprocal square root intrinsic instructions4;;;5;;; Note:6;;; We test VRSQRT*vl, VRSQRT*vl_v, PVRSQRT*vl, and PVRSQRT*vl_v7;;; instructions.8 9; Function Attrs: nounwind readnone10define fastcc <256 x double> @vrsqrtd_vvl(<256 x double> %0) {11; CHECK-LABEL: vrsqrtd_vvl:12; CHECK: # %bb.0:13; CHECK-NEXT: lea %s0, 25614; CHECK-NEXT: lvl %s015; CHECK-NEXT: vrsqrt.d %v0, %v016; CHECK-NEXT: b.l.t (, %s10)17 %2 = tail call fast <256 x double> @llvm.ve.vl.vrsqrtd.vvl(<256 x double> %0, i32 256)18 ret <256 x double> %219}20 21; Function Attrs: nounwind readnone22declare <256 x double> @llvm.ve.vl.vrsqrtd.vvl(<256 x double>, i32)23 24; Function Attrs: nounwind readnone25define fastcc <256 x double> @vrsqrtd_vvvl(<256 x double> %0, <256 x double> %1) {26; CHECK-LABEL: vrsqrtd_vvvl:27; CHECK: # %bb.0:28; CHECK-NEXT: lea %s0, 12829; CHECK-NEXT: lvl %s030; CHECK-NEXT: vrsqrt.d %v1, %v031; CHECK-NEXT: lea %s16, 25632; CHECK-NEXT: lvl %s1633; CHECK-NEXT: vor %v0, (0)1, %v134; CHECK-NEXT: b.l.t (, %s10)35 %3 = tail call fast <256 x double> @llvm.ve.vl.vrsqrtd.vvvl(<256 x double> %0, <256 x double> %1, i32 128)36 ret <256 x double> %337}38 39; Function Attrs: nounwind readnone40declare <256 x double> @llvm.ve.vl.vrsqrtd.vvvl(<256 x double>, <256 x double>, i32)41 42; Function Attrs: nounwind readnone43define fastcc <256 x double> @vrsqrts_vvl(<256 x double> %0) {44; CHECK-LABEL: vrsqrts_vvl:45; CHECK: # %bb.0:46; CHECK-NEXT: lea %s0, 25647; CHECK-NEXT: lvl %s048; CHECK-NEXT: vrsqrt.s %v0, %v049; CHECK-NEXT: b.l.t (, %s10)50 %2 = tail call fast <256 x double> @llvm.ve.vl.vrsqrts.vvl(<256 x double> %0, i32 256)51 ret <256 x double> %252}53 54; Function Attrs: nounwind readnone55declare <256 x double> @llvm.ve.vl.vrsqrts.vvl(<256 x double>, i32)56 57; Function Attrs: nounwind readnone58define fastcc <256 x double> @vrsqrts_vvvl(<256 x double> %0, <256 x double> %1) {59; CHECK-LABEL: vrsqrts_vvvl:60; CHECK: # %bb.0:61; CHECK-NEXT: lea %s0, 12862; CHECK-NEXT: lvl %s063; CHECK-NEXT: vrsqrt.s %v1, %v064; CHECK-NEXT: lea %s16, 25665; CHECK-NEXT: lvl %s1666; CHECK-NEXT: vor %v0, (0)1, %v167; CHECK-NEXT: b.l.t (, %s10)68 %3 = tail call fast <256 x double> @llvm.ve.vl.vrsqrts.vvvl(<256 x double> %0, <256 x double> %1, i32 128)69 ret <256 x double> %370}71 72; Function Attrs: nounwind readnone73declare <256 x double> @llvm.ve.vl.vrsqrts.vvvl(<256 x double>, <256 x double>, i32)74 75; Function Attrs: nounwind readnone76define fastcc <256 x double> @vrsqrtdnex_vvl(<256 x double> %0) {77; CHECK-LABEL: vrsqrtdnex_vvl:78; CHECK: # %bb.0:79; CHECK-NEXT: lea %s0, 25680; CHECK-NEXT: lvl %s081; CHECK-NEXT: vrsqrt.d.nex %v0, %v082; CHECK-NEXT: b.l.t (, %s10)83 %2 = tail call fast <256 x double> @llvm.ve.vl.vrsqrtdnex.vvl(<256 x double> %0, i32 256)84 ret <256 x double> %285}86 87; Function Attrs: nounwind readnone88declare <256 x double> @llvm.ve.vl.vrsqrtdnex.vvl(<256 x double>, i32)89 90; Function Attrs: nounwind readnone91define fastcc <256 x double> @vrsqrtdnex_vvvl(<256 x double> %0, <256 x double> %1) {92; CHECK-LABEL: vrsqrtdnex_vvvl:93; CHECK: # %bb.0:94; CHECK-NEXT: lea %s0, 12895; CHECK-NEXT: lvl %s096; CHECK-NEXT: vrsqrt.d.nex %v1, %v097; CHECK-NEXT: lea %s16, 25698; CHECK-NEXT: lvl %s1699; CHECK-NEXT: vor %v0, (0)1, %v1100; CHECK-NEXT: b.l.t (, %s10)101 %3 = tail call fast <256 x double> @llvm.ve.vl.vrsqrtdnex.vvvl(<256 x double> %0, <256 x double> %1, i32 128)102 ret <256 x double> %3103}104 105; Function Attrs: nounwind readnone106declare <256 x double> @llvm.ve.vl.vrsqrtdnex.vvvl(<256 x double>, <256 x double>, i32)107 108; Function Attrs: nounwind readnone109define fastcc <256 x double> @vrsqrtsnex_vvl(<256 x double> %0) {110; CHECK-LABEL: vrsqrtsnex_vvl:111; CHECK: # %bb.0:112; CHECK-NEXT: lea %s0, 256113; CHECK-NEXT: lvl %s0114; CHECK-NEXT: vrsqrt.s.nex %v0, %v0115; CHECK-NEXT: b.l.t (, %s10)116 %2 = tail call fast <256 x double> @llvm.ve.vl.vrsqrtsnex.vvl(<256 x double> %0, i32 256)117 ret <256 x double> %2118}119 120; Function Attrs: nounwind readnone121declare <256 x double> @llvm.ve.vl.vrsqrtsnex.vvl(<256 x double>, i32)122 123; Function Attrs: nounwind readnone124define fastcc <256 x double> @vrsqrtsnex_vvvl(<256 x double> %0, <256 x double> %1) {125; CHECK-LABEL: vrsqrtsnex_vvvl:126; CHECK: # %bb.0:127; CHECK-NEXT: lea %s0, 128128; CHECK-NEXT: lvl %s0129; CHECK-NEXT: vrsqrt.s.nex %v1, %v0130; CHECK-NEXT: lea %s16, 256131; CHECK-NEXT: lvl %s16132; CHECK-NEXT: vor %v0, (0)1, %v1133; CHECK-NEXT: b.l.t (, %s10)134 %3 = tail call fast <256 x double> @llvm.ve.vl.vrsqrtsnex.vvvl(<256 x double> %0, <256 x double> %1, i32 128)135 ret <256 x double> %3136}137 138; Function Attrs: nounwind readnone139declare <256 x double> @llvm.ve.vl.vrsqrtsnex.vvvl(<256 x double>, <256 x double>, i32)140 141; Function Attrs: nounwind readnone142define fastcc <256 x double> @pvrsqrt_vvl(<256 x double> %0) {143; CHECK-LABEL: pvrsqrt_vvl:144; CHECK: # %bb.0:145; CHECK-NEXT: lea %s0, 256146; CHECK-NEXT: lvl %s0147; CHECK-NEXT: pvrsqrt %v0, %v0148; CHECK-NEXT: b.l.t (, %s10)149 %2 = tail call fast <256 x double> @llvm.ve.vl.pvrsqrt.vvl(<256 x double> %0, i32 256)150 ret <256 x double> %2151}152 153; Function Attrs: nounwind readnone154declare <256 x double> @llvm.ve.vl.pvrsqrt.vvl(<256 x double>, i32)155 156; Function Attrs: nounwind readnone157define fastcc <256 x double> @pvrsqrt_vvvl(<256 x double> %0, <256 x double> %1) {158; CHECK-LABEL: pvrsqrt_vvvl:159; CHECK: # %bb.0:160; CHECK-NEXT: lea %s0, 128161; CHECK-NEXT: lvl %s0162; CHECK-NEXT: pvrsqrt %v1, %v0163; CHECK-NEXT: lea %s16, 256164; CHECK-NEXT: lvl %s16165; CHECK-NEXT: vor %v0, (0)1, %v1166; CHECK-NEXT: b.l.t (, %s10)167 %3 = tail call fast <256 x double> @llvm.ve.vl.pvrsqrt.vvvl(<256 x double> %0, <256 x double> %1, i32 128)168 ret <256 x double> %3169}170 171; Function Attrs: nounwind readnone172declare <256 x double> @llvm.ve.vl.pvrsqrt.vvvl(<256 x double>, <256 x double>, i32)173 174; Function Attrs: nounwind readnone175define fastcc <256 x double> @pvrsqrtnex_vvl(<256 x double> %0) {176; CHECK-LABEL: pvrsqrtnex_vvl:177; CHECK: # %bb.0:178; CHECK-NEXT: lea %s0, 256179; CHECK-NEXT: lvl %s0180; CHECK-NEXT: pvrsqrt.nex %v0, %v0181; CHECK-NEXT: b.l.t (, %s10)182 %2 = tail call fast <256 x double> @llvm.ve.vl.pvrsqrtnex.vvl(<256 x double> %0, i32 256)183 ret <256 x double> %2184}185 186; Function Attrs: nounwind readnone187declare <256 x double> @llvm.ve.vl.pvrsqrtnex.vvl(<256 x double>, i32)188 189; Function Attrs: nounwind readnone190define fastcc <256 x double> @pvrsqrtnex_vvvl(<256 x double> %0, <256 x double> %1) {191; CHECK-LABEL: pvrsqrtnex_vvvl:192; CHECK: # %bb.0:193; CHECK-NEXT: lea %s0, 128194; CHECK-NEXT: lvl %s0195; CHECK-NEXT: pvrsqrt.nex %v1, %v0196; CHECK-NEXT: lea %s16, 256197; CHECK-NEXT: lvl %s16198; CHECK-NEXT: vor %v0, (0)1, %v1199; CHECK-NEXT: b.l.t (, %s10)200 %3 = tail call fast <256 x double> @llvm.ve.vl.pvrsqrtnex.vvvl(<256 x double> %0, <256 x double> %1, i32 128)201 ret <256 x double> %3202}203 204; Function Attrs: nounwind readnone205declare <256 x double> @llvm.ve.vl.pvrsqrtnex.vvvl(<256 x double>, <256 x double>, i32)206