212 lines · plain
1; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s2 3;;; Test floating divide intrinsic instructions4;;;5;;; Note:6;;; We test VFDIV*vvl, VFDIV*vvl_v, VFDIV*rvl, VFDIV*rvl_v, VFDIV*vvml_v, and7;;; VFDIV*rvml_v instructions.8 9; Function Attrs: nounwind readnone10define fastcc <256 x double> @vfdivd_vvvl(<256 x double> %0, <256 x double> %1) {11; CHECK-LABEL: vfdivd_vvvl:12; CHECK: # %bb.0:13; CHECK-NEXT: lea %s0, 25614; CHECK-NEXT: lvl %s015; CHECK-NEXT: vfdiv.d %v0, %v0, %v116; CHECK-NEXT: b.l.t (, %s10)17 %3 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vvvl(<256 x double> %0, <256 x double> %1, i32 256)18 ret <256 x double> %319}20 21; Function Attrs: nounwind readnone22declare <256 x double> @llvm.ve.vl.vfdivd.vvvl(<256 x double>, <256 x double>, i32)23 24; Function Attrs: nounwind readnone25define fastcc <256 x double> @vfdivd_vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2) {26; CHECK-LABEL: vfdivd_vvvvl:27; CHECK: # %bb.0:28; CHECK-NEXT: lea %s0, 12829; CHECK-NEXT: lvl %s030; CHECK-NEXT: vfdiv.d %v2, %v0, %v131; CHECK-NEXT: lea %s16, 25632; CHECK-NEXT: lvl %s1633; CHECK-NEXT: vor %v0, (0)1, %v234; CHECK-NEXT: b.l.t (, %s10)35 %4 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2, i32 128)36 ret <256 x double> %437}38 39; Function Attrs: nounwind readnone40declare <256 x double> @llvm.ve.vl.vfdivd.vvvvl(<256 x double>, <256 x double>, <256 x double>, i32)41 42; Function Attrs: nounwind readnone43define fastcc <256 x double> @vfdivd_vsvl(double %0, <256 x double> %1) {44; CHECK-LABEL: vfdivd_vsvl:45; CHECK: # %bb.0:46; CHECK-NEXT: lea %s1, 25647; CHECK-NEXT: lvl %s148; CHECK-NEXT: vfdiv.d %v0, %s0, %v049; CHECK-NEXT: b.l.t (, %s10)50 %3 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vsvl(double %0, <256 x double> %1, i32 256)51 ret <256 x double> %352}53 54; Function Attrs: nounwind readnone55declare <256 x double> @llvm.ve.vl.vfdivd.vsvl(double, <256 x double>, i32)56 57; Function Attrs: nounwind readnone58define fastcc <256 x double> @vfdivd_vsvvl(double %0, <256 x double> %1, <256 x double> %2) {59; CHECK-LABEL: vfdivd_vsvvl:60; CHECK: # %bb.0:61; CHECK-NEXT: lea %s1, 12862; CHECK-NEXT: lvl %s163; CHECK-NEXT: vfdiv.d %v1, %s0, %v064; CHECK-NEXT: lea %s16, 25665; CHECK-NEXT: lvl %s1666; CHECK-NEXT: vor %v0, (0)1, %v167; CHECK-NEXT: b.l.t (, %s10)68 %4 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vsvvl(double %0, <256 x double> %1, <256 x double> %2, i32 128)69 ret <256 x double> %470}71 72; Function Attrs: nounwind readnone73declare <256 x double> @llvm.ve.vl.vfdivd.vsvvl(double, <256 x double>, <256 x double>, i32)74 75; Function Attrs: nounwind readnone76define fastcc <256 x double> @vfdivd_vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {77; CHECK-LABEL: vfdivd_vvvmvl:78; CHECK: # %bb.0:79; CHECK-NEXT: lea %s0, 12880; CHECK-NEXT: lvl %s081; CHECK-NEXT: vfdiv.d %v2, %v0, %v1, %vm182; CHECK-NEXT: lea %s16, 25683; CHECK-NEXT: lvl %s1684; CHECK-NEXT: vor %v0, (0)1, %v285; CHECK-NEXT: b.l.t (, %s10)86 %5 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128)87 ret <256 x double> %588}89 90; Function Attrs: nounwind readnone91declare <256 x double> @llvm.ve.vl.vfdivd.vvvmvl(<256 x double>, <256 x double>, <256 x i1>, <256 x double>, i32)92 93; Function Attrs: nounwind readnone94define fastcc <256 x double> @vfdivd_vsvmvl(double %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {95; CHECK-LABEL: vfdivd_vsvmvl:96; CHECK: # %bb.0:97; CHECK-NEXT: lea %s1, 12898; CHECK-NEXT: lvl %s199; CHECK-NEXT: vfdiv.d %v1, %s0, %v0, %vm1100; CHECK-NEXT: lea %s16, 256101; CHECK-NEXT: lvl %s16102; CHECK-NEXT: vor %v0, (0)1, %v1103; CHECK-NEXT: b.l.t (, %s10)104 %5 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vsvmvl(double %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128)105 ret <256 x double> %5106}107 108; Function Attrs: nounwind readnone109declare <256 x double> @llvm.ve.vl.vfdivd.vsvmvl(double, <256 x double>, <256 x i1>, <256 x double>, i32)110 111; Function Attrs: nounwind readnone112define fastcc <256 x double> @vfdivs_vvvl(<256 x double> %0, <256 x double> %1) {113; CHECK-LABEL: vfdivs_vvvl:114; CHECK: # %bb.0:115; CHECK-NEXT: lea %s0, 256116; CHECK-NEXT: lvl %s0117; CHECK-NEXT: vfdiv.s %v0, %v0, %v1118; CHECK-NEXT: b.l.t (, %s10)119 %3 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vvvl(<256 x double> %0, <256 x double> %1, i32 256)120 ret <256 x double> %3121}122 123; Function Attrs: nounwind readnone124declare <256 x double> @llvm.ve.vl.vfdivs.vvvl(<256 x double>, <256 x double>, i32)125 126; Function Attrs: nounwind readnone127define fastcc <256 x double> @vfdivs_vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2) {128; CHECK-LABEL: vfdivs_vvvvl:129; CHECK: # %bb.0:130; CHECK-NEXT: lea %s0, 128131; CHECK-NEXT: lvl %s0132; CHECK-NEXT: vfdiv.s %v2, %v0, %v1133; CHECK-NEXT: lea %s16, 256134; CHECK-NEXT: lvl %s16135; CHECK-NEXT: vor %v0, (0)1, %v2136; CHECK-NEXT: b.l.t (, %s10)137 %4 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2, i32 128)138 ret <256 x double> %4139}140 141; Function Attrs: nounwind readnone142declare <256 x double> @llvm.ve.vl.vfdivs.vvvvl(<256 x double>, <256 x double>, <256 x double>, i32)143 144; Function Attrs: nounwind readnone145define fastcc <256 x double> @vfdivs_vsvl(float %0, <256 x double> %1) {146; CHECK-LABEL: vfdivs_vsvl:147; CHECK: # %bb.0:148; CHECK-NEXT: lea %s1, 256149; CHECK-NEXT: lvl %s1150; CHECK-NEXT: vfdiv.s %v0, %s0, %v0151; CHECK-NEXT: b.l.t (, %s10)152 %3 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vsvl(float %0, <256 x double> %1, i32 256)153 ret <256 x double> %3154}155 156; Function Attrs: nounwind readnone157declare <256 x double> @llvm.ve.vl.vfdivs.vsvl(float, <256 x double>, i32)158 159; Function Attrs: nounwind readnone160define fastcc <256 x double> @vfdivs_vsvvl(float %0, <256 x double> %1, <256 x double> %2) {161; CHECK-LABEL: vfdivs_vsvvl:162; CHECK: # %bb.0:163; CHECK-NEXT: lea %s1, 128164; CHECK-NEXT: lvl %s1165; CHECK-NEXT: vfdiv.s %v1, %s0, %v0166; CHECK-NEXT: lea %s16, 256167; CHECK-NEXT: lvl %s16168; CHECK-NEXT: vor %v0, (0)1, %v1169; CHECK-NEXT: b.l.t (, %s10)170 %4 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vsvvl(float %0, <256 x double> %1, <256 x double> %2, i32 128)171 ret <256 x double> %4172}173 174; Function Attrs: nounwind readnone175declare <256 x double> @llvm.ve.vl.vfdivs.vsvvl(float, <256 x double>, <256 x double>, i32)176 177; Function Attrs: nounwind readnone178define fastcc <256 x double> @vfdivs_vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {179; CHECK-LABEL: vfdivs_vvvmvl:180; CHECK: # %bb.0:181; CHECK-NEXT: lea %s0, 128182; CHECK-NEXT: lvl %s0183; CHECK-NEXT: vfdiv.s %v2, %v0, %v1, %vm1184; CHECK-NEXT: lea %s16, 256185; CHECK-NEXT: lvl %s16186; CHECK-NEXT: vor %v0, (0)1, %v2187; CHECK-NEXT: b.l.t (, %s10)188 %5 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128)189 ret <256 x double> %5190}191 192; Function Attrs: nounwind readnone193declare <256 x double> @llvm.ve.vl.vfdivs.vvvmvl(<256 x double>, <256 x double>, <256 x i1>, <256 x double>, i32)194 195; Function Attrs: nounwind readnone196define fastcc <256 x double> @vfdivs_vsvmvl(float %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {197; CHECK-LABEL: vfdivs_vsvmvl:198; CHECK: # %bb.0:199; CHECK-NEXT: lea %s1, 128200; CHECK-NEXT: lvl %s1201; CHECK-NEXT: vfdiv.s %v1, %s0, %v0, %vm1202; CHECK-NEXT: lea %s16, 256203; CHECK-NEXT: lvl %s16204; CHECK-NEXT: vor %v0, (0)1, %v1205; CHECK-NEXT: b.l.t (, %s10)206 %5 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vsvmvl(float %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128)207 ret <256 x double> %5208}209 210; Function Attrs: nounwind readnone211declare <256 x double> @llvm.ve.vl.vfdivs.vsvmvl(float, <256 x double>, <256 x i1>, <256 x double>, i32)212