brintos

brintos / llvm-project-archived public Read only

0
0
Text · 115.2 KiB · 1f45e45 Raw
3251 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+zve64x -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-ZVE64X,RV32,RV32I3; RUN: llc -mtriple=riscv64 -mattr=+zve64x -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-ZVE64X,RV64,RV64I4; RUN: llc -mtriple=riscv32 -mattr=+zve64f,+f -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-F,RV32F5; RUN: llc -mtriple=riscv64 -mattr=+zve64f,+f -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-F,RV64F6; RUN: llc -mtriple=riscv32 -mattr=+v,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-D,RV327; RUN: llc -mtriple=riscv64 -mattr=+v,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-D,RV648; RUN: llc -mtriple=riscv32 -mattr=+v,+zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVBB9; RUN: llc -mtriple=riscv64 -mattr=+v,+zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVBB10 11define <vscale x 1 x i8> @ctlz_nxv1i8(<vscale x 1 x i8> %va) {12; CHECK-ZVE64X-LABEL: ctlz_nxv1i8:13; CHECK-ZVE64X:       # %bb.0:14; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma15; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 116; CHECK-ZVE64X-NEXT:    li a0, 8517; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v918; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 219; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v920; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 421; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v922; CHECK-ZVE64X-NEXT:    vnot.v v8, v823; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 124; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a025; CHECK-ZVE64X-NEXT:    li a0, 5126; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v927; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a028; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 229; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a030; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v831; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 432; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v933; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 1534; CHECK-ZVE64X-NEXT:    ret35;36; CHECK-F-LABEL: ctlz_nxv1i8:37; CHECK-F:       # %bb.0:38; CHECK-F-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma39; CHECK-F-NEXT:    vzext.vf2 v9, v840; CHECK-F-NEXT:    li a0, 13441; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v942; CHECK-F-NEXT:    vnsrl.wi v8, v8, 2343; CHECK-F-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma44; CHECK-F-NEXT:    vnsrl.wi v8, v8, 045; CHECK-F-NEXT:    vrsub.vx v8, v8, a046; CHECK-F-NEXT:    li a0, 847; CHECK-F-NEXT:    vminu.vx v8, v8, a048; CHECK-F-NEXT:    ret49;50; CHECK-D-LABEL: ctlz_nxv1i8:51; CHECK-D:       # %bb.0:52; CHECK-D-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma53; CHECK-D-NEXT:    vzext.vf2 v9, v854; CHECK-D-NEXT:    li a0, 13455; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v956; CHECK-D-NEXT:    vnsrl.wi v8, v8, 2357; CHECK-D-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma58; CHECK-D-NEXT:    vnsrl.wi v8, v8, 059; CHECK-D-NEXT:    vrsub.vx v8, v8, a060; CHECK-D-NEXT:    li a0, 861; CHECK-D-NEXT:    vminu.vx v8, v8, a062; CHECK-D-NEXT:    ret63;64; CHECK-ZVBB-LABEL: ctlz_nxv1i8:65; CHECK-ZVBB:       # %bb.0:66; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma67; CHECK-ZVBB-NEXT:    vclz.v v8, v868; CHECK-ZVBB-NEXT:    ret69  %a = call <vscale x 1 x i8> @llvm.ctlz.nxv1i8(<vscale x 1 x i8> %va, i1 false)70  ret <vscale x 1 x i8> %a71}72 73define <vscale x 2 x i8> @ctlz_nxv2i8(<vscale x 2 x i8> %va) {74; CHECK-ZVE64X-LABEL: ctlz_nxv2i8:75; CHECK-ZVE64X:       # %bb.0:76; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma77; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 178; CHECK-ZVE64X-NEXT:    li a0, 8579; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v980; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 281; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v982; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 483; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v984; CHECK-ZVE64X-NEXT:    vnot.v v8, v885; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 186; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a087; CHECK-ZVE64X-NEXT:    li a0, 5188; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v989; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a090; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 291; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a092; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v893; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 494; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v995; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 1596; CHECK-ZVE64X-NEXT:    ret97;98; CHECK-F-LABEL: ctlz_nxv2i8:99; CHECK-F:       # %bb.0:100; CHECK-F-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma101; CHECK-F-NEXT:    vzext.vf2 v9, v8102; CHECK-F-NEXT:    li a0, 134103; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v9104; CHECK-F-NEXT:    vnsrl.wi v8, v8, 23105; CHECK-F-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma106; CHECK-F-NEXT:    vnsrl.wi v8, v8, 0107; CHECK-F-NEXT:    vrsub.vx v8, v8, a0108; CHECK-F-NEXT:    li a0, 8109; CHECK-F-NEXT:    vminu.vx v8, v8, a0110; CHECK-F-NEXT:    ret111;112; CHECK-D-LABEL: ctlz_nxv2i8:113; CHECK-D:       # %bb.0:114; CHECK-D-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma115; CHECK-D-NEXT:    vzext.vf2 v9, v8116; CHECK-D-NEXT:    li a0, 134117; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v9118; CHECK-D-NEXT:    vnsrl.wi v8, v8, 23119; CHECK-D-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma120; CHECK-D-NEXT:    vnsrl.wi v8, v8, 0121; CHECK-D-NEXT:    vrsub.vx v8, v8, a0122; CHECK-D-NEXT:    li a0, 8123; CHECK-D-NEXT:    vminu.vx v8, v8, a0124; CHECK-D-NEXT:    ret125;126; CHECK-ZVBB-LABEL: ctlz_nxv2i8:127; CHECK-ZVBB:       # %bb.0:128; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma129; CHECK-ZVBB-NEXT:    vclz.v v8, v8130; CHECK-ZVBB-NEXT:    ret131  %a = call <vscale x 2 x i8> @llvm.ctlz.nxv2i8(<vscale x 2 x i8> %va, i1 false)132  ret <vscale x 2 x i8> %a133}134 135define <vscale x 4 x i8> @ctlz_nxv4i8(<vscale x 4 x i8> %va) {136; CHECK-ZVE64X-LABEL: ctlz_nxv4i8:137; CHECK-ZVE64X:       # %bb.0:138; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma139; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1140; CHECK-ZVE64X-NEXT:    li a0, 85141; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9142; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 2143; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9144; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4145; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9146; CHECK-ZVE64X-NEXT:    vnot.v v8, v8147; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1148; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0149; CHECK-ZVE64X-NEXT:    li a0, 51150; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9151; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0152; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2153; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0154; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8155; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4156; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9157; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 15158; CHECK-ZVE64X-NEXT:    ret159;160; CHECK-F-LABEL: ctlz_nxv4i8:161; CHECK-F:       # %bb.0:162; CHECK-F-NEXT:    vsetvli a0, zero, e16, m1, ta, ma163; CHECK-F-NEXT:    vzext.vf2 v10, v8164; CHECK-F-NEXT:    li a0, 134165; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v10166; CHECK-F-NEXT:    vnsrl.wi v10, v8, 23167; CHECK-F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma168; CHECK-F-NEXT:    vnsrl.wi v8, v10, 0169; CHECK-F-NEXT:    vrsub.vx v8, v8, a0170; CHECK-F-NEXT:    li a0, 8171; CHECK-F-NEXT:    vminu.vx v8, v8, a0172; CHECK-F-NEXT:    ret173;174; CHECK-D-LABEL: ctlz_nxv4i8:175; CHECK-D:       # %bb.0:176; CHECK-D-NEXT:    vsetvli a0, zero, e16, m1, ta, ma177; CHECK-D-NEXT:    vzext.vf2 v10, v8178; CHECK-D-NEXT:    li a0, 134179; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v10180; CHECK-D-NEXT:    vnsrl.wi v10, v8, 23181; CHECK-D-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma182; CHECK-D-NEXT:    vnsrl.wi v8, v10, 0183; CHECK-D-NEXT:    vrsub.vx v8, v8, a0184; CHECK-D-NEXT:    li a0, 8185; CHECK-D-NEXT:    vminu.vx v8, v8, a0186; CHECK-D-NEXT:    ret187;188; CHECK-ZVBB-LABEL: ctlz_nxv4i8:189; CHECK-ZVBB:       # %bb.0:190; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma191; CHECK-ZVBB-NEXT:    vclz.v v8, v8192; CHECK-ZVBB-NEXT:    ret193  %a = call <vscale x 4 x i8> @llvm.ctlz.nxv4i8(<vscale x 4 x i8> %va, i1 false)194  ret <vscale x 4 x i8> %a195}196 197define <vscale x 8 x i8> @ctlz_nxv8i8(<vscale x 8 x i8> %va) {198; CHECK-ZVE64X-LABEL: ctlz_nxv8i8:199; CHECK-ZVE64X:       # %bb.0:200; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, m1, ta, ma201; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1202; CHECK-ZVE64X-NEXT:    li a0, 85203; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9204; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 2205; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9206; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4207; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9208; CHECK-ZVE64X-NEXT:    vnot.v v8, v8209; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1210; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0211; CHECK-ZVE64X-NEXT:    li a0, 51212; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9213; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0214; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2215; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0216; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8217; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4218; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9219; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 15220; CHECK-ZVE64X-NEXT:    ret221;222; CHECK-F-LABEL: ctlz_nxv8i8:223; CHECK-F:       # %bb.0:224; CHECK-F-NEXT:    vsetvli a0, zero, e16, m2, ta, ma225; CHECK-F-NEXT:    vzext.vf2 v12, v8226; CHECK-F-NEXT:    li a0, 134227; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v12228; CHECK-F-NEXT:    vnsrl.wi v12, v8, 23229; CHECK-F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma230; CHECK-F-NEXT:    vnsrl.wi v8, v12, 0231; CHECK-F-NEXT:    vrsub.vx v8, v8, a0232; CHECK-F-NEXT:    li a0, 8233; CHECK-F-NEXT:    vminu.vx v8, v8, a0234; CHECK-F-NEXT:    ret235;236; CHECK-D-LABEL: ctlz_nxv8i8:237; CHECK-D:       # %bb.0:238; CHECK-D-NEXT:    vsetvli a0, zero, e16, m2, ta, ma239; CHECK-D-NEXT:    vzext.vf2 v12, v8240; CHECK-D-NEXT:    li a0, 134241; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v12242; CHECK-D-NEXT:    vnsrl.wi v12, v8, 23243; CHECK-D-NEXT:    vsetvli zero, zero, e8, m1, ta, ma244; CHECK-D-NEXT:    vnsrl.wi v8, v12, 0245; CHECK-D-NEXT:    vrsub.vx v8, v8, a0246; CHECK-D-NEXT:    li a0, 8247; CHECK-D-NEXT:    vminu.vx v8, v8, a0248; CHECK-D-NEXT:    ret249;250; CHECK-ZVBB-LABEL: ctlz_nxv8i8:251; CHECK-ZVBB:       # %bb.0:252; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m1, ta, ma253; CHECK-ZVBB-NEXT:    vclz.v v8, v8254; CHECK-ZVBB-NEXT:    ret255  %a = call <vscale x 8 x i8> @llvm.ctlz.nxv8i8(<vscale x 8 x i8> %va, i1 false)256  ret <vscale x 8 x i8> %a257}258 259define <vscale x 16 x i8> @ctlz_nxv16i8(<vscale x 16 x i8> %va) {260; CHECK-ZVE64X-LABEL: ctlz_nxv16i8:261; CHECK-ZVE64X:       # %bb.0:262; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, m2, ta, ma263; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 1264; CHECK-ZVE64X-NEXT:    li a0, 85265; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v10266; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 2267; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v10268; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 4269; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v10270; CHECK-ZVE64X-NEXT:    vnot.v v8, v8271; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 1272; CHECK-ZVE64X-NEXT:    vand.vx v10, v10, a0273; CHECK-ZVE64X-NEXT:    li a0, 51274; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v10275; CHECK-ZVE64X-NEXT:    vand.vx v10, v8, a0276; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2277; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0278; CHECK-ZVE64X-NEXT:    vadd.vv v8, v10, v8279; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 4280; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v10281; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 15282; CHECK-ZVE64X-NEXT:    ret283;284; CHECK-F-LABEL: ctlz_nxv16i8:285; CHECK-F:       # %bb.0:286; CHECK-F-NEXT:    vsetvli a0, zero, e16, m4, ta, ma287; CHECK-F-NEXT:    vzext.vf2 v16, v8288; CHECK-F-NEXT:    li a0, 134289; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v16290; CHECK-F-NEXT:    vnsrl.wi v16, v8, 23291; CHECK-F-NEXT:    vsetvli zero, zero, e8, m2, ta, ma292; CHECK-F-NEXT:    vnsrl.wi v8, v16, 0293; CHECK-F-NEXT:    vrsub.vx v8, v8, a0294; CHECK-F-NEXT:    li a0, 8295; CHECK-F-NEXT:    vminu.vx v8, v8, a0296; CHECK-F-NEXT:    ret297;298; CHECK-D-LABEL: ctlz_nxv16i8:299; CHECK-D:       # %bb.0:300; CHECK-D-NEXT:    vsetvli a0, zero, e16, m4, ta, ma301; CHECK-D-NEXT:    vzext.vf2 v16, v8302; CHECK-D-NEXT:    li a0, 134303; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v16304; CHECK-D-NEXT:    vnsrl.wi v16, v8, 23305; CHECK-D-NEXT:    vsetvli zero, zero, e8, m2, ta, ma306; CHECK-D-NEXT:    vnsrl.wi v8, v16, 0307; CHECK-D-NEXT:    vrsub.vx v8, v8, a0308; CHECK-D-NEXT:    li a0, 8309; CHECK-D-NEXT:    vminu.vx v8, v8, a0310; CHECK-D-NEXT:    ret311;312; CHECK-ZVBB-LABEL: ctlz_nxv16i8:313; CHECK-ZVBB:       # %bb.0:314; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m2, ta, ma315; CHECK-ZVBB-NEXT:    vclz.v v8, v8316; CHECK-ZVBB-NEXT:    ret317  %a = call <vscale x 16 x i8> @llvm.ctlz.nxv16i8(<vscale x 16 x i8> %va, i1 false)318  ret <vscale x 16 x i8> %a319}320 321define <vscale x 32 x i8> @ctlz_nxv32i8(<vscale x 32 x i8> %va) {322; CHECK-LABEL: ctlz_nxv32i8:323; CHECK:       # %bb.0:324; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma325; CHECK-NEXT:    vsrl.vi v12, v8, 1326; CHECK-NEXT:    li a0, 85327; CHECK-NEXT:    vor.vv v8, v8, v12328; CHECK-NEXT:    vsrl.vi v12, v8, 2329; CHECK-NEXT:    vor.vv v8, v8, v12330; CHECK-NEXT:    vsrl.vi v12, v8, 4331; CHECK-NEXT:    vor.vv v8, v8, v12332; CHECK-NEXT:    vnot.v v8, v8333; CHECK-NEXT:    vsrl.vi v12, v8, 1334; CHECK-NEXT:    vand.vx v12, v12, a0335; CHECK-NEXT:    li a0, 51336; CHECK-NEXT:    vsub.vv v8, v8, v12337; CHECK-NEXT:    vand.vx v12, v8, a0338; CHECK-NEXT:    vsrl.vi v8, v8, 2339; CHECK-NEXT:    vand.vx v8, v8, a0340; CHECK-NEXT:    vadd.vv v8, v12, v8341; CHECK-NEXT:    vsrl.vi v12, v8, 4342; CHECK-NEXT:    vadd.vv v8, v8, v12343; CHECK-NEXT:    vand.vi v8, v8, 15344; CHECK-NEXT:    ret345;346; CHECK-ZVBB-LABEL: ctlz_nxv32i8:347; CHECK-ZVBB:       # %bb.0:348; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m4, ta, ma349; CHECK-ZVBB-NEXT:    vclz.v v8, v8350; CHECK-ZVBB-NEXT:    ret351  %a = call <vscale x 32 x i8> @llvm.ctlz.nxv32i8(<vscale x 32 x i8> %va, i1 false)352  ret <vscale x 32 x i8> %a353}354 355define <vscale x 64 x i8> @ctlz_nxv64i8(<vscale x 64 x i8> %va) {356; CHECK-LABEL: ctlz_nxv64i8:357; CHECK:       # %bb.0:358; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma359; CHECK-NEXT:    vsrl.vi v16, v8, 1360; CHECK-NEXT:    li a0, 85361; CHECK-NEXT:    vor.vv v8, v8, v16362; CHECK-NEXT:    vsrl.vi v16, v8, 2363; CHECK-NEXT:    vor.vv v8, v8, v16364; CHECK-NEXT:    vsrl.vi v16, v8, 4365; CHECK-NEXT:    vor.vv v8, v8, v16366; CHECK-NEXT:    vnot.v v8, v8367; CHECK-NEXT:    vsrl.vi v16, v8, 1368; CHECK-NEXT:    vand.vx v16, v16, a0369; CHECK-NEXT:    li a0, 51370; CHECK-NEXT:    vsub.vv v8, v8, v16371; CHECK-NEXT:    vand.vx v16, v8, a0372; CHECK-NEXT:    vsrl.vi v8, v8, 2373; CHECK-NEXT:    vand.vx v8, v8, a0374; CHECK-NEXT:    vadd.vv v8, v16, v8375; CHECK-NEXT:    vsrl.vi v16, v8, 4376; CHECK-NEXT:    vadd.vv v8, v8, v16377; CHECK-NEXT:    vand.vi v8, v8, 15378; CHECK-NEXT:    ret379;380; CHECK-ZVBB-LABEL: ctlz_nxv64i8:381; CHECK-ZVBB:       # %bb.0:382; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m8, ta, ma383; CHECK-ZVBB-NEXT:    vclz.v v8, v8384; CHECK-ZVBB-NEXT:    ret385  %a = call <vscale x 64 x i8> @llvm.ctlz.nxv64i8(<vscale x 64 x i8> %va, i1 false)386  ret <vscale x 64 x i8> %a387}388 389define <vscale x 1 x i16> @ctlz_nxv1i16(<vscale x 1 x i16> %va) {390; CHECK-ZVE64X-LABEL: ctlz_nxv1i16:391; CHECK-ZVE64X:       # %bb.0:392; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma393; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1394; CHECK-ZVE64X-NEXT:    lui a0, 5395; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9396; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365397; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 2398; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9399; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4400; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9401; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 8402; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9403; CHECK-ZVE64X-NEXT:    vnot.v v8, v8404; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1405; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0406; CHECK-ZVE64X-NEXT:    lui a0, 3407; CHECK-ZVE64X-NEXT:    addi a0, a0, 819408; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9409; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0410; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2411; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0412; CHECK-ZVE64X-NEXT:    lui a0, 1413; CHECK-ZVE64X-NEXT:    addi a0, a0, -241414; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8415; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4416; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9417; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0418; CHECK-ZVE64X-NEXT:    li a0, 257419; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0420; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 8421; CHECK-ZVE64X-NEXT:    ret422;423; CHECK-F-LABEL: ctlz_nxv1i16:424; CHECK-F:       # %bb.0:425; CHECK-F-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma426; CHECK-F-NEXT:    vfwcvt.f.xu.v v9, v8427; CHECK-F-NEXT:    li a0, 142428; CHECK-F-NEXT:    vnsrl.wi v8, v9, 23429; CHECK-F-NEXT:    vrsub.vx v8, v8, a0430; CHECK-F-NEXT:    li a0, 16431; CHECK-F-NEXT:    vminu.vx v8, v8, a0432; CHECK-F-NEXT:    ret433;434; CHECK-D-LABEL: ctlz_nxv1i16:435; CHECK-D:       # %bb.0:436; CHECK-D-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma437; CHECK-D-NEXT:    vfwcvt.f.xu.v v9, v8438; CHECK-D-NEXT:    li a0, 142439; CHECK-D-NEXT:    vnsrl.wi v8, v9, 23440; CHECK-D-NEXT:    vrsub.vx v8, v8, a0441; CHECK-D-NEXT:    li a0, 16442; CHECK-D-NEXT:    vminu.vx v8, v8, a0443; CHECK-D-NEXT:    ret444;445; CHECK-ZVBB-LABEL: ctlz_nxv1i16:446; CHECK-ZVBB:       # %bb.0:447; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma448; CHECK-ZVBB-NEXT:    vclz.v v8, v8449; CHECK-ZVBB-NEXT:    ret450  %a = call <vscale x 1 x i16> @llvm.ctlz.nxv1i16(<vscale x 1 x i16> %va, i1 false)451  ret <vscale x 1 x i16> %a452}453 454define <vscale x 2 x i16> @ctlz_nxv2i16(<vscale x 2 x i16> %va) {455; CHECK-ZVE64X-LABEL: ctlz_nxv2i16:456; CHECK-ZVE64X:       # %bb.0:457; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma458; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1459; CHECK-ZVE64X-NEXT:    lui a0, 5460; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9461; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365462; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 2463; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9464; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4465; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9466; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 8467; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9468; CHECK-ZVE64X-NEXT:    vnot.v v8, v8469; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1470; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0471; CHECK-ZVE64X-NEXT:    lui a0, 3472; CHECK-ZVE64X-NEXT:    addi a0, a0, 819473; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9474; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0475; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2476; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0477; CHECK-ZVE64X-NEXT:    lui a0, 1478; CHECK-ZVE64X-NEXT:    addi a0, a0, -241479; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8480; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4481; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9482; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0483; CHECK-ZVE64X-NEXT:    li a0, 257484; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0485; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 8486; CHECK-ZVE64X-NEXT:    ret487;488; CHECK-F-LABEL: ctlz_nxv2i16:489; CHECK-F:       # %bb.0:490; CHECK-F-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma491; CHECK-F-NEXT:    vfwcvt.f.xu.v v9, v8492; CHECK-F-NEXT:    li a0, 142493; CHECK-F-NEXT:    vnsrl.wi v8, v9, 23494; CHECK-F-NEXT:    vrsub.vx v8, v8, a0495; CHECK-F-NEXT:    li a0, 16496; CHECK-F-NEXT:    vminu.vx v8, v8, a0497; CHECK-F-NEXT:    ret498;499; CHECK-D-LABEL: ctlz_nxv2i16:500; CHECK-D:       # %bb.0:501; CHECK-D-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma502; CHECK-D-NEXT:    vfwcvt.f.xu.v v9, v8503; CHECK-D-NEXT:    li a0, 142504; CHECK-D-NEXT:    vnsrl.wi v8, v9, 23505; CHECK-D-NEXT:    vrsub.vx v8, v8, a0506; CHECK-D-NEXT:    li a0, 16507; CHECK-D-NEXT:    vminu.vx v8, v8, a0508; CHECK-D-NEXT:    ret509;510; CHECK-ZVBB-LABEL: ctlz_nxv2i16:511; CHECK-ZVBB:       # %bb.0:512; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma513; CHECK-ZVBB-NEXT:    vclz.v v8, v8514; CHECK-ZVBB-NEXT:    ret515  %a = call <vscale x 2 x i16> @llvm.ctlz.nxv2i16(<vscale x 2 x i16> %va, i1 false)516  ret <vscale x 2 x i16> %a517}518 519define <vscale x 4 x i16> @ctlz_nxv4i16(<vscale x 4 x i16> %va) {520; CHECK-ZVE64X-LABEL: ctlz_nxv4i16:521; CHECK-ZVE64X:       # %bb.0:522; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, m1, ta, ma523; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1524; CHECK-ZVE64X-NEXT:    lui a0, 5525; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9526; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365527; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 2528; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9529; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4530; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9531; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 8532; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9533; CHECK-ZVE64X-NEXT:    vnot.v v8, v8534; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1535; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0536; CHECK-ZVE64X-NEXT:    lui a0, 3537; CHECK-ZVE64X-NEXT:    addi a0, a0, 819538; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9539; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0540; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2541; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0542; CHECK-ZVE64X-NEXT:    lui a0, 1543; CHECK-ZVE64X-NEXT:    addi a0, a0, -241544; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8545; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4546; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9547; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0548; CHECK-ZVE64X-NEXT:    li a0, 257549; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0550; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 8551; CHECK-ZVE64X-NEXT:    ret552;553; CHECK-F-LABEL: ctlz_nxv4i16:554; CHECK-F:       # %bb.0:555; CHECK-F-NEXT:    vsetvli a0, zero, e16, m1, ta, ma556; CHECK-F-NEXT:    vfwcvt.f.xu.v v10, v8557; CHECK-F-NEXT:    li a0, 142558; CHECK-F-NEXT:    vnsrl.wi v8, v10, 23559; CHECK-F-NEXT:    vrsub.vx v8, v8, a0560; CHECK-F-NEXT:    li a0, 16561; CHECK-F-NEXT:    vminu.vx v8, v8, a0562; CHECK-F-NEXT:    ret563;564; CHECK-D-LABEL: ctlz_nxv4i16:565; CHECK-D:       # %bb.0:566; CHECK-D-NEXT:    vsetvli a0, zero, e16, m1, ta, ma567; CHECK-D-NEXT:    vfwcvt.f.xu.v v10, v8568; CHECK-D-NEXT:    li a0, 142569; CHECK-D-NEXT:    vnsrl.wi v8, v10, 23570; CHECK-D-NEXT:    vrsub.vx v8, v8, a0571; CHECK-D-NEXT:    li a0, 16572; CHECK-D-NEXT:    vminu.vx v8, v8, a0573; CHECK-D-NEXT:    ret574;575; CHECK-ZVBB-LABEL: ctlz_nxv4i16:576; CHECK-ZVBB:       # %bb.0:577; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma578; CHECK-ZVBB-NEXT:    vclz.v v8, v8579; CHECK-ZVBB-NEXT:    ret580  %a = call <vscale x 4 x i16> @llvm.ctlz.nxv4i16(<vscale x 4 x i16> %va, i1 false)581  ret <vscale x 4 x i16> %a582}583 584define <vscale x 8 x i16> @ctlz_nxv8i16(<vscale x 8 x i16> %va) {585; CHECK-ZVE64X-LABEL: ctlz_nxv8i16:586; CHECK-ZVE64X:       # %bb.0:587; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, m2, ta, ma588; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 1589; CHECK-ZVE64X-NEXT:    lui a0, 5590; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v10591; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365592; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 2593; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v10594; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 4595; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v10596; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 8597; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v10598; CHECK-ZVE64X-NEXT:    vnot.v v8, v8599; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 1600; CHECK-ZVE64X-NEXT:    vand.vx v10, v10, a0601; CHECK-ZVE64X-NEXT:    lui a0, 3602; CHECK-ZVE64X-NEXT:    addi a0, a0, 819603; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v10604; CHECK-ZVE64X-NEXT:    vand.vx v10, v8, a0605; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2606; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0607; CHECK-ZVE64X-NEXT:    lui a0, 1608; CHECK-ZVE64X-NEXT:    addi a0, a0, -241609; CHECK-ZVE64X-NEXT:    vadd.vv v8, v10, v8610; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 4611; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v10612; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0613; CHECK-ZVE64X-NEXT:    li a0, 257614; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0615; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 8616; CHECK-ZVE64X-NEXT:    ret617;618; CHECK-F-LABEL: ctlz_nxv8i16:619; CHECK-F:       # %bb.0:620; CHECK-F-NEXT:    vsetvli a0, zero, e16, m2, ta, ma621; CHECK-F-NEXT:    vfwcvt.f.xu.v v12, v8622; CHECK-F-NEXT:    li a0, 142623; CHECK-F-NEXT:    vnsrl.wi v8, v12, 23624; CHECK-F-NEXT:    vrsub.vx v8, v8, a0625; CHECK-F-NEXT:    li a0, 16626; CHECK-F-NEXT:    vminu.vx v8, v8, a0627; CHECK-F-NEXT:    ret628;629; CHECK-D-LABEL: ctlz_nxv8i16:630; CHECK-D:       # %bb.0:631; CHECK-D-NEXT:    vsetvli a0, zero, e16, m2, ta, ma632; CHECK-D-NEXT:    vfwcvt.f.xu.v v12, v8633; CHECK-D-NEXT:    li a0, 142634; CHECK-D-NEXT:    vnsrl.wi v8, v12, 23635; CHECK-D-NEXT:    vrsub.vx v8, v8, a0636; CHECK-D-NEXT:    li a0, 16637; CHECK-D-NEXT:    vminu.vx v8, v8, a0638; CHECK-D-NEXT:    ret639;640; CHECK-ZVBB-LABEL: ctlz_nxv8i16:641; CHECK-ZVBB:       # %bb.0:642; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m2, ta, ma643; CHECK-ZVBB-NEXT:    vclz.v v8, v8644; CHECK-ZVBB-NEXT:    ret645  %a = call <vscale x 8 x i16> @llvm.ctlz.nxv8i16(<vscale x 8 x i16> %va, i1 false)646  ret <vscale x 8 x i16> %a647}648 649define <vscale x 16 x i16> @ctlz_nxv16i16(<vscale x 16 x i16> %va) {650; CHECK-ZVE64X-LABEL: ctlz_nxv16i16:651; CHECK-ZVE64X:       # %bb.0:652; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, m4, ta, ma653; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 1654; CHECK-ZVE64X-NEXT:    lui a0, 5655; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v12656; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365657; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 2658; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v12659; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 4660; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v12661; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 8662; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v12663; CHECK-ZVE64X-NEXT:    vnot.v v8, v8664; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 1665; CHECK-ZVE64X-NEXT:    vand.vx v12, v12, a0666; CHECK-ZVE64X-NEXT:    lui a0, 3667; CHECK-ZVE64X-NEXT:    addi a0, a0, 819668; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v12669; CHECK-ZVE64X-NEXT:    vand.vx v12, v8, a0670; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2671; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0672; CHECK-ZVE64X-NEXT:    lui a0, 1673; CHECK-ZVE64X-NEXT:    addi a0, a0, -241674; CHECK-ZVE64X-NEXT:    vadd.vv v8, v12, v8675; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 4676; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v12677; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0678; CHECK-ZVE64X-NEXT:    li a0, 257679; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0680; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 8681; CHECK-ZVE64X-NEXT:    ret682;683; CHECK-F-LABEL: ctlz_nxv16i16:684; CHECK-F:       # %bb.0:685; CHECK-F-NEXT:    vsetvli a0, zero, e16, m4, ta, ma686; CHECK-F-NEXT:    vfwcvt.f.xu.v v16, v8687; CHECK-F-NEXT:    li a0, 142688; CHECK-F-NEXT:    vnsrl.wi v8, v16, 23689; CHECK-F-NEXT:    vrsub.vx v8, v8, a0690; CHECK-F-NEXT:    li a0, 16691; CHECK-F-NEXT:    vminu.vx v8, v8, a0692; CHECK-F-NEXT:    ret693;694; CHECK-D-LABEL: ctlz_nxv16i16:695; CHECK-D:       # %bb.0:696; CHECK-D-NEXT:    vsetvli a0, zero, e16, m4, ta, ma697; CHECK-D-NEXT:    vfwcvt.f.xu.v v16, v8698; CHECK-D-NEXT:    li a0, 142699; CHECK-D-NEXT:    vnsrl.wi v8, v16, 23700; CHECK-D-NEXT:    vrsub.vx v8, v8, a0701; CHECK-D-NEXT:    li a0, 16702; CHECK-D-NEXT:    vminu.vx v8, v8, a0703; CHECK-D-NEXT:    ret704;705; CHECK-ZVBB-LABEL: ctlz_nxv16i16:706; CHECK-ZVBB:       # %bb.0:707; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m4, ta, ma708; CHECK-ZVBB-NEXT:    vclz.v v8, v8709; CHECK-ZVBB-NEXT:    ret710  %a = call <vscale x 16 x i16> @llvm.ctlz.nxv16i16(<vscale x 16 x i16> %va, i1 false)711  ret <vscale x 16 x i16> %a712}713 714define <vscale x 32 x i16> @ctlz_nxv32i16(<vscale x 32 x i16> %va) {715; CHECK-LABEL: ctlz_nxv32i16:716; CHECK:       # %bb.0:717; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma718; CHECK-NEXT:    vsrl.vi v16, v8, 1719; CHECK-NEXT:    lui a0, 5720; CHECK-NEXT:    vor.vv v8, v8, v16721; CHECK-NEXT:    addi a0, a0, 1365722; CHECK-NEXT:    vsrl.vi v16, v8, 2723; CHECK-NEXT:    vor.vv v8, v8, v16724; CHECK-NEXT:    vsrl.vi v16, v8, 4725; CHECK-NEXT:    vor.vv v8, v8, v16726; CHECK-NEXT:    vsrl.vi v16, v8, 8727; CHECK-NEXT:    vor.vv v8, v8, v16728; CHECK-NEXT:    vnot.v v8, v8729; CHECK-NEXT:    vsrl.vi v16, v8, 1730; CHECK-NEXT:    vand.vx v16, v16, a0731; CHECK-NEXT:    lui a0, 3732; CHECK-NEXT:    addi a0, a0, 819733; CHECK-NEXT:    vsub.vv v8, v8, v16734; CHECK-NEXT:    vand.vx v16, v8, a0735; CHECK-NEXT:    vsrl.vi v8, v8, 2736; CHECK-NEXT:    vand.vx v8, v8, a0737; CHECK-NEXT:    lui a0, 1738; CHECK-NEXT:    addi a0, a0, -241739; CHECK-NEXT:    vadd.vv v8, v16, v8740; CHECK-NEXT:    vsrl.vi v16, v8, 4741; CHECK-NEXT:    vadd.vv v8, v8, v16742; CHECK-NEXT:    vand.vx v8, v8, a0743; CHECK-NEXT:    li a0, 257744; CHECK-NEXT:    vmul.vx v8, v8, a0745; CHECK-NEXT:    vsrl.vi v8, v8, 8746; CHECK-NEXT:    ret747;748; CHECK-ZVBB-LABEL: ctlz_nxv32i16:749; CHECK-ZVBB:       # %bb.0:750; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m8, ta, ma751; CHECK-ZVBB-NEXT:    vclz.v v8, v8752; CHECK-ZVBB-NEXT:    ret753  %a = call <vscale x 32 x i16> @llvm.ctlz.nxv32i16(<vscale x 32 x i16> %va, i1 false)754  ret <vscale x 32 x i16> %a755}756 757define <vscale x 1 x i32> @ctlz_nxv1i32(<vscale x 1 x i32> %va) {758; CHECK-ZVE64X-LABEL: ctlz_nxv1i32:759; CHECK-ZVE64X:       # %bb.0:760; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma761; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1762; CHECK-ZVE64X-NEXT:    lui a0, 349525763; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9764; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365765; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 2766; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9767; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4768; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9769; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 8770; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9771; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 16772; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9773; CHECK-ZVE64X-NEXT:    vnot.v v8, v8774; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1775; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0776; CHECK-ZVE64X-NEXT:    lui a0, 209715777; CHECK-ZVE64X-NEXT:    addi a0, a0, 819778; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9779; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0780; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2781; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0782; CHECK-ZVE64X-NEXT:    lui a0, 61681783; CHECK-ZVE64X-NEXT:    addi a0, a0, -241784; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8785; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4786; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9787; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0788; CHECK-ZVE64X-NEXT:    lui a0, 4112789; CHECK-ZVE64X-NEXT:    addi a0, a0, 257790; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0791; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 24792; CHECK-ZVE64X-NEXT:    ret793;794; CHECK-F-LABEL: ctlz_nxv1i32:795; CHECK-F:       # %bb.0:796; CHECK-F-NEXT:    fsrmi a0, 1797; CHECK-F-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma798; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v8799; CHECK-F-NEXT:    li a1, 158800; CHECK-F-NEXT:    vsrl.vi v8, v8, 23801; CHECK-F-NEXT:    vrsub.vx v8, v8, a1802; CHECK-F-NEXT:    li a1, 32803; CHECK-F-NEXT:    vminu.vx v8, v8, a1804; CHECK-F-NEXT:    fsrm a0805; CHECK-F-NEXT:    ret806;807; CHECK-D-LABEL: ctlz_nxv1i32:808; CHECK-D:       # %bb.0:809; CHECK-D-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma810; CHECK-D-NEXT:    vfwcvt.f.xu.v v9, v8811; CHECK-D-NEXT:    li a0, 52812; CHECK-D-NEXT:    vnsrl.wx v8, v9, a0813; CHECK-D-NEXT:    li a0, 1054814; CHECK-D-NEXT:    vrsub.vx v8, v8, a0815; CHECK-D-NEXT:    li a0, 32816; CHECK-D-NEXT:    vminu.vx v8, v8, a0817; CHECK-D-NEXT:    ret818;819; CHECK-ZVBB-LABEL: ctlz_nxv1i32:820; CHECK-ZVBB:       # %bb.0:821; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma822; CHECK-ZVBB-NEXT:    vclz.v v8, v8823; CHECK-ZVBB-NEXT:    ret824  %a = call <vscale x 1 x i32> @llvm.ctlz.nxv1i32(<vscale x 1 x i32> %va, i1 false)825  ret <vscale x 1 x i32> %a826}827 828define <vscale x 2 x i32> @ctlz_nxv2i32(<vscale x 2 x i32> %va) {829; CHECK-ZVE64X-LABEL: ctlz_nxv2i32:830; CHECK-ZVE64X:       # %bb.0:831; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m1, ta, ma832; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1833; CHECK-ZVE64X-NEXT:    lui a0, 349525834; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9835; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365836; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 2837; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9838; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4839; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9840; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 8841; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9842; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 16843; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v9844; CHECK-ZVE64X-NEXT:    vnot.v v8, v8845; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1846; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0847; CHECK-ZVE64X-NEXT:    lui a0, 209715848; CHECK-ZVE64X-NEXT:    addi a0, a0, 819849; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9850; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0851; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2852; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0853; CHECK-ZVE64X-NEXT:    lui a0, 61681854; CHECK-ZVE64X-NEXT:    addi a0, a0, -241855; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8856; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4857; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9858; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0859; CHECK-ZVE64X-NEXT:    lui a0, 4112860; CHECK-ZVE64X-NEXT:    addi a0, a0, 257861; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0862; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 24863; CHECK-ZVE64X-NEXT:    ret864;865; CHECK-F-LABEL: ctlz_nxv2i32:866; CHECK-F:       # %bb.0:867; CHECK-F-NEXT:    fsrmi a0, 1868; CHECK-F-NEXT:    vsetvli a1, zero, e32, m1, ta, ma869; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v8870; CHECK-F-NEXT:    li a1, 158871; CHECK-F-NEXT:    vsrl.vi v8, v8, 23872; CHECK-F-NEXT:    vrsub.vx v8, v8, a1873; CHECK-F-NEXT:    li a1, 32874; CHECK-F-NEXT:    vminu.vx v8, v8, a1875; CHECK-F-NEXT:    fsrm a0876; CHECK-F-NEXT:    ret877;878; CHECK-D-LABEL: ctlz_nxv2i32:879; CHECK-D:       # %bb.0:880; CHECK-D-NEXT:    vsetvli a0, zero, e32, m1, ta, ma881; CHECK-D-NEXT:    vfwcvt.f.xu.v v10, v8882; CHECK-D-NEXT:    li a0, 52883; CHECK-D-NEXT:    vnsrl.wx v8, v10, a0884; CHECK-D-NEXT:    li a0, 1054885; CHECK-D-NEXT:    vrsub.vx v8, v8, a0886; CHECK-D-NEXT:    li a0, 32887; CHECK-D-NEXT:    vminu.vx v8, v8, a0888; CHECK-D-NEXT:    ret889;890; CHECK-ZVBB-LABEL: ctlz_nxv2i32:891; CHECK-ZVBB:       # %bb.0:892; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m1, ta, ma893; CHECK-ZVBB-NEXT:    vclz.v v8, v8894; CHECK-ZVBB-NEXT:    ret895  %a = call <vscale x 2 x i32> @llvm.ctlz.nxv2i32(<vscale x 2 x i32> %va, i1 false)896  ret <vscale x 2 x i32> %a897}898 899define <vscale x 4 x i32> @ctlz_nxv4i32(<vscale x 4 x i32> %va) {900; CHECK-ZVE64X-LABEL: ctlz_nxv4i32:901; CHECK-ZVE64X:       # %bb.0:902; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m2, ta, ma903; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 1904; CHECK-ZVE64X-NEXT:    lui a0, 349525905; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v10906; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365907; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 2908; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v10909; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 4910; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v10911; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 8912; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v10913; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 16914; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v10915; CHECK-ZVE64X-NEXT:    vnot.v v8, v8916; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 1917; CHECK-ZVE64X-NEXT:    vand.vx v10, v10, a0918; CHECK-ZVE64X-NEXT:    lui a0, 209715919; CHECK-ZVE64X-NEXT:    addi a0, a0, 819920; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v10921; CHECK-ZVE64X-NEXT:    vand.vx v10, v8, a0922; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2923; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0924; CHECK-ZVE64X-NEXT:    lui a0, 61681925; CHECK-ZVE64X-NEXT:    addi a0, a0, -241926; CHECK-ZVE64X-NEXT:    vadd.vv v8, v10, v8927; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 4928; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v10929; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0930; CHECK-ZVE64X-NEXT:    lui a0, 4112931; CHECK-ZVE64X-NEXT:    addi a0, a0, 257932; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0933; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 24934; CHECK-ZVE64X-NEXT:    ret935;936; CHECK-F-LABEL: ctlz_nxv4i32:937; CHECK-F:       # %bb.0:938; CHECK-F-NEXT:    fsrmi a0, 1939; CHECK-F-NEXT:    vsetvli a1, zero, e32, m2, ta, ma940; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v8941; CHECK-F-NEXT:    li a1, 158942; CHECK-F-NEXT:    vsrl.vi v8, v8, 23943; CHECK-F-NEXT:    vrsub.vx v8, v8, a1944; CHECK-F-NEXT:    li a1, 32945; CHECK-F-NEXT:    vminu.vx v8, v8, a1946; CHECK-F-NEXT:    fsrm a0947; CHECK-F-NEXT:    ret948;949; CHECK-D-LABEL: ctlz_nxv4i32:950; CHECK-D:       # %bb.0:951; CHECK-D-NEXT:    vsetvli a0, zero, e32, m2, ta, ma952; CHECK-D-NEXT:    vfwcvt.f.xu.v v12, v8953; CHECK-D-NEXT:    li a0, 52954; CHECK-D-NEXT:    vnsrl.wx v8, v12, a0955; CHECK-D-NEXT:    li a0, 1054956; CHECK-D-NEXT:    vrsub.vx v8, v8, a0957; CHECK-D-NEXT:    li a0, 32958; CHECK-D-NEXT:    vminu.vx v8, v8, a0959; CHECK-D-NEXT:    ret960;961; CHECK-ZVBB-LABEL: ctlz_nxv4i32:962; CHECK-ZVBB:       # %bb.0:963; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m2, ta, ma964; CHECK-ZVBB-NEXT:    vclz.v v8, v8965; CHECK-ZVBB-NEXT:    ret966  %a = call <vscale x 4 x i32> @llvm.ctlz.nxv4i32(<vscale x 4 x i32> %va, i1 false)967  ret <vscale x 4 x i32> %a968}969 970define <vscale x 8 x i32> @ctlz_nxv8i32(<vscale x 8 x i32> %va) {971; CHECK-ZVE64X-LABEL: ctlz_nxv8i32:972; CHECK-ZVE64X:       # %bb.0:973; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m4, ta, ma974; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 1975; CHECK-ZVE64X-NEXT:    lui a0, 349525976; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v12977; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365978; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 2979; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v12980; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 4981; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v12982; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 8983; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v12984; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 16985; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v12986; CHECK-ZVE64X-NEXT:    vnot.v v8, v8987; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 1988; CHECK-ZVE64X-NEXT:    vand.vx v12, v12, a0989; CHECK-ZVE64X-NEXT:    lui a0, 209715990; CHECK-ZVE64X-NEXT:    addi a0, a0, 819991; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v12992; CHECK-ZVE64X-NEXT:    vand.vx v12, v8, a0993; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2994; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0995; CHECK-ZVE64X-NEXT:    lui a0, 61681996; CHECK-ZVE64X-NEXT:    addi a0, a0, -241997; CHECK-ZVE64X-NEXT:    vadd.vv v8, v12, v8998; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 4999; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v121000; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01001; CHECK-ZVE64X-NEXT:    lui a0, 41121002; CHECK-ZVE64X-NEXT:    addi a0, a0, 2571003; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a01004; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 241005; CHECK-ZVE64X-NEXT:    ret1006;1007; CHECK-F-LABEL: ctlz_nxv8i32:1008; CHECK-F:       # %bb.0:1009; CHECK-F-NEXT:    fsrmi a0, 11010; CHECK-F-NEXT:    vsetvli a1, zero, e32, m4, ta, ma1011; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v81012; CHECK-F-NEXT:    li a1, 1581013; CHECK-F-NEXT:    vsrl.vi v8, v8, 231014; CHECK-F-NEXT:    vrsub.vx v8, v8, a11015; CHECK-F-NEXT:    li a1, 321016; CHECK-F-NEXT:    vminu.vx v8, v8, a11017; CHECK-F-NEXT:    fsrm a01018; CHECK-F-NEXT:    ret1019;1020; CHECK-D-LABEL: ctlz_nxv8i32:1021; CHECK-D:       # %bb.0:1022; CHECK-D-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1023; CHECK-D-NEXT:    vfwcvt.f.xu.v v16, v81024; CHECK-D-NEXT:    li a0, 521025; CHECK-D-NEXT:    vnsrl.wx v8, v16, a01026; CHECK-D-NEXT:    li a0, 10541027; CHECK-D-NEXT:    vrsub.vx v8, v8, a01028; CHECK-D-NEXT:    li a0, 321029; CHECK-D-NEXT:    vminu.vx v8, v8, a01030; CHECK-D-NEXT:    ret1031;1032; CHECK-ZVBB-LABEL: ctlz_nxv8i32:1033; CHECK-ZVBB:       # %bb.0:1034; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1035; CHECK-ZVBB-NEXT:    vclz.v v8, v81036; CHECK-ZVBB-NEXT:    ret1037  %a = call <vscale x 8 x i32> @llvm.ctlz.nxv8i32(<vscale x 8 x i32> %va, i1 false)1038  ret <vscale x 8 x i32> %a1039}1040 1041define <vscale x 16 x i32> @ctlz_nxv16i32(<vscale x 16 x i32> %va) {1042; CHECK-ZVE64X-LABEL: ctlz_nxv16i32:1043; CHECK-ZVE64X:       # %bb.0:1044; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m8, ta, ma1045; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 11046; CHECK-ZVE64X-NEXT:    lui a0, 3495251047; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v161048; CHECK-ZVE64X-NEXT:    addi a0, a0, 13651049; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 21050; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v161051; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 41052; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v161053; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 81054; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v161055; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 161056; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v161057; CHECK-ZVE64X-NEXT:    vnot.v v8, v81058; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 11059; CHECK-ZVE64X-NEXT:    vand.vx v16, v16, a01060; CHECK-ZVE64X-NEXT:    lui a0, 2097151061; CHECK-ZVE64X-NEXT:    addi a0, a0, 8191062; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v161063; CHECK-ZVE64X-NEXT:    vand.vx v16, v8, a01064; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21065; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01066; CHECK-ZVE64X-NEXT:    lui a0, 616811067; CHECK-ZVE64X-NEXT:    addi a0, a0, -2411068; CHECK-ZVE64X-NEXT:    vadd.vv v8, v16, v81069; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 41070; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v161071; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01072; CHECK-ZVE64X-NEXT:    lui a0, 41121073; CHECK-ZVE64X-NEXT:    addi a0, a0, 2571074; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a01075; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 241076; CHECK-ZVE64X-NEXT:    ret1077;1078; CHECK-F-LABEL: ctlz_nxv16i32:1079; CHECK-F:       # %bb.0:1080; CHECK-F-NEXT:    fsrmi a0, 11081; CHECK-F-NEXT:    vsetvli a1, zero, e32, m8, ta, ma1082; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v81083; CHECK-F-NEXT:    li a1, 1581084; CHECK-F-NEXT:    vsrl.vi v8, v8, 231085; CHECK-F-NEXT:    vrsub.vx v8, v8, a11086; CHECK-F-NEXT:    li a1, 321087; CHECK-F-NEXT:    vminu.vx v8, v8, a11088; CHECK-F-NEXT:    fsrm a01089; CHECK-F-NEXT:    ret1090;1091; CHECK-D-LABEL: ctlz_nxv16i32:1092; CHECK-D:       # %bb.0:1093; CHECK-D-NEXT:    fsrmi a0, 11094; CHECK-D-NEXT:    vsetvli a1, zero, e32, m8, ta, ma1095; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v81096; CHECK-D-NEXT:    li a1, 1581097; CHECK-D-NEXT:    vsrl.vi v8, v8, 231098; CHECK-D-NEXT:    vrsub.vx v8, v8, a11099; CHECK-D-NEXT:    li a1, 321100; CHECK-D-NEXT:    vminu.vx v8, v8, a11101; CHECK-D-NEXT:    fsrm a01102; CHECK-D-NEXT:    ret1103;1104; CHECK-ZVBB-LABEL: ctlz_nxv16i32:1105; CHECK-ZVBB:       # %bb.0:1106; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m8, ta, ma1107; CHECK-ZVBB-NEXT:    vclz.v v8, v81108; CHECK-ZVBB-NEXT:    ret1109  %a = call <vscale x 16 x i32> @llvm.ctlz.nxv16i32(<vscale x 16 x i32> %va, i1 false)1110  ret <vscale x 16 x i32> %a1111}1112 1113define <vscale x 1 x i64> @ctlz_nxv1i64(<vscale x 1 x i64> %va) {1114; RV32I-LABEL: ctlz_nxv1i64:1115; RV32I:       # %bb.0:1116; RV32I-NEXT:    vsetvli a0, zero, e64, m1, ta, ma1117; RV32I-NEXT:    vsrl.vi v9, v8, 11118; RV32I-NEXT:    lui a0, 3495251119; RV32I-NEXT:    addi a0, a0, 13651120; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma1121; RV32I-NEXT:    vmv.v.x v10, a01122; RV32I-NEXT:    li a0, 321123; RV32I-NEXT:    vsetvli a1, zero, e64, m1, ta, ma1124; RV32I-NEXT:    vor.vv v8, v8, v91125; RV32I-NEXT:    vsrl.vi v9, v8, 21126; RV32I-NEXT:    vor.vv v8, v8, v91127; RV32I-NEXT:    vsrl.vi v9, v8, 41128; RV32I-NEXT:    vor.vv v8, v8, v91129; RV32I-NEXT:    vsrl.vi v9, v8, 81130; RV32I-NEXT:    vor.vv v8, v8, v91131; RV32I-NEXT:    vsrl.vi v9, v8, 161132; RV32I-NEXT:    vor.vv v8, v8, v91133; RV32I-NEXT:    vsrl.vx v9, v8, a01134; RV32I-NEXT:    lui a0, 2097151135; RV32I-NEXT:    addi a0, a0, 8191136; RV32I-NEXT:    vor.vv v8, v8, v91137; RV32I-NEXT:    vnot.v v8, v81138; RV32I-NEXT:    vsrl.vi v9, v8, 11139; RV32I-NEXT:    vand.vv v9, v9, v101140; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma1141; RV32I-NEXT:    vmv.v.x v10, a01142; RV32I-NEXT:    lui a0, 616811143; RV32I-NEXT:    addi a0, a0, -2411144; RV32I-NEXT:    vsetvli a1, zero, e64, m1, ta, ma1145; RV32I-NEXT:    vsub.vv v8, v8, v91146; RV32I-NEXT:    vand.vv v9, v8, v101147; RV32I-NEXT:    vsrl.vi v8, v8, 21148; RV32I-NEXT:    vand.vv v8, v8, v101149; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma1150; RV32I-NEXT:    vmv.v.x v10, a01151; RV32I-NEXT:    lui a0, 41121152; RV32I-NEXT:    addi a0, a0, 2571153; RV32I-NEXT:    vsetvli a1, zero, e64, m1, ta, ma1154; RV32I-NEXT:    vadd.vv v8, v9, v81155; RV32I-NEXT:    vsrl.vi v9, v8, 41156; RV32I-NEXT:    vadd.vv v8, v8, v91157; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma1158; RV32I-NEXT:    vmv.v.x v9, a01159; RV32I-NEXT:    vsetvli a0, zero, e64, m1, ta, ma1160; RV32I-NEXT:    vand.vv v8, v8, v101161; RV32I-NEXT:    vmul.vv v8, v8, v91162; RV32I-NEXT:    li a0, 561163; RV32I-NEXT:    vsrl.vx v8, v8, a01164; RV32I-NEXT:    ret1165;1166; RV64I-LABEL: ctlz_nxv1i64:1167; RV64I:       # %bb.0:1168; RV64I-NEXT:    vsetvli a0, zero, e64, m1, ta, ma1169; RV64I-NEXT:    vsrl.vi v9, v8, 11170; RV64I-NEXT:    lui a0, 3495251171; RV64I-NEXT:    lui a1, 2097151172; RV64I-NEXT:    lui a2, 616811173; RV64I-NEXT:    lui a3, 41121174; RV64I-NEXT:    addi a0, a0, 13651175; RV64I-NEXT:    addi a1, a1, 8191176; RV64I-NEXT:    addi a2, a2, -2411177; RV64I-NEXT:    addi a3, a3, 2571178; RV64I-NEXT:    slli a4, a0, 321179; RV64I-NEXT:    add a0, a0, a41180; RV64I-NEXT:    slli a4, a1, 321181; RV64I-NEXT:    add a1, a1, a41182; RV64I-NEXT:    slli a4, a2, 321183; RV64I-NEXT:    add a2, a2, a41184; RV64I-NEXT:    slli a4, a3, 321185; RV64I-NEXT:    add a3, a3, a41186; RV64I-NEXT:    li a4, 321187; RV64I-NEXT:    vor.vv v8, v8, v91188; RV64I-NEXT:    vsrl.vi v9, v8, 21189; RV64I-NEXT:    vor.vv v8, v8, v91190; RV64I-NEXT:    vsrl.vi v9, v8, 41191; RV64I-NEXT:    vor.vv v8, v8, v91192; RV64I-NEXT:    vsrl.vi v9, v8, 81193; RV64I-NEXT:    vor.vv v8, v8, v91194; RV64I-NEXT:    vsrl.vi v9, v8, 161195; RV64I-NEXT:    vor.vv v8, v8, v91196; RV64I-NEXT:    vsrl.vx v9, v8, a41197; RV64I-NEXT:    vor.vv v8, v8, v91198; RV64I-NEXT:    vnot.v v8, v81199; RV64I-NEXT:    vsrl.vi v9, v8, 11200; RV64I-NEXT:    vand.vx v9, v9, a01201; RV64I-NEXT:    vsub.vv v8, v8, v91202; RV64I-NEXT:    vand.vx v9, v8, a11203; RV64I-NEXT:    vsrl.vi v8, v8, 21204; RV64I-NEXT:    vand.vx v8, v8, a11205; RV64I-NEXT:    vadd.vv v8, v9, v81206; RV64I-NEXT:    vsrl.vi v9, v8, 41207; RV64I-NEXT:    vadd.vv v8, v8, v91208; RV64I-NEXT:    vand.vx v8, v8, a21209; RV64I-NEXT:    vmul.vx v8, v8, a31210; RV64I-NEXT:    li a0, 561211; RV64I-NEXT:    vsrl.vx v8, v8, a01212; RV64I-NEXT:    ret1213;1214; CHECK-F-LABEL: ctlz_nxv1i64:1215; CHECK-F:       # %bb.0:1216; CHECK-F-NEXT:    li a0, 1901217; CHECK-F-NEXT:    fsrmi a1, 11218; CHECK-F-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma1219; CHECK-F-NEXT:    vfncvt.f.xu.w v9, v81220; CHECK-F-NEXT:    vmv.v.x v8, a01221; CHECK-F-NEXT:    vsrl.vi v9, v9, 231222; CHECK-F-NEXT:    vwsubu.vv v10, v8, v91223; CHECK-F-NEXT:    li a0, 641224; CHECK-F-NEXT:    vsetvli zero, zero, e64, m1, ta, ma1225; CHECK-F-NEXT:    vminu.vx v8, v10, a01226; CHECK-F-NEXT:    fsrm a11227; CHECK-F-NEXT:    ret1228;1229; CHECK-D-LABEL: ctlz_nxv1i64:1230; CHECK-D:       # %bb.0:1231; CHECK-D-NEXT:    fsrmi a0, 11232; CHECK-D-NEXT:    vsetvli a1, zero, e64, m1, ta, ma1233; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v81234; CHECK-D-NEXT:    li a1, 521235; CHECK-D-NEXT:    vsrl.vx v8, v8, a11236; CHECK-D-NEXT:    li a1, 10861237; CHECK-D-NEXT:    vrsub.vx v8, v8, a11238; CHECK-D-NEXT:    li a1, 641239; CHECK-D-NEXT:    vminu.vx v8, v8, a11240; CHECK-D-NEXT:    fsrm a01241; CHECK-D-NEXT:    ret1242;1243; CHECK-ZVBB-LABEL: ctlz_nxv1i64:1244; CHECK-ZVBB:       # %bb.0:1245; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m1, ta, ma1246; CHECK-ZVBB-NEXT:    vclz.v v8, v81247; CHECK-ZVBB-NEXT:    ret1248  %a = call <vscale x 1 x i64> @llvm.ctlz.nxv1i64(<vscale x 1 x i64> %va, i1 false)1249  ret <vscale x 1 x i64> %a1250}1251 1252define <vscale x 2 x i64> @ctlz_nxv2i64(<vscale x 2 x i64> %va) {1253; RV32I-LABEL: ctlz_nxv2i64:1254; RV32I:       # %bb.0:1255; RV32I-NEXT:    vsetvli a0, zero, e64, m2, ta, ma1256; RV32I-NEXT:    vsrl.vi v10, v8, 11257; RV32I-NEXT:    lui a0, 3495251258; RV32I-NEXT:    addi a0, a0, 13651259; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma1260; RV32I-NEXT:    vmv.v.x v12, a01261; RV32I-NEXT:    li a0, 321262; RV32I-NEXT:    vsetvli a1, zero, e64, m2, ta, ma1263; RV32I-NEXT:    vor.vv v8, v8, v101264; RV32I-NEXT:    vsrl.vi v10, v8, 21265; RV32I-NEXT:    vor.vv v8, v8, v101266; RV32I-NEXT:    vsrl.vi v10, v8, 41267; RV32I-NEXT:    vor.vv v8, v8, v101268; RV32I-NEXT:    vsrl.vi v10, v8, 81269; RV32I-NEXT:    vor.vv v8, v8, v101270; RV32I-NEXT:    vsrl.vi v10, v8, 161271; RV32I-NEXT:    vor.vv v8, v8, v101272; RV32I-NEXT:    vsrl.vx v10, v8, a01273; RV32I-NEXT:    lui a0, 2097151274; RV32I-NEXT:    addi a0, a0, 8191275; RV32I-NEXT:    vor.vv v8, v8, v101276; RV32I-NEXT:    vnot.v v8, v81277; RV32I-NEXT:    vsrl.vi v10, v8, 11278; RV32I-NEXT:    vand.vv v10, v10, v121279; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma1280; RV32I-NEXT:    vmv.v.x v12, a01281; RV32I-NEXT:    lui a0, 616811282; RV32I-NEXT:    addi a0, a0, -2411283; RV32I-NEXT:    vsetvli a1, zero, e64, m2, ta, ma1284; RV32I-NEXT:    vsub.vv v8, v8, v101285; RV32I-NEXT:    vand.vv v10, v8, v121286; RV32I-NEXT:    vsrl.vi v8, v8, 21287; RV32I-NEXT:    vand.vv v8, v8, v121288; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma1289; RV32I-NEXT:    vmv.v.x v12, a01290; RV32I-NEXT:    lui a0, 41121291; RV32I-NEXT:    addi a0, a0, 2571292; RV32I-NEXT:    vsetvli a1, zero, e64, m2, ta, ma1293; RV32I-NEXT:    vadd.vv v8, v10, v81294; RV32I-NEXT:    vsrl.vi v10, v8, 41295; RV32I-NEXT:    vadd.vv v8, v8, v101296; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma1297; RV32I-NEXT:    vmv.v.x v10, a01298; RV32I-NEXT:    vsetvli a0, zero, e64, m2, ta, ma1299; RV32I-NEXT:    vand.vv v8, v8, v121300; RV32I-NEXT:    vmul.vv v8, v8, v101301; RV32I-NEXT:    li a0, 561302; RV32I-NEXT:    vsrl.vx v8, v8, a01303; RV32I-NEXT:    ret1304;1305; RV64I-LABEL: ctlz_nxv2i64:1306; RV64I:       # %bb.0:1307; RV64I-NEXT:    vsetvli a0, zero, e64, m2, ta, ma1308; RV64I-NEXT:    vsrl.vi v10, v8, 11309; RV64I-NEXT:    lui a0, 3495251310; RV64I-NEXT:    lui a1, 2097151311; RV64I-NEXT:    lui a2, 616811312; RV64I-NEXT:    lui a3, 41121313; RV64I-NEXT:    addi a0, a0, 13651314; RV64I-NEXT:    addi a1, a1, 8191315; RV64I-NEXT:    addi a2, a2, -2411316; RV64I-NEXT:    addi a3, a3, 2571317; RV64I-NEXT:    slli a4, a0, 321318; RV64I-NEXT:    add a0, a0, a41319; RV64I-NEXT:    slli a4, a1, 321320; RV64I-NEXT:    add a1, a1, a41321; RV64I-NEXT:    slli a4, a2, 321322; RV64I-NEXT:    add a2, a2, a41323; RV64I-NEXT:    slli a4, a3, 321324; RV64I-NEXT:    add a3, a3, a41325; RV64I-NEXT:    li a4, 321326; RV64I-NEXT:    vor.vv v8, v8, v101327; RV64I-NEXT:    vsrl.vi v10, v8, 21328; RV64I-NEXT:    vor.vv v8, v8, v101329; RV64I-NEXT:    vsrl.vi v10, v8, 41330; RV64I-NEXT:    vor.vv v8, v8, v101331; RV64I-NEXT:    vsrl.vi v10, v8, 81332; RV64I-NEXT:    vor.vv v8, v8, v101333; RV64I-NEXT:    vsrl.vi v10, v8, 161334; RV64I-NEXT:    vor.vv v8, v8, v101335; RV64I-NEXT:    vsrl.vx v10, v8, a41336; RV64I-NEXT:    vor.vv v8, v8, v101337; RV64I-NEXT:    vnot.v v8, v81338; RV64I-NEXT:    vsrl.vi v10, v8, 11339; RV64I-NEXT:    vand.vx v10, v10, a01340; RV64I-NEXT:    vsub.vv v8, v8, v101341; RV64I-NEXT:    vand.vx v10, v8, a11342; RV64I-NEXT:    vsrl.vi v8, v8, 21343; RV64I-NEXT:    vand.vx v8, v8, a11344; RV64I-NEXT:    vadd.vv v8, v10, v81345; RV64I-NEXT:    vsrl.vi v10, v8, 41346; RV64I-NEXT:    vadd.vv v8, v8, v101347; RV64I-NEXT:    vand.vx v8, v8, a21348; RV64I-NEXT:    vmul.vx v8, v8, a31349; RV64I-NEXT:    li a0, 561350; RV64I-NEXT:    vsrl.vx v8, v8, a01351; RV64I-NEXT:    ret1352;1353; CHECK-F-LABEL: ctlz_nxv2i64:1354; CHECK-F:       # %bb.0:1355; CHECK-F-NEXT:    li a0, 1901356; CHECK-F-NEXT:    fsrmi a1, 11357; CHECK-F-NEXT:    vsetvli a2, zero, e32, m1, ta, ma1358; CHECK-F-NEXT:    vfncvt.f.xu.w v10, v81359; CHECK-F-NEXT:    vmv.v.x v11, a01360; CHECK-F-NEXT:    vsrl.vi v10, v10, 231361; CHECK-F-NEXT:    vwsubu.vv v8, v11, v101362; CHECK-F-NEXT:    li a0, 641363; CHECK-F-NEXT:    vsetvli zero, zero, e64, m2, ta, ma1364; CHECK-F-NEXT:    vminu.vx v8, v8, a01365; CHECK-F-NEXT:    fsrm a11366; CHECK-F-NEXT:    ret1367;1368; CHECK-D-LABEL: ctlz_nxv2i64:1369; CHECK-D:       # %bb.0:1370; CHECK-D-NEXT:    fsrmi a0, 11371; CHECK-D-NEXT:    vsetvli a1, zero, e64, m2, ta, ma1372; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v81373; CHECK-D-NEXT:    li a1, 521374; CHECK-D-NEXT:    vsrl.vx v8, v8, a11375; CHECK-D-NEXT:    li a1, 10861376; CHECK-D-NEXT:    vrsub.vx v8, v8, a11377; CHECK-D-NEXT:    li a1, 641378; CHECK-D-NEXT:    vminu.vx v8, v8, a11379; CHECK-D-NEXT:    fsrm a01380; CHECK-D-NEXT:    ret1381;1382; CHECK-ZVBB-LABEL: ctlz_nxv2i64:1383; CHECK-ZVBB:       # %bb.0:1384; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m2, ta, ma1385; CHECK-ZVBB-NEXT:    vclz.v v8, v81386; CHECK-ZVBB-NEXT:    ret1387  %a = call <vscale x 2 x i64> @llvm.ctlz.nxv2i64(<vscale x 2 x i64> %va, i1 false)1388  ret <vscale x 2 x i64> %a1389}1390 1391define <vscale x 4 x i64> @ctlz_nxv4i64(<vscale x 4 x i64> %va) {1392; RV32I-LABEL: ctlz_nxv4i64:1393; RV32I:       # %bb.0:1394; RV32I-NEXT:    vsetvli a0, zero, e64, m4, ta, ma1395; RV32I-NEXT:    vsrl.vi v12, v8, 11396; RV32I-NEXT:    lui a0, 3495251397; RV32I-NEXT:    addi a0, a0, 13651398; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma1399; RV32I-NEXT:    vmv.v.x v16, a01400; RV32I-NEXT:    li a0, 321401; RV32I-NEXT:    vsetvli a1, zero, e64, m4, ta, ma1402; RV32I-NEXT:    vor.vv v8, v8, v121403; RV32I-NEXT:    vsrl.vi v12, v8, 21404; RV32I-NEXT:    vor.vv v8, v8, v121405; RV32I-NEXT:    vsrl.vi v12, v8, 41406; RV32I-NEXT:    vor.vv v8, v8, v121407; RV32I-NEXT:    vsrl.vi v12, v8, 81408; RV32I-NEXT:    vor.vv v8, v8, v121409; RV32I-NEXT:    vsrl.vi v12, v8, 161410; RV32I-NEXT:    vor.vv v8, v8, v121411; RV32I-NEXT:    vsrl.vx v12, v8, a01412; RV32I-NEXT:    lui a0, 2097151413; RV32I-NEXT:    addi a0, a0, 8191414; RV32I-NEXT:    vor.vv v8, v8, v121415; RV32I-NEXT:    vnot.v v8, v81416; RV32I-NEXT:    vsrl.vi v12, v8, 11417; RV32I-NEXT:    vand.vv v12, v12, v161418; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma1419; RV32I-NEXT:    vmv.v.x v16, a01420; RV32I-NEXT:    lui a0, 616811421; RV32I-NEXT:    addi a0, a0, -2411422; RV32I-NEXT:    vsetvli a1, zero, e64, m4, ta, ma1423; RV32I-NEXT:    vsub.vv v8, v8, v121424; RV32I-NEXT:    vand.vv v12, v8, v161425; RV32I-NEXT:    vsrl.vi v8, v8, 21426; RV32I-NEXT:    vand.vv v8, v8, v161427; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma1428; RV32I-NEXT:    vmv.v.x v16, a01429; RV32I-NEXT:    lui a0, 41121430; RV32I-NEXT:    addi a0, a0, 2571431; RV32I-NEXT:    vsetvli a1, zero, e64, m4, ta, ma1432; RV32I-NEXT:    vadd.vv v8, v12, v81433; RV32I-NEXT:    vsrl.vi v12, v8, 41434; RV32I-NEXT:    vadd.vv v8, v8, v121435; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma1436; RV32I-NEXT:    vmv.v.x v12, a01437; RV32I-NEXT:    vsetvli a0, zero, e64, m4, ta, ma1438; RV32I-NEXT:    vand.vv v8, v8, v161439; RV32I-NEXT:    vmul.vv v8, v8, v121440; RV32I-NEXT:    li a0, 561441; RV32I-NEXT:    vsrl.vx v8, v8, a01442; RV32I-NEXT:    ret1443;1444; RV64I-LABEL: ctlz_nxv4i64:1445; RV64I:       # %bb.0:1446; RV64I-NEXT:    vsetvli a0, zero, e64, m4, ta, ma1447; RV64I-NEXT:    vsrl.vi v12, v8, 11448; RV64I-NEXT:    lui a0, 3495251449; RV64I-NEXT:    lui a1, 2097151450; RV64I-NEXT:    lui a2, 616811451; RV64I-NEXT:    lui a3, 41121452; RV64I-NEXT:    addi a0, a0, 13651453; RV64I-NEXT:    addi a1, a1, 8191454; RV64I-NEXT:    addi a2, a2, -2411455; RV64I-NEXT:    addi a3, a3, 2571456; RV64I-NEXT:    slli a4, a0, 321457; RV64I-NEXT:    add a0, a0, a41458; RV64I-NEXT:    slli a4, a1, 321459; RV64I-NEXT:    add a1, a1, a41460; RV64I-NEXT:    slli a4, a2, 321461; RV64I-NEXT:    add a2, a2, a41462; RV64I-NEXT:    slli a4, a3, 321463; RV64I-NEXT:    add a3, a3, a41464; RV64I-NEXT:    li a4, 321465; RV64I-NEXT:    vor.vv v8, v8, v121466; RV64I-NEXT:    vsrl.vi v12, v8, 21467; RV64I-NEXT:    vor.vv v8, v8, v121468; RV64I-NEXT:    vsrl.vi v12, v8, 41469; RV64I-NEXT:    vor.vv v8, v8, v121470; RV64I-NEXT:    vsrl.vi v12, v8, 81471; RV64I-NEXT:    vor.vv v8, v8, v121472; RV64I-NEXT:    vsrl.vi v12, v8, 161473; RV64I-NEXT:    vor.vv v8, v8, v121474; RV64I-NEXT:    vsrl.vx v12, v8, a41475; RV64I-NEXT:    vor.vv v8, v8, v121476; RV64I-NEXT:    vnot.v v8, v81477; RV64I-NEXT:    vsrl.vi v12, v8, 11478; RV64I-NEXT:    vand.vx v12, v12, a01479; RV64I-NEXT:    vsub.vv v8, v8, v121480; RV64I-NEXT:    vand.vx v12, v8, a11481; RV64I-NEXT:    vsrl.vi v8, v8, 21482; RV64I-NEXT:    vand.vx v8, v8, a11483; RV64I-NEXT:    vadd.vv v8, v12, v81484; RV64I-NEXT:    vsrl.vi v12, v8, 41485; RV64I-NEXT:    vadd.vv v8, v8, v121486; RV64I-NEXT:    vand.vx v8, v8, a21487; RV64I-NEXT:    vmul.vx v8, v8, a31488; RV64I-NEXT:    li a0, 561489; RV64I-NEXT:    vsrl.vx v8, v8, a01490; RV64I-NEXT:    ret1491;1492; CHECK-F-LABEL: ctlz_nxv4i64:1493; CHECK-F:       # %bb.0:1494; CHECK-F-NEXT:    li a0, 1901495; CHECK-F-NEXT:    fsrmi a1, 11496; CHECK-F-NEXT:    vsetvli a2, zero, e32, m2, ta, ma1497; CHECK-F-NEXT:    vfncvt.f.xu.w v12, v81498; CHECK-F-NEXT:    vmv.v.x v14, a01499; CHECK-F-NEXT:    vsrl.vi v12, v12, 231500; CHECK-F-NEXT:    vwsubu.vv v8, v14, v121501; CHECK-F-NEXT:    li a0, 641502; CHECK-F-NEXT:    vsetvli zero, zero, e64, m4, ta, ma1503; CHECK-F-NEXT:    vminu.vx v8, v8, a01504; CHECK-F-NEXT:    fsrm a11505; CHECK-F-NEXT:    ret1506;1507; CHECK-D-LABEL: ctlz_nxv4i64:1508; CHECK-D:       # %bb.0:1509; CHECK-D-NEXT:    fsrmi a0, 11510; CHECK-D-NEXT:    vsetvli a1, zero, e64, m4, ta, ma1511; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v81512; CHECK-D-NEXT:    li a1, 521513; CHECK-D-NEXT:    vsrl.vx v8, v8, a11514; CHECK-D-NEXT:    li a1, 10861515; CHECK-D-NEXT:    vrsub.vx v8, v8, a11516; CHECK-D-NEXT:    li a1, 641517; CHECK-D-NEXT:    vminu.vx v8, v8, a11518; CHECK-D-NEXT:    fsrm a01519; CHECK-D-NEXT:    ret1520;1521; CHECK-ZVBB-LABEL: ctlz_nxv4i64:1522; CHECK-ZVBB:       # %bb.0:1523; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m4, ta, ma1524; CHECK-ZVBB-NEXT:    vclz.v v8, v81525; CHECK-ZVBB-NEXT:    ret1526  %a = call <vscale x 4 x i64> @llvm.ctlz.nxv4i64(<vscale x 4 x i64> %va, i1 false)1527  ret <vscale x 4 x i64> %a1528}1529 1530define <vscale x 8 x i64> @ctlz_nxv8i64(<vscale x 8 x i64> %va) {1531; RV32I-LABEL: ctlz_nxv8i64:1532; RV32I:       # %bb.0:1533; RV32I-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1534; RV32I-NEXT:    vsrl.vi v16, v8, 11535; RV32I-NEXT:    lui a0, 3495251536; RV32I-NEXT:    addi a0, a0, 13651537; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma1538; RV32I-NEXT:    vmv.v.x v24, a01539; RV32I-NEXT:    li a0, 321540; RV32I-NEXT:    vsetvli a1, zero, e64, m8, ta, ma1541; RV32I-NEXT:    vor.vv v8, v8, v161542; RV32I-NEXT:    vsrl.vi v16, v8, 21543; RV32I-NEXT:    vor.vv v8, v8, v161544; RV32I-NEXT:    vsrl.vi v16, v8, 41545; RV32I-NEXT:    vor.vv v8, v8, v161546; RV32I-NEXT:    vsrl.vi v16, v8, 81547; RV32I-NEXT:    vor.vv v8, v8, v161548; RV32I-NEXT:    vsrl.vi v16, v8, 161549; RV32I-NEXT:    vor.vv v8, v8, v161550; RV32I-NEXT:    vsrl.vx v16, v8, a01551; RV32I-NEXT:    lui a0, 2097151552; RV32I-NEXT:    addi a0, a0, 8191553; RV32I-NEXT:    vor.vv v8, v8, v161554; RV32I-NEXT:    vnot.v v8, v81555; RV32I-NEXT:    vsrl.vi v16, v8, 11556; RV32I-NEXT:    vand.vv v24, v16, v241557; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma1558; RV32I-NEXT:    vmv.v.x v16, a01559; RV32I-NEXT:    lui a0, 616811560; RV32I-NEXT:    addi a0, a0, -2411561; RV32I-NEXT:    vsetvli a1, zero, e64, m8, ta, ma1562; RV32I-NEXT:    vsub.vv v8, v8, v241563; RV32I-NEXT:    vand.vv v24, v8, v161564; RV32I-NEXT:    vsrl.vi v8, v8, 21565; RV32I-NEXT:    vand.vv v8, v8, v161566; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma1567; RV32I-NEXT:    vmv.v.x v16, a01568; RV32I-NEXT:    lui a0, 41121569; RV32I-NEXT:    addi a0, a0, 2571570; RV32I-NEXT:    vsetvli a1, zero, e64, m8, ta, ma1571; RV32I-NEXT:    vadd.vv v8, v24, v81572; RV32I-NEXT:    vsrl.vi v24, v8, 41573; RV32I-NEXT:    vadd.vv v8, v8, v241574; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma1575; RV32I-NEXT:    vmv.v.x v24, a01576; RV32I-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1577; RV32I-NEXT:    vand.vv v8, v8, v161578; RV32I-NEXT:    vmul.vv v8, v8, v241579; RV32I-NEXT:    li a0, 561580; RV32I-NEXT:    vsrl.vx v8, v8, a01581; RV32I-NEXT:    ret1582;1583; RV64I-LABEL: ctlz_nxv8i64:1584; RV64I:       # %bb.0:1585; RV64I-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1586; RV64I-NEXT:    vsrl.vi v16, v8, 11587; RV64I-NEXT:    lui a0, 3495251588; RV64I-NEXT:    lui a1, 2097151589; RV64I-NEXT:    lui a2, 616811590; RV64I-NEXT:    lui a3, 41121591; RV64I-NEXT:    addi a0, a0, 13651592; RV64I-NEXT:    addi a1, a1, 8191593; RV64I-NEXT:    addi a2, a2, -2411594; RV64I-NEXT:    addi a3, a3, 2571595; RV64I-NEXT:    slli a4, a0, 321596; RV64I-NEXT:    add a0, a0, a41597; RV64I-NEXT:    slli a4, a1, 321598; RV64I-NEXT:    add a1, a1, a41599; RV64I-NEXT:    slli a4, a2, 321600; RV64I-NEXT:    add a2, a2, a41601; RV64I-NEXT:    slli a4, a3, 321602; RV64I-NEXT:    add a3, a3, a41603; RV64I-NEXT:    li a4, 321604; RV64I-NEXT:    vor.vv v8, v8, v161605; RV64I-NEXT:    vsrl.vi v16, v8, 21606; RV64I-NEXT:    vor.vv v8, v8, v161607; RV64I-NEXT:    vsrl.vi v16, v8, 41608; RV64I-NEXT:    vor.vv v8, v8, v161609; RV64I-NEXT:    vsrl.vi v16, v8, 81610; RV64I-NEXT:    vor.vv v8, v8, v161611; RV64I-NEXT:    vsrl.vi v16, v8, 161612; RV64I-NEXT:    vor.vv v8, v8, v161613; RV64I-NEXT:    vsrl.vx v16, v8, a41614; RV64I-NEXT:    vor.vv v8, v8, v161615; RV64I-NEXT:    vnot.v v8, v81616; RV64I-NEXT:    vsrl.vi v16, v8, 11617; RV64I-NEXT:    vand.vx v16, v16, a01618; RV64I-NEXT:    vsub.vv v8, v8, v161619; RV64I-NEXT:    vand.vx v16, v8, a11620; RV64I-NEXT:    vsrl.vi v8, v8, 21621; RV64I-NEXT:    vand.vx v8, v8, a11622; RV64I-NEXT:    vadd.vv v8, v16, v81623; RV64I-NEXT:    vsrl.vi v16, v8, 41624; RV64I-NEXT:    vadd.vv v8, v8, v161625; RV64I-NEXT:    vand.vx v8, v8, a21626; RV64I-NEXT:    vmul.vx v8, v8, a31627; RV64I-NEXT:    li a0, 561628; RV64I-NEXT:    vsrl.vx v8, v8, a01629; RV64I-NEXT:    ret1630;1631; CHECK-F-LABEL: ctlz_nxv8i64:1632; CHECK-F:       # %bb.0:1633; CHECK-F-NEXT:    li a0, 1901634; CHECK-F-NEXT:    fsrmi a1, 11635; CHECK-F-NEXT:    vsetvli a2, zero, e32, m4, ta, ma1636; CHECK-F-NEXT:    vfncvt.f.xu.w v16, v81637; CHECK-F-NEXT:    vmv.v.x v20, a01638; CHECK-F-NEXT:    vsrl.vi v16, v16, 231639; CHECK-F-NEXT:    vwsubu.vv v8, v20, v161640; CHECK-F-NEXT:    li a0, 641641; CHECK-F-NEXT:    vsetvli zero, zero, e64, m8, ta, ma1642; CHECK-F-NEXT:    vminu.vx v8, v8, a01643; CHECK-F-NEXT:    fsrm a11644; CHECK-F-NEXT:    ret1645;1646; CHECK-D-LABEL: ctlz_nxv8i64:1647; CHECK-D:       # %bb.0:1648; CHECK-D-NEXT:    fsrmi a0, 11649; CHECK-D-NEXT:    vsetvli a1, zero, e64, m8, ta, ma1650; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v81651; CHECK-D-NEXT:    li a1, 521652; CHECK-D-NEXT:    vsrl.vx v8, v8, a11653; CHECK-D-NEXT:    li a1, 10861654; CHECK-D-NEXT:    vrsub.vx v8, v8, a11655; CHECK-D-NEXT:    li a1, 641656; CHECK-D-NEXT:    vminu.vx v8, v8, a11657; CHECK-D-NEXT:    fsrm a01658; CHECK-D-NEXT:    ret1659;1660; CHECK-ZVBB-LABEL: ctlz_nxv8i64:1661; CHECK-ZVBB:       # %bb.0:1662; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1663; CHECK-ZVBB-NEXT:    vclz.v v8, v81664; CHECK-ZVBB-NEXT:    ret1665  %a = call <vscale x 8 x i64> @llvm.ctlz.nxv8i64(<vscale x 8 x i64> %va, i1 false)1666  ret <vscale x 8 x i64> %a1667}1668 1669define <vscale x 1 x i8> @ctlz_zero_undef_nxv1i8(<vscale x 1 x i8> %va) {1670; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv1i8:1671; CHECK-ZVE64X:       # %bb.0:1672; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma1673; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11674; CHECK-ZVE64X-NEXT:    li a0, 851675; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v91676; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 21677; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v91678; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41679; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v91680; CHECK-ZVE64X-NEXT:    vnot.v v8, v81681; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11682; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a01683; CHECK-ZVE64X-NEXT:    li a0, 511684; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v91685; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a01686; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21687; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01688; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v81689; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41690; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v91691; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 151692; CHECK-ZVE64X-NEXT:    ret1693;1694; CHECK-F-LABEL: ctlz_zero_undef_nxv1i8:1695; CHECK-F:       # %bb.0:1696; CHECK-F-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma1697; CHECK-F-NEXT:    vzext.vf2 v9, v81698; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v91699; CHECK-F-NEXT:    vnsrl.wi v8, v8, 231700; CHECK-F-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma1701; CHECK-F-NEXT:    vnsrl.wi v8, v8, 01702; CHECK-F-NEXT:    li a0, 1341703; CHECK-F-NEXT:    vrsub.vx v8, v8, a01704; CHECK-F-NEXT:    ret1705;1706; CHECK-D-LABEL: ctlz_zero_undef_nxv1i8:1707; CHECK-D:       # %bb.0:1708; CHECK-D-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma1709; CHECK-D-NEXT:    vzext.vf2 v9, v81710; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v91711; CHECK-D-NEXT:    vnsrl.wi v8, v8, 231712; CHECK-D-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma1713; CHECK-D-NEXT:    vnsrl.wi v8, v8, 01714; CHECK-D-NEXT:    li a0, 1341715; CHECK-D-NEXT:    vrsub.vx v8, v8, a01716; CHECK-D-NEXT:    ret1717;1718; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv1i8:1719; CHECK-ZVBB:       # %bb.0:1720; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma1721; CHECK-ZVBB-NEXT:    vclz.v v8, v81722; CHECK-ZVBB-NEXT:    ret1723  %a = call <vscale x 1 x i8> @llvm.ctlz.nxv1i8(<vscale x 1 x i8> %va, i1 true)1724  ret <vscale x 1 x i8> %a1725}1726 1727define <vscale x 2 x i8> @ctlz_zero_undef_nxv2i8(<vscale x 2 x i8> %va) {1728; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv2i8:1729; CHECK-ZVE64X:       # %bb.0:1730; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma1731; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11732; CHECK-ZVE64X-NEXT:    li a0, 851733; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v91734; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 21735; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v91736; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41737; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v91738; CHECK-ZVE64X-NEXT:    vnot.v v8, v81739; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11740; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a01741; CHECK-ZVE64X-NEXT:    li a0, 511742; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v91743; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a01744; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21745; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01746; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v81747; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41748; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v91749; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 151750; CHECK-ZVE64X-NEXT:    ret1751;1752; CHECK-F-LABEL: ctlz_zero_undef_nxv2i8:1753; CHECK-F:       # %bb.0:1754; CHECK-F-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma1755; CHECK-F-NEXT:    vzext.vf2 v9, v81756; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v91757; CHECK-F-NEXT:    vnsrl.wi v8, v8, 231758; CHECK-F-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma1759; CHECK-F-NEXT:    vnsrl.wi v8, v8, 01760; CHECK-F-NEXT:    li a0, 1341761; CHECK-F-NEXT:    vrsub.vx v8, v8, a01762; CHECK-F-NEXT:    ret1763;1764; CHECK-D-LABEL: ctlz_zero_undef_nxv2i8:1765; CHECK-D:       # %bb.0:1766; CHECK-D-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma1767; CHECK-D-NEXT:    vzext.vf2 v9, v81768; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v91769; CHECK-D-NEXT:    vnsrl.wi v8, v8, 231770; CHECK-D-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma1771; CHECK-D-NEXT:    vnsrl.wi v8, v8, 01772; CHECK-D-NEXT:    li a0, 1341773; CHECK-D-NEXT:    vrsub.vx v8, v8, a01774; CHECK-D-NEXT:    ret1775;1776; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv2i8:1777; CHECK-ZVBB:       # %bb.0:1778; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma1779; CHECK-ZVBB-NEXT:    vclz.v v8, v81780; CHECK-ZVBB-NEXT:    ret1781  %a = call <vscale x 2 x i8> @llvm.ctlz.nxv2i8(<vscale x 2 x i8> %va, i1 true)1782  ret <vscale x 2 x i8> %a1783}1784 1785define <vscale x 4 x i8> @ctlz_zero_undef_nxv4i8(<vscale x 4 x i8> %va) {1786; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv4i8:1787; CHECK-ZVE64X:       # %bb.0:1788; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma1789; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11790; CHECK-ZVE64X-NEXT:    li a0, 851791; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v91792; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 21793; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v91794; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41795; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v91796; CHECK-ZVE64X-NEXT:    vnot.v v8, v81797; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11798; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a01799; CHECK-ZVE64X-NEXT:    li a0, 511800; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v91801; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a01802; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21803; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01804; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v81805; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41806; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v91807; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 151808; CHECK-ZVE64X-NEXT:    ret1809;1810; CHECK-F-LABEL: ctlz_zero_undef_nxv4i8:1811; CHECK-F:       # %bb.0:1812; CHECK-F-NEXT:    vsetvli a0, zero, e16, m1, ta, ma1813; CHECK-F-NEXT:    vzext.vf2 v10, v81814; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v101815; CHECK-F-NEXT:    vnsrl.wi v10, v8, 231816; CHECK-F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma1817; CHECK-F-NEXT:    vnsrl.wi v8, v10, 01818; CHECK-F-NEXT:    li a0, 1341819; CHECK-F-NEXT:    vrsub.vx v8, v8, a01820; CHECK-F-NEXT:    ret1821;1822; CHECK-D-LABEL: ctlz_zero_undef_nxv4i8:1823; CHECK-D:       # %bb.0:1824; CHECK-D-NEXT:    vsetvli a0, zero, e16, m1, ta, ma1825; CHECK-D-NEXT:    vzext.vf2 v10, v81826; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v101827; CHECK-D-NEXT:    vnsrl.wi v10, v8, 231828; CHECK-D-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma1829; CHECK-D-NEXT:    vnsrl.wi v8, v10, 01830; CHECK-D-NEXT:    li a0, 1341831; CHECK-D-NEXT:    vrsub.vx v8, v8, a01832; CHECK-D-NEXT:    ret1833;1834; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv4i8:1835; CHECK-ZVBB:       # %bb.0:1836; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma1837; CHECK-ZVBB-NEXT:    vclz.v v8, v81838; CHECK-ZVBB-NEXT:    ret1839  %a = call <vscale x 4 x i8> @llvm.ctlz.nxv4i8(<vscale x 4 x i8> %va, i1 true)1840  ret <vscale x 4 x i8> %a1841}1842 1843define <vscale x 8 x i8> @ctlz_zero_undef_nxv8i8(<vscale x 8 x i8> %va) {1844; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv8i8:1845; CHECK-ZVE64X:       # %bb.0:1846; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, m1, ta, ma1847; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11848; CHECK-ZVE64X-NEXT:    li a0, 851849; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v91850; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 21851; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v91852; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41853; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v91854; CHECK-ZVE64X-NEXT:    vnot.v v8, v81855; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11856; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a01857; CHECK-ZVE64X-NEXT:    li a0, 511858; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v91859; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a01860; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21861; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01862; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v81863; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41864; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v91865; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 151866; CHECK-ZVE64X-NEXT:    ret1867;1868; CHECK-F-LABEL: ctlz_zero_undef_nxv8i8:1869; CHECK-F:       # %bb.0:1870; CHECK-F-NEXT:    vsetvli a0, zero, e16, m2, ta, ma1871; CHECK-F-NEXT:    vzext.vf2 v12, v81872; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v121873; CHECK-F-NEXT:    vnsrl.wi v12, v8, 231874; CHECK-F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma1875; CHECK-F-NEXT:    vnsrl.wi v8, v12, 01876; CHECK-F-NEXT:    li a0, 1341877; CHECK-F-NEXT:    vrsub.vx v8, v8, a01878; CHECK-F-NEXT:    ret1879;1880; CHECK-D-LABEL: ctlz_zero_undef_nxv8i8:1881; CHECK-D:       # %bb.0:1882; CHECK-D-NEXT:    vsetvli a0, zero, e16, m2, ta, ma1883; CHECK-D-NEXT:    vzext.vf2 v12, v81884; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v121885; CHECK-D-NEXT:    vnsrl.wi v12, v8, 231886; CHECK-D-NEXT:    vsetvli zero, zero, e8, m1, ta, ma1887; CHECK-D-NEXT:    vnsrl.wi v8, v12, 01888; CHECK-D-NEXT:    li a0, 1341889; CHECK-D-NEXT:    vrsub.vx v8, v8, a01890; CHECK-D-NEXT:    ret1891;1892; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv8i8:1893; CHECK-ZVBB:       # %bb.0:1894; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m1, ta, ma1895; CHECK-ZVBB-NEXT:    vclz.v v8, v81896; CHECK-ZVBB-NEXT:    ret1897  %a = call <vscale x 8 x i8> @llvm.ctlz.nxv8i8(<vscale x 8 x i8> %va, i1 true)1898  ret <vscale x 8 x i8> %a1899}1900 1901define <vscale x 16 x i8> @ctlz_zero_undef_nxv16i8(<vscale x 16 x i8> %va) {1902; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv16i8:1903; CHECK-ZVE64X:       # %bb.0:1904; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, m2, ta, ma1905; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 11906; CHECK-ZVE64X-NEXT:    li a0, 851907; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v101908; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 21909; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v101910; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 41911; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v101912; CHECK-ZVE64X-NEXT:    vnot.v v8, v81913; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 11914; CHECK-ZVE64X-NEXT:    vand.vx v10, v10, a01915; CHECK-ZVE64X-NEXT:    li a0, 511916; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v101917; CHECK-ZVE64X-NEXT:    vand.vx v10, v8, a01918; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21919; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01920; CHECK-ZVE64X-NEXT:    vadd.vv v8, v10, v81921; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 41922; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v101923; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 151924; CHECK-ZVE64X-NEXT:    ret1925;1926; CHECK-F-LABEL: ctlz_zero_undef_nxv16i8:1927; CHECK-F:       # %bb.0:1928; CHECK-F-NEXT:    vsetvli a0, zero, e16, m4, ta, ma1929; CHECK-F-NEXT:    vzext.vf2 v16, v81930; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v161931; CHECK-F-NEXT:    vnsrl.wi v16, v8, 231932; CHECK-F-NEXT:    vsetvli zero, zero, e8, m2, ta, ma1933; CHECK-F-NEXT:    vnsrl.wi v8, v16, 01934; CHECK-F-NEXT:    li a0, 1341935; CHECK-F-NEXT:    vrsub.vx v8, v8, a01936; CHECK-F-NEXT:    ret1937;1938; CHECK-D-LABEL: ctlz_zero_undef_nxv16i8:1939; CHECK-D:       # %bb.0:1940; CHECK-D-NEXT:    vsetvli a0, zero, e16, m4, ta, ma1941; CHECK-D-NEXT:    vzext.vf2 v16, v81942; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v161943; CHECK-D-NEXT:    vnsrl.wi v16, v8, 231944; CHECK-D-NEXT:    vsetvli zero, zero, e8, m2, ta, ma1945; CHECK-D-NEXT:    vnsrl.wi v8, v16, 01946; CHECK-D-NEXT:    li a0, 1341947; CHECK-D-NEXT:    vrsub.vx v8, v8, a01948; CHECK-D-NEXT:    ret1949;1950; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv16i8:1951; CHECK-ZVBB:       # %bb.0:1952; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m2, ta, ma1953; CHECK-ZVBB-NEXT:    vclz.v v8, v81954; CHECK-ZVBB-NEXT:    ret1955  %a = call <vscale x 16 x i8> @llvm.ctlz.nxv16i8(<vscale x 16 x i8> %va, i1 true)1956  ret <vscale x 16 x i8> %a1957}1958 1959define <vscale x 32 x i8> @ctlz_zero_undef_nxv32i8(<vscale x 32 x i8> %va) {1960; CHECK-LABEL: ctlz_zero_undef_nxv32i8:1961; CHECK:       # %bb.0:1962; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma1963; CHECK-NEXT:    vsrl.vi v12, v8, 11964; CHECK-NEXT:    li a0, 851965; CHECK-NEXT:    vor.vv v8, v8, v121966; CHECK-NEXT:    vsrl.vi v12, v8, 21967; CHECK-NEXT:    vor.vv v8, v8, v121968; CHECK-NEXT:    vsrl.vi v12, v8, 41969; CHECK-NEXT:    vor.vv v8, v8, v121970; CHECK-NEXT:    vnot.v v8, v81971; CHECK-NEXT:    vsrl.vi v12, v8, 11972; CHECK-NEXT:    vand.vx v12, v12, a01973; CHECK-NEXT:    li a0, 511974; CHECK-NEXT:    vsub.vv v8, v8, v121975; CHECK-NEXT:    vand.vx v12, v8, a01976; CHECK-NEXT:    vsrl.vi v8, v8, 21977; CHECK-NEXT:    vand.vx v8, v8, a01978; CHECK-NEXT:    vadd.vv v8, v12, v81979; CHECK-NEXT:    vsrl.vi v12, v8, 41980; CHECK-NEXT:    vadd.vv v8, v8, v121981; CHECK-NEXT:    vand.vi v8, v8, 151982; CHECK-NEXT:    ret1983;1984; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv32i8:1985; CHECK-ZVBB:       # %bb.0:1986; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m4, ta, ma1987; CHECK-ZVBB-NEXT:    vclz.v v8, v81988; CHECK-ZVBB-NEXT:    ret1989  %a = call <vscale x 32 x i8> @llvm.ctlz.nxv32i8(<vscale x 32 x i8> %va, i1 true)1990  ret <vscale x 32 x i8> %a1991}1992 1993define <vscale x 64 x i8> @ctlz_zero_undef_nxv64i8(<vscale x 64 x i8> %va) {1994; CHECK-LABEL: ctlz_zero_undef_nxv64i8:1995; CHECK:       # %bb.0:1996; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma1997; CHECK-NEXT:    vsrl.vi v16, v8, 11998; CHECK-NEXT:    li a0, 851999; CHECK-NEXT:    vor.vv v8, v8, v162000; CHECK-NEXT:    vsrl.vi v16, v8, 22001; CHECK-NEXT:    vor.vv v8, v8, v162002; CHECK-NEXT:    vsrl.vi v16, v8, 42003; CHECK-NEXT:    vor.vv v8, v8, v162004; CHECK-NEXT:    vnot.v v8, v82005; CHECK-NEXT:    vsrl.vi v16, v8, 12006; CHECK-NEXT:    vand.vx v16, v16, a02007; CHECK-NEXT:    li a0, 512008; CHECK-NEXT:    vsub.vv v8, v8, v162009; CHECK-NEXT:    vand.vx v16, v8, a02010; CHECK-NEXT:    vsrl.vi v8, v8, 22011; CHECK-NEXT:    vand.vx v8, v8, a02012; CHECK-NEXT:    vadd.vv v8, v16, v82013; CHECK-NEXT:    vsrl.vi v16, v8, 42014; CHECK-NEXT:    vadd.vv v8, v8, v162015; CHECK-NEXT:    vand.vi v8, v8, 152016; CHECK-NEXT:    ret2017;2018; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv64i8:2019; CHECK-ZVBB:       # %bb.0:2020; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m8, ta, ma2021; CHECK-ZVBB-NEXT:    vclz.v v8, v82022; CHECK-ZVBB-NEXT:    ret2023  %a = call <vscale x 64 x i8> @llvm.ctlz.nxv64i8(<vscale x 64 x i8> %va, i1 true)2024  ret <vscale x 64 x i8> %a2025}2026 2027define <vscale x 1 x i16> @ctlz_zero_undef_nxv1i16(<vscale x 1 x i16> %va) {2028; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv1i16:2029; CHECK-ZVE64X:       # %bb.0:2030; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma2031; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12032; CHECK-ZVE64X-NEXT:    lui a0, 52033; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92034; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652035; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 22036; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92037; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42038; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92039; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 82040; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92041; CHECK-ZVE64X-NEXT:    vnot.v v8, v82042; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12043; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a02044; CHECK-ZVE64X-NEXT:    lui a0, 32045; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192046; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v92047; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a02048; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22049; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02050; CHECK-ZVE64X-NEXT:    lui a0, 12051; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412052; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v82053; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42054; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v92055; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02056; CHECK-ZVE64X-NEXT:    li a0, 2572057; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02058; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 82059; CHECK-ZVE64X-NEXT:    ret2060;2061; CHECK-F-LABEL: ctlz_zero_undef_nxv1i16:2062; CHECK-F:       # %bb.0:2063; CHECK-F-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma2064; CHECK-F-NEXT:    vfwcvt.f.xu.v v9, v82065; CHECK-F-NEXT:    vnsrl.wi v8, v9, 232066; CHECK-F-NEXT:    li a0, 1422067; CHECK-F-NEXT:    vrsub.vx v8, v8, a02068; CHECK-F-NEXT:    ret2069;2070; CHECK-D-LABEL: ctlz_zero_undef_nxv1i16:2071; CHECK-D:       # %bb.0:2072; CHECK-D-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma2073; CHECK-D-NEXT:    vfwcvt.f.xu.v v9, v82074; CHECK-D-NEXT:    vnsrl.wi v8, v9, 232075; CHECK-D-NEXT:    li a0, 1422076; CHECK-D-NEXT:    vrsub.vx v8, v8, a02077; CHECK-D-NEXT:    ret2078;2079; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv1i16:2080; CHECK-ZVBB:       # %bb.0:2081; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma2082; CHECK-ZVBB-NEXT:    vclz.v v8, v82083; CHECK-ZVBB-NEXT:    ret2084  %a = call <vscale x 1 x i16> @llvm.ctlz.nxv1i16(<vscale x 1 x i16> %va, i1 true)2085  ret <vscale x 1 x i16> %a2086}2087 2088define <vscale x 2 x i16> @ctlz_zero_undef_nxv2i16(<vscale x 2 x i16> %va) {2089; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv2i16:2090; CHECK-ZVE64X:       # %bb.0:2091; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma2092; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12093; CHECK-ZVE64X-NEXT:    lui a0, 52094; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92095; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652096; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 22097; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92098; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42099; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92100; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 82101; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92102; CHECK-ZVE64X-NEXT:    vnot.v v8, v82103; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12104; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a02105; CHECK-ZVE64X-NEXT:    lui a0, 32106; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192107; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v92108; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a02109; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22110; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02111; CHECK-ZVE64X-NEXT:    lui a0, 12112; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412113; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v82114; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42115; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v92116; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02117; CHECK-ZVE64X-NEXT:    li a0, 2572118; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02119; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 82120; CHECK-ZVE64X-NEXT:    ret2121;2122; CHECK-F-LABEL: ctlz_zero_undef_nxv2i16:2123; CHECK-F:       # %bb.0:2124; CHECK-F-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma2125; CHECK-F-NEXT:    vfwcvt.f.xu.v v9, v82126; CHECK-F-NEXT:    vnsrl.wi v8, v9, 232127; CHECK-F-NEXT:    li a0, 1422128; CHECK-F-NEXT:    vrsub.vx v8, v8, a02129; CHECK-F-NEXT:    ret2130;2131; CHECK-D-LABEL: ctlz_zero_undef_nxv2i16:2132; CHECK-D:       # %bb.0:2133; CHECK-D-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma2134; CHECK-D-NEXT:    vfwcvt.f.xu.v v9, v82135; CHECK-D-NEXT:    vnsrl.wi v8, v9, 232136; CHECK-D-NEXT:    li a0, 1422137; CHECK-D-NEXT:    vrsub.vx v8, v8, a02138; CHECK-D-NEXT:    ret2139;2140; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv2i16:2141; CHECK-ZVBB:       # %bb.0:2142; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma2143; CHECK-ZVBB-NEXT:    vclz.v v8, v82144; CHECK-ZVBB-NEXT:    ret2145  %a = call <vscale x 2 x i16> @llvm.ctlz.nxv2i16(<vscale x 2 x i16> %va, i1 true)2146  ret <vscale x 2 x i16> %a2147}2148 2149define <vscale x 4 x i16> @ctlz_zero_undef_nxv4i16(<vscale x 4 x i16> %va) {2150; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv4i16:2151; CHECK-ZVE64X:       # %bb.0:2152; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, m1, ta, ma2153; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12154; CHECK-ZVE64X-NEXT:    lui a0, 52155; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92156; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652157; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 22158; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92159; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42160; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92161; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 82162; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92163; CHECK-ZVE64X-NEXT:    vnot.v v8, v82164; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12165; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a02166; CHECK-ZVE64X-NEXT:    lui a0, 32167; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192168; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v92169; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a02170; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22171; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02172; CHECK-ZVE64X-NEXT:    lui a0, 12173; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412174; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v82175; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42176; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v92177; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02178; CHECK-ZVE64X-NEXT:    li a0, 2572179; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02180; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 82181; CHECK-ZVE64X-NEXT:    ret2182;2183; CHECK-F-LABEL: ctlz_zero_undef_nxv4i16:2184; CHECK-F:       # %bb.0:2185; CHECK-F-NEXT:    vsetvli a0, zero, e16, m1, ta, ma2186; CHECK-F-NEXT:    vfwcvt.f.xu.v v10, v82187; CHECK-F-NEXT:    vnsrl.wi v8, v10, 232188; CHECK-F-NEXT:    li a0, 1422189; CHECK-F-NEXT:    vrsub.vx v8, v8, a02190; CHECK-F-NEXT:    ret2191;2192; CHECK-D-LABEL: ctlz_zero_undef_nxv4i16:2193; CHECK-D:       # %bb.0:2194; CHECK-D-NEXT:    vsetvli a0, zero, e16, m1, ta, ma2195; CHECK-D-NEXT:    vfwcvt.f.xu.v v10, v82196; CHECK-D-NEXT:    vnsrl.wi v8, v10, 232197; CHECK-D-NEXT:    li a0, 1422198; CHECK-D-NEXT:    vrsub.vx v8, v8, a02199; CHECK-D-NEXT:    ret2200;2201; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv4i16:2202; CHECK-ZVBB:       # %bb.0:2203; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma2204; CHECK-ZVBB-NEXT:    vclz.v v8, v82205; CHECK-ZVBB-NEXT:    ret2206  %a = call <vscale x 4 x i16> @llvm.ctlz.nxv4i16(<vscale x 4 x i16> %va, i1 true)2207  ret <vscale x 4 x i16> %a2208}2209 2210define <vscale x 8 x i16> @ctlz_zero_undef_nxv8i16(<vscale x 8 x i16> %va) {2211; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv8i16:2212; CHECK-ZVE64X:       # %bb.0:2213; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, m2, ta, ma2214; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 12215; CHECK-ZVE64X-NEXT:    lui a0, 52216; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v102217; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652218; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 22219; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v102220; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 42221; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v102222; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 82223; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v102224; CHECK-ZVE64X-NEXT:    vnot.v v8, v82225; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 12226; CHECK-ZVE64X-NEXT:    vand.vx v10, v10, a02227; CHECK-ZVE64X-NEXT:    lui a0, 32228; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192229; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v102230; CHECK-ZVE64X-NEXT:    vand.vx v10, v8, a02231; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22232; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02233; CHECK-ZVE64X-NEXT:    lui a0, 12234; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412235; CHECK-ZVE64X-NEXT:    vadd.vv v8, v10, v82236; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 42237; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v102238; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02239; CHECK-ZVE64X-NEXT:    li a0, 2572240; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02241; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 82242; CHECK-ZVE64X-NEXT:    ret2243;2244; CHECK-F-LABEL: ctlz_zero_undef_nxv8i16:2245; CHECK-F:       # %bb.0:2246; CHECK-F-NEXT:    vsetvli a0, zero, e16, m2, ta, ma2247; CHECK-F-NEXT:    vfwcvt.f.xu.v v12, v82248; CHECK-F-NEXT:    vnsrl.wi v8, v12, 232249; CHECK-F-NEXT:    li a0, 1422250; CHECK-F-NEXT:    vrsub.vx v8, v8, a02251; CHECK-F-NEXT:    ret2252;2253; CHECK-D-LABEL: ctlz_zero_undef_nxv8i16:2254; CHECK-D:       # %bb.0:2255; CHECK-D-NEXT:    vsetvli a0, zero, e16, m2, ta, ma2256; CHECK-D-NEXT:    vfwcvt.f.xu.v v12, v82257; CHECK-D-NEXT:    vnsrl.wi v8, v12, 232258; CHECK-D-NEXT:    li a0, 1422259; CHECK-D-NEXT:    vrsub.vx v8, v8, a02260; CHECK-D-NEXT:    ret2261;2262; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv8i16:2263; CHECK-ZVBB:       # %bb.0:2264; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m2, ta, ma2265; CHECK-ZVBB-NEXT:    vclz.v v8, v82266; CHECK-ZVBB-NEXT:    ret2267  %a = call <vscale x 8 x i16> @llvm.ctlz.nxv8i16(<vscale x 8 x i16> %va, i1 true)2268  ret <vscale x 8 x i16> %a2269}2270 2271define <vscale x 16 x i16> @ctlz_zero_undef_nxv16i16(<vscale x 16 x i16> %va) {2272; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv16i16:2273; CHECK-ZVE64X:       # %bb.0:2274; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, m4, ta, ma2275; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 12276; CHECK-ZVE64X-NEXT:    lui a0, 52277; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v122278; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652279; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 22280; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v122281; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 42282; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v122283; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 82284; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v122285; CHECK-ZVE64X-NEXT:    vnot.v v8, v82286; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 12287; CHECK-ZVE64X-NEXT:    vand.vx v12, v12, a02288; CHECK-ZVE64X-NEXT:    lui a0, 32289; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192290; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v122291; CHECK-ZVE64X-NEXT:    vand.vx v12, v8, a02292; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22293; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02294; CHECK-ZVE64X-NEXT:    lui a0, 12295; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412296; CHECK-ZVE64X-NEXT:    vadd.vv v8, v12, v82297; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 42298; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v122299; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02300; CHECK-ZVE64X-NEXT:    li a0, 2572301; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02302; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 82303; CHECK-ZVE64X-NEXT:    ret2304;2305; CHECK-F-LABEL: ctlz_zero_undef_nxv16i16:2306; CHECK-F:       # %bb.0:2307; CHECK-F-NEXT:    vsetvli a0, zero, e16, m4, ta, ma2308; CHECK-F-NEXT:    vfwcvt.f.xu.v v16, v82309; CHECK-F-NEXT:    vnsrl.wi v8, v16, 232310; CHECK-F-NEXT:    li a0, 1422311; CHECK-F-NEXT:    vrsub.vx v8, v8, a02312; CHECK-F-NEXT:    ret2313;2314; CHECK-D-LABEL: ctlz_zero_undef_nxv16i16:2315; CHECK-D:       # %bb.0:2316; CHECK-D-NEXT:    vsetvli a0, zero, e16, m4, ta, ma2317; CHECK-D-NEXT:    vfwcvt.f.xu.v v16, v82318; CHECK-D-NEXT:    vnsrl.wi v8, v16, 232319; CHECK-D-NEXT:    li a0, 1422320; CHECK-D-NEXT:    vrsub.vx v8, v8, a02321; CHECK-D-NEXT:    ret2322;2323; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv16i16:2324; CHECK-ZVBB:       # %bb.0:2325; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m4, ta, ma2326; CHECK-ZVBB-NEXT:    vclz.v v8, v82327; CHECK-ZVBB-NEXT:    ret2328  %a = call <vscale x 16 x i16> @llvm.ctlz.nxv16i16(<vscale x 16 x i16> %va, i1 true)2329  ret <vscale x 16 x i16> %a2330}2331 2332define <vscale x 32 x i16> @ctlz_zero_undef_nxv32i16(<vscale x 32 x i16> %va) {2333; CHECK-LABEL: ctlz_zero_undef_nxv32i16:2334; CHECK:       # %bb.0:2335; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma2336; CHECK-NEXT:    vsrl.vi v16, v8, 12337; CHECK-NEXT:    lui a0, 52338; CHECK-NEXT:    vor.vv v8, v8, v162339; CHECK-NEXT:    addi a0, a0, 13652340; CHECK-NEXT:    vsrl.vi v16, v8, 22341; CHECK-NEXT:    vor.vv v8, v8, v162342; CHECK-NEXT:    vsrl.vi v16, v8, 42343; CHECK-NEXT:    vor.vv v8, v8, v162344; CHECK-NEXT:    vsrl.vi v16, v8, 82345; CHECK-NEXT:    vor.vv v8, v8, v162346; CHECK-NEXT:    vnot.v v8, v82347; CHECK-NEXT:    vsrl.vi v16, v8, 12348; CHECK-NEXT:    vand.vx v16, v16, a02349; CHECK-NEXT:    lui a0, 32350; CHECK-NEXT:    addi a0, a0, 8192351; CHECK-NEXT:    vsub.vv v8, v8, v162352; CHECK-NEXT:    vand.vx v16, v8, a02353; CHECK-NEXT:    vsrl.vi v8, v8, 22354; CHECK-NEXT:    vand.vx v8, v8, a02355; CHECK-NEXT:    lui a0, 12356; CHECK-NEXT:    addi a0, a0, -2412357; CHECK-NEXT:    vadd.vv v8, v16, v82358; CHECK-NEXT:    vsrl.vi v16, v8, 42359; CHECK-NEXT:    vadd.vv v8, v8, v162360; CHECK-NEXT:    vand.vx v8, v8, a02361; CHECK-NEXT:    li a0, 2572362; CHECK-NEXT:    vmul.vx v8, v8, a02363; CHECK-NEXT:    vsrl.vi v8, v8, 82364; CHECK-NEXT:    ret2365;2366; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv32i16:2367; CHECK-ZVBB:       # %bb.0:2368; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m8, ta, ma2369; CHECK-ZVBB-NEXT:    vclz.v v8, v82370; CHECK-ZVBB-NEXT:    ret2371  %a = call <vscale x 32 x i16> @llvm.ctlz.nxv32i16(<vscale x 32 x i16> %va, i1 true)2372  ret <vscale x 32 x i16> %a2373}2374 2375define <vscale x 1 x i32> @ctlz_zero_undef_nxv1i32(<vscale x 1 x i32> %va) {2376; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv1i32:2377; CHECK-ZVE64X:       # %bb.0:2378; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma2379; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12380; CHECK-ZVE64X-NEXT:    lui a0, 3495252381; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92382; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652383; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 22384; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92385; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42386; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92387; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 82388; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92389; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 162390; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92391; CHECK-ZVE64X-NEXT:    vnot.v v8, v82392; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12393; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a02394; CHECK-ZVE64X-NEXT:    lui a0, 2097152395; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192396; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v92397; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a02398; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22399; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02400; CHECK-ZVE64X-NEXT:    lui a0, 616812401; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412402; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v82403; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42404; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v92405; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02406; CHECK-ZVE64X-NEXT:    lui a0, 41122407; CHECK-ZVE64X-NEXT:    addi a0, a0, 2572408; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02409; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 242410; CHECK-ZVE64X-NEXT:    ret2411;2412; CHECK-F-LABEL: ctlz_zero_undef_nxv1i32:2413; CHECK-F:       # %bb.0:2414; CHECK-F-NEXT:    fsrmi a0, 12415; CHECK-F-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma2416; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v82417; CHECK-F-NEXT:    vsrl.vi v8, v8, 232418; CHECK-F-NEXT:    li a1, 1582419; CHECK-F-NEXT:    vrsub.vx v8, v8, a12420; CHECK-F-NEXT:    fsrm a02421; CHECK-F-NEXT:    ret2422;2423; CHECK-D-LABEL: ctlz_zero_undef_nxv1i32:2424; CHECK-D:       # %bb.0:2425; CHECK-D-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma2426; CHECK-D-NEXT:    vfwcvt.f.xu.v v9, v82427; CHECK-D-NEXT:    li a0, 522428; CHECK-D-NEXT:    vnsrl.wx v8, v9, a02429; CHECK-D-NEXT:    li a0, 10542430; CHECK-D-NEXT:    vrsub.vx v8, v8, a02431; CHECK-D-NEXT:    ret2432;2433; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv1i32:2434; CHECK-ZVBB:       # %bb.0:2435; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma2436; CHECK-ZVBB-NEXT:    vclz.v v8, v82437; CHECK-ZVBB-NEXT:    ret2438  %a = call <vscale x 1 x i32> @llvm.ctlz.nxv1i32(<vscale x 1 x i32> %va, i1 true)2439  ret <vscale x 1 x i32> %a2440}2441 2442define <vscale x 2 x i32> @ctlz_zero_undef_nxv2i32(<vscale x 2 x i32> %va) {2443; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv2i32:2444; CHECK-ZVE64X:       # %bb.0:2445; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m1, ta, ma2446; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12447; CHECK-ZVE64X-NEXT:    lui a0, 3495252448; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92449; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652450; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 22451; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92452; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42453; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92454; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 82455; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92456; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 162457; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v92458; CHECK-ZVE64X-NEXT:    vnot.v v8, v82459; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12460; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a02461; CHECK-ZVE64X-NEXT:    lui a0, 2097152462; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192463; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v92464; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a02465; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22466; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02467; CHECK-ZVE64X-NEXT:    lui a0, 616812468; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412469; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v82470; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42471; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v92472; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02473; CHECK-ZVE64X-NEXT:    lui a0, 41122474; CHECK-ZVE64X-NEXT:    addi a0, a0, 2572475; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02476; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 242477; CHECK-ZVE64X-NEXT:    ret2478;2479; CHECK-F-LABEL: ctlz_zero_undef_nxv2i32:2480; CHECK-F:       # %bb.0:2481; CHECK-F-NEXT:    fsrmi a0, 12482; CHECK-F-NEXT:    vsetvli a1, zero, e32, m1, ta, ma2483; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v82484; CHECK-F-NEXT:    vsrl.vi v8, v8, 232485; CHECK-F-NEXT:    li a1, 1582486; CHECK-F-NEXT:    vrsub.vx v8, v8, a12487; CHECK-F-NEXT:    fsrm a02488; CHECK-F-NEXT:    ret2489;2490; CHECK-D-LABEL: ctlz_zero_undef_nxv2i32:2491; CHECK-D:       # %bb.0:2492; CHECK-D-NEXT:    vsetvli a0, zero, e32, m1, ta, ma2493; CHECK-D-NEXT:    vfwcvt.f.xu.v v10, v82494; CHECK-D-NEXT:    li a0, 522495; CHECK-D-NEXT:    vnsrl.wx v8, v10, a02496; CHECK-D-NEXT:    li a0, 10542497; CHECK-D-NEXT:    vrsub.vx v8, v8, a02498; CHECK-D-NEXT:    ret2499;2500; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv2i32:2501; CHECK-ZVBB:       # %bb.0:2502; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m1, ta, ma2503; CHECK-ZVBB-NEXT:    vclz.v v8, v82504; CHECK-ZVBB-NEXT:    ret2505  %a = call <vscale x 2 x i32> @llvm.ctlz.nxv2i32(<vscale x 2 x i32> %va, i1 true)2506  ret <vscale x 2 x i32> %a2507}2508 2509define <vscale x 4 x i32> @ctlz_zero_undef_nxv4i32(<vscale x 4 x i32> %va) {2510; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv4i32:2511; CHECK-ZVE64X:       # %bb.0:2512; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m2, ta, ma2513; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 12514; CHECK-ZVE64X-NEXT:    lui a0, 3495252515; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v102516; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652517; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 22518; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v102519; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 42520; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v102521; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 82522; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v102523; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 162524; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v102525; CHECK-ZVE64X-NEXT:    vnot.v v8, v82526; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 12527; CHECK-ZVE64X-NEXT:    vand.vx v10, v10, a02528; CHECK-ZVE64X-NEXT:    lui a0, 2097152529; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192530; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v102531; CHECK-ZVE64X-NEXT:    vand.vx v10, v8, a02532; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22533; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02534; CHECK-ZVE64X-NEXT:    lui a0, 616812535; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412536; CHECK-ZVE64X-NEXT:    vadd.vv v8, v10, v82537; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 42538; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v102539; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02540; CHECK-ZVE64X-NEXT:    lui a0, 41122541; CHECK-ZVE64X-NEXT:    addi a0, a0, 2572542; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02543; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 242544; CHECK-ZVE64X-NEXT:    ret2545;2546; CHECK-F-LABEL: ctlz_zero_undef_nxv4i32:2547; CHECK-F:       # %bb.0:2548; CHECK-F-NEXT:    fsrmi a0, 12549; CHECK-F-NEXT:    vsetvli a1, zero, e32, m2, ta, ma2550; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v82551; CHECK-F-NEXT:    vsrl.vi v8, v8, 232552; CHECK-F-NEXT:    li a1, 1582553; CHECK-F-NEXT:    vrsub.vx v8, v8, a12554; CHECK-F-NEXT:    fsrm a02555; CHECK-F-NEXT:    ret2556;2557; CHECK-D-LABEL: ctlz_zero_undef_nxv4i32:2558; CHECK-D:       # %bb.0:2559; CHECK-D-NEXT:    vsetvli a0, zero, e32, m2, ta, ma2560; CHECK-D-NEXT:    vfwcvt.f.xu.v v12, v82561; CHECK-D-NEXT:    li a0, 522562; CHECK-D-NEXT:    vnsrl.wx v8, v12, a02563; CHECK-D-NEXT:    li a0, 10542564; CHECK-D-NEXT:    vrsub.vx v8, v8, a02565; CHECK-D-NEXT:    ret2566;2567; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv4i32:2568; CHECK-ZVBB:       # %bb.0:2569; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m2, ta, ma2570; CHECK-ZVBB-NEXT:    vclz.v v8, v82571; CHECK-ZVBB-NEXT:    ret2572  %a = call <vscale x 4 x i32> @llvm.ctlz.nxv4i32(<vscale x 4 x i32> %va, i1 true)2573  ret <vscale x 4 x i32> %a2574}2575 2576define <vscale x 8 x i32> @ctlz_zero_undef_nxv8i32(<vscale x 8 x i32> %va) {2577; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv8i32:2578; CHECK-ZVE64X:       # %bb.0:2579; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2580; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 12581; CHECK-ZVE64X-NEXT:    lui a0, 3495252582; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v122583; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652584; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 22585; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v122586; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 42587; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v122588; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 82589; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v122590; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 162591; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v122592; CHECK-ZVE64X-NEXT:    vnot.v v8, v82593; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 12594; CHECK-ZVE64X-NEXT:    vand.vx v12, v12, a02595; CHECK-ZVE64X-NEXT:    lui a0, 2097152596; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192597; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v122598; CHECK-ZVE64X-NEXT:    vand.vx v12, v8, a02599; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22600; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02601; CHECK-ZVE64X-NEXT:    lui a0, 616812602; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412603; CHECK-ZVE64X-NEXT:    vadd.vv v8, v12, v82604; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 42605; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v122606; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02607; CHECK-ZVE64X-NEXT:    lui a0, 41122608; CHECK-ZVE64X-NEXT:    addi a0, a0, 2572609; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02610; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 242611; CHECK-ZVE64X-NEXT:    ret2612;2613; CHECK-F-LABEL: ctlz_zero_undef_nxv8i32:2614; CHECK-F:       # %bb.0:2615; CHECK-F-NEXT:    fsrmi a0, 12616; CHECK-F-NEXT:    vsetvli a1, zero, e32, m4, ta, ma2617; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v82618; CHECK-F-NEXT:    vsrl.vi v8, v8, 232619; CHECK-F-NEXT:    li a1, 1582620; CHECK-F-NEXT:    vrsub.vx v8, v8, a12621; CHECK-F-NEXT:    fsrm a02622; CHECK-F-NEXT:    ret2623;2624; CHECK-D-LABEL: ctlz_zero_undef_nxv8i32:2625; CHECK-D:       # %bb.0:2626; CHECK-D-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2627; CHECK-D-NEXT:    vfwcvt.f.xu.v v16, v82628; CHECK-D-NEXT:    li a0, 522629; CHECK-D-NEXT:    vnsrl.wx v8, v16, a02630; CHECK-D-NEXT:    li a0, 10542631; CHECK-D-NEXT:    vrsub.vx v8, v8, a02632; CHECK-D-NEXT:    ret2633;2634; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv8i32:2635; CHECK-ZVBB:       # %bb.0:2636; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2637; CHECK-ZVBB-NEXT:    vclz.v v8, v82638; CHECK-ZVBB-NEXT:    ret2639  %a = call <vscale x 8 x i32> @llvm.ctlz.nxv8i32(<vscale x 8 x i32> %va, i1 true)2640  ret <vscale x 8 x i32> %a2641}2642 2643define <vscale x 16 x i32> @ctlz_zero_undef_nxv16i32(<vscale x 16 x i32> %va) {2644; CHECK-ZVE64X-LABEL: ctlz_zero_undef_nxv16i32:2645; CHECK-ZVE64X:       # %bb.0:2646; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m8, ta, ma2647; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 12648; CHECK-ZVE64X-NEXT:    lui a0, 3495252649; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v162650; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652651; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 22652; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v162653; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 42654; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v162655; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 82656; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v162657; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 162658; CHECK-ZVE64X-NEXT:    vor.vv v8, v8, v162659; CHECK-ZVE64X-NEXT:    vnot.v v8, v82660; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 12661; CHECK-ZVE64X-NEXT:    vand.vx v16, v16, a02662; CHECK-ZVE64X-NEXT:    lui a0, 2097152663; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192664; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v162665; CHECK-ZVE64X-NEXT:    vand.vx v16, v8, a02666; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22667; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02668; CHECK-ZVE64X-NEXT:    lui a0, 616812669; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412670; CHECK-ZVE64X-NEXT:    vadd.vv v8, v16, v82671; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 42672; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v162673; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02674; CHECK-ZVE64X-NEXT:    lui a0, 41122675; CHECK-ZVE64X-NEXT:    addi a0, a0, 2572676; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02677; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 242678; CHECK-ZVE64X-NEXT:    ret2679;2680; CHECK-F-LABEL: ctlz_zero_undef_nxv16i32:2681; CHECK-F:       # %bb.0:2682; CHECK-F-NEXT:    fsrmi a0, 12683; CHECK-F-NEXT:    vsetvli a1, zero, e32, m8, ta, ma2684; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v82685; CHECK-F-NEXT:    vsrl.vi v8, v8, 232686; CHECK-F-NEXT:    li a1, 1582687; CHECK-F-NEXT:    vrsub.vx v8, v8, a12688; CHECK-F-NEXT:    fsrm a02689; CHECK-F-NEXT:    ret2690;2691; CHECK-D-LABEL: ctlz_zero_undef_nxv16i32:2692; CHECK-D:       # %bb.0:2693; CHECK-D-NEXT:    fsrmi a0, 12694; CHECK-D-NEXT:    vsetvli a1, zero, e32, m8, ta, ma2695; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v82696; CHECK-D-NEXT:    vsrl.vi v8, v8, 232697; CHECK-D-NEXT:    li a1, 1582698; CHECK-D-NEXT:    vrsub.vx v8, v8, a12699; CHECK-D-NEXT:    fsrm a02700; CHECK-D-NEXT:    ret2701;2702; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv16i32:2703; CHECK-ZVBB:       # %bb.0:2704; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m8, ta, ma2705; CHECK-ZVBB-NEXT:    vclz.v v8, v82706; CHECK-ZVBB-NEXT:    ret2707  %a = call <vscale x 16 x i32> @llvm.ctlz.nxv16i32(<vscale x 16 x i32> %va, i1 true)2708  ret <vscale x 16 x i32> %a2709}2710 2711define <vscale x 1 x i64> @ctlz_zero_undef_nxv1i64(<vscale x 1 x i64> %va) {2712; RV32I-LABEL: ctlz_zero_undef_nxv1i64:2713; RV32I:       # %bb.0:2714; RV32I-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2715; RV32I-NEXT:    vsrl.vi v9, v8, 12716; RV32I-NEXT:    lui a0, 3495252717; RV32I-NEXT:    addi a0, a0, 13652718; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma2719; RV32I-NEXT:    vmv.v.x v10, a02720; RV32I-NEXT:    li a0, 322721; RV32I-NEXT:    vsetvli a1, zero, e64, m1, ta, ma2722; RV32I-NEXT:    vor.vv v8, v8, v92723; RV32I-NEXT:    vsrl.vi v9, v8, 22724; RV32I-NEXT:    vor.vv v8, v8, v92725; RV32I-NEXT:    vsrl.vi v9, v8, 42726; RV32I-NEXT:    vor.vv v8, v8, v92727; RV32I-NEXT:    vsrl.vi v9, v8, 82728; RV32I-NEXT:    vor.vv v8, v8, v92729; RV32I-NEXT:    vsrl.vi v9, v8, 162730; RV32I-NEXT:    vor.vv v8, v8, v92731; RV32I-NEXT:    vsrl.vx v9, v8, a02732; RV32I-NEXT:    lui a0, 2097152733; RV32I-NEXT:    addi a0, a0, 8192734; RV32I-NEXT:    vor.vv v8, v8, v92735; RV32I-NEXT:    vnot.v v8, v82736; RV32I-NEXT:    vsrl.vi v9, v8, 12737; RV32I-NEXT:    vand.vv v9, v9, v102738; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma2739; RV32I-NEXT:    vmv.v.x v10, a02740; RV32I-NEXT:    lui a0, 616812741; RV32I-NEXT:    addi a0, a0, -2412742; RV32I-NEXT:    vsetvli a1, zero, e64, m1, ta, ma2743; RV32I-NEXT:    vsub.vv v8, v8, v92744; RV32I-NEXT:    vand.vv v9, v8, v102745; RV32I-NEXT:    vsrl.vi v8, v8, 22746; RV32I-NEXT:    vand.vv v8, v8, v102747; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma2748; RV32I-NEXT:    vmv.v.x v10, a02749; RV32I-NEXT:    lui a0, 41122750; RV32I-NEXT:    addi a0, a0, 2572751; RV32I-NEXT:    vsetvli a1, zero, e64, m1, ta, ma2752; RV32I-NEXT:    vadd.vv v8, v9, v82753; RV32I-NEXT:    vsrl.vi v9, v8, 42754; RV32I-NEXT:    vadd.vv v8, v8, v92755; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma2756; RV32I-NEXT:    vmv.v.x v9, a02757; RV32I-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2758; RV32I-NEXT:    vand.vv v8, v8, v102759; RV32I-NEXT:    vmul.vv v8, v8, v92760; RV32I-NEXT:    li a0, 562761; RV32I-NEXT:    vsrl.vx v8, v8, a02762; RV32I-NEXT:    ret2763;2764; RV64I-LABEL: ctlz_zero_undef_nxv1i64:2765; RV64I:       # %bb.0:2766; RV64I-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2767; RV64I-NEXT:    vsrl.vi v9, v8, 12768; RV64I-NEXT:    lui a0, 3495252769; RV64I-NEXT:    lui a1, 2097152770; RV64I-NEXT:    lui a2, 616812771; RV64I-NEXT:    lui a3, 41122772; RV64I-NEXT:    addi a0, a0, 13652773; RV64I-NEXT:    addi a1, a1, 8192774; RV64I-NEXT:    addi a2, a2, -2412775; RV64I-NEXT:    addi a3, a3, 2572776; RV64I-NEXT:    slli a4, a0, 322777; RV64I-NEXT:    add a0, a0, a42778; RV64I-NEXT:    slli a4, a1, 322779; RV64I-NEXT:    add a1, a1, a42780; RV64I-NEXT:    slli a4, a2, 322781; RV64I-NEXT:    add a2, a2, a42782; RV64I-NEXT:    slli a4, a3, 322783; RV64I-NEXT:    add a3, a3, a42784; RV64I-NEXT:    li a4, 322785; RV64I-NEXT:    vor.vv v8, v8, v92786; RV64I-NEXT:    vsrl.vi v9, v8, 22787; RV64I-NEXT:    vor.vv v8, v8, v92788; RV64I-NEXT:    vsrl.vi v9, v8, 42789; RV64I-NEXT:    vor.vv v8, v8, v92790; RV64I-NEXT:    vsrl.vi v9, v8, 82791; RV64I-NEXT:    vor.vv v8, v8, v92792; RV64I-NEXT:    vsrl.vi v9, v8, 162793; RV64I-NEXT:    vor.vv v8, v8, v92794; RV64I-NEXT:    vsrl.vx v9, v8, a42795; RV64I-NEXT:    vor.vv v8, v8, v92796; RV64I-NEXT:    vnot.v v8, v82797; RV64I-NEXT:    vsrl.vi v9, v8, 12798; RV64I-NEXT:    vand.vx v9, v9, a02799; RV64I-NEXT:    vsub.vv v8, v8, v92800; RV64I-NEXT:    vand.vx v9, v8, a12801; RV64I-NEXT:    vsrl.vi v8, v8, 22802; RV64I-NEXT:    vand.vx v8, v8, a12803; RV64I-NEXT:    vadd.vv v8, v9, v82804; RV64I-NEXT:    vsrl.vi v9, v8, 42805; RV64I-NEXT:    vadd.vv v8, v8, v92806; RV64I-NEXT:    vand.vx v8, v8, a22807; RV64I-NEXT:    vmul.vx v8, v8, a32808; RV64I-NEXT:    li a0, 562809; RV64I-NEXT:    vsrl.vx v8, v8, a02810; RV64I-NEXT:    ret2811;2812; CHECK-F-LABEL: ctlz_zero_undef_nxv1i64:2813; CHECK-F:       # %bb.0:2814; CHECK-F-NEXT:    li a0, 1902815; CHECK-F-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma2816; CHECK-F-NEXT:    vmv.v.x v9, a02817; CHECK-F-NEXT:    fsrmi a0, 12818; CHECK-F-NEXT:    vfncvt.f.xu.w v10, v82819; CHECK-F-NEXT:    vsrl.vi v10, v10, 232820; CHECK-F-NEXT:    vwsubu.vv v8, v9, v102821; CHECK-F-NEXT:    fsrm a02822; CHECK-F-NEXT:    ret2823;2824; CHECK-D-LABEL: ctlz_zero_undef_nxv1i64:2825; CHECK-D:       # %bb.0:2826; CHECK-D-NEXT:    fsrmi a0, 12827; CHECK-D-NEXT:    vsetvli a1, zero, e64, m1, ta, ma2828; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v82829; CHECK-D-NEXT:    li a1, 522830; CHECK-D-NEXT:    vsrl.vx v8, v8, a12831; CHECK-D-NEXT:    li a1, 10862832; CHECK-D-NEXT:    vrsub.vx v8, v8, a12833; CHECK-D-NEXT:    fsrm a02834; CHECK-D-NEXT:    ret2835;2836; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv1i64:2837; CHECK-ZVBB:       # %bb.0:2838; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2839; CHECK-ZVBB-NEXT:    vclz.v v8, v82840; CHECK-ZVBB-NEXT:    ret2841  %a = call <vscale x 1 x i64> @llvm.ctlz.nxv1i64(<vscale x 1 x i64> %va, i1 true)2842  ret <vscale x 1 x i64> %a2843}2844 2845define <vscale x 2 x i64> @ctlz_zero_undef_nxv2i64(<vscale x 2 x i64> %va) {2846; RV32I-LABEL: ctlz_zero_undef_nxv2i64:2847; RV32I:       # %bb.0:2848; RV32I-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2849; RV32I-NEXT:    vsrl.vi v10, v8, 12850; RV32I-NEXT:    lui a0, 3495252851; RV32I-NEXT:    addi a0, a0, 13652852; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma2853; RV32I-NEXT:    vmv.v.x v12, a02854; RV32I-NEXT:    li a0, 322855; RV32I-NEXT:    vsetvli a1, zero, e64, m2, ta, ma2856; RV32I-NEXT:    vor.vv v8, v8, v102857; RV32I-NEXT:    vsrl.vi v10, v8, 22858; RV32I-NEXT:    vor.vv v8, v8, v102859; RV32I-NEXT:    vsrl.vi v10, v8, 42860; RV32I-NEXT:    vor.vv v8, v8, v102861; RV32I-NEXT:    vsrl.vi v10, v8, 82862; RV32I-NEXT:    vor.vv v8, v8, v102863; RV32I-NEXT:    vsrl.vi v10, v8, 162864; RV32I-NEXT:    vor.vv v8, v8, v102865; RV32I-NEXT:    vsrl.vx v10, v8, a02866; RV32I-NEXT:    lui a0, 2097152867; RV32I-NEXT:    addi a0, a0, 8192868; RV32I-NEXT:    vor.vv v8, v8, v102869; RV32I-NEXT:    vnot.v v8, v82870; RV32I-NEXT:    vsrl.vi v10, v8, 12871; RV32I-NEXT:    vand.vv v10, v10, v122872; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma2873; RV32I-NEXT:    vmv.v.x v12, a02874; RV32I-NEXT:    lui a0, 616812875; RV32I-NEXT:    addi a0, a0, -2412876; RV32I-NEXT:    vsetvli a1, zero, e64, m2, ta, ma2877; RV32I-NEXT:    vsub.vv v8, v8, v102878; RV32I-NEXT:    vand.vv v10, v8, v122879; RV32I-NEXT:    vsrl.vi v8, v8, 22880; RV32I-NEXT:    vand.vv v8, v8, v122881; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma2882; RV32I-NEXT:    vmv.v.x v12, a02883; RV32I-NEXT:    lui a0, 41122884; RV32I-NEXT:    addi a0, a0, 2572885; RV32I-NEXT:    vsetvli a1, zero, e64, m2, ta, ma2886; RV32I-NEXT:    vadd.vv v8, v10, v82887; RV32I-NEXT:    vsrl.vi v10, v8, 42888; RV32I-NEXT:    vadd.vv v8, v8, v102889; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma2890; RV32I-NEXT:    vmv.v.x v10, a02891; RV32I-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2892; RV32I-NEXT:    vand.vv v8, v8, v122893; RV32I-NEXT:    vmul.vv v8, v8, v102894; RV32I-NEXT:    li a0, 562895; RV32I-NEXT:    vsrl.vx v8, v8, a02896; RV32I-NEXT:    ret2897;2898; RV64I-LABEL: ctlz_zero_undef_nxv2i64:2899; RV64I:       # %bb.0:2900; RV64I-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2901; RV64I-NEXT:    vsrl.vi v10, v8, 12902; RV64I-NEXT:    lui a0, 3495252903; RV64I-NEXT:    lui a1, 2097152904; RV64I-NEXT:    lui a2, 616812905; RV64I-NEXT:    lui a3, 41122906; RV64I-NEXT:    addi a0, a0, 13652907; RV64I-NEXT:    addi a1, a1, 8192908; RV64I-NEXT:    addi a2, a2, -2412909; RV64I-NEXT:    addi a3, a3, 2572910; RV64I-NEXT:    slli a4, a0, 322911; RV64I-NEXT:    add a0, a0, a42912; RV64I-NEXT:    slli a4, a1, 322913; RV64I-NEXT:    add a1, a1, a42914; RV64I-NEXT:    slli a4, a2, 322915; RV64I-NEXT:    add a2, a2, a42916; RV64I-NEXT:    slli a4, a3, 322917; RV64I-NEXT:    add a3, a3, a42918; RV64I-NEXT:    li a4, 322919; RV64I-NEXT:    vor.vv v8, v8, v102920; RV64I-NEXT:    vsrl.vi v10, v8, 22921; RV64I-NEXT:    vor.vv v8, v8, v102922; RV64I-NEXT:    vsrl.vi v10, v8, 42923; RV64I-NEXT:    vor.vv v8, v8, v102924; RV64I-NEXT:    vsrl.vi v10, v8, 82925; RV64I-NEXT:    vor.vv v8, v8, v102926; RV64I-NEXT:    vsrl.vi v10, v8, 162927; RV64I-NEXT:    vor.vv v8, v8, v102928; RV64I-NEXT:    vsrl.vx v10, v8, a42929; RV64I-NEXT:    vor.vv v8, v8, v102930; RV64I-NEXT:    vnot.v v8, v82931; RV64I-NEXT:    vsrl.vi v10, v8, 12932; RV64I-NEXT:    vand.vx v10, v10, a02933; RV64I-NEXT:    vsub.vv v8, v8, v102934; RV64I-NEXT:    vand.vx v10, v8, a12935; RV64I-NEXT:    vsrl.vi v8, v8, 22936; RV64I-NEXT:    vand.vx v8, v8, a12937; RV64I-NEXT:    vadd.vv v8, v10, v82938; RV64I-NEXT:    vsrl.vi v10, v8, 42939; RV64I-NEXT:    vadd.vv v8, v8, v102940; RV64I-NEXT:    vand.vx v8, v8, a22941; RV64I-NEXT:    vmul.vx v8, v8, a32942; RV64I-NEXT:    li a0, 562943; RV64I-NEXT:    vsrl.vx v8, v8, a02944; RV64I-NEXT:    ret2945;2946; CHECK-F-LABEL: ctlz_zero_undef_nxv2i64:2947; CHECK-F:       # %bb.0:2948; CHECK-F-NEXT:    li a0, 1902949; CHECK-F-NEXT:    vsetvli a1, zero, e32, m1, ta, ma2950; CHECK-F-NEXT:    vmv.v.x v10, a02951; CHECK-F-NEXT:    fsrmi a0, 12952; CHECK-F-NEXT:    vfncvt.f.xu.w v11, v82953; CHECK-F-NEXT:    vsrl.vi v11, v11, 232954; CHECK-F-NEXT:    vwsubu.vv v8, v10, v112955; CHECK-F-NEXT:    fsrm a02956; CHECK-F-NEXT:    ret2957;2958; CHECK-D-LABEL: ctlz_zero_undef_nxv2i64:2959; CHECK-D:       # %bb.0:2960; CHECK-D-NEXT:    fsrmi a0, 12961; CHECK-D-NEXT:    vsetvli a1, zero, e64, m2, ta, ma2962; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v82963; CHECK-D-NEXT:    li a1, 522964; CHECK-D-NEXT:    vsrl.vx v8, v8, a12965; CHECK-D-NEXT:    li a1, 10862966; CHECK-D-NEXT:    vrsub.vx v8, v8, a12967; CHECK-D-NEXT:    fsrm a02968; CHECK-D-NEXT:    ret2969;2970; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv2i64:2971; CHECK-ZVBB:       # %bb.0:2972; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2973; CHECK-ZVBB-NEXT:    vclz.v v8, v82974; CHECK-ZVBB-NEXT:    ret2975  %a = call <vscale x 2 x i64> @llvm.ctlz.nxv2i64(<vscale x 2 x i64> %va, i1 true)2976  ret <vscale x 2 x i64> %a2977}2978 2979define <vscale x 4 x i64> @ctlz_zero_undef_nxv4i64(<vscale x 4 x i64> %va) {2980; RV32I-LABEL: ctlz_zero_undef_nxv4i64:2981; RV32I:       # %bb.0:2982; RV32I-NEXT:    vsetvli a0, zero, e64, m4, ta, ma2983; RV32I-NEXT:    vsrl.vi v12, v8, 12984; RV32I-NEXT:    lui a0, 3495252985; RV32I-NEXT:    addi a0, a0, 13652986; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma2987; RV32I-NEXT:    vmv.v.x v16, a02988; RV32I-NEXT:    li a0, 322989; RV32I-NEXT:    vsetvli a1, zero, e64, m4, ta, ma2990; RV32I-NEXT:    vor.vv v8, v8, v122991; RV32I-NEXT:    vsrl.vi v12, v8, 22992; RV32I-NEXT:    vor.vv v8, v8, v122993; RV32I-NEXT:    vsrl.vi v12, v8, 42994; RV32I-NEXT:    vor.vv v8, v8, v122995; RV32I-NEXT:    vsrl.vi v12, v8, 82996; RV32I-NEXT:    vor.vv v8, v8, v122997; RV32I-NEXT:    vsrl.vi v12, v8, 162998; RV32I-NEXT:    vor.vv v8, v8, v122999; RV32I-NEXT:    vsrl.vx v12, v8, a03000; RV32I-NEXT:    lui a0, 2097153001; RV32I-NEXT:    addi a0, a0, 8193002; RV32I-NEXT:    vor.vv v8, v8, v123003; RV32I-NEXT:    vnot.v v8, v83004; RV32I-NEXT:    vsrl.vi v12, v8, 13005; RV32I-NEXT:    vand.vv v12, v12, v163006; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma3007; RV32I-NEXT:    vmv.v.x v16, a03008; RV32I-NEXT:    lui a0, 616813009; RV32I-NEXT:    addi a0, a0, -2413010; RV32I-NEXT:    vsetvli a1, zero, e64, m4, ta, ma3011; RV32I-NEXT:    vsub.vv v8, v8, v123012; RV32I-NEXT:    vand.vv v12, v8, v163013; RV32I-NEXT:    vsrl.vi v8, v8, 23014; RV32I-NEXT:    vand.vv v8, v8, v163015; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma3016; RV32I-NEXT:    vmv.v.x v16, a03017; RV32I-NEXT:    lui a0, 41123018; RV32I-NEXT:    addi a0, a0, 2573019; RV32I-NEXT:    vsetvli a1, zero, e64, m4, ta, ma3020; RV32I-NEXT:    vadd.vv v8, v12, v83021; RV32I-NEXT:    vsrl.vi v12, v8, 43022; RV32I-NEXT:    vadd.vv v8, v8, v123023; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma3024; RV32I-NEXT:    vmv.v.x v12, a03025; RV32I-NEXT:    vsetvli a0, zero, e64, m4, ta, ma3026; RV32I-NEXT:    vand.vv v8, v8, v163027; RV32I-NEXT:    vmul.vv v8, v8, v123028; RV32I-NEXT:    li a0, 563029; RV32I-NEXT:    vsrl.vx v8, v8, a03030; RV32I-NEXT:    ret3031;3032; RV64I-LABEL: ctlz_zero_undef_nxv4i64:3033; RV64I:       # %bb.0:3034; RV64I-NEXT:    vsetvli a0, zero, e64, m4, ta, ma3035; RV64I-NEXT:    vsrl.vi v12, v8, 13036; RV64I-NEXT:    lui a0, 3495253037; RV64I-NEXT:    lui a1, 2097153038; RV64I-NEXT:    lui a2, 616813039; RV64I-NEXT:    lui a3, 41123040; RV64I-NEXT:    addi a0, a0, 13653041; RV64I-NEXT:    addi a1, a1, 8193042; RV64I-NEXT:    addi a2, a2, -2413043; RV64I-NEXT:    addi a3, a3, 2573044; RV64I-NEXT:    slli a4, a0, 323045; RV64I-NEXT:    add a0, a0, a43046; RV64I-NEXT:    slli a4, a1, 323047; RV64I-NEXT:    add a1, a1, a43048; RV64I-NEXT:    slli a4, a2, 323049; RV64I-NEXT:    add a2, a2, a43050; RV64I-NEXT:    slli a4, a3, 323051; RV64I-NEXT:    add a3, a3, a43052; RV64I-NEXT:    li a4, 323053; RV64I-NEXT:    vor.vv v8, v8, v123054; RV64I-NEXT:    vsrl.vi v12, v8, 23055; RV64I-NEXT:    vor.vv v8, v8, v123056; RV64I-NEXT:    vsrl.vi v12, v8, 43057; RV64I-NEXT:    vor.vv v8, v8, v123058; RV64I-NEXT:    vsrl.vi v12, v8, 83059; RV64I-NEXT:    vor.vv v8, v8, v123060; RV64I-NEXT:    vsrl.vi v12, v8, 163061; RV64I-NEXT:    vor.vv v8, v8, v123062; RV64I-NEXT:    vsrl.vx v12, v8, a43063; RV64I-NEXT:    vor.vv v8, v8, v123064; RV64I-NEXT:    vnot.v v8, v83065; RV64I-NEXT:    vsrl.vi v12, v8, 13066; RV64I-NEXT:    vand.vx v12, v12, a03067; RV64I-NEXT:    vsub.vv v8, v8, v123068; RV64I-NEXT:    vand.vx v12, v8, a13069; RV64I-NEXT:    vsrl.vi v8, v8, 23070; RV64I-NEXT:    vand.vx v8, v8, a13071; RV64I-NEXT:    vadd.vv v8, v12, v83072; RV64I-NEXT:    vsrl.vi v12, v8, 43073; RV64I-NEXT:    vadd.vv v8, v8, v123074; RV64I-NEXT:    vand.vx v8, v8, a23075; RV64I-NEXT:    vmul.vx v8, v8, a33076; RV64I-NEXT:    li a0, 563077; RV64I-NEXT:    vsrl.vx v8, v8, a03078; RV64I-NEXT:    ret3079;3080; CHECK-F-LABEL: ctlz_zero_undef_nxv4i64:3081; CHECK-F:       # %bb.0:3082; CHECK-F-NEXT:    li a0, 1903083; CHECK-F-NEXT:    vsetvli a1, zero, e32, m2, ta, ma3084; CHECK-F-NEXT:    vmv.v.x v12, a03085; CHECK-F-NEXT:    fsrmi a0, 13086; CHECK-F-NEXT:    vfncvt.f.xu.w v14, v83087; CHECK-F-NEXT:    vsrl.vi v14, v14, 233088; CHECK-F-NEXT:    vwsubu.vv v8, v12, v143089; CHECK-F-NEXT:    fsrm a03090; CHECK-F-NEXT:    ret3091;3092; CHECK-D-LABEL: ctlz_zero_undef_nxv4i64:3093; CHECK-D:       # %bb.0:3094; CHECK-D-NEXT:    fsrmi a0, 13095; CHECK-D-NEXT:    vsetvli a1, zero, e64, m4, ta, ma3096; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v83097; CHECK-D-NEXT:    li a1, 523098; CHECK-D-NEXT:    vsrl.vx v8, v8, a13099; CHECK-D-NEXT:    li a1, 10863100; CHECK-D-NEXT:    vrsub.vx v8, v8, a13101; CHECK-D-NEXT:    fsrm a03102; CHECK-D-NEXT:    ret3103;3104; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv4i64:3105; CHECK-ZVBB:       # %bb.0:3106; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m4, ta, ma3107; CHECK-ZVBB-NEXT:    vclz.v v8, v83108; CHECK-ZVBB-NEXT:    ret3109  %a = call <vscale x 4 x i64> @llvm.ctlz.nxv4i64(<vscale x 4 x i64> %va, i1 true)3110  ret <vscale x 4 x i64> %a3111}3112 3113define <vscale x 8 x i64> @ctlz_zero_undef_nxv8i64(<vscale x 8 x i64> %va) {3114; RV32I-LABEL: ctlz_zero_undef_nxv8i64:3115; RV32I:       # %bb.0:3116; RV32I-NEXT:    vsetvli a0, zero, e64, m8, ta, ma3117; RV32I-NEXT:    vsrl.vi v16, v8, 13118; RV32I-NEXT:    lui a0, 3495253119; RV32I-NEXT:    addi a0, a0, 13653120; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma3121; RV32I-NEXT:    vmv.v.x v24, a03122; RV32I-NEXT:    li a0, 323123; RV32I-NEXT:    vsetvli a1, zero, e64, m8, ta, ma3124; RV32I-NEXT:    vor.vv v8, v8, v163125; RV32I-NEXT:    vsrl.vi v16, v8, 23126; RV32I-NEXT:    vor.vv v8, v8, v163127; RV32I-NEXT:    vsrl.vi v16, v8, 43128; RV32I-NEXT:    vor.vv v8, v8, v163129; RV32I-NEXT:    vsrl.vi v16, v8, 83130; RV32I-NEXT:    vor.vv v8, v8, v163131; RV32I-NEXT:    vsrl.vi v16, v8, 163132; RV32I-NEXT:    vor.vv v8, v8, v163133; RV32I-NEXT:    vsrl.vx v16, v8, a03134; RV32I-NEXT:    lui a0, 2097153135; RV32I-NEXT:    addi a0, a0, 8193136; RV32I-NEXT:    vor.vv v8, v8, v163137; RV32I-NEXT:    vnot.v v8, v83138; RV32I-NEXT:    vsrl.vi v16, v8, 13139; RV32I-NEXT:    vand.vv v24, v16, v243140; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma3141; RV32I-NEXT:    vmv.v.x v16, a03142; RV32I-NEXT:    lui a0, 616813143; RV32I-NEXT:    addi a0, a0, -2413144; RV32I-NEXT:    vsetvli a1, zero, e64, m8, ta, ma3145; RV32I-NEXT:    vsub.vv v8, v8, v243146; RV32I-NEXT:    vand.vv v24, v8, v163147; RV32I-NEXT:    vsrl.vi v8, v8, 23148; RV32I-NEXT:    vand.vv v8, v8, v163149; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma3150; RV32I-NEXT:    vmv.v.x v16, a03151; RV32I-NEXT:    lui a0, 41123152; RV32I-NEXT:    addi a0, a0, 2573153; RV32I-NEXT:    vsetvli a1, zero, e64, m8, ta, ma3154; RV32I-NEXT:    vadd.vv v8, v24, v83155; RV32I-NEXT:    vsrl.vi v24, v8, 43156; RV32I-NEXT:    vadd.vv v8, v8, v243157; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma3158; RV32I-NEXT:    vmv.v.x v24, a03159; RV32I-NEXT:    vsetvli a0, zero, e64, m8, ta, ma3160; RV32I-NEXT:    vand.vv v8, v8, v163161; RV32I-NEXT:    vmul.vv v8, v8, v243162; RV32I-NEXT:    li a0, 563163; RV32I-NEXT:    vsrl.vx v8, v8, a03164; RV32I-NEXT:    ret3165;3166; RV64I-LABEL: ctlz_zero_undef_nxv8i64:3167; RV64I:       # %bb.0:3168; RV64I-NEXT:    vsetvli a0, zero, e64, m8, ta, ma3169; RV64I-NEXT:    vsrl.vi v16, v8, 13170; RV64I-NEXT:    lui a0, 3495253171; RV64I-NEXT:    lui a1, 2097153172; RV64I-NEXT:    lui a2, 616813173; RV64I-NEXT:    lui a3, 41123174; RV64I-NEXT:    addi a0, a0, 13653175; RV64I-NEXT:    addi a1, a1, 8193176; RV64I-NEXT:    addi a2, a2, -2413177; RV64I-NEXT:    addi a3, a3, 2573178; RV64I-NEXT:    slli a4, a0, 323179; RV64I-NEXT:    add a0, a0, a43180; RV64I-NEXT:    slli a4, a1, 323181; RV64I-NEXT:    add a1, a1, a43182; RV64I-NEXT:    slli a4, a2, 323183; RV64I-NEXT:    add a2, a2, a43184; RV64I-NEXT:    slli a4, a3, 323185; RV64I-NEXT:    add a3, a3, a43186; RV64I-NEXT:    li a4, 323187; RV64I-NEXT:    vor.vv v8, v8, v163188; RV64I-NEXT:    vsrl.vi v16, v8, 23189; RV64I-NEXT:    vor.vv v8, v8, v163190; RV64I-NEXT:    vsrl.vi v16, v8, 43191; RV64I-NEXT:    vor.vv v8, v8, v163192; RV64I-NEXT:    vsrl.vi v16, v8, 83193; RV64I-NEXT:    vor.vv v8, v8, v163194; RV64I-NEXT:    vsrl.vi v16, v8, 163195; RV64I-NEXT:    vor.vv v8, v8, v163196; RV64I-NEXT:    vsrl.vx v16, v8, a43197; RV64I-NEXT:    vor.vv v8, v8, v163198; RV64I-NEXT:    vnot.v v8, v83199; RV64I-NEXT:    vsrl.vi v16, v8, 13200; RV64I-NEXT:    vand.vx v16, v16, a03201; RV64I-NEXT:    vsub.vv v8, v8, v163202; RV64I-NEXT:    vand.vx v16, v8, a13203; RV64I-NEXT:    vsrl.vi v8, v8, 23204; RV64I-NEXT:    vand.vx v8, v8, a13205; RV64I-NEXT:    vadd.vv v8, v16, v83206; RV64I-NEXT:    vsrl.vi v16, v8, 43207; RV64I-NEXT:    vadd.vv v8, v8, v163208; RV64I-NEXT:    vand.vx v8, v8, a23209; RV64I-NEXT:    vmul.vx v8, v8, a33210; RV64I-NEXT:    li a0, 563211; RV64I-NEXT:    vsrl.vx v8, v8, a03212; RV64I-NEXT:    ret3213;3214; CHECK-F-LABEL: ctlz_zero_undef_nxv8i64:3215; CHECK-F:       # %bb.0:3216; CHECK-F-NEXT:    li a0, 1903217; CHECK-F-NEXT:    vsetvli a1, zero, e32, m4, ta, ma3218; CHECK-F-NEXT:    vmv.v.x v16, a03219; CHECK-F-NEXT:    fsrmi a0, 13220; CHECK-F-NEXT:    vfncvt.f.xu.w v20, v83221; CHECK-F-NEXT:    vsrl.vi v20, v20, 233222; CHECK-F-NEXT:    vwsubu.vv v8, v16, v203223; CHECK-F-NEXT:    fsrm a03224; CHECK-F-NEXT:    ret3225;3226; CHECK-D-LABEL: ctlz_zero_undef_nxv8i64:3227; CHECK-D:       # %bb.0:3228; CHECK-D-NEXT:    fsrmi a0, 13229; CHECK-D-NEXT:    vsetvli a1, zero, e64, m8, ta, ma3230; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v83231; CHECK-D-NEXT:    li a1, 523232; CHECK-D-NEXT:    vsrl.vx v8, v8, a13233; CHECK-D-NEXT:    li a1, 10863234; CHECK-D-NEXT:    vrsub.vx v8, v8, a13235; CHECK-D-NEXT:    fsrm a03236; CHECK-D-NEXT:    ret3237;3238; CHECK-ZVBB-LABEL: ctlz_zero_undef_nxv8i64:3239; CHECK-ZVBB:       # %bb.0:3240; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m8, ta, ma3241; CHECK-ZVBB-NEXT:    vclz.v v8, v83242; CHECK-ZVBB-NEXT:    ret3243  %a = call <vscale x 8 x i64> @llvm.ctlz.nxv8i64(<vscale x 8 x i64> %va, i1 true)3244  ret <vscale x 8 x i64> %a3245}3246;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:3247; RV32: {{.*}}3248; RV32F: {{.*}}3249; RV64: {{.*}}3250; RV64F: {{.*}}3251