213 lines · plain
1; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s2 3;;; Test vector and intrinsic instructions4;;;5;;; Note:6;;; We test VAND*vvl, VAND*vvl_v, VAND*rvl, VAND*rvl_v, VAND*vvml_v,7;;; VAND*rvml_v, PVAND*vvl, PVAND*vvl_v, PVAND*rvl, PVAND*rvl_v, PVAND*vvml_v,8;;; and PVAND*rvml_v instructions.9 10; Function Attrs: nounwind readnone11define fastcc <256 x double> @vand_vvvl(<256 x double> %0, <256 x double> %1) {12; CHECK-LABEL: vand_vvvl:13; CHECK: # %bb.0:14; CHECK-NEXT: lea %s0, 25615; CHECK-NEXT: lvl %s016; CHECK-NEXT: vand %v0, %v0, %v117; CHECK-NEXT: b.l.t (, %s10)18 %3 = tail call fast <256 x double> @llvm.ve.vl.vand.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.vand.vvvl(<256 x double>, <256 x double>, i32)24 25; Function Attrs: nounwind readnone26define fastcc <256 x double> @vand_vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2) {27; CHECK-LABEL: vand_vvvvl:28; CHECK: # %bb.0:29; CHECK-NEXT: lea %s0, 12830; CHECK-NEXT: lvl %s031; CHECK-NEXT: vand %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.vand.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.vand.vvvvl(<256 x double>, <256 x double>, <256 x double>, i32)42 43; Function Attrs: nounwind readnone44define fastcc <256 x double> @vand_vsvl(i64 %0, <256 x double> %1) {45; CHECK-LABEL: vand_vsvl:46; CHECK: # %bb.0:47; CHECK-NEXT: lea %s1, 25648; CHECK-NEXT: lvl %s149; CHECK-NEXT: vand %v0, %s0, %v050; CHECK-NEXT: b.l.t (, %s10)51 %3 = tail call fast <256 x double> @llvm.ve.vl.vand.vsvl(i64 %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.vand.vsvl(i64, <256 x double>, i32)57 58; Function Attrs: nounwind readnone59define fastcc <256 x double> @vand_vsvvl(i64 %0, <256 x double> %1, <256 x double> %2) {60; CHECK-LABEL: vand_vsvvl:61; CHECK: # %bb.0:62; CHECK-NEXT: lea %s1, 12863; CHECK-NEXT: lvl %s164; CHECK-NEXT: vand %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.vand.vsvvl(i64 %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.vand.vsvvl(i64, <256 x double>, <256 x double>, i32)75 76; Function Attrs: nounwind readnone77define fastcc <256 x double> @vand_vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {78; CHECK-LABEL: vand_vvvmvl:79; CHECK: # %bb.0:80; CHECK-NEXT: lea %s0, 12881; CHECK-NEXT: lvl %s082; CHECK-NEXT: vand %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.vand.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.vand.vvvmvl(<256 x double>, <256 x double>, <256 x i1>, <256 x double>, i32)93 94; Function Attrs: nounwind readnone95define fastcc <256 x double> @vand_vsvmvl(i64 %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {96; CHECK-LABEL: vand_vsvmvl:97; CHECK: # %bb.0:98; CHECK-NEXT: lea %s1, 12899; CHECK-NEXT: lvl %s1100; CHECK-NEXT: vand %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.vand.vsvmvl(i64 %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.vand.vsvmvl(i64, <256 x double>, <256 x i1>, <256 x double>, i32)111 112; Function Attrs: nounwind readnone113define fastcc <256 x double> @pvand_vvvl(<256 x double> %0, <256 x double> %1) {114; CHECK-LABEL: pvand_vvvl:115; CHECK: # %bb.0:116; CHECK-NEXT: lea %s0, 256117; CHECK-NEXT: lvl %s0118; CHECK-NEXT: pvand %v0, %v0, %v1119; CHECK-NEXT: b.l.t (, %s10)120 %3 = tail call fast <256 x double> @llvm.ve.vl.pvand.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.pvand.vvvl(<256 x double>, <256 x double>, i32)126 127; Function Attrs: nounwind readnone128define fastcc <256 x double> @pvand_vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2) {129; CHECK-LABEL: pvand_vvvvl:130; CHECK: # %bb.0:131; CHECK-NEXT: lea %s0, 128132; CHECK-NEXT: lvl %s0133; CHECK-NEXT: pvand %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.pvand.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.pvand.vvvvl(<256 x double>, <256 x double>, <256 x double>, i32)144 145; Function Attrs: nounwind readnone146define fastcc <256 x double> @pvand_vsvl(i64 %0, <256 x double> %1) {147; CHECK-LABEL: pvand_vsvl:148; CHECK: # %bb.0:149; CHECK-NEXT: lea %s1, 256150; CHECK-NEXT: lvl %s1151; CHECK-NEXT: pvand %v0, %s0, %v0152; CHECK-NEXT: b.l.t (, %s10)153 %3 = tail call fast <256 x double> @llvm.ve.vl.pvand.vsvl(i64 %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.pvand.vsvl(i64, <256 x double>, i32)159 160; Function Attrs: nounwind readnone161define fastcc <256 x double> @pvand_vsvvl(i64 %0, <256 x double> %1, <256 x double> %2) {162; CHECK-LABEL: pvand_vsvvl:163; CHECK: # %bb.0:164; CHECK-NEXT: lea %s1, 128165; CHECK-NEXT: lvl %s1166; CHECK-NEXT: pvand %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.pvand.vsvvl(i64 %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.pvand.vsvvl(i64, <256 x double>, <256 x double>, i32)177 178; Function Attrs: nounwind readnone179define fastcc <256 x double> @pvand_vvvMvl(<256 x double> %0, <256 x double> %1, <512 x i1> %2, <256 x double> %3) {180; CHECK-LABEL: pvand_vvvMvl:181; CHECK: # %bb.0:182; CHECK-NEXT: lea %s0, 128183; CHECK-NEXT: lvl %s0184; CHECK-NEXT: pvand %v2, %v0, %v1, %vm2185; 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.pvand.vvvMvl(<256 x double> %0, <256 x double> %1, <512 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.pvand.vvvMvl(<256 x double>, <256 x double>, <512 x i1>, <256 x double>, i32)195 196; Function Attrs: nounwind readnone197define fastcc <256 x double> @pvand_vsvMvl(i64 %0, <256 x double> %1, <512 x i1> %2, <256 x double> %3) {198; CHECK-LABEL: pvand_vsvMvl:199; CHECK: # %bb.0:200; CHECK-NEXT: lea %s1, 128201; CHECK-NEXT: lvl %s1202; CHECK-NEXT: pvand %v1, %s0, %v0, %vm2203; 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.pvand.vsvMvl(i64 %0, <256 x double> %1, <512 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.pvand.vsvMvl(i64, <256 x double>, <512 x i1>, <256 x double>, i32)213