315 lines · plain
1; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s2 3;;; Test vector floating compare intrinsic instructions4;;;5;;; Note:6;;; We test VFCMP*vvl, VFCMP*vvl_v, VFCMP*rvl, VFCMP*rvl_v, VFCMP*vvml_v,7;;; VFCMP*rvml_v, PVFCMP*vvl, PVFCMP*vvl_v, PVFCMP*rvl, PVFCMP*rvl_v,8;;; PVFCMP*vvml_v, and PVFCMP*rvml_v instructions.9 10; Function Attrs: nounwind readnone11define fastcc <256 x double> @vfcmpd_vvvl(<256 x double> %0, <256 x double> %1) {12; CHECK-LABEL: vfcmpd_vvvl:13; CHECK: # %bb.0:14; CHECK-NEXT: lea %s0, 25615; CHECK-NEXT: lvl %s016; CHECK-NEXT: vfcmp.d %v0, %v0, %v117; CHECK-NEXT: b.l.t (, %s10)18 %3 = tail call fast <256 x double> @llvm.ve.vl.vfcmpd.vvvl(<256 x double> %0, <256 x double> %1, i32 256)19 ret <256 x double> %320}21 22; Function Attrs: nounwind readnone23declare <256 x double> @llvm.ve.vl.vfcmpd.vvvl(<256 x double>, <256 x double>, i32)24 25; Function Attrs: nounwind readnone26define fastcc <256 x double> @vfcmpd_vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2) {27; CHECK-LABEL: vfcmpd_vvvvl:28; CHECK: # %bb.0:29; CHECK-NEXT: lea %s0, 12830; CHECK-NEXT: lvl %s031; CHECK-NEXT: vfcmp.d %v2, %v0, %v132; CHECK-NEXT: lea %s16, 25633; CHECK-NEXT: lvl %s1634; CHECK-NEXT: vor %v0, (0)1, %v235; CHECK-NEXT: b.l.t (, %s10)36 %4 = tail call fast <256 x double> @llvm.ve.vl.vfcmpd.vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2, i32 128)37 ret <256 x double> %438}39 40; Function Attrs: nounwind readnone41declare <256 x double> @llvm.ve.vl.vfcmpd.vvvvl(<256 x double>, <256 x double>, <256 x double>, i32)42 43; Function Attrs: nounwind readnone44define fastcc <256 x double> @vfcmpd_vsvl(double %0, <256 x double> %1) {45; CHECK-LABEL: vfcmpd_vsvl:46; CHECK: # %bb.0:47; CHECK-NEXT: lea %s1, 25648; CHECK-NEXT: lvl %s149; CHECK-NEXT: vfcmp.d %v0, %s0, %v050; CHECK-NEXT: b.l.t (, %s10)51 %3 = tail call fast <256 x double> @llvm.ve.vl.vfcmpd.vsvl(double %0, <256 x double> %1, i32 256)52 ret <256 x double> %353}54 55; Function Attrs: nounwind readnone56declare <256 x double> @llvm.ve.vl.vfcmpd.vsvl(double, <256 x double>, i32)57 58; Function Attrs: nounwind readnone59define fastcc <256 x double> @vfcmpd_vsvvl(double %0, <256 x double> %1, <256 x double> %2) {60; CHECK-LABEL: vfcmpd_vsvvl:61; CHECK: # %bb.0:62; CHECK-NEXT: lea %s1, 12863; CHECK-NEXT: lvl %s164; CHECK-NEXT: vfcmp.d %v1, %s0, %v065; CHECK-NEXT: lea %s16, 25666; CHECK-NEXT: lvl %s1667; CHECK-NEXT: vor %v0, (0)1, %v168; CHECK-NEXT: b.l.t (, %s10)69 %4 = tail call fast <256 x double> @llvm.ve.vl.vfcmpd.vsvvl(double %0, <256 x double> %1, <256 x double> %2, i32 128)70 ret <256 x double> %471}72 73; Function Attrs: nounwind readnone74declare <256 x double> @llvm.ve.vl.vfcmpd.vsvvl(double, <256 x double>, <256 x double>, i32)75 76; Function Attrs: nounwind readnone77define fastcc <256 x double> @vfcmpd_vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {78; CHECK-LABEL: vfcmpd_vvvmvl:79; CHECK: # %bb.0:80; CHECK-NEXT: lea %s0, 12881; CHECK-NEXT: lvl %s082; CHECK-NEXT: vfcmp.d %v2, %v0, %v1, %vm183; CHECK-NEXT: lea %s16, 25684; CHECK-NEXT: lvl %s1685; CHECK-NEXT: vor %v0, (0)1, %v286; CHECK-NEXT: b.l.t (, %s10)87 %5 = tail call fast <256 x double> @llvm.ve.vl.vfcmpd.vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128)88 ret <256 x double> %589}90 91; Function Attrs: nounwind readnone92declare <256 x double> @llvm.ve.vl.vfcmpd.vvvmvl(<256 x double>, <256 x double>, <256 x i1>, <256 x double>, i32)93 94; Function Attrs: nounwind readnone95define fastcc <256 x double> @vfcmpd_vsvmvl(double %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {96; CHECK-LABEL: vfcmpd_vsvmvl:97; CHECK: # %bb.0:98; CHECK-NEXT: lea %s1, 12899; CHECK-NEXT: lvl %s1100; CHECK-NEXT: vfcmp.d %v1, %s0, %v0, %vm1101; CHECK-NEXT: lea %s16, 256102; CHECK-NEXT: lvl %s16103; CHECK-NEXT: vor %v0, (0)1, %v1104; CHECK-NEXT: b.l.t (, %s10)105 %5 = tail call fast <256 x double> @llvm.ve.vl.vfcmpd.vsvmvl(double %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128)106 ret <256 x double> %5107}108 109; Function Attrs: nounwind readnone110declare <256 x double> @llvm.ve.vl.vfcmpd.vsvmvl(double, <256 x double>, <256 x i1>, <256 x double>, i32)111 112; Function Attrs: nounwind readnone113define fastcc <256 x double> @vfcmps_vvvl(<256 x double> %0, <256 x double> %1) {114; CHECK-LABEL: vfcmps_vvvl:115; CHECK: # %bb.0:116; CHECK-NEXT: lea %s0, 256117; CHECK-NEXT: lvl %s0118; CHECK-NEXT: vfcmp.s %v0, %v0, %v1119; CHECK-NEXT: b.l.t (, %s10)120 %3 = tail call fast <256 x double> @llvm.ve.vl.vfcmps.vvvl(<256 x double> %0, <256 x double> %1, i32 256)121 ret <256 x double> %3122}123 124; Function Attrs: nounwind readnone125declare <256 x double> @llvm.ve.vl.vfcmps.vvvl(<256 x double>, <256 x double>, i32)126 127; Function Attrs: nounwind readnone128define fastcc <256 x double> @vfcmps_vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2) {129; CHECK-LABEL: vfcmps_vvvvl:130; CHECK: # %bb.0:131; CHECK-NEXT: lea %s0, 128132; CHECK-NEXT: lvl %s0133; CHECK-NEXT: vfcmp.s %v2, %v0, %v1134; CHECK-NEXT: lea %s16, 256135; CHECK-NEXT: lvl %s16136; CHECK-NEXT: vor %v0, (0)1, %v2137; CHECK-NEXT: b.l.t (, %s10)138 %4 = tail call fast <256 x double> @llvm.ve.vl.vfcmps.vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2, i32 128)139 ret <256 x double> %4140}141 142; Function Attrs: nounwind readnone143declare <256 x double> @llvm.ve.vl.vfcmps.vvvvl(<256 x double>, <256 x double>, <256 x double>, i32)144 145; Function Attrs: nounwind readnone146define fastcc <256 x double> @vfcmps_vsvl(float %0, <256 x double> %1) {147; CHECK-LABEL: vfcmps_vsvl:148; CHECK: # %bb.0:149; CHECK-NEXT: lea %s1, 256150; CHECK-NEXT: lvl %s1151; CHECK-NEXT: vfcmp.s %v0, %s0, %v0152; CHECK-NEXT: b.l.t (, %s10)153 %3 = tail call fast <256 x double> @llvm.ve.vl.vfcmps.vsvl(float %0, <256 x double> %1, i32 256)154 ret <256 x double> %3155}156 157; Function Attrs: nounwind readnone158declare <256 x double> @llvm.ve.vl.vfcmps.vsvl(float, <256 x double>, i32)159 160; Function Attrs: nounwind readnone161define fastcc <256 x double> @vfcmps_vsvvl(float %0, <256 x double> %1, <256 x double> %2) {162; CHECK-LABEL: vfcmps_vsvvl:163; CHECK: # %bb.0:164; CHECK-NEXT: lea %s1, 128165; CHECK-NEXT: lvl %s1166; CHECK-NEXT: vfcmp.s %v1, %s0, %v0167; CHECK-NEXT: lea %s16, 256168; CHECK-NEXT: lvl %s16169; CHECK-NEXT: vor %v0, (0)1, %v1170; CHECK-NEXT: b.l.t (, %s10)171 %4 = tail call fast <256 x double> @llvm.ve.vl.vfcmps.vsvvl(float %0, <256 x double> %1, <256 x double> %2, i32 128)172 ret <256 x double> %4173}174 175; Function Attrs: nounwind readnone176declare <256 x double> @llvm.ve.vl.vfcmps.vsvvl(float, <256 x double>, <256 x double>, i32)177 178; Function Attrs: nounwind readnone179define fastcc <256 x double> @vfcmps_vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {180; CHECK-LABEL: vfcmps_vvvmvl:181; CHECK: # %bb.0:182; CHECK-NEXT: lea %s0, 128183; CHECK-NEXT: lvl %s0184; CHECK-NEXT: vfcmp.s %v2, %v0, %v1, %vm1185; CHECK-NEXT: lea %s16, 256186; CHECK-NEXT: lvl %s16187; CHECK-NEXT: vor %v0, (0)1, %v2188; CHECK-NEXT: b.l.t (, %s10)189 %5 = tail call fast <256 x double> @llvm.ve.vl.vfcmps.vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128)190 ret <256 x double> %5191}192 193; Function Attrs: nounwind readnone194declare <256 x double> @llvm.ve.vl.vfcmps.vvvmvl(<256 x double>, <256 x double>, <256 x i1>, <256 x double>, i32)195 196; Function Attrs: nounwind readnone197define fastcc <256 x double> @vfcmps_vsvmvl(float %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {198; CHECK-LABEL: vfcmps_vsvmvl:199; CHECK: # %bb.0:200; CHECK-NEXT: lea %s1, 128201; CHECK-NEXT: lvl %s1202; CHECK-NEXT: vfcmp.s %v1, %s0, %v0, %vm1203; CHECK-NEXT: lea %s16, 256204; CHECK-NEXT: lvl %s16205; CHECK-NEXT: vor %v0, (0)1, %v1206; CHECK-NEXT: b.l.t (, %s10)207 %5 = tail call fast <256 x double> @llvm.ve.vl.vfcmps.vsvmvl(float %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128)208 ret <256 x double> %5209}210 211; Function Attrs: nounwind readnone212declare <256 x double> @llvm.ve.vl.vfcmps.vsvmvl(float, <256 x double>, <256 x i1>, <256 x double>, i32)213 214; Function Attrs: nounwind readnone215define fastcc <256 x double> @pvfcmp_vvvl(<256 x double> %0, <256 x double> %1) {216; CHECK-LABEL: pvfcmp_vvvl:217; CHECK: # %bb.0:218; CHECK-NEXT: lea %s0, 256219; CHECK-NEXT: lvl %s0220; CHECK-NEXT: pvfcmp %v0, %v0, %v1221; CHECK-NEXT: b.l.t (, %s10)222 %3 = tail call fast <256 x double> @llvm.ve.vl.pvfcmp.vvvl(<256 x double> %0, <256 x double> %1, i32 256)223 ret <256 x double> %3224}225 226; Function Attrs: nounwind readnone227declare <256 x double> @llvm.ve.vl.pvfcmp.vvvl(<256 x double>, <256 x double>, i32)228 229; Function Attrs: nounwind readnone230define fastcc <256 x double> @pvfcmp_vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2) {231; CHECK-LABEL: pvfcmp_vvvvl:232; CHECK: # %bb.0:233; CHECK-NEXT: lea %s0, 128234; CHECK-NEXT: lvl %s0235; CHECK-NEXT: pvfcmp %v2, %v0, %v1236; CHECK-NEXT: lea %s16, 256237; CHECK-NEXT: lvl %s16238; CHECK-NEXT: vor %v0, (0)1, %v2239; CHECK-NEXT: b.l.t (, %s10)240 %4 = tail call fast <256 x double> @llvm.ve.vl.pvfcmp.vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2, i32 128)241 ret <256 x double> %4242}243 244; Function Attrs: nounwind readnone245declare <256 x double> @llvm.ve.vl.pvfcmp.vvvvl(<256 x double>, <256 x double>, <256 x double>, i32)246 247; Function Attrs: nounwind readnone248define fastcc <256 x double> @pvfcmp_vsvl(i64 %0, <256 x double> %1) {249; CHECK-LABEL: pvfcmp_vsvl:250; CHECK: # %bb.0:251; CHECK-NEXT: lea %s1, 256252; CHECK-NEXT: lvl %s1253; CHECK-NEXT: pvfcmp %v0, %s0, %v0254; CHECK-NEXT: b.l.t (, %s10)255 %3 = tail call fast <256 x double> @llvm.ve.vl.pvfcmp.vsvl(i64 %0, <256 x double> %1, i32 256)256 ret <256 x double> %3257}258 259; Function Attrs: nounwind readnone260declare <256 x double> @llvm.ve.vl.pvfcmp.vsvl(i64, <256 x double>, i32)261 262; Function Attrs: nounwind readnone263define fastcc <256 x double> @pvfcmp_vsvvl(i64 %0, <256 x double> %1, <256 x double> %2) {264; CHECK-LABEL: pvfcmp_vsvvl:265; CHECK: # %bb.0:266; CHECK-NEXT: lea %s1, 128267; CHECK-NEXT: lvl %s1268; CHECK-NEXT: pvfcmp %v1, %s0, %v0269; CHECK-NEXT: lea %s16, 256270; CHECK-NEXT: lvl %s16271; CHECK-NEXT: vor %v0, (0)1, %v1272; CHECK-NEXT: b.l.t (, %s10)273 %4 = tail call fast <256 x double> @llvm.ve.vl.pvfcmp.vsvvl(i64 %0, <256 x double> %1, <256 x double> %2, i32 128)274 ret <256 x double> %4275}276 277; Function Attrs: nounwind readnone278declare <256 x double> @llvm.ve.vl.pvfcmp.vsvvl(i64, <256 x double>, <256 x double>, i32)279 280; Function Attrs: nounwind readnone281define fastcc <256 x double> @pvfcmp_vvvMvl(<256 x double> %0, <256 x double> %1, <512 x i1> %2, <256 x double> %3) {282; CHECK-LABEL: pvfcmp_vvvMvl:283; CHECK: # %bb.0:284; CHECK-NEXT: lea %s0, 128285; CHECK-NEXT: lvl %s0286; CHECK-NEXT: pvfcmp %v2, %v0, %v1, %vm2287; CHECK-NEXT: lea %s16, 256288; CHECK-NEXT: lvl %s16289; CHECK-NEXT: vor %v0, (0)1, %v2290; CHECK-NEXT: b.l.t (, %s10)291 %5 = tail call fast <256 x double> @llvm.ve.vl.pvfcmp.vvvMvl(<256 x double> %0, <256 x double> %1, <512 x i1> %2, <256 x double> %3, i32 128)292 ret <256 x double> %5293}294 295; Function Attrs: nounwind readnone296declare <256 x double> @llvm.ve.vl.pvfcmp.vvvMvl(<256 x double>, <256 x double>, <512 x i1>, <256 x double>, i32)297 298; Function Attrs: nounwind readnone299define fastcc <256 x double> @pvfcmp_vsvMvl(i64 %0, <256 x double> %1, <512 x i1> %2, <256 x double> %3) {300; CHECK-LABEL: pvfcmp_vsvMvl:301; CHECK: # %bb.0:302; CHECK-NEXT: lea %s1, 128303; CHECK-NEXT: lvl %s1304; CHECK-NEXT: pvfcmp %v1, %s0, %v0, %vm2305; CHECK-NEXT: lea %s16, 256306; CHECK-NEXT: lvl %s16307; CHECK-NEXT: vor %v0, (0)1, %v1308; CHECK-NEXT: b.l.t (, %s10)309 %5 = tail call fast <256 x double> @llvm.ve.vl.pvfcmp.vsvMvl(i64 %0, <256 x double> %1, <512 x i1> %2, <256 x double> %3, i32 128)310 ret <256 x double> %5311}312 313; Function Attrs: nounwind readnone314declare <256 x double> @llvm.ve.vl.pvfcmp.vsvMvl(i64, <256 x double>, <512 x i1>, <256 x double>, i32)315