211 lines · plain
1; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s2 3;;; Test vector bit reverse intrinsic instructions4;;;5;;; Note:6;;; We test VBRV*vl, VBRV*vl_v, VBRV*vml_v, PVBRV*vl, PVBRV*vl_v, PVBRV*vml_v instructions.7 8; Function Attrs: nounwind readnone9define fastcc <256 x double> @vbrv_vvl(<256 x double> %0) {10; CHECK-LABEL: vbrv_vvl:11; CHECK: # %bb.0:12; CHECK-NEXT: lea %s0, 25613; CHECK-NEXT: lvl %s014; CHECK-NEXT: vbrv %v0, %v015; CHECK-NEXT: b.l.t (, %s10)16 %2 = tail call fast <256 x double> @llvm.ve.vl.vbrv.vvl(<256 x double> %0, i32 256)17 ret <256 x double> %218}19 20; Function Attrs: nounwind readnone21declare <256 x double> @llvm.ve.vl.vbrv.vvl(<256 x double>, i32)22 23; Function Attrs: nounwind readnone24define fastcc <256 x double> @vbrv_vvvl(<256 x double> %0, <256 x double> %1) {25; CHECK-LABEL: vbrv_vvvl:26; CHECK: # %bb.0:27; CHECK-NEXT: lea %s0, 12828; CHECK-NEXT: lvl %s029; CHECK-NEXT: vbrv %v1, %v030; CHECK-NEXT: lea %s16, 25631; CHECK-NEXT: lvl %s1632; CHECK-NEXT: vor %v0, (0)1, %v133; CHECK-NEXT: b.l.t (, %s10)34 %3 = tail call fast <256 x double> @llvm.ve.vl.vbrv.vvvl(<256 x double> %0, <256 x double> %1, i32 128)35 ret <256 x double> %336}37 38; Function Attrs: nounwind readnone39declare <256 x double> @llvm.ve.vl.vbrv.vvvl(<256 x double>, <256 x double>, i32)40 41; Function Attrs: nounwind readnone42define fastcc <256 x double> @vbrv_vvmvl(<256 x double> %0, <256 x i1> %1, <256 x double> %2) {43; CHECK-LABEL: vbrv_vvmvl:44; CHECK: # %bb.0:45; CHECK-NEXT: lea %s0, 12846; CHECK-NEXT: lvl %s047; CHECK-NEXT: vbrv %v1, %v0, %vm148; CHECK-NEXT: lea %s16, 25649; CHECK-NEXT: lvl %s1650; CHECK-NEXT: vor %v0, (0)1, %v151; CHECK-NEXT: b.l.t (, %s10)52 %4 = tail call fast <256 x double> @llvm.ve.vl.vbrv.vvmvl(<256 x double> %0, <256 x i1> %1, <256 x double> %2, i32 128)53 ret <256 x double> %454}55 56; Function Attrs: nounwind readnone57declare <256 x double> @llvm.ve.vl.vbrv.vvmvl(<256 x double>, <256 x i1>, <256 x double>, i32)58 59; Function Attrs: nounwind readnone60define fastcc <256 x double> @pvbrvlo_vvl(<256 x double> %0) {61; CHECK-LABEL: pvbrvlo_vvl:62; CHECK: # %bb.0:63; CHECK-NEXT: lea %s0, 25664; CHECK-NEXT: lvl %s065; CHECK-NEXT: pvbrv.lo %v0, %v066; CHECK-NEXT: b.l.t (, %s10)67 %2 = tail call fast <256 x double> @llvm.ve.vl.pvbrvlo.vvl(<256 x double> %0, i32 256)68 ret <256 x double> %269}70 71; Function Attrs: nounwind readnone72declare <256 x double> @llvm.ve.vl.pvbrvlo.vvl(<256 x double>, i32)73 74; Function Attrs: nounwind readnone75define fastcc <256 x double> @pvbrvlo_vvvl(<256 x double> %0, <256 x double> %1) {76; CHECK-LABEL: pvbrvlo_vvvl:77; CHECK: # %bb.0:78; CHECK-NEXT: lea %s0, 12879; CHECK-NEXT: lvl %s080; CHECK-NEXT: pvbrv.lo %v1, %v081; CHECK-NEXT: lea %s16, 25682; CHECK-NEXT: lvl %s1683; CHECK-NEXT: vor %v0, (0)1, %v184; CHECK-NEXT: b.l.t (, %s10)85 %3 = tail call fast <256 x double> @llvm.ve.vl.pvbrvlo.vvvl(<256 x double> %0, <256 x double> %1, i32 128)86 ret <256 x double> %387}88 89; Function Attrs: nounwind readnone90declare <256 x double> @llvm.ve.vl.pvbrvlo.vvvl(<256 x double>, <256 x double>, i32)91 92; Function Attrs: nounwind readnone93define fastcc <256 x double> @pvbrvlo_vvmvl(<256 x double> %0, <256 x i1> %1, <256 x double> %2) {94; CHECK-LABEL: pvbrvlo_vvmvl:95; CHECK: # %bb.0:96; CHECK-NEXT: lea %s0, 12897; CHECK-NEXT: lvl %s098; CHECK-NEXT: pvbrv.lo %v1, %v0, %vm199; CHECK-NEXT: lea %s16, 256100; CHECK-NEXT: lvl %s16101; CHECK-NEXT: vor %v0, (0)1, %v1102; CHECK-NEXT: b.l.t (, %s10)103 %4 = tail call fast <256 x double> @llvm.ve.vl.pvbrvlo.vvmvl(<256 x double> %0, <256 x i1> %1, <256 x double> %2, i32 128)104 ret <256 x double> %4105}106 107; Function Attrs: nounwind readnone108declare <256 x double> @llvm.ve.vl.pvbrvlo.vvmvl(<256 x double>, <256 x i1>, <256 x double>, i32)109 110; Function Attrs: nounwind readnone111define fastcc <256 x double> @pvbrvup_vvl(<256 x double> %0) {112; CHECK-LABEL: pvbrvup_vvl:113; CHECK: # %bb.0:114; CHECK-NEXT: lea %s0, 256115; CHECK-NEXT: lvl %s0116; CHECK-NEXT: pvbrv.up %v0, %v0117; CHECK-NEXT: b.l.t (, %s10)118 %2 = tail call fast <256 x double> @llvm.ve.vl.pvbrvup.vvl(<256 x double> %0, i32 256)119 ret <256 x double> %2120}121 122; Function Attrs: nounwind readnone123declare <256 x double> @llvm.ve.vl.pvbrvup.vvl(<256 x double>, i32)124 125; Function Attrs: nounwind readnone126define fastcc <256 x double> @pvbrvup_vvvl(<256 x double> %0, <256 x double> %1) {127; CHECK-LABEL: pvbrvup_vvvl:128; CHECK: # %bb.0:129; CHECK-NEXT: lea %s0, 128130; CHECK-NEXT: lvl %s0131; CHECK-NEXT: pvbrv.up %v1, %v0132; CHECK-NEXT: lea %s16, 256133; CHECK-NEXT: lvl %s16134; CHECK-NEXT: vor %v0, (0)1, %v1135; CHECK-NEXT: b.l.t (, %s10)136 %3 = tail call fast <256 x double> @llvm.ve.vl.pvbrvup.vvvl(<256 x double> %0, <256 x double> %1, i32 128)137 ret <256 x double> %3138}139 140; Function Attrs: nounwind readnone141declare <256 x double> @llvm.ve.vl.pvbrvup.vvvl(<256 x double>, <256 x double>, i32)142 143; Function Attrs: nounwind readnone144define fastcc <256 x double> @pvbrvup_vvmvl(<256 x double> %0, <256 x i1> %1, <256 x double> %2) {145; CHECK-LABEL: pvbrvup_vvmvl:146; CHECK: # %bb.0:147; CHECK-NEXT: lea %s0, 128148; CHECK-NEXT: lvl %s0149; CHECK-NEXT: pvbrv.up %v1, %v0, %vm1150; CHECK-NEXT: lea %s16, 256151; CHECK-NEXT: lvl %s16152; CHECK-NEXT: vor %v0, (0)1, %v1153; CHECK-NEXT: b.l.t (, %s10)154 %4 = tail call fast <256 x double> @llvm.ve.vl.pvbrvup.vvmvl(<256 x double> %0, <256 x i1> %1, <256 x double> %2, i32 128)155 ret <256 x double> %4156}157 158; Function Attrs: nounwind readnone159declare <256 x double> @llvm.ve.vl.pvbrvup.vvmvl(<256 x double>, <256 x i1>, <256 x double>, i32)160 161; Function Attrs: nounwind readnone162define fastcc <256 x double> @pvbrv_vvl(<256 x double> %0) {163; CHECK-LABEL: pvbrv_vvl:164; CHECK: # %bb.0:165; CHECK-NEXT: lea %s0, 256166; CHECK-NEXT: lvl %s0167; CHECK-NEXT: pvbrv %v0, %v0168; CHECK-NEXT: b.l.t (, %s10)169 %2 = tail call fast <256 x double> @llvm.ve.vl.pvbrv.vvl(<256 x double> %0, i32 256)170 ret <256 x double> %2171}172 173; Function Attrs: nounwind readnone174declare <256 x double> @llvm.ve.vl.pvbrv.vvl(<256 x double>, i32)175 176; Function Attrs: nounwind readnone177define fastcc <256 x double> @pvbrv_vvvl(<256 x double> %0, <256 x double> %1) {178; CHECK-LABEL: pvbrv_vvvl:179; CHECK: # %bb.0:180; CHECK-NEXT: lea %s0, 128181; CHECK-NEXT: lvl %s0182; CHECK-NEXT: pvbrv %v1, %v0183; CHECK-NEXT: lea %s16, 256184; CHECK-NEXT: lvl %s16185; CHECK-NEXT: vor %v0, (0)1, %v1186; CHECK-NEXT: b.l.t (, %s10)187 %3 = tail call fast <256 x double> @llvm.ve.vl.pvbrv.vvvl(<256 x double> %0, <256 x double> %1, i32 128)188 ret <256 x double> %3189}190 191; Function Attrs: nounwind readnone192declare <256 x double> @llvm.ve.vl.pvbrv.vvvl(<256 x double>, <256 x double>, i32)193 194; Function Attrs: nounwind readnone195define fastcc <256 x double> @pvbrv_vvMvl(<256 x double> %0, <512 x i1> %1, <256 x double> %2) {196; CHECK-LABEL: pvbrv_vvMvl:197; CHECK: # %bb.0:198; CHECK-NEXT: lea %s0, 128199; CHECK-NEXT: lvl %s0200; CHECK-NEXT: pvbrv %v1, %v0, %vm2201; CHECK-NEXT: lea %s16, 256202; CHECK-NEXT: lvl %s16203; CHECK-NEXT: vor %v0, (0)1, %v1204; CHECK-NEXT: b.l.t (, %s10)205 %4 = tail call fast <256 x double> @llvm.ve.vl.pvbrv.vvMvl(<256 x double> %0, <512 x i1> %1, <256 x double> %2, i32 128)206 ret <256 x double> %4207}208 209; Function Attrs: nounwind readnone210declare <256 x double> @llvm.ve.vl.pvbrv.vvMvl(<256 x double>, <512 x i1>, <256 x double>, i32)211