brintos

brintos / llvm-project-archived public Read only

0
0
Text · 109.2 KiB · 79af06d Raw
3069 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,RV32,RV32F5; RUN: llc -mtriple=riscv64 -mattr=+zve64f,+f -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-F,RV64,RV64F6; RUN: llc -mtriple=riscv32 -mattr=+v,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-D,RV32,RV32D7; RUN: llc -mtriple=riscv64 -mattr=+v,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-D,RV64,RV64D8; 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> @cttz_nxv1i8(<vscale x 1 x i8> %va) {12; CHECK-ZVE64X-LABEL: cttz_nxv1i8:13; CHECK-ZVE64X:       # %bb.0:14; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma15; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -116; CHECK-ZVE64X-NEXT:    vnot.v v8, v817; CHECK-ZVE64X-NEXT:    li a0, 8518; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v919; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 120; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a021; CHECK-ZVE64X-NEXT:    li a0, 5122; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v923; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a024; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 225; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a026; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v827; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 428; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v929; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 1530; CHECK-ZVE64X-NEXT:    ret31;32; CHECK-F-LABEL: cttz_nxv1i8:33; CHECK-F:       # %bb.0:34; CHECK-F-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma35; CHECK-F-NEXT:    vrsub.vi v9, v8, 036; CHECK-F-NEXT:    li a0, 12737; CHECK-F-NEXT:    vand.vv v9, v8, v938; CHECK-F-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma39; CHECK-F-NEXT:    vzext.vf2 v10, v940; CHECK-F-NEXT:    vfwcvt.f.xu.v v9, v1041; CHECK-F-NEXT:    vnsrl.wi v9, v9, 2342; CHECK-F-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma43; CHECK-F-NEXT:    vnsrl.wi v9, v9, 044; CHECK-F-NEXT:    vmseq.vi v0, v8, 045; CHECK-F-NEXT:    vsub.vx v8, v9, a046; CHECK-F-NEXT:    vmerge.vim v8, v8, 8, v047; CHECK-F-NEXT:    ret48;49; CHECK-D-LABEL: cttz_nxv1i8:50; CHECK-D:       # %bb.0:51; CHECK-D-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma52; CHECK-D-NEXT:    vrsub.vi v9, v8, 053; CHECK-D-NEXT:    li a0, 12754; CHECK-D-NEXT:    vand.vv v9, v8, v955; CHECK-D-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma56; CHECK-D-NEXT:    vzext.vf2 v10, v957; CHECK-D-NEXT:    vfwcvt.f.xu.v v9, v1058; CHECK-D-NEXT:    vnsrl.wi v9, v9, 2359; CHECK-D-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma60; CHECK-D-NEXT:    vnsrl.wi v9, v9, 061; CHECK-D-NEXT:    vmseq.vi v0, v8, 062; CHECK-D-NEXT:    vsub.vx v8, v9, a063; CHECK-D-NEXT:    vmerge.vim v8, v8, 8, v064; CHECK-D-NEXT:    ret65;66; CHECK-ZVBB-LABEL: cttz_nxv1i8:67; CHECK-ZVBB:       # %bb.0:68; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma69; CHECK-ZVBB-NEXT:    vctz.v v8, v870; CHECK-ZVBB-NEXT:    ret71  %a = call <vscale x 1 x i8> @llvm.cttz.nxv1i8(<vscale x 1 x i8> %va, i1 false)72  ret <vscale x 1 x i8> %a73}74 75define <vscale x 2 x i8> @cttz_nxv2i8(<vscale x 2 x i8> %va) {76; CHECK-ZVE64X-LABEL: cttz_nxv2i8:77; CHECK-ZVE64X:       # %bb.0:78; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma79; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -180; CHECK-ZVE64X-NEXT:    vnot.v v8, v881; CHECK-ZVE64X-NEXT:    li a0, 8582; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v983; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 184; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a085; CHECK-ZVE64X-NEXT:    li a0, 5186; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v987; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a088; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 289; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a090; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v891; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 492; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v993; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 1594; CHECK-ZVE64X-NEXT:    ret95;96; CHECK-F-LABEL: cttz_nxv2i8:97; CHECK-F:       # %bb.0:98; CHECK-F-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma99; CHECK-F-NEXT:    vrsub.vi v9, v8, 0100; CHECK-F-NEXT:    li a0, 127101; CHECK-F-NEXT:    vand.vv v9, v8, v9102; CHECK-F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma103; CHECK-F-NEXT:    vzext.vf2 v10, v9104; CHECK-F-NEXT:    vfwcvt.f.xu.v v9, v10105; CHECK-F-NEXT:    vnsrl.wi v9, v9, 23106; CHECK-F-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma107; CHECK-F-NEXT:    vnsrl.wi v9, v9, 0108; CHECK-F-NEXT:    vmseq.vi v0, v8, 0109; CHECK-F-NEXT:    vsub.vx v8, v9, a0110; CHECK-F-NEXT:    vmerge.vim v8, v8, 8, v0111; CHECK-F-NEXT:    ret112;113; CHECK-D-LABEL: cttz_nxv2i8:114; CHECK-D:       # %bb.0:115; CHECK-D-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma116; CHECK-D-NEXT:    vrsub.vi v9, v8, 0117; CHECK-D-NEXT:    li a0, 127118; CHECK-D-NEXT:    vand.vv v9, v8, v9119; CHECK-D-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma120; CHECK-D-NEXT:    vzext.vf2 v10, v9121; CHECK-D-NEXT:    vfwcvt.f.xu.v v9, v10122; CHECK-D-NEXT:    vnsrl.wi v9, v9, 23123; CHECK-D-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma124; CHECK-D-NEXT:    vnsrl.wi v9, v9, 0125; CHECK-D-NEXT:    vmseq.vi v0, v8, 0126; CHECK-D-NEXT:    vsub.vx v8, v9, a0127; CHECK-D-NEXT:    vmerge.vim v8, v8, 8, v0128; CHECK-D-NEXT:    ret129;130; CHECK-ZVBB-LABEL: cttz_nxv2i8:131; CHECK-ZVBB:       # %bb.0:132; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma133; CHECK-ZVBB-NEXT:    vctz.v v8, v8134; CHECK-ZVBB-NEXT:    ret135  %a = call <vscale x 2 x i8> @llvm.cttz.nxv2i8(<vscale x 2 x i8> %va, i1 false)136  ret <vscale x 2 x i8> %a137}138 139define <vscale x 4 x i8> @cttz_nxv4i8(<vscale x 4 x i8> %va) {140; CHECK-ZVE64X-LABEL: cttz_nxv4i8:141; CHECK-ZVE64X:       # %bb.0:142; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma143; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -1144; CHECK-ZVE64X-NEXT:    vnot.v v8, v8145; CHECK-ZVE64X-NEXT:    li a0, 85146; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v9147; 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: cttz_nxv4i8:161; CHECK-F:       # %bb.0:162; CHECK-F-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma163; CHECK-F-NEXT:    vrsub.vi v9, v8, 0164; CHECK-F-NEXT:    li a0, 127165; CHECK-F-NEXT:    vand.vv v9, v8, v9166; CHECK-F-NEXT:    vsetvli zero, zero, e16, m1, ta, ma167; CHECK-F-NEXT:    vzext.vf2 v12, v9168; CHECK-F-NEXT:    vfwcvt.f.xu.v v10, v12169; CHECK-F-NEXT:    vnsrl.wi v9, v10, 23170; CHECK-F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma171; CHECK-F-NEXT:    vnsrl.wi v9, v9, 0172; CHECK-F-NEXT:    vmseq.vi v0, v8, 0173; CHECK-F-NEXT:    vsub.vx v8, v9, a0174; CHECK-F-NEXT:    vmerge.vim v8, v8, 8, v0175; CHECK-F-NEXT:    ret176;177; CHECK-D-LABEL: cttz_nxv4i8:178; CHECK-D:       # %bb.0:179; CHECK-D-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma180; CHECK-D-NEXT:    vrsub.vi v9, v8, 0181; CHECK-D-NEXT:    li a0, 127182; CHECK-D-NEXT:    vand.vv v9, v8, v9183; CHECK-D-NEXT:    vsetvli zero, zero, e16, m1, ta, ma184; CHECK-D-NEXT:    vzext.vf2 v12, v9185; CHECK-D-NEXT:    vfwcvt.f.xu.v v10, v12186; CHECK-D-NEXT:    vnsrl.wi v9, v10, 23187; CHECK-D-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma188; CHECK-D-NEXT:    vnsrl.wi v9, v9, 0189; CHECK-D-NEXT:    vmseq.vi v0, v8, 0190; CHECK-D-NEXT:    vsub.vx v8, v9, a0191; CHECK-D-NEXT:    vmerge.vim v8, v8, 8, v0192; CHECK-D-NEXT:    ret193;194; CHECK-ZVBB-LABEL: cttz_nxv4i8:195; CHECK-ZVBB:       # %bb.0:196; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma197; CHECK-ZVBB-NEXT:    vctz.v v8, v8198; CHECK-ZVBB-NEXT:    ret199  %a = call <vscale x 4 x i8> @llvm.cttz.nxv4i8(<vscale x 4 x i8> %va, i1 false)200  ret <vscale x 4 x i8> %a201}202 203define <vscale x 8 x i8> @cttz_nxv8i8(<vscale x 8 x i8> %va) {204; CHECK-ZVE64X-LABEL: cttz_nxv8i8:205; CHECK-ZVE64X:       # %bb.0:206; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, m1, ta, ma207; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -1208; CHECK-ZVE64X-NEXT:    vnot.v v8, v8209; CHECK-ZVE64X-NEXT:    li a0, 85210; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v9211; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1212; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0213; CHECK-ZVE64X-NEXT:    li a0, 51214; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9215; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0216; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2217; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0218; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8219; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4220; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9221; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 15222; CHECK-ZVE64X-NEXT:    ret223;224; CHECK-F-LABEL: cttz_nxv8i8:225; CHECK-F:       # %bb.0:226; CHECK-F-NEXT:    vsetvli a0, zero, e8, m1, ta, ma227; CHECK-F-NEXT:    vrsub.vi v9, v8, 0228; CHECK-F-NEXT:    li a0, 127229; CHECK-F-NEXT:    vand.vv v9, v8, v9230; CHECK-F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma231; CHECK-F-NEXT:    vzext.vf2 v10, v9232; CHECK-F-NEXT:    vfwcvt.f.xu.v v12, v10233; CHECK-F-NEXT:    vnsrl.wi v10, v12, 23234; CHECK-F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma235; CHECK-F-NEXT:    vnsrl.wi v9, v10, 0236; CHECK-F-NEXT:    vmseq.vi v0, v8, 0237; CHECK-F-NEXT:    vsub.vx v8, v9, a0238; CHECK-F-NEXT:    vmerge.vim v8, v8, 8, v0239; CHECK-F-NEXT:    ret240;241; CHECK-D-LABEL: cttz_nxv8i8:242; CHECK-D:       # %bb.0:243; CHECK-D-NEXT:    vsetvli a0, zero, e8, m1, ta, ma244; CHECK-D-NEXT:    vrsub.vi v9, v8, 0245; CHECK-D-NEXT:    li a0, 127246; CHECK-D-NEXT:    vand.vv v9, v8, v9247; CHECK-D-NEXT:    vsetvli zero, zero, e16, m2, ta, ma248; CHECK-D-NEXT:    vzext.vf2 v10, v9249; CHECK-D-NEXT:    vfwcvt.f.xu.v v12, v10250; CHECK-D-NEXT:    vnsrl.wi v10, v12, 23251; CHECK-D-NEXT:    vsetvli zero, zero, e8, m1, ta, ma252; CHECK-D-NEXT:    vnsrl.wi v9, v10, 0253; CHECK-D-NEXT:    vmseq.vi v0, v8, 0254; CHECK-D-NEXT:    vsub.vx v8, v9, a0255; CHECK-D-NEXT:    vmerge.vim v8, v8, 8, v0256; CHECK-D-NEXT:    ret257;258; CHECK-ZVBB-LABEL: cttz_nxv8i8:259; CHECK-ZVBB:       # %bb.0:260; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m1, ta, ma261; CHECK-ZVBB-NEXT:    vctz.v v8, v8262; CHECK-ZVBB-NEXT:    ret263  %a = call <vscale x 8 x i8> @llvm.cttz.nxv8i8(<vscale x 8 x i8> %va, i1 false)264  ret <vscale x 8 x i8> %a265}266 267define <vscale x 16 x i8> @cttz_nxv16i8(<vscale x 16 x i8> %va) {268; CHECK-ZVE64X-LABEL: cttz_nxv16i8:269; CHECK-ZVE64X:       # %bb.0:270; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, m2, ta, ma271; CHECK-ZVE64X-NEXT:    vadd.vi v10, v8, -1272; CHECK-ZVE64X-NEXT:    vnot.v v8, v8273; CHECK-ZVE64X-NEXT:    li a0, 85274; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v10275; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 1276; CHECK-ZVE64X-NEXT:    vand.vx v10, v10, a0277; CHECK-ZVE64X-NEXT:    li a0, 51278; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v10279; CHECK-ZVE64X-NEXT:    vand.vx v10, v8, a0280; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2281; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0282; CHECK-ZVE64X-NEXT:    vadd.vv v8, v10, v8283; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 4284; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v10285; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 15286; CHECK-ZVE64X-NEXT:    ret287;288; CHECK-F-LABEL: cttz_nxv16i8:289; CHECK-F:       # %bb.0:290; CHECK-F-NEXT:    vsetvli a0, zero, e8, m2, ta, ma291; CHECK-F-NEXT:    vrsub.vi v10, v8, 0292; CHECK-F-NEXT:    li a0, 127293; CHECK-F-NEXT:    vand.vv v10, v8, v10294; CHECK-F-NEXT:    vsetvli zero, zero, e16, m4, ta, ma295; CHECK-F-NEXT:    vzext.vf2 v12, v10296; CHECK-F-NEXT:    vfwcvt.f.xu.v v16, v12297; CHECK-F-NEXT:    vnsrl.wi v12, v16, 23298; CHECK-F-NEXT:    vsetvli zero, zero, e8, m2, ta, ma299; CHECK-F-NEXT:    vnsrl.wi v10, v12, 0300; CHECK-F-NEXT:    vmseq.vi v0, v8, 0301; CHECK-F-NEXT:    vsub.vx v8, v10, a0302; CHECK-F-NEXT:    vmerge.vim v8, v8, 8, v0303; CHECK-F-NEXT:    ret304;305; CHECK-D-LABEL: cttz_nxv16i8:306; CHECK-D:       # %bb.0:307; CHECK-D-NEXT:    vsetvli a0, zero, e8, m2, ta, ma308; CHECK-D-NEXT:    vrsub.vi v10, v8, 0309; CHECK-D-NEXT:    li a0, 127310; CHECK-D-NEXT:    vand.vv v10, v8, v10311; CHECK-D-NEXT:    vsetvli zero, zero, e16, m4, ta, ma312; CHECK-D-NEXT:    vzext.vf2 v12, v10313; CHECK-D-NEXT:    vfwcvt.f.xu.v v16, v12314; CHECK-D-NEXT:    vnsrl.wi v12, v16, 23315; CHECK-D-NEXT:    vsetvli zero, zero, e8, m2, ta, ma316; CHECK-D-NEXT:    vnsrl.wi v10, v12, 0317; CHECK-D-NEXT:    vmseq.vi v0, v8, 0318; CHECK-D-NEXT:    vsub.vx v8, v10, a0319; CHECK-D-NEXT:    vmerge.vim v8, v8, 8, v0320; CHECK-D-NEXT:    ret321;322; CHECK-ZVBB-LABEL: cttz_nxv16i8:323; CHECK-ZVBB:       # %bb.0:324; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m2, ta, ma325; CHECK-ZVBB-NEXT:    vctz.v v8, v8326; CHECK-ZVBB-NEXT:    ret327  %a = call <vscale x 16 x i8> @llvm.cttz.nxv16i8(<vscale x 16 x i8> %va, i1 false)328  ret <vscale x 16 x i8> %a329}330 331define <vscale x 32 x i8> @cttz_nxv32i8(<vscale x 32 x i8> %va) {332; CHECK-LABEL: cttz_nxv32i8:333; CHECK:       # %bb.0:334; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma335; CHECK-NEXT:    vadd.vi v12, v8, -1336; CHECK-NEXT:    vnot.v v8, v8337; CHECK-NEXT:    li a0, 85338; CHECK-NEXT:    vand.vv v8, v8, v12339; CHECK-NEXT:    vsrl.vi v12, v8, 1340; CHECK-NEXT:    vand.vx v12, v12, a0341; CHECK-NEXT:    li a0, 51342; CHECK-NEXT:    vsub.vv v8, v8, v12343; CHECK-NEXT:    vand.vx v12, v8, a0344; CHECK-NEXT:    vsrl.vi v8, v8, 2345; CHECK-NEXT:    vand.vx v8, v8, a0346; CHECK-NEXT:    vadd.vv v8, v12, v8347; CHECK-NEXT:    vsrl.vi v12, v8, 4348; CHECK-NEXT:    vadd.vv v8, v8, v12349; CHECK-NEXT:    vand.vi v8, v8, 15350; CHECK-NEXT:    ret351;352; CHECK-ZVBB-LABEL: cttz_nxv32i8:353; CHECK-ZVBB:       # %bb.0:354; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m4, ta, ma355; CHECK-ZVBB-NEXT:    vctz.v v8, v8356; CHECK-ZVBB-NEXT:    ret357  %a = call <vscale x 32 x i8> @llvm.cttz.nxv32i8(<vscale x 32 x i8> %va, i1 false)358  ret <vscale x 32 x i8> %a359}360 361define <vscale x 64 x i8> @cttz_nxv64i8(<vscale x 64 x i8> %va) {362; CHECK-LABEL: cttz_nxv64i8:363; CHECK:       # %bb.0:364; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma365; CHECK-NEXT:    vadd.vi v16, v8, -1366; CHECK-NEXT:    vnot.v v8, v8367; CHECK-NEXT:    li a0, 85368; CHECK-NEXT:    vand.vv v8, v8, v16369; CHECK-NEXT:    vsrl.vi v16, v8, 1370; CHECK-NEXT:    vand.vx v16, v16, a0371; CHECK-NEXT:    li a0, 51372; CHECK-NEXT:    vsub.vv v8, v8, v16373; CHECK-NEXT:    vand.vx v16, v8, a0374; CHECK-NEXT:    vsrl.vi v8, v8, 2375; CHECK-NEXT:    vand.vx v8, v8, a0376; CHECK-NEXT:    vadd.vv v8, v16, v8377; CHECK-NEXT:    vsrl.vi v16, v8, 4378; CHECK-NEXT:    vadd.vv v8, v8, v16379; CHECK-NEXT:    vand.vi v8, v8, 15380; CHECK-NEXT:    ret381;382; CHECK-ZVBB-LABEL: cttz_nxv64i8:383; CHECK-ZVBB:       # %bb.0:384; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m8, ta, ma385; CHECK-ZVBB-NEXT:    vctz.v v8, v8386; CHECK-ZVBB-NEXT:    ret387  %a = call <vscale x 64 x i8> @llvm.cttz.nxv64i8(<vscale x 64 x i8> %va, i1 false)388  ret <vscale x 64 x i8> %a389}390 391define <vscale x 1 x i16> @cttz_nxv1i16(<vscale x 1 x i16> %va) {392; CHECK-ZVE64X-LABEL: cttz_nxv1i16:393; CHECK-ZVE64X:       # %bb.0:394; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma395; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -1396; CHECK-ZVE64X-NEXT:    vnot.v v8, v8397; CHECK-ZVE64X-NEXT:    lui a0, 5398; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v9399; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365400; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1401; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0402; CHECK-ZVE64X-NEXT:    lui a0, 3403; CHECK-ZVE64X-NEXT:    addi a0, a0, 819404; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9405; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0406; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2407; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0408; CHECK-ZVE64X-NEXT:    lui a0, 1409; CHECK-ZVE64X-NEXT:    addi a0, a0, -241410; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8411; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4412; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9413; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0414; CHECK-ZVE64X-NEXT:    li a0, 257415; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0416; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 8417; CHECK-ZVE64X-NEXT:    ret418;419; CHECK-F-LABEL: cttz_nxv1i16:420; CHECK-F:       # %bb.0:421; CHECK-F-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma422; CHECK-F-NEXT:    vrsub.vi v9, v8, 0423; CHECK-F-NEXT:    li a0, 127424; CHECK-F-NEXT:    vand.vv v9, v8, v9425; CHECK-F-NEXT:    vmseq.vi v0, v8, 0426; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v9427; CHECK-F-NEXT:    vnsrl.wi v8, v8, 23428; CHECK-F-NEXT:    vsub.vx v8, v8, a0429; CHECK-F-NEXT:    li a0, 16430; CHECK-F-NEXT:    vmerge.vxm v8, v8, a0, v0431; CHECK-F-NEXT:    ret432;433; CHECK-D-LABEL: cttz_nxv1i16:434; CHECK-D:       # %bb.0:435; CHECK-D-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma436; CHECK-D-NEXT:    vrsub.vi v9, v8, 0437; CHECK-D-NEXT:    li a0, 127438; CHECK-D-NEXT:    vand.vv v9, v8, v9439; CHECK-D-NEXT:    vmseq.vi v0, v8, 0440; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v9441; CHECK-D-NEXT:    vnsrl.wi v8, v8, 23442; CHECK-D-NEXT:    vsub.vx v8, v8, a0443; CHECK-D-NEXT:    li a0, 16444; CHECK-D-NEXT:    vmerge.vxm v8, v8, a0, v0445; CHECK-D-NEXT:    ret446;447; CHECK-ZVBB-LABEL: cttz_nxv1i16:448; CHECK-ZVBB:       # %bb.0:449; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma450; CHECK-ZVBB-NEXT:    vctz.v v8, v8451; CHECK-ZVBB-NEXT:    ret452  %a = call <vscale x 1 x i16> @llvm.cttz.nxv1i16(<vscale x 1 x i16> %va, i1 false)453  ret <vscale x 1 x i16> %a454}455 456define <vscale x 2 x i16> @cttz_nxv2i16(<vscale x 2 x i16> %va) {457; CHECK-ZVE64X-LABEL: cttz_nxv2i16:458; CHECK-ZVE64X:       # %bb.0:459; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma460; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -1461; CHECK-ZVE64X-NEXT:    vnot.v v8, v8462; CHECK-ZVE64X-NEXT:    lui a0, 5463; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v9464; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365465; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1466; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0467; CHECK-ZVE64X-NEXT:    lui a0, 3468; CHECK-ZVE64X-NEXT:    addi a0, a0, 819469; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9470; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0471; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2472; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0473; CHECK-ZVE64X-NEXT:    lui a0, 1474; CHECK-ZVE64X-NEXT:    addi a0, a0, -241475; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8476; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4477; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9478; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0479; CHECK-ZVE64X-NEXT:    li a0, 257480; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0481; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 8482; CHECK-ZVE64X-NEXT:    ret483;484; CHECK-F-LABEL: cttz_nxv2i16:485; CHECK-F:       # %bb.0:486; CHECK-F-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma487; CHECK-F-NEXT:    vrsub.vi v9, v8, 0488; CHECK-F-NEXT:    li a0, 127489; CHECK-F-NEXT:    vand.vv v9, v8, v9490; CHECK-F-NEXT:    vmseq.vi v0, v8, 0491; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v9492; CHECK-F-NEXT:    vnsrl.wi v8, v8, 23493; CHECK-F-NEXT:    vsub.vx v8, v8, a0494; CHECK-F-NEXT:    li a0, 16495; CHECK-F-NEXT:    vmerge.vxm v8, v8, a0, v0496; CHECK-F-NEXT:    ret497;498; CHECK-D-LABEL: cttz_nxv2i16:499; CHECK-D:       # %bb.0:500; CHECK-D-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma501; CHECK-D-NEXT:    vrsub.vi v9, v8, 0502; CHECK-D-NEXT:    li a0, 127503; CHECK-D-NEXT:    vand.vv v9, v8, v9504; CHECK-D-NEXT:    vmseq.vi v0, v8, 0505; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v9506; CHECK-D-NEXT:    vnsrl.wi v8, v8, 23507; CHECK-D-NEXT:    vsub.vx v8, v8, a0508; CHECK-D-NEXT:    li a0, 16509; CHECK-D-NEXT:    vmerge.vxm v8, v8, a0, v0510; CHECK-D-NEXT:    ret511;512; CHECK-ZVBB-LABEL: cttz_nxv2i16:513; CHECK-ZVBB:       # %bb.0:514; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma515; CHECK-ZVBB-NEXT:    vctz.v v8, v8516; CHECK-ZVBB-NEXT:    ret517  %a = call <vscale x 2 x i16> @llvm.cttz.nxv2i16(<vscale x 2 x i16> %va, i1 false)518  ret <vscale x 2 x i16> %a519}520 521define <vscale x 4 x i16> @cttz_nxv4i16(<vscale x 4 x i16> %va) {522; CHECK-ZVE64X-LABEL: cttz_nxv4i16:523; CHECK-ZVE64X:       # %bb.0:524; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, m1, ta, ma525; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -1526; CHECK-ZVE64X-NEXT:    vnot.v v8, v8527; CHECK-ZVE64X-NEXT:    lui a0, 5528; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v9529; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365530; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1531; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0532; CHECK-ZVE64X-NEXT:    lui a0, 3533; CHECK-ZVE64X-NEXT:    addi a0, a0, 819534; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9535; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0536; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2537; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0538; CHECK-ZVE64X-NEXT:    lui a0, 1539; CHECK-ZVE64X-NEXT:    addi a0, a0, -241540; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8541; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4542; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9543; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0544; CHECK-ZVE64X-NEXT:    li a0, 257545; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0546; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 8547; CHECK-ZVE64X-NEXT:    ret548;549; CHECK-F-LABEL: cttz_nxv4i16:550; CHECK-F:       # %bb.0:551; CHECK-F-NEXT:    vsetvli a0, zero, e16, m1, ta, ma552; CHECK-F-NEXT:    vrsub.vi v9, v8, 0553; CHECK-F-NEXT:    li a0, 127554; CHECK-F-NEXT:    vmseq.vi v0, v8, 0555; CHECK-F-NEXT:    vand.vv v10, v8, v9556; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v10557; CHECK-F-NEXT:    vnsrl.wi v10, v8, 23558; CHECK-F-NEXT:    vsub.vx v8, v10, a0559; CHECK-F-NEXT:    li a0, 16560; CHECK-F-NEXT:    vmerge.vxm v8, v8, a0, v0561; CHECK-F-NEXT:    ret562;563; CHECK-D-LABEL: cttz_nxv4i16:564; CHECK-D:       # %bb.0:565; CHECK-D-NEXT:    vsetvli a0, zero, e16, m1, ta, ma566; CHECK-D-NEXT:    vrsub.vi v9, v8, 0567; CHECK-D-NEXT:    li a0, 127568; CHECK-D-NEXT:    vmseq.vi v0, v8, 0569; CHECK-D-NEXT:    vand.vv v10, v8, v9570; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v10571; CHECK-D-NEXT:    vnsrl.wi v10, v8, 23572; CHECK-D-NEXT:    vsub.vx v8, v10, a0573; CHECK-D-NEXT:    li a0, 16574; CHECK-D-NEXT:    vmerge.vxm v8, v8, a0, v0575; CHECK-D-NEXT:    ret576;577; CHECK-ZVBB-LABEL: cttz_nxv4i16:578; CHECK-ZVBB:       # %bb.0:579; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma580; CHECK-ZVBB-NEXT:    vctz.v v8, v8581; CHECK-ZVBB-NEXT:    ret582  %a = call <vscale x 4 x i16> @llvm.cttz.nxv4i16(<vscale x 4 x i16> %va, i1 false)583  ret <vscale x 4 x i16> %a584}585 586define <vscale x 8 x i16> @cttz_nxv8i16(<vscale x 8 x i16> %va) {587; CHECK-ZVE64X-LABEL: cttz_nxv8i16:588; CHECK-ZVE64X:       # %bb.0:589; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, m2, ta, ma590; CHECK-ZVE64X-NEXT:    vadd.vi v10, v8, -1591; CHECK-ZVE64X-NEXT:    vnot.v v8, v8592; CHECK-ZVE64X-NEXT:    lui a0, 5593; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v10594; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365595; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 1596; CHECK-ZVE64X-NEXT:    vand.vx v10, v10, a0597; CHECK-ZVE64X-NEXT:    lui a0, 3598; CHECK-ZVE64X-NEXT:    addi a0, a0, 819599; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v10600; CHECK-ZVE64X-NEXT:    vand.vx v10, v8, a0601; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2602; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0603; CHECK-ZVE64X-NEXT:    lui a0, 1604; CHECK-ZVE64X-NEXT:    addi a0, a0, -241605; CHECK-ZVE64X-NEXT:    vadd.vv v8, v10, v8606; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 4607; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v10608; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0609; CHECK-ZVE64X-NEXT:    li a0, 257610; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0611; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 8612; CHECK-ZVE64X-NEXT:    ret613;614; CHECK-F-LABEL: cttz_nxv8i16:615; CHECK-F:       # %bb.0:616; CHECK-F-NEXT:    vsetvli a0, zero, e16, m2, ta, ma617; CHECK-F-NEXT:    vrsub.vi v10, v8, 0618; CHECK-F-NEXT:    li a0, 127619; CHECK-F-NEXT:    vmseq.vi v0, v8, 0620; CHECK-F-NEXT:    vand.vv v12, v8, v10621; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v12622; CHECK-F-NEXT:    vnsrl.wi v12, v8, 23623; CHECK-F-NEXT:    vsub.vx v8, v12, a0624; CHECK-F-NEXT:    li a0, 16625; CHECK-F-NEXT:    vmerge.vxm v8, v8, a0, v0626; CHECK-F-NEXT:    ret627;628; CHECK-D-LABEL: cttz_nxv8i16:629; CHECK-D:       # %bb.0:630; CHECK-D-NEXT:    vsetvli a0, zero, e16, m2, ta, ma631; CHECK-D-NEXT:    vrsub.vi v10, v8, 0632; CHECK-D-NEXT:    li a0, 127633; CHECK-D-NEXT:    vmseq.vi v0, v8, 0634; CHECK-D-NEXT:    vand.vv v12, v8, v10635; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v12636; CHECK-D-NEXT:    vnsrl.wi v12, v8, 23637; CHECK-D-NEXT:    vsub.vx v8, v12, a0638; CHECK-D-NEXT:    li a0, 16639; CHECK-D-NEXT:    vmerge.vxm v8, v8, a0, v0640; CHECK-D-NEXT:    ret641;642; CHECK-ZVBB-LABEL: cttz_nxv8i16:643; CHECK-ZVBB:       # %bb.0:644; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m2, ta, ma645; CHECK-ZVBB-NEXT:    vctz.v v8, v8646; CHECK-ZVBB-NEXT:    ret647  %a = call <vscale x 8 x i16> @llvm.cttz.nxv8i16(<vscale x 8 x i16> %va, i1 false)648  ret <vscale x 8 x i16> %a649}650 651define <vscale x 16 x i16> @cttz_nxv16i16(<vscale x 16 x i16> %va) {652; CHECK-ZVE64X-LABEL: cttz_nxv16i16:653; CHECK-ZVE64X:       # %bb.0:654; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, m4, ta, ma655; CHECK-ZVE64X-NEXT:    vadd.vi v12, v8, -1656; CHECK-ZVE64X-NEXT:    vnot.v v8, v8657; CHECK-ZVE64X-NEXT:    lui a0, 5658; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v12659; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365660; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 1661; CHECK-ZVE64X-NEXT:    vand.vx v12, v12, a0662; CHECK-ZVE64X-NEXT:    lui a0, 3663; CHECK-ZVE64X-NEXT:    addi a0, a0, 819664; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v12665; CHECK-ZVE64X-NEXT:    vand.vx v12, v8, a0666; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2667; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0668; CHECK-ZVE64X-NEXT:    lui a0, 1669; CHECK-ZVE64X-NEXT:    addi a0, a0, -241670; CHECK-ZVE64X-NEXT:    vadd.vv v8, v12, v8671; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 4672; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v12673; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0674; CHECK-ZVE64X-NEXT:    li a0, 257675; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0676; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 8677; CHECK-ZVE64X-NEXT:    ret678;679; CHECK-F-LABEL: cttz_nxv16i16:680; CHECK-F:       # %bb.0:681; CHECK-F-NEXT:    vsetvli a0, zero, e16, m4, ta, ma682; CHECK-F-NEXT:    vrsub.vi v12, v8, 0683; CHECK-F-NEXT:    li a0, 127684; CHECK-F-NEXT:    vmseq.vi v0, v8, 0685; CHECK-F-NEXT:    vand.vv v16, v8, v12686; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v16687; CHECK-F-NEXT:    vnsrl.wi v16, v8, 23688; CHECK-F-NEXT:    vsub.vx v8, v16, a0689; CHECK-F-NEXT:    li a0, 16690; CHECK-F-NEXT:    vmerge.vxm v8, v8, a0, v0691; CHECK-F-NEXT:    ret692;693; CHECK-D-LABEL: cttz_nxv16i16:694; CHECK-D:       # %bb.0:695; CHECK-D-NEXT:    vsetvli a0, zero, e16, m4, ta, ma696; CHECK-D-NEXT:    vrsub.vi v12, v8, 0697; CHECK-D-NEXT:    li a0, 127698; CHECK-D-NEXT:    vmseq.vi v0, v8, 0699; CHECK-D-NEXT:    vand.vv v16, v8, v12700; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v16701; CHECK-D-NEXT:    vnsrl.wi v16, v8, 23702; CHECK-D-NEXT:    vsub.vx v8, v16, a0703; CHECK-D-NEXT:    li a0, 16704; CHECK-D-NEXT:    vmerge.vxm v8, v8, a0, v0705; CHECK-D-NEXT:    ret706;707; CHECK-ZVBB-LABEL: cttz_nxv16i16:708; CHECK-ZVBB:       # %bb.0:709; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m4, ta, ma710; CHECK-ZVBB-NEXT:    vctz.v v8, v8711; CHECK-ZVBB-NEXT:    ret712  %a = call <vscale x 16 x i16> @llvm.cttz.nxv16i16(<vscale x 16 x i16> %va, i1 false)713  ret <vscale x 16 x i16> %a714}715 716define <vscale x 32 x i16> @cttz_nxv32i16(<vscale x 32 x i16> %va) {717; CHECK-LABEL: cttz_nxv32i16:718; CHECK:       # %bb.0:719; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma720; CHECK-NEXT:    vadd.vi v16, v8, -1721; CHECK-NEXT:    vnot.v v8, v8722; CHECK-NEXT:    lui a0, 5723; CHECK-NEXT:    vand.vv v8, v8, v16724; CHECK-NEXT:    addi a0, a0, 1365725; CHECK-NEXT:    vsrl.vi v16, v8, 1726; CHECK-NEXT:    vand.vx v16, v16, a0727; CHECK-NEXT:    lui a0, 3728; CHECK-NEXT:    addi a0, a0, 819729; CHECK-NEXT:    vsub.vv v8, v8, v16730; CHECK-NEXT:    vand.vx v16, v8, a0731; CHECK-NEXT:    vsrl.vi v8, v8, 2732; CHECK-NEXT:    vand.vx v8, v8, a0733; CHECK-NEXT:    lui a0, 1734; CHECK-NEXT:    addi a0, a0, -241735; CHECK-NEXT:    vadd.vv v8, v16, v8736; CHECK-NEXT:    vsrl.vi v16, v8, 4737; CHECK-NEXT:    vadd.vv v8, v8, v16738; CHECK-NEXT:    vand.vx v8, v8, a0739; CHECK-NEXT:    li a0, 257740; CHECK-NEXT:    vmul.vx v8, v8, a0741; CHECK-NEXT:    vsrl.vi v8, v8, 8742; CHECK-NEXT:    ret743;744; CHECK-ZVBB-LABEL: cttz_nxv32i16:745; CHECK-ZVBB:       # %bb.0:746; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m8, ta, ma747; CHECK-ZVBB-NEXT:    vctz.v v8, v8748; CHECK-ZVBB-NEXT:    ret749  %a = call <vscale x 32 x i16> @llvm.cttz.nxv32i16(<vscale x 32 x i16> %va, i1 false)750  ret <vscale x 32 x i16> %a751}752 753define <vscale x 1 x i32> @cttz_nxv1i32(<vscale x 1 x i32> %va) {754; CHECK-ZVE64X-LABEL: cttz_nxv1i32:755; CHECK-ZVE64X:       # %bb.0:756; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma757; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -1758; CHECK-ZVE64X-NEXT:    vnot.v v8, v8759; CHECK-ZVE64X-NEXT:    lui a0, 349525760; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v9761; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365762; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1763; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0764; CHECK-ZVE64X-NEXT:    lui a0, 209715765; CHECK-ZVE64X-NEXT:    addi a0, a0, 819766; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9767; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0768; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2769; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0770; CHECK-ZVE64X-NEXT:    lui a0, 61681771; CHECK-ZVE64X-NEXT:    addi a0, a0, -241772; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8773; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4774; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9775; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0776; CHECK-ZVE64X-NEXT:    lui a0, 4112777; CHECK-ZVE64X-NEXT:    addi a0, a0, 257778; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0779; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 24780; CHECK-ZVE64X-NEXT:    ret781;782; CHECK-F-LABEL: cttz_nxv1i32:783; CHECK-F:       # %bb.0:784; CHECK-F-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma785; CHECK-F-NEXT:    vrsub.vi v9, v8, 0786; CHECK-F-NEXT:    fsrmi a0, 1787; CHECK-F-NEXT:    li a1, 127788; CHECK-F-NEXT:    vand.vv v9, v8, v9789; CHECK-F-NEXT:    vmseq.vi v0, v8, 0790; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v9791; CHECK-F-NEXT:    vsrl.vi v8, v8, 23792; CHECK-F-NEXT:    vsub.vx v8, v8, a1793; CHECK-F-NEXT:    li a1, 32794; CHECK-F-NEXT:    vmerge.vxm v8, v8, a1, v0795; CHECK-F-NEXT:    fsrm a0796; CHECK-F-NEXT:    ret797;798; CHECK-D-LABEL: cttz_nxv1i32:799; CHECK-D:       # %bb.0:800; CHECK-D-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma801; CHECK-D-NEXT:    vrsub.vi v9, v8, 0802; CHECK-D-NEXT:    li a0, 52803; CHECK-D-NEXT:    vand.vv v9, v8, v9804; CHECK-D-NEXT:    vfwcvt.f.xu.v v10, v9805; CHECK-D-NEXT:    vnsrl.wx v9, v10, a0806; CHECK-D-NEXT:    li a0, 1023807; CHECK-D-NEXT:    vmseq.vi v0, v8, 0808; CHECK-D-NEXT:    vsub.vx v8, v9, a0809; CHECK-D-NEXT:    li a0, 32810; CHECK-D-NEXT:    vmerge.vxm v8, v8, a0, v0811; CHECK-D-NEXT:    ret812;813; CHECK-ZVBB-LABEL: cttz_nxv1i32:814; CHECK-ZVBB:       # %bb.0:815; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma816; CHECK-ZVBB-NEXT:    vctz.v v8, v8817; CHECK-ZVBB-NEXT:    ret818  %a = call <vscale x 1 x i32> @llvm.cttz.nxv1i32(<vscale x 1 x i32> %va, i1 false)819  ret <vscale x 1 x i32> %a820}821 822define <vscale x 2 x i32> @cttz_nxv2i32(<vscale x 2 x i32> %va) {823; CHECK-ZVE64X-LABEL: cttz_nxv2i32:824; CHECK-ZVE64X:       # %bb.0:825; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m1, ta, ma826; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -1827; CHECK-ZVE64X-NEXT:    vnot.v v8, v8828; CHECK-ZVE64X-NEXT:    lui a0, 349525829; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v9830; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365831; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 1832; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a0833; CHECK-ZVE64X-NEXT:    lui a0, 209715834; CHECK-ZVE64X-NEXT:    addi a0, a0, 819835; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v9836; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a0837; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2838; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0839; CHECK-ZVE64X-NEXT:    lui a0, 61681840; CHECK-ZVE64X-NEXT:    addi a0, a0, -241841; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v8842; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 4843; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v9844; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0845; CHECK-ZVE64X-NEXT:    lui a0, 4112846; CHECK-ZVE64X-NEXT:    addi a0, a0, 257847; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0848; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 24849; CHECK-ZVE64X-NEXT:    ret850;851; CHECK-F-LABEL: cttz_nxv2i32:852; CHECK-F:       # %bb.0:853; CHECK-F-NEXT:    vsetvli a0, zero, e32, m1, ta, ma854; CHECK-F-NEXT:    vrsub.vi v9, v8, 0855; CHECK-F-NEXT:    fsrmi a0, 1856; CHECK-F-NEXT:    li a1, 127857; CHECK-F-NEXT:    vand.vv v9, v8, v9858; CHECK-F-NEXT:    vmseq.vi v0, v8, 0859; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v9860; CHECK-F-NEXT:    vsrl.vi v8, v8, 23861; CHECK-F-NEXT:    vsub.vx v8, v8, a1862; CHECK-F-NEXT:    li a1, 32863; CHECK-F-NEXT:    vmerge.vxm v8, v8, a1, v0864; CHECK-F-NEXT:    fsrm a0865; CHECK-F-NEXT:    ret866;867; CHECK-D-LABEL: cttz_nxv2i32:868; CHECK-D:       # %bb.0:869; CHECK-D-NEXT:    vsetvli a0, zero, e32, m1, ta, ma870; CHECK-D-NEXT:    vrsub.vi v9, v8, 0871; CHECK-D-NEXT:    li a0, 52872; CHECK-D-NEXT:    vand.vv v9, v8, v9873; CHECK-D-NEXT:    vfwcvt.f.xu.v v10, v9874; CHECK-D-NEXT:    vnsrl.wx v9, v10, a0875; CHECK-D-NEXT:    li a0, 1023876; CHECK-D-NEXT:    vmseq.vi v0, v8, 0877; CHECK-D-NEXT:    vsub.vx v8, v9, a0878; CHECK-D-NEXT:    li a0, 32879; CHECK-D-NEXT:    vmerge.vxm v8, v8, a0, v0880; CHECK-D-NEXT:    ret881;882; CHECK-ZVBB-LABEL: cttz_nxv2i32:883; CHECK-ZVBB:       # %bb.0:884; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m1, ta, ma885; CHECK-ZVBB-NEXT:    vctz.v v8, v8886; CHECK-ZVBB-NEXT:    ret887  %a = call <vscale x 2 x i32> @llvm.cttz.nxv2i32(<vscale x 2 x i32> %va, i1 false)888  ret <vscale x 2 x i32> %a889}890 891define <vscale x 4 x i32> @cttz_nxv4i32(<vscale x 4 x i32> %va) {892; CHECK-ZVE64X-LABEL: cttz_nxv4i32:893; CHECK-ZVE64X:       # %bb.0:894; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m2, ta, ma895; CHECK-ZVE64X-NEXT:    vadd.vi v10, v8, -1896; CHECK-ZVE64X-NEXT:    vnot.v v8, v8897; CHECK-ZVE64X-NEXT:    lui a0, 349525898; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v10899; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365900; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 1901; CHECK-ZVE64X-NEXT:    vand.vx v10, v10, a0902; CHECK-ZVE64X-NEXT:    lui a0, 209715903; CHECK-ZVE64X-NEXT:    addi a0, a0, 819904; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v10905; CHECK-ZVE64X-NEXT:    vand.vx v10, v8, a0906; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2907; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0908; CHECK-ZVE64X-NEXT:    lui a0, 61681909; CHECK-ZVE64X-NEXT:    addi a0, a0, -241910; CHECK-ZVE64X-NEXT:    vadd.vv v8, v10, v8911; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 4912; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v10913; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0914; CHECK-ZVE64X-NEXT:    lui a0, 4112915; CHECK-ZVE64X-NEXT:    addi a0, a0, 257916; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0917; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 24918; CHECK-ZVE64X-NEXT:    ret919;920; CHECK-F-LABEL: cttz_nxv4i32:921; CHECK-F:       # %bb.0:922; CHECK-F-NEXT:    vsetvli a0, zero, e32, m2, ta, ma923; CHECK-F-NEXT:    vrsub.vi v10, v8, 0924; CHECK-F-NEXT:    fsrmi a0, 1925; CHECK-F-NEXT:    li a1, 127926; CHECK-F-NEXT:    vand.vv v10, v8, v10927; CHECK-F-NEXT:    vmseq.vi v0, v8, 0928; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v10929; CHECK-F-NEXT:    vsrl.vi v8, v8, 23930; CHECK-F-NEXT:    vsub.vx v8, v8, a1931; CHECK-F-NEXT:    li a1, 32932; CHECK-F-NEXT:    vmerge.vxm v8, v8, a1, v0933; CHECK-F-NEXT:    fsrm a0934; CHECK-F-NEXT:    ret935;936; CHECK-D-LABEL: cttz_nxv4i32:937; CHECK-D:       # %bb.0:938; CHECK-D-NEXT:    vsetvli a0, zero, e32, m2, ta, ma939; CHECK-D-NEXT:    vrsub.vi v10, v8, 0940; CHECK-D-NEXT:    li a0, 52941; CHECK-D-NEXT:    vand.vv v10, v8, v10942; CHECK-D-NEXT:    vfwcvt.f.xu.v v12, v10943; CHECK-D-NEXT:    vnsrl.wx v10, v12, a0944; CHECK-D-NEXT:    li a0, 1023945; CHECK-D-NEXT:    vmseq.vi v0, v8, 0946; CHECK-D-NEXT:    vsub.vx v8, v10, a0947; CHECK-D-NEXT:    li a0, 32948; CHECK-D-NEXT:    vmerge.vxm v8, v8, a0, v0949; CHECK-D-NEXT:    ret950;951; CHECK-ZVBB-LABEL: cttz_nxv4i32:952; CHECK-ZVBB:       # %bb.0:953; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m2, ta, ma954; CHECK-ZVBB-NEXT:    vctz.v v8, v8955; CHECK-ZVBB-NEXT:    ret956  %a = call <vscale x 4 x i32> @llvm.cttz.nxv4i32(<vscale x 4 x i32> %va, i1 false)957  ret <vscale x 4 x i32> %a958}959 960define <vscale x 8 x i32> @cttz_nxv8i32(<vscale x 8 x i32> %va) {961; CHECK-ZVE64X-LABEL: cttz_nxv8i32:962; CHECK-ZVE64X:       # %bb.0:963; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m4, ta, ma964; CHECK-ZVE64X-NEXT:    vadd.vi v12, v8, -1965; CHECK-ZVE64X-NEXT:    vnot.v v8, v8966; CHECK-ZVE64X-NEXT:    lui a0, 349525967; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v12968; CHECK-ZVE64X-NEXT:    addi a0, a0, 1365969; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 1970; CHECK-ZVE64X-NEXT:    vand.vx v12, v12, a0971; CHECK-ZVE64X-NEXT:    lui a0, 209715972; CHECK-ZVE64X-NEXT:    addi a0, a0, 819973; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v12974; CHECK-ZVE64X-NEXT:    vand.vx v12, v8, a0975; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 2976; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0977; CHECK-ZVE64X-NEXT:    lui a0, 61681978; CHECK-ZVE64X-NEXT:    addi a0, a0, -241979; CHECK-ZVE64X-NEXT:    vadd.vv v8, v12, v8980; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 4981; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v12982; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a0983; CHECK-ZVE64X-NEXT:    lui a0, 4112984; CHECK-ZVE64X-NEXT:    addi a0, a0, 257985; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a0986; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 24987; CHECK-ZVE64X-NEXT:    ret988;989; CHECK-F-LABEL: cttz_nxv8i32:990; CHECK-F:       # %bb.0:991; CHECK-F-NEXT:    vsetvli a0, zero, e32, m4, ta, ma992; CHECK-F-NEXT:    vrsub.vi v12, v8, 0993; CHECK-F-NEXT:    fsrmi a0, 1994; CHECK-F-NEXT:    li a1, 127995; CHECK-F-NEXT:    vand.vv v12, v8, v12996; CHECK-F-NEXT:    vmseq.vi v0, v8, 0997; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v12998; CHECK-F-NEXT:    vsrl.vi v8, v8, 23999; CHECK-F-NEXT:    vsub.vx v8, v8, a11000; CHECK-F-NEXT:    li a1, 321001; CHECK-F-NEXT:    vmerge.vxm v8, v8, a1, v01002; CHECK-F-NEXT:    fsrm a01003; CHECK-F-NEXT:    ret1004;1005; CHECK-D-LABEL: cttz_nxv8i32:1006; CHECK-D:       # %bb.0:1007; CHECK-D-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1008; CHECK-D-NEXT:    vrsub.vi v12, v8, 01009; CHECK-D-NEXT:    li a0, 521010; CHECK-D-NEXT:    vand.vv v12, v8, v121011; CHECK-D-NEXT:    vfwcvt.f.xu.v v16, v121012; CHECK-D-NEXT:    vnsrl.wx v12, v16, a01013; CHECK-D-NEXT:    li a0, 10231014; CHECK-D-NEXT:    vmseq.vi v0, v8, 01015; CHECK-D-NEXT:    vsub.vx v8, v12, a01016; CHECK-D-NEXT:    li a0, 321017; CHECK-D-NEXT:    vmerge.vxm v8, v8, a0, v01018; CHECK-D-NEXT:    ret1019;1020; CHECK-ZVBB-LABEL: cttz_nxv8i32:1021; CHECK-ZVBB:       # %bb.0:1022; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m4, ta, ma1023; CHECK-ZVBB-NEXT:    vctz.v v8, v81024; CHECK-ZVBB-NEXT:    ret1025  %a = call <vscale x 8 x i32> @llvm.cttz.nxv8i32(<vscale x 8 x i32> %va, i1 false)1026  ret <vscale x 8 x i32> %a1027}1028 1029define <vscale x 16 x i32> @cttz_nxv16i32(<vscale x 16 x i32> %va) {1030; CHECK-ZVE64X-LABEL: cttz_nxv16i32:1031; CHECK-ZVE64X:       # %bb.0:1032; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m8, ta, ma1033; CHECK-ZVE64X-NEXT:    vadd.vi v16, v8, -11034; CHECK-ZVE64X-NEXT:    vnot.v v8, v81035; CHECK-ZVE64X-NEXT:    lui a0, 3495251036; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v161037; CHECK-ZVE64X-NEXT:    addi a0, a0, 13651038; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 11039; CHECK-ZVE64X-NEXT:    vand.vx v16, v16, a01040; CHECK-ZVE64X-NEXT:    lui a0, 2097151041; CHECK-ZVE64X-NEXT:    addi a0, a0, 8191042; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v161043; CHECK-ZVE64X-NEXT:    vand.vx v16, v8, a01044; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21045; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01046; CHECK-ZVE64X-NEXT:    lui a0, 616811047; CHECK-ZVE64X-NEXT:    addi a0, a0, -2411048; CHECK-ZVE64X-NEXT:    vadd.vv v8, v16, v81049; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 41050; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v161051; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01052; CHECK-ZVE64X-NEXT:    lui a0, 41121053; CHECK-ZVE64X-NEXT:    addi a0, a0, 2571054; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a01055; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 241056; CHECK-ZVE64X-NEXT:    ret1057;1058; CHECK-F-LABEL: cttz_nxv16i32:1059; CHECK-F:       # %bb.0:1060; CHECK-F-NEXT:    vsetvli a0, zero, e32, m8, ta, ma1061; CHECK-F-NEXT:    vrsub.vi v16, v8, 01062; CHECK-F-NEXT:    fsrmi a0, 11063; CHECK-F-NEXT:    li a1, 1271064; CHECK-F-NEXT:    vand.vv v16, v8, v161065; CHECK-F-NEXT:    vmseq.vi v0, v8, 01066; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v161067; CHECK-F-NEXT:    vsrl.vi v8, v8, 231068; CHECK-F-NEXT:    vsub.vx v8, v8, a11069; CHECK-F-NEXT:    li a1, 321070; CHECK-F-NEXT:    vmerge.vxm v8, v8, a1, v01071; CHECK-F-NEXT:    fsrm a01072; CHECK-F-NEXT:    ret1073;1074; CHECK-D-LABEL: cttz_nxv16i32:1075; CHECK-D:       # %bb.0:1076; CHECK-D-NEXT:    vsetvli a0, zero, e32, m8, ta, ma1077; CHECK-D-NEXT:    vrsub.vi v16, v8, 01078; CHECK-D-NEXT:    fsrmi a0, 11079; CHECK-D-NEXT:    li a1, 1271080; CHECK-D-NEXT:    vand.vv v16, v8, v161081; CHECK-D-NEXT:    vmseq.vi v0, v8, 01082; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v161083; CHECK-D-NEXT:    vsrl.vi v8, v8, 231084; CHECK-D-NEXT:    vsub.vx v8, v8, a11085; CHECK-D-NEXT:    li a1, 321086; CHECK-D-NEXT:    vmerge.vxm v8, v8, a1, v01087; CHECK-D-NEXT:    fsrm a01088; CHECK-D-NEXT:    ret1089;1090; CHECK-ZVBB-LABEL: cttz_nxv16i32:1091; CHECK-ZVBB:       # %bb.0:1092; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m8, ta, ma1093; CHECK-ZVBB-NEXT:    vctz.v v8, v81094; CHECK-ZVBB-NEXT:    ret1095  %a = call <vscale x 16 x i32> @llvm.cttz.nxv16i32(<vscale x 16 x i32> %va, i1 false)1096  ret <vscale x 16 x i32> %a1097}1098 1099define <vscale x 1 x i64> @cttz_nxv1i64(<vscale x 1 x i64> %va) {1100; RV32I-LABEL: cttz_nxv1i64:1101; RV32I:       # %bb.0:1102; RV32I-NEXT:    vsetvli a0, zero, e64, m1, ta, ma1103; RV32I-NEXT:    vadd.vi v9, v8, -11104; RV32I-NEXT:    vnot.v v8, v81105; RV32I-NEXT:    lui a0, 3495251106; RV32I-NEXT:    addi a0, a0, 13651107; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma1108; RV32I-NEXT:    vmv.v.x v10, a01109; RV32I-NEXT:    lui a0, 2097151110; RV32I-NEXT:    vsetvli a1, zero, e64, m1, ta, ma1111; RV32I-NEXT:    vand.vv v8, v8, v91112; RV32I-NEXT:    addi a0, a0, 8191113; RV32I-NEXT:    vsrl.vi v9, v8, 11114; RV32I-NEXT:    vand.vv v9, v9, v101115; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma1116; RV32I-NEXT:    vmv.v.x v10, a01117; RV32I-NEXT:    lui a0, 616811118; RV32I-NEXT:    addi a0, a0, -2411119; RV32I-NEXT:    vsetvli a1, zero, e64, m1, ta, ma1120; RV32I-NEXT:    vsub.vv v8, v8, v91121; RV32I-NEXT:    vand.vv v9, v8, v101122; RV32I-NEXT:    vsrl.vi v8, v8, 21123; RV32I-NEXT:    vand.vv v8, v8, v101124; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma1125; RV32I-NEXT:    vmv.v.x v10, a01126; RV32I-NEXT:    lui a0, 41121127; RV32I-NEXT:    addi a0, a0, 2571128; RV32I-NEXT:    vsetvli a1, zero, e64, m1, ta, ma1129; RV32I-NEXT:    vadd.vv v8, v9, v81130; RV32I-NEXT:    vsrl.vi v9, v8, 41131; RV32I-NEXT:    vadd.vv v8, v8, v91132; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma1133; RV32I-NEXT:    vmv.v.x v9, a01134; RV32I-NEXT:    vsetvli a0, zero, e64, m1, ta, ma1135; RV32I-NEXT:    vand.vv v8, v8, v101136; RV32I-NEXT:    vmul.vv v8, v8, v91137; RV32I-NEXT:    li a0, 561138; RV32I-NEXT:    vsrl.vx v8, v8, a01139; RV32I-NEXT:    ret1140;1141; RV64I-LABEL: cttz_nxv1i64:1142; RV64I:       # %bb.0:1143; RV64I-NEXT:    lui a0, 3495251144; RV64I-NEXT:    lui a1, 2097151145; RV64I-NEXT:    lui a2, 616811146; RV64I-NEXT:    lui a3, 41121147; RV64I-NEXT:    addi a0, a0, 13651148; RV64I-NEXT:    addi a1, a1, 8191149; RV64I-NEXT:    addi a2, a2, -2411150; RV64I-NEXT:    addi a3, a3, 2571151; RV64I-NEXT:    slli a4, a0, 321152; RV64I-NEXT:    add a0, a0, a41153; RV64I-NEXT:    slli a4, a1, 321154; RV64I-NEXT:    add a1, a1, a41155; RV64I-NEXT:    slli a4, a2, 321156; RV64I-NEXT:    add a2, a2, a41157; RV64I-NEXT:    slli a4, a3, 321158; RV64I-NEXT:    add a3, a3, a41159; RV64I-NEXT:    vsetvli a4, zero, e64, m1, ta, ma1160; RV64I-NEXT:    vadd.vi v9, v8, -11161; RV64I-NEXT:    vnot.v v8, v81162; RV64I-NEXT:    vand.vv v8, v8, v91163; RV64I-NEXT:    vsrl.vi v9, v8, 11164; RV64I-NEXT:    vand.vx v9, v9, a01165; RV64I-NEXT:    vsub.vv v8, v8, v91166; RV64I-NEXT:    vand.vx v9, v8, a11167; RV64I-NEXT:    vsrl.vi v8, v8, 21168; RV64I-NEXT:    vand.vx v8, v8, a11169; RV64I-NEXT:    vadd.vv v8, v9, v81170; RV64I-NEXT:    vsrl.vi v9, v8, 41171; RV64I-NEXT:    vadd.vv v8, v8, v91172; RV64I-NEXT:    vand.vx v8, v8, a21173; RV64I-NEXT:    vmul.vx v8, v8, a31174; RV64I-NEXT:    li a0, 561175; RV64I-NEXT:    vsrl.vx v8, v8, a01176; RV64I-NEXT:    ret1177;1178; CHECK-F-LABEL: cttz_nxv1i64:1179; CHECK-F:       # %bb.0:1180; CHECK-F-NEXT:    vsetvli a0, zero, e64, m1, ta, ma1181; CHECK-F-NEXT:    vrsub.vi v9, v8, 01182; CHECK-F-NEXT:    fsrmi a0, 11183; CHECK-F-NEXT:    li a1, 1271184; CHECK-F-NEXT:    vand.vv v9, v8, v91185; CHECK-F-NEXT:    vmseq.vi v0, v8, 01186; CHECK-F-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1187; CHECK-F-NEXT:    vfncvt.f.xu.w v8, v91188; CHECK-F-NEXT:    vsrl.vi v8, v8, 231189; CHECK-F-NEXT:    vwsubu.vx v9, v8, a11190; CHECK-F-NEXT:    li a1, 641191; CHECK-F-NEXT:    vsetvli zero, zero, e64, m1, ta, ma1192; CHECK-F-NEXT:    vmerge.vxm v8, v9, a1, v01193; CHECK-F-NEXT:    fsrm a01194; CHECK-F-NEXT:    ret1195;1196; CHECK-D-LABEL: cttz_nxv1i64:1197; CHECK-D:       # %bb.0:1198; CHECK-D-NEXT:    vsetvli a0, zero, e64, m1, ta, ma1199; CHECK-D-NEXT:    vrsub.vi v9, v8, 01200; CHECK-D-NEXT:    fsrmi a0, 11201; CHECK-D-NEXT:    li a1, 521202; CHECK-D-NEXT:    vand.vv v9, v8, v91203; CHECK-D-NEXT:    vfcvt.f.xu.v v9, v91204; CHECK-D-NEXT:    vsrl.vx v9, v9, a11205; CHECK-D-NEXT:    li a1, 10231206; CHECK-D-NEXT:    vmseq.vi v0, v8, 01207; CHECK-D-NEXT:    vsub.vx v8, v9, a11208; CHECK-D-NEXT:    li a1, 641209; CHECK-D-NEXT:    vmerge.vxm v8, v8, a1, v01210; CHECK-D-NEXT:    fsrm a01211; CHECK-D-NEXT:    ret1212;1213; CHECK-ZVBB-LABEL: cttz_nxv1i64:1214; CHECK-ZVBB:       # %bb.0:1215; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m1, ta, ma1216; CHECK-ZVBB-NEXT:    vctz.v v8, v81217; CHECK-ZVBB-NEXT:    ret1218  %a = call <vscale x 1 x i64> @llvm.cttz.nxv1i64(<vscale x 1 x i64> %va, i1 false)1219  ret <vscale x 1 x i64> %a1220}1221 1222define <vscale x 2 x i64> @cttz_nxv2i64(<vscale x 2 x i64> %va) {1223; RV32I-LABEL: cttz_nxv2i64:1224; RV32I:       # %bb.0:1225; RV32I-NEXT:    vsetvli a0, zero, e64, m2, ta, ma1226; RV32I-NEXT:    vadd.vi v10, v8, -11227; RV32I-NEXT:    vnot.v v8, v81228; RV32I-NEXT:    lui a0, 3495251229; RV32I-NEXT:    addi a0, a0, 13651230; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma1231; RV32I-NEXT:    vmv.v.x v12, a01232; RV32I-NEXT:    lui a0, 2097151233; RV32I-NEXT:    vsetvli a1, zero, e64, m2, ta, ma1234; RV32I-NEXT:    vand.vv v8, v8, v101235; RV32I-NEXT:    addi a0, a0, 8191236; RV32I-NEXT:    vsrl.vi v10, v8, 11237; RV32I-NEXT:    vand.vv v10, v10, v121238; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma1239; RV32I-NEXT:    vmv.v.x v12, a01240; RV32I-NEXT:    lui a0, 616811241; RV32I-NEXT:    addi a0, a0, -2411242; RV32I-NEXT:    vsetvli a1, zero, e64, m2, ta, ma1243; RV32I-NEXT:    vsub.vv v8, v8, v101244; RV32I-NEXT:    vand.vv v10, v8, v121245; RV32I-NEXT:    vsrl.vi v8, v8, 21246; RV32I-NEXT:    vand.vv v8, v8, v121247; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma1248; RV32I-NEXT:    vmv.v.x v12, a01249; RV32I-NEXT:    lui a0, 41121250; RV32I-NEXT:    addi a0, a0, 2571251; RV32I-NEXT:    vsetvli a1, zero, e64, m2, ta, ma1252; RV32I-NEXT:    vadd.vv v8, v10, v81253; RV32I-NEXT:    vsrl.vi v10, v8, 41254; RV32I-NEXT:    vadd.vv v8, v8, v101255; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma1256; RV32I-NEXT:    vmv.v.x v10, a01257; RV32I-NEXT:    vsetvli a0, zero, e64, m2, ta, ma1258; RV32I-NEXT:    vand.vv v8, v8, v121259; RV32I-NEXT:    vmul.vv v8, v8, v101260; RV32I-NEXT:    li a0, 561261; RV32I-NEXT:    vsrl.vx v8, v8, a01262; RV32I-NEXT:    ret1263;1264; RV64I-LABEL: cttz_nxv2i64:1265; RV64I:       # %bb.0:1266; RV64I-NEXT:    lui a0, 3495251267; RV64I-NEXT:    lui a1, 2097151268; RV64I-NEXT:    lui a2, 616811269; RV64I-NEXT:    lui a3, 41121270; RV64I-NEXT:    addi a0, a0, 13651271; RV64I-NEXT:    addi a1, a1, 8191272; RV64I-NEXT:    addi a2, a2, -2411273; RV64I-NEXT:    addi a3, a3, 2571274; RV64I-NEXT:    slli a4, a0, 321275; RV64I-NEXT:    add a0, a0, a41276; RV64I-NEXT:    slli a4, a1, 321277; RV64I-NEXT:    add a1, a1, a41278; RV64I-NEXT:    slli a4, a2, 321279; RV64I-NEXT:    add a2, a2, a41280; RV64I-NEXT:    slli a4, a3, 321281; RV64I-NEXT:    add a3, a3, a41282; RV64I-NEXT:    vsetvli a4, zero, e64, m2, ta, ma1283; RV64I-NEXT:    vadd.vi v10, v8, -11284; RV64I-NEXT:    vnot.v v8, v81285; RV64I-NEXT:    vand.vv v8, v8, v101286; RV64I-NEXT:    vsrl.vi v10, v8, 11287; RV64I-NEXT:    vand.vx v10, v10, a01288; RV64I-NEXT:    vsub.vv v8, v8, v101289; RV64I-NEXT:    vand.vx v10, v8, a11290; RV64I-NEXT:    vsrl.vi v8, v8, 21291; RV64I-NEXT:    vand.vx v8, v8, a11292; RV64I-NEXT:    vadd.vv v8, v10, v81293; RV64I-NEXT:    vsrl.vi v10, v8, 41294; RV64I-NEXT:    vadd.vv v8, v8, v101295; RV64I-NEXT:    vand.vx v8, v8, a21296; RV64I-NEXT:    vmul.vx v8, v8, a31297; RV64I-NEXT:    li a0, 561298; RV64I-NEXT:    vsrl.vx v8, v8, a01299; RV64I-NEXT:    ret1300;1301; CHECK-F-LABEL: cttz_nxv2i64:1302; CHECK-F:       # %bb.0:1303; CHECK-F-NEXT:    vsetvli a0, zero, e64, m2, ta, ma1304; CHECK-F-NEXT:    vrsub.vi v10, v8, 01305; CHECK-F-NEXT:    fsrmi a0, 11306; CHECK-F-NEXT:    li a1, 1271307; CHECK-F-NEXT:    vand.vv v10, v8, v101308; CHECK-F-NEXT:    vmseq.vi v0, v8, 01309; CHECK-F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma1310; CHECK-F-NEXT:    vfncvt.f.xu.w v8, v101311; CHECK-F-NEXT:    vsrl.vi v10, v8, 231312; CHECK-F-NEXT:    vwsubu.vx v8, v10, a11313; CHECK-F-NEXT:    li a1, 641314; CHECK-F-NEXT:    vsetvli zero, zero, e64, m2, ta, ma1315; CHECK-F-NEXT:    vmerge.vxm v8, v8, a1, v01316; CHECK-F-NEXT:    fsrm a01317; CHECK-F-NEXT:    ret1318;1319; CHECK-D-LABEL: cttz_nxv2i64:1320; CHECK-D:       # %bb.0:1321; CHECK-D-NEXT:    vsetvli a0, zero, e64, m2, ta, ma1322; CHECK-D-NEXT:    vrsub.vi v10, v8, 01323; CHECK-D-NEXT:    fsrmi a0, 11324; CHECK-D-NEXT:    li a1, 521325; CHECK-D-NEXT:    vand.vv v10, v8, v101326; CHECK-D-NEXT:    vfcvt.f.xu.v v10, v101327; CHECK-D-NEXT:    vsrl.vx v10, v10, a11328; CHECK-D-NEXT:    li a1, 10231329; CHECK-D-NEXT:    vmseq.vi v0, v8, 01330; CHECK-D-NEXT:    vsub.vx v8, v10, a11331; CHECK-D-NEXT:    li a1, 641332; CHECK-D-NEXT:    vmerge.vxm v8, v8, a1, v01333; CHECK-D-NEXT:    fsrm a01334; CHECK-D-NEXT:    ret1335;1336; CHECK-ZVBB-LABEL: cttz_nxv2i64:1337; CHECK-ZVBB:       # %bb.0:1338; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m2, ta, ma1339; CHECK-ZVBB-NEXT:    vctz.v v8, v81340; CHECK-ZVBB-NEXT:    ret1341  %a = call <vscale x 2 x i64> @llvm.cttz.nxv2i64(<vscale x 2 x i64> %va, i1 false)1342  ret <vscale x 2 x i64> %a1343}1344 1345define <vscale x 4 x i64> @cttz_nxv4i64(<vscale x 4 x i64> %va) {1346; RV32I-LABEL: cttz_nxv4i64:1347; RV32I:       # %bb.0:1348; RV32I-NEXT:    vsetvli a0, zero, e64, m4, ta, ma1349; RV32I-NEXT:    vadd.vi v12, v8, -11350; RV32I-NEXT:    vnot.v v8, v81351; RV32I-NEXT:    lui a0, 3495251352; RV32I-NEXT:    addi a0, a0, 13651353; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma1354; RV32I-NEXT:    vmv.v.x v16, a01355; RV32I-NEXT:    lui a0, 2097151356; RV32I-NEXT:    vsetvli a1, zero, e64, m4, ta, ma1357; RV32I-NEXT:    vand.vv v8, v8, v121358; RV32I-NEXT:    addi a0, a0, 8191359; RV32I-NEXT:    vsrl.vi v12, v8, 11360; RV32I-NEXT:    vand.vv v12, v12, v161361; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma1362; RV32I-NEXT:    vmv.v.x v16, a01363; RV32I-NEXT:    lui a0, 616811364; RV32I-NEXT:    addi a0, a0, -2411365; RV32I-NEXT:    vsetvli a1, zero, e64, m4, ta, ma1366; RV32I-NEXT:    vsub.vv v8, v8, v121367; RV32I-NEXT:    vand.vv v12, v8, v161368; RV32I-NEXT:    vsrl.vi v8, v8, 21369; RV32I-NEXT:    vand.vv v8, v8, v161370; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma1371; RV32I-NEXT:    vmv.v.x v16, a01372; RV32I-NEXT:    lui a0, 41121373; RV32I-NEXT:    addi a0, a0, 2571374; RV32I-NEXT:    vsetvli a1, zero, e64, m4, ta, ma1375; RV32I-NEXT:    vadd.vv v8, v12, v81376; RV32I-NEXT:    vsrl.vi v12, v8, 41377; RV32I-NEXT:    vadd.vv v8, v8, v121378; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma1379; RV32I-NEXT:    vmv.v.x v12, a01380; RV32I-NEXT:    vsetvli a0, zero, e64, m4, ta, ma1381; RV32I-NEXT:    vand.vv v8, v8, v161382; RV32I-NEXT:    vmul.vv v8, v8, v121383; RV32I-NEXT:    li a0, 561384; RV32I-NEXT:    vsrl.vx v8, v8, a01385; RV32I-NEXT:    ret1386;1387; RV64I-LABEL: cttz_nxv4i64:1388; RV64I:       # %bb.0:1389; RV64I-NEXT:    lui a0, 3495251390; RV64I-NEXT:    lui a1, 2097151391; RV64I-NEXT:    lui a2, 616811392; RV64I-NEXT:    lui a3, 41121393; RV64I-NEXT:    addi a0, a0, 13651394; RV64I-NEXT:    addi a1, a1, 8191395; RV64I-NEXT:    addi a2, a2, -2411396; RV64I-NEXT:    addi a3, a3, 2571397; RV64I-NEXT:    slli a4, a0, 321398; RV64I-NEXT:    add a0, a0, a41399; RV64I-NEXT:    slli a4, a1, 321400; RV64I-NEXT:    add a1, a1, a41401; RV64I-NEXT:    slli a4, a2, 321402; RV64I-NEXT:    add a2, a2, a41403; RV64I-NEXT:    slli a4, a3, 321404; RV64I-NEXT:    add a3, a3, a41405; RV64I-NEXT:    vsetvli a4, zero, e64, m4, ta, ma1406; RV64I-NEXT:    vadd.vi v12, v8, -11407; RV64I-NEXT:    vnot.v v8, v81408; RV64I-NEXT:    vand.vv v8, v8, v121409; RV64I-NEXT:    vsrl.vi v12, v8, 11410; RV64I-NEXT:    vand.vx v12, v12, a01411; RV64I-NEXT:    vsub.vv v8, v8, v121412; RV64I-NEXT:    vand.vx v12, v8, a11413; RV64I-NEXT:    vsrl.vi v8, v8, 21414; RV64I-NEXT:    vand.vx v8, v8, a11415; RV64I-NEXT:    vadd.vv v8, v12, v81416; RV64I-NEXT:    vsrl.vi v12, v8, 41417; RV64I-NEXT:    vadd.vv v8, v8, v121418; RV64I-NEXT:    vand.vx v8, v8, a21419; RV64I-NEXT:    vmul.vx v8, v8, a31420; RV64I-NEXT:    li a0, 561421; RV64I-NEXT:    vsrl.vx v8, v8, a01422; RV64I-NEXT:    ret1423;1424; CHECK-F-LABEL: cttz_nxv4i64:1425; CHECK-F:       # %bb.0:1426; CHECK-F-NEXT:    vsetvli a0, zero, e64, m4, ta, ma1427; CHECK-F-NEXT:    vrsub.vi v12, v8, 01428; CHECK-F-NEXT:    fsrmi a0, 11429; CHECK-F-NEXT:    li a1, 1271430; CHECK-F-NEXT:    vand.vv v12, v8, v121431; CHECK-F-NEXT:    vmseq.vi v0, v8, 01432; CHECK-F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma1433; CHECK-F-NEXT:    vfncvt.f.xu.w v8, v121434; CHECK-F-NEXT:    vsrl.vi v12, v8, 231435; CHECK-F-NEXT:    vwsubu.vx v8, v12, a11436; CHECK-F-NEXT:    li a1, 641437; CHECK-F-NEXT:    vsetvli zero, zero, e64, m4, ta, ma1438; CHECK-F-NEXT:    vmerge.vxm v8, v8, a1, v01439; CHECK-F-NEXT:    fsrm a01440; CHECK-F-NEXT:    ret1441;1442; CHECK-D-LABEL: cttz_nxv4i64:1443; CHECK-D:       # %bb.0:1444; CHECK-D-NEXT:    vsetvli a0, zero, e64, m4, ta, ma1445; CHECK-D-NEXT:    vrsub.vi v12, v8, 01446; CHECK-D-NEXT:    fsrmi a0, 11447; CHECK-D-NEXT:    li a1, 521448; CHECK-D-NEXT:    vand.vv v12, v8, v121449; CHECK-D-NEXT:    vfcvt.f.xu.v v12, v121450; CHECK-D-NEXT:    vsrl.vx v12, v12, a11451; CHECK-D-NEXT:    li a1, 10231452; CHECK-D-NEXT:    vmseq.vi v0, v8, 01453; CHECK-D-NEXT:    vsub.vx v8, v12, a11454; CHECK-D-NEXT:    li a1, 641455; CHECK-D-NEXT:    vmerge.vxm v8, v8, a1, v01456; CHECK-D-NEXT:    fsrm a01457; CHECK-D-NEXT:    ret1458;1459; CHECK-ZVBB-LABEL: cttz_nxv4i64:1460; CHECK-ZVBB:       # %bb.0:1461; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m4, ta, ma1462; CHECK-ZVBB-NEXT:    vctz.v v8, v81463; CHECK-ZVBB-NEXT:    ret1464  %a = call <vscale x 4 x i64> @llvm.cttz.nxv4i64(<vscale x 4 x i64> %va, i1 false)1465  ret <vscale x 4 x i64> %a1466}1467 1468define <vscale x 8 x i64> @cttz_nxv8i64(<vscale x 8 x i64> %va) {1469; RV32I-LABEL: cttz_nxv8i64:1470; RV32I:       # %bb.0:1471; RV32I-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1472; RV32I-NEXT:    vadd.vi v16, v8, -11473; RV32I-NEXT:    vnot.v v8, v81474; RV32I-NEXT:    lui a0, 3495251475; RV32I-NEXT:    addi a0, a0, 13651476; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma1477; RV32I-NEXT:    vmv.v.x v24, a01478; RV32I-NEXT:    lui a0, 2097151479; RV32I-NEXT:    vsetvli a1, zero, e64, m8, ta, ma1480; RV32I-NEXT:    vand.vv v8, v8, v161481; RV32I-NEXT:    addi a0, a0, 8191482; RV32I-NEXT:    vsrl.vi v16, v8, 11483; RV32I-NEXT:    vand.vv v24, v16, v241484; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma1485; RV32I-NEXT:    vmv.v.x v16, a01486; RV32I-NEXT:    lui a0, 616811487; RV32I-NEXT:    addi a0, a0, -2411488; RV32I-NEXT:    vsetvli a1, zero, e64, m8, ta, ma1489; RV32I-NEXT:    vsub.vv v8, v8, v241490; RV32I-NEXT:    vand.vv v24, v8, v161491; RV32I-NEXT:    vsrl.vi v8, v8, 21492; RV32I-NEXT:    vand.vv v8, v8, v161493; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma1494; RV32I-NEXT:    vmv.v.x v16, a01495; RV32I-NEXT:    lui a0, 41121496; RV32I-NEXT:    addi a0, a0, 2571497; RV32I-NEXT:    vsetvli a1, zero, e64, m8, ta, ma1498; RV32I-NEXT:    vadd.vv v8, v24, v81499; RV32I-NEXT:    vsrl.vi v24, v8, 41500; RV32I-NEXT:    vadd.vv v8, v8, v241501; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma1502; RV32I-NEXT:    vmv.v.x v24, a01503; RV32I-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1504; RV32I-NEXT:    vand.vv v8, v8, v161505; RV32I-NEXT:    vmul.vv v8, v8, v241506; RV32I-NEXT:    li a0, 561507; RV32I-NEXT:    vsrl.vx v8, v8, a01508; RV32I-NEXT:    ret1509;1510; RV64I-LABEL: cttz_nxv8i64:1511; RV64I:       # %bb.0:1512; RV64I-NEXT:    lui a0, 3495251513; RV64I-NEXT:    lui a1, 2097151514; RV64I-NEXT:    lui a2, 616811515; RV64I-NEXT:    lui a3, 41121516; RV64I-NEXT:    addi a0, a0, 13651517; RV64I-NEXT:    addi a1, a1, 8191518; RV64I-NEXT:    addi a2, a2, -2411519; RV64I-NEXT:    addi a3, a3, 2571520; RV64I-NEXT:    slli a4, a0, 321521; RV64I-NEXT:    add a0, a0, a41522; RV64I-NEXT:    slli a4, a1, 321523; RV64I-NEXT:    add a1, a1, a41524; RV64I-NEXT:    slli a4, a2, 321525; RV64I-NEXT:    add a2, a2, a41526; RV64I-NEXT:    slli a4, a3, 321527; RV64I-NEXT:    add a3, a3, a41528; RV64I-NEXT:    vsetvli a4, zero, e64, m8, ta, ma1529; RV64I-NEXT:    vadd.vi v16, v8, -11530; RV64I-NEXT:    vnot.v v8, v81531; RV64I-NEXT:    vand.vv v8, v8, v161532; RV64I-NEXT:    vsrl.vi v16, v8, 11533; RV64I-NEXT:    vand.vx v16, v16, a01534; RV64I-NEXT:    vsub.vv v8, v8, v161535; RV64I-NEXT:    vand.vx v16, v8, a11536; RV64I-NEXT:    vsrl.vi v8, v8, 21537; RV64I-NEXT:    vand.vx v8, v8, a11538; RV64I-NEXT:    vadd.vv v8, v16, v81539; RV64I-NEXT:    vsrl.vi v16, v8, 41540; RV64I-NEXT:    vadd.vv v8, v8, v161541; RV64I-NEXT:    vand.vx v8, v8, a21542; RV64I-NEXT:    vmul.vx v8, v8, a31543; RV64I-NEXT:    li a0, 561544; RV64I-NEXT:    vsrl.vx v8, v8, a01545; RV64I-NEXT:    ret1546;1547; CHECK-F-LABEL: cttz_nxv8i64:1548; CHECK-F:       # %bb.0:1549; CHECK-F-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1550; CHECK-F-NEXT:    vrsub.vi v16, v8, 01551; CHECK-F-NEXT:    fsrmi a0, 11552; CHECK-F-NEXT:    li a1, 1271553; CHECK-F-NEXT:    vand.vv v16, v8, v161554; CHECK-F-NEXT:    vmseq.vi v0, v8, 01555; CHECK-F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma1556; CHECK-F-NEXT:    vfncvt.f.xu.w v8, v161557; CHECK-F-NEXT:    vsrl.vi v16, v8, 231558; CHECK-F-NEXT:    vwsubu.vx v8, v16, a11559; CHECK-F-NEXT:    li a1, 641560; CHECK-F-NEXT:    vsetvli zero, zero, e64, m8, ta, ma1561; CHECK-F-NEXT:    vmerge.vxm v8, v8, a1, v01562; CHECK-F-NEXT:    fsrm a01563; CHECK-F-NEXT:    ret1564;1565; CHECK-D-LABEL: cttz_nxv8i64:1566; CHECK-D:       # %bb.0:1567; CHECK-D-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1568; CHECK-D-NEXT:    vrsub.vi v16, v8, 01569; CHECK-D-NEXT:    fsrmi a0, 11570; CHECK-D-NEXT:    li a1, 521571; CHECK-D-NEXT:    vand.vv v16, v8, v161572; CHECK-D-NEXT:    vfcvt.f.xu.v v16, v161573; CHECK-D-NEXT:    vsrl.vx v16, v16, a11574; CHECK-D-NEXT:    li a1, 10231575; CHECK-D-NEXT:    vmseq.vi v0, v8, 01576; CHECK-D-NEXT:    vsub.vx v8, v16, a11577; CHECK-D-NEXT:    li a1, 641578; CHECK-D-NEXT:    vmerge.vxm v8, v8, a1, v01579; CHECK-D-NEXT:    fsrm a01580; CHECK-D-NEXT:    ret1581;1582; CHECK-ZVBB-LABEL: cttz_nxv8i64:1583; CHECK-ZVBB:       # %bb.0:1584; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1585; CHECK-ZVBB-NEXT:    vctz.v v8, v81586; CHECK-ZVBB-NEXT:    ret1587  %a = call <vscale x 8 x i64> @llvm.cttz.nxv8i64(<vscale x 8 x i64> %va, i1 false)1588  ret <vscale x 8 x i64> %a1589}1590 1591define <vscale x 1 x i8> @cttz_zero_undef_nxv1i8(<vscale x 1 x i8> %va) {1592; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv1i8:1593; CHECK-ZVE64X:       # %bb.0:1594; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma1595; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -11596; CHECK-ZVE64X-NEXT:    vnot.v v8, v81597; CHECK-ZVE64X-NEXT:    li a0, 851598; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v91599; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11600; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a01601; CHECK-ZVE64X-NEXT:    li a0, 511602; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v91603; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a01604; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21605; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01606; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v81607; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41608; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v91609; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 151610; CHECK-ZVE64X-NEXT:    ret1611;1612; CHECK-F-LABEL: cttz_zero_undef_nxv1i8:1613; CHECK-F:       # %bb.0:1614; CHECK-F-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma1615; CHECK-F-NEXT:    vrsub.vi v9, v8, 01616; CHECK-F-NEXT:    vand.vv v8, v8, v91617; CHECK-F-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma1618; CHECK-F-NEXT:    vzext.vf2 v9, v81619; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v91620; CHECK-F-NEXT:    vnsrl.wi v8, v8, 231621; CHECK-F-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma1622; CHECK-F-NEXT:    vnsrl.wi v8, v8, 01623; CHECK-F-NEXT:    li a0, 1271624; CHECK-F-NEXT:    vsub.vx v8, v8, a01625; CHECK-F-NEXT:    ret1626;1627; CHECK-D-LABEL: cttz_zero_undef_nxv1i8:1628; CHECK-D:       # %bb.0:1629; CHECK-D-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma1630; CHECK-D-NEXT:    vrsub.vi v9, v8, 01631; CHECK-D-NEXT:    vand.vv v8, v8, v91632; CHECK-D-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma1633; CHECK-D-NEXT:    vzext.vf2 v9, v81634; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v91635; CHECK-D-NEXT:    vnsrl.wi v8, v8, 231636; CHECK-D-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma1637; CHECK-D-NEXT:    vnsrl.wi v8, v8, 01638; CHECK-D-NEXT:    li a0, 1271639; CHECK-D-NEXT:    vsub.vx v8, v8, a01640; CHECK-D-NEXT:    ret1641;1642; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv1i8:1643; CHECK-ZVBB:       # %bb.0:1644; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma1645; CHECK-ZVBB-NEXT:    vctz.v v8, v81646; CHECK-ZVBB-NEXT:    ret1647  %a = call <vscale x 1 x i8> @llvm.cttz.nxv1i8(<vscale x 1 x i8> %va, i1 true)1648  ret <vscale x 1 x i8> %a1649}1650 1651define <vscale x 2 x i8> @cttz_zero_undef_nxv2i8(<vscale x 2 x i8> %va) {1652; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv2i8:1653; CHECK-ZVE64X:       # %bb.0:1654; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma1655; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -11656; CHECK-ZVE64X-NEXT:    vnot.v v8, v81657; CHECK-ZVE64X-NEXT:    li a0, 851658; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v91659; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11660; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a01661; CHECK-ZVE64X-NEXT:    li a0, 511662; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v91663; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a01664; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21665; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01666; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v81667; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41668; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v91669; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 151670; CHECK-ZVE64X-NEXT:    ret1671;1672; CHECK-F-LABEL: cttz_zero_undef_nxv2i8:1673; CHECK-F:       # %bb.0:1674; CHECK-F-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma1675; CHECK-F-NEXT:    vrsub.vi v9, v8, 01676; CHECK-F-NEXT:    vand.vv v8, v8, v91677; CHECK-F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma1678; CHECK-F-NEXT:    vzext.vf2 v9, v81679; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v91680; CHECK-F-NEXT:    vnsrl.wi v8, v8, 231681; CHECK-F-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma1682; CHECK-F-NEXT:    vnsrl.wi v8, v8, 01683; CHECK-F-NEXT:    li a0, 1271684; CHECK-F-NEXT:    vsub.vx v8, v8, a01685; CHECK-F-NEXT:    ret1686;1687; CHECK-D-LABEL: cttz_zero_undef_nxv2i8:1688; CHECK-D:       # %bb.0:1689; CHECK-D-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma1690; CHECK-D-NEXT:    vrsub.vi v9, v8, 01691; CHECK-D-NEXT:    vand.vv v8, v8, v91692; CHECK-D-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma1693; CHECK-D-NEXT:    vzext.vf2 v9, v81694; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v91695; CHECK-D-NEXT:    vnsrl.wi v8, v8, 231696; CHECK-D-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma1697; CHECK-D-NEXT:    vnsrl.wi v8, v8, 01698; CHECK-D-NEXT:    li a0, 1271699; CHECK-D-NEXT:    vsub.vx v8, v8, a01700; CHECK-D-NEXT:    ret1701;1702; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv2i8:1703; CHECK-ZVBB:       # %bb.0:1704; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma1705; CHECK-ZVBB-NEXT:    vctz.v v8, v81706; CHECK-ZVBB-NEXT:    ret1707  %a = call <vscale x 2 x i8> @llvm.cttz.nxv2i8(<vscale x 2 x i8> %va, i1 true)1708  ret <vscale x 2 x i8> %a1709}1710 1711define <vscale x 4 x i8> @cttz_zero_undef_nxv4i8(<vscale x 4 x i8> %va) {1712; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv4i8:1713; CHECK-ZVE64X:       # %bb.0:1714; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma1715; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -11716; CHECK-ZVE64X-NEXT:    vnot.v v8, v81717; CHECK-ZVE64X-NEXT:    li a0, 851718; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v91719; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11720; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a01721; CHECK-ZVE64X-NEXT:    li a0, 511722; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v91723; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a01724; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21725; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01726; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v81727; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41728; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v91729; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 151730; CHECK-ZVE64X-NEXT:    ret1731;1732; CHECK-F-LABEL: cttz_zero_undef_nxv4i8:1733; CHECK-F:       # %bb.0:1734; CHECK-F-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma1735; CHECK-F-NEXT:    vrsub.vi v9, v8, 01736; CHECK-F-NEXT:    vand.vv v8, v8, v91737; CHECK-F-NEXT:    vsetvli zero, zero, e16, m1, ta, ma1738; CHECK-F-NEXT:    vzext.vf2 v10, v81739; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v101740; CHECK-F-NEXT:    vnsrl.wi v10, v8, 231741; CHECK-F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma1742; CHECK-F-NEXT:    vnsrl.wi v8, v10, 01743; CHECK-F-NEXT:    li a0, 1271744; CHECK-F-NEXT:    vsub.vx v8, v8, a01745; CHECK-F-NEXT:    ret1746;1747; CHECK-D-LABEL: cttz_zero_undef_nxv4i8:1748; CHECK-D:       # %bb.0:1749; CHECK-D-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma1750; CHECK-D-NEXT:    vrsub.vi v9, v8, 01751; CHECK-D-NEXT:    vand.vv v8, v8, v91752; CHECK-D-NEXT:    vsetvli zero, zero, e16, m1, ta, ma1753; CHECK-D-NEXT:    vzext.vf2 v10, v81754; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v101755; CHECK-D-NEXT:    vnsrl.wi v10, v8, 231756; CHECK-D-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma1757; CHECK-D-NEXT:    vnsrl.wi v8, v10, 01758; CHECK-D-NEXT:    li a0, 1271759; CHECK-D-NEXT:    vsub.vx v8, v8, a01760; CHECK-D-NEXT:    ret1761;1762; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv4i8:1763; CHECK-ZVBB:       # %bb.0:1764; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma1765; CHECK-ZVBB-NEXT:    vctz.v v8, v81766; CHECK-ZVBB-NEXT:    ret1767  %a = call <vscale x 4 x i8> @llvm.cttz.nxv4i8(<vscale x 4 x i8> %va, i1 true)1768  ret <vscale x 4 x i8> %a1769}1770 1771define <vscale x 8 x i8> @cttz_zero_undef_nxv8i8(<vscale x 8 x i8> %va) {1772; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv8i8:1773; CHECK-ZVE64X:       # %bb.0:1774; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, m1, ta, ma1775; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -11776; CHECK-ZVE64X-NEXT:    vnot.v v8, v81777; CHECK-ZVE64X-NEXT:    li a0, 851778; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v91779; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11780; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a01781; CHECK-ZVE64X-NEXT:    li a0, 511782; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v91783; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a01784; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21785; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01786; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v81787; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41788; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v91789; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 151790; CHECK-ZVE64X-NEXT:    ret1791;1792; CHECK-F-LABEL: cttz_zero_undef_nxv8i8:1793; CHECK-F:       # %bb.0:1794; CHECK-F-NEXT:    vsetvli a0, zero, e8, m1, ta, ma1795; CHECK-F-NEXT:    vrsub.vi v9, v8, 01796; CHECK-F-NEXT:    vand.vv v8, v8, v91797; CHECK-F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1798; CHECK-F-NEXT:    vzext.vf2 v12, v81799; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v121800; CHECK-F-NEXT:    vnsrl.wi v12, v8, 231801; CHECK-F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma1802; CHECK-F-NEXT:    vnsrl.wi v8, v12, 01803; CHECK-F-NEXT:    li a0, 1271804; CHECK-F-NEXT:    vsub.vx v8, v8, a01805; CHECK-F-NEXT:    ret1806;1807; CHECK-D-LABEL: cttz_zero_undef_nxv8i8:1808; CHECK-D:       # %bb.0:1809; CHECK-D-NEXT:    vsetvli a0, zero, e8, m1, ta, ma1810; CHECK-D-NEXT:    vrsub.vi v9, v8, 01811; CHECK-D-NEXT:    vand.vv v8, v8, v91812; CHECK-D-NEXT:    vsetvli zero, zero, e16, m2, ta, ma1813; CHECK-D-NEXT:    vzext.vf2 v12, v81814; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v121815; CHECK-D-NEXT:    vnsrl.wi v12, v8, 231816; CHECK-D-NEXT:    vsetvli zero, zero, e8, m1, ta, ma1817; CHECK-D-NEXT:    vnsrl.wi v8, v12, 01818; CHECK-D-NEXT:    li a0, 1271819; CHECK-D-NEXT:    vsub.vx v8, v8, a01820; CHECK-D-NEXT:    ret1821;1822; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv8i8:1823; CHECK-ZVBB:       # %bb.0:1824; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m1, ta, ma1825; CHECK-ZVBB-NEXT:    vctz.v v8, v81826; CHECK-ZVBB-NEXT:    ret1827  %a = call <vscale x 8 x i8> @llvm.cttz.nxv8i8(<vscale x 8 x i8> %va, i1 true)1828  ret <vscale x 8 x i8> %a1829}1830 1831define <vscale x 16 x i8> @cttz_zero_undef_nxv16i8(<vscale x 16 x i8> %va) {1832; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv16i8:1833; CHECK-ZVE64X:       # %bb.0:1834; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e8, m2, ta, ma1835; CHECK-ZVE64X-NEXT:    vadd.vi v10, v8, -11836; CHECK-ZVE64X-NEXT:    vnot.v v8, v81837; CHECK-ZVE64X-NEXT:    li a0, 851838; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v101839; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 11840; CHECK-ZVE64X-NEXT:    vand.vx v10, v10, a01841; CHECK-ZVE64X-NEXT:    li a0, 511842; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v101843; CHECK-ZVE64X-NEXT:    vand.vx v10, v8, a01844; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21845; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01846; CHECK-ZVE64X-NEXT:    vadd.vv v8, v10, v81847; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 41848; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v101849; CHECK-ZVE64X-NEXT:    vand.vi v8, v8, 151850; CHECK-ZVE64X-NEXT:    ret1851;1852; CHECK-F-LABEL: cttz_zero_undef_nxv16i8:1853; CHECK-F:       # %bb.0:1854; CHECK-F-NEXT:    vsetvli a0, zero, e8, m2, ta, ma1855; CHECK-F-NEXT:    vrsub.vi v10, v8, 01856; CHECK-F-NEXT:    vand.vv v8, v8, v101857; CHECK-F-NEXT:    vsetvli zero, zero, e16, m4, ta, ma1858; CHECK-F-NEXT:    vzext.vf2 v16, v81859; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v161860; CHECK-F-NEXT:    vnsrl.wi v16, v8, 231861; CHECK-F-NEXT:    vsetvli zero, zero, e8, m2, ta, ma1862; CHECK-F-NEXT:    vnsrl.wi v8, v16, 01863; CHECK-F-NEXT:    li a0, 1271864; CHECK-F-NEXT:    vsub.vx v8, v8, a01865; CHECK-F-NEXT:    ret1866;1867; CHECK-D-LABEL: cttz_zero_undef_nxv16i8:1868; CHECK-D:       # %bb.0:1869; CHECK-D-NEXT:    vsetvli a0, zero, e8, m2, ta, ma1870; CHECK-D-NEXT:    vrsub.vi v10, v8, 01871; CHECK-D-NEXT:    vand.vv v8, v8, v101872; CHECK-D-NEXT:    vsetvli zero, zero, e16, m4, ta, ma1873; CHECK-D-NEXT:    vzext.vf2 v16, v81874; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v161875; CHECK-D-NEXT:    vnsrl.wi v16, v8, 231876; CHECK-D-NEXT:    vsetvli zero, zero, e8, m2, ta, ma1877; CHECK-D-NEXT:    vnsrl.wi v8, v16, 01878; CHECK-D-NEXT:    li a0, 1271879; CHECK-D-NEXT:    vsub.vx v8, v8, a01880; CHECK-D-NEXT:    ret1881;1882; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv16i8:1883; CHECK-ZVBB:       # %bb.0:1884; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m2, ta, ma1885; CHECK-ZVBB-NEXT:    vctz.v v8, v81886; CHECK-ZVBB-NEXT:    ret1887  %a = call <vscale x 16 x i8> @llvm.cttz.nxv16i8(<vscale x 16 x i8> %va, i1 true)1888  ret <vscale x 16 x i8> %a1889}1890 1891define <vscale x 32 x i8> @cttz_zero_undef_nxv32i8(<vscale x 32 x i8> %va) {1892; CHECK-LABEL: cttz_zero_undef_nxv32i8:1893; CHECK:       # %bb.0:1894; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma1895; CHECK-NEXT:    vadd.vi v12, v8, -11896; CHECK-NEXT:    vnot.v v8, v81897; CHECK-NEXT:    li a0, 851898; CHECK-NEXT:    vand.vv v8, v8, v121899; CHECK-NEXT:    vsrl.vi v12, v8, 11900; CHECK-NEXT:    vand.vx v12, v12, a01901; CHECK-NEXT:    li a0, 511902; CHECK-NEXT:    vsub.vv v8, v8, v121903; CHECK-NEXT:    vand.vx v12, v8, a01904; CHECK-NEXT:    vsrl.vi v8, v8, 21905; CHECK-NEXT:    vand.vx v8, v8, a01906; CHECK-NEXT:    vadd.vv v8, v12, v81907; CHECK-NEXT:    vsrl.vi v12, v8, 41908; CHECK-NEXT:    vadd.vv v8, v8, v121909; CHECK-NEXT:    vand.vi v8, v8, 151910; CHECK-NEXT:    ret1911;1912; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv32i8:1913; CHECK-ZVBB:       # %bb.0:1914; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m4, ta, ma1915; CHECK-ZVBB-NEXT:    vctz.v v8, v81916; CHECK-ZVBB-NEXT:    ret1917  %a = call <vscale x 32 x i8> @llvm.cttz.nxv32i8(<vscale x 32 x i8> %va, i1 true)1918  ret <vscale x 32 x i8> %a1919}1920 1921define <vscale x 64 x i8> @cttz_zero_undef_nxv64i8(<vscale x 64 x i8> %va) {1922; CHECK-LABEL: cttz_zero_undef_nxv64i8:1923; CHECK:       # %bb.0:1924; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma1925; CHECK-NEXT:    vadd.vi v16, v8, -11926; CHECK-NEXT:    vnot.v v8, v81927; CHECK-NEXT:    li a0, 851928; CHECK-NEXT:    vand.vv v8, v8, v161929; CHECK-NEXT:    vsrl.vi v16, v8, 11930; CHECK-NEXT:    vand.vx v16, v16, a01931; CHECK-NEXT:    li a0, 511932; CHECK-NEXT:    vsub.vv v8, v8, v161933; CHECK-NEXT:    vand.vx v16, v8, a01934; CHECK-NEXT:    vsrl.vi v8, v8, 21935; CHECK-NEXT:    vand.vx v8, v8, a01936; CHECK-NEXT:    vadd.vv v8, v16, v81937; CHECK-NEXT:    vsrl.vi v16, v8, 41938; CHECK-NEXT:    vadd.vv v8, v8, v161939; CHECK-NEXT:    vand.vi v8, v8, 151940; CHECK-NEXT:    ret1941;1942; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv64i8:1943; CHECK-ZVBB:       # %bb.0:1944; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e8, m8, ta, ma1945; CHECK-ZVBB-NEXT:    vctz.v v8, v81946; CHECK-ZVBB-NEXT:    ret1947  %a = call <vscale x 64 x i8> @llvm.cttz.nxv64i8(<vscale x 64 x i8> %va, i1 true)1948  ret <vscale x 64 x i8> %a1949}1950 1951define <vscale x 1 x i16> @cttz_zero_undef_nxv1i16(<vscale x 1 x i16> %va) {1952; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv1i16:1953; CHECK-ZVE64X:       # %bb.0:1954; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma1955; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -11956; CHECK-ZVE64X-NEXT:    vnot.v v8, v81957; CHECK-ZVE64X-NEXT:    lui a0, 51958; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v91959; CHECK-ZVE64X-NEXT:    addi a0, a0, 13651960; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 11961; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a01962; CHECK-ZVE64X-NEXT:    lui a0, 31963; CHECK-ZVE64X-NEXT:    addi a0, a0, 8191964; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v91965; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a01966; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 21967; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01968; CHECK-ZVE64X-NEXT:    lui a0, 11969; CHECK-ZVE64X-NEXT:    addi a0, a0, -2411970; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v81971; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 41972; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v91973; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a01974; CHECK-ZVE64X-NEXT:    li a0, 2571975; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a01976; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 81977; CHECK-ZVE64X-NEXT:    ret1978;1979; CHECK-F-LABEL: cttz_zero_undef_nxv1i16:1980; CHECK-F:       # %bb.0:1981; CHECK-F-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma1982; CHECK-F-NEXT:    vrsub.vi v9, v8, 01983; CHECK-F-NEXT:    vand.vv v8, v8, v91984; CHECK-F-NEXT:    vfwcvt.f.xu.v v9, v81985; CHECK-F-NEXT:    vnsrl.wi v8, v9, 231986; CHECK-F-NEXT:    li a0, 1271987; CHECK-F-NEXT:    vsub.vx v8, v8, a01988; CHECK-F-NEXT:    ret1989;1990; CHECK-D-LABEL: cttz_zero_undef_nxv1i16:1991; CHECK-D:       # %bb.0:1992; CHECK-D-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma1993; CHECK-D-NEXT:    vrsub.vi v9, v8, 01994; CHECK-D-NEXT:    vand.vv v8, v8, v91995; CHECK-D-NEXT:    vfwcvt.f.xu.v v9, v81996; CHECK-D-NEXT:    vnsrl.wi v8, v9, 231997; CHECK-D-NEXT:    li a0, 1271998; CHECK-D-NEXT:    vsub.vx v8, v8, a01999; CHECK-D-NEXT:    ret2000;2001; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv1i16:2002; CHECK-ZVBB:       # %bb.0:2003; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma2004; CHECK-ZVBB-NEXT:    vctz.v v8, v82005; CHECK-ZVBB-NEXT:    ret2006  %a = call <vscale x 1 x i16> @llvm.cttz.nxv1i16(<vscale x 1 x i16> %va, i1 true)2007  ret <vscale x 1 x i16> %a2008}2009 2010define <vscale x 2 x i16> @cttz_zero_undef_nxv2i16(<vscale x 2 x i16> %va) {2011; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv2i16:2012; CHECK-ZVE64X:       # %bb.0:2013; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma2014; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -12015; CHECK-ZVE64X-NEXT:    vnot.v v8, v82016; CHECK-ZVE64X-NEXT:    lui a0, 52017; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v92018; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652019; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12020; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a02021; CHECK-ZVE64X-NEXT:    lui a0, 32022; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192023; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v92024; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a02025; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22026; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02027; CHECK-ZVE64X-NEXT:    lui a0, 12028; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412029; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v82030; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42031; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v92032; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02033; CHECK-ZVE64X-NEXT:    li a0, 2572034; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02035; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 82036; CHECK-ZVE64X-NEXT:    ret2037;2038; CHECK-F-LABEL: cttz_zero_undef_nxv2i16:2039; CHECK-F:       # %bb.0:2040; CHECK-F-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma2041; CHECK-F-NEXT:    vrsub.vi v9, v8, 02042; CHECK-F-NEXT:    vand.vv v8, v8, v92043; CHECK-F-NEXT:    vfwcvt.f.xu.v v9, v82044; CHECK-F-NEXT:    vnsrl.wi v8, v9, 232045; CHECK-F-NEXT:    li a0, 1272046; CHECK-F-NEXT:    vsub.vx v8, v8, a02047; CHECK-F-NEXT:    ret2048;2049; CHECK-D-LABEL: cttz_zero_undef_nxv2i16:2050; CHECK-D:       # %bb.0:2051; CHECK-D-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma2052; CHECK-D-NEXT:    vrsub.vi v9, v8, 02053; CHECK-D-NEXT:    vand.vv v8, v8, v92054; CHECK-D-NEXT:    vfwcvt.f.xu.v v9, v82055; CHECK-D-NEXT:    vnsrl.wi v8, v9, 232056; CHECK-D-NEXT:    li a0, 1272057; CHECK-D-NEXT:    vsub.vx v8, v8, a02058; CHECK-D-NEXT:    ret2059;2060; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv2i16:2061; CHECK-ZVBB:       # %bb.0:2062; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma2063; CHECK-ZVBB-NEXT:    vctz.v v8, v82064; CHECK-ZVBB-NEXT:    ret2065  %a = call <vscale x 2 x i16> @llvm.cttz.nxv2i16(<vscale x 2 x i16> %va, i1 true)2066  ret <vscale x 2 x i16> %a2067}2068 2069define <vscale x 4 x i16> @cttz_zero_undef_nxv4i16(<vscale x 4 x i16> %va) {2070; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv4i16:2071; CHECK-ZVE64X:       # %bb.0:2072; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, m1, ta, ma2073; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -12074; CHECK-ZVE64X-NEXT:    vnot.v v8, v82075; CHECK-ZVE64X-NEXT:    lui a0, 52076; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v92077; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652078; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12079; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a02080; CHECK-ZVE64X-NEXT:    lui a0, 32081; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192082; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v92083; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a02084; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22085; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02086; CHECK-ZVE64X-NEXT:    lui a0, 12087; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412088; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v82089; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42090; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v92091; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02092; CHECK-ZVE64X-NEXT:    li a0, 2572093; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02094; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 82095; CHECK-ZVE64X-NEXT:    ret2096;2097; CHECK-F-LABEL: cttz_zero_undef_nxv4i16:2098; CHECK-F:       # %bb.0:2099; CHECK-F-NEXT:    vsetvli a0, zero, e16, m1, ta, ma2100; CHECK-F-NEXT:    vrsub.vi v9, v8, 02101; CHECK-F-NEXT:    vand.vv v10, v8, v92102; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v102103; CHECK-F-NEXT:    vnsrl.wi v10, v8, 232104; CHECK-F-NEXT:    li a0, 1272105; CHECK-F-NEXT:    vsub.vx v8, v10, a02106; CHECK-F-NEXT:    ret2107;2108; CHECK-D-LABEL: cttz_zero_undef_nxv4i16:2109; CHECK-D:       # %bb.0:2110; CHECK-D-NEXT:    vsetvli a0, zero, e16, m1, ta, ma2111; CHECK-D-NEXT:    vrsub.vi v9, v8, 02112; CHECK-D-NEXT:    vand.vv v10, v8, v92113; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v102114; CHECK-D-NEXT:    vnsrl.wi v10, v8, 232115; CHECK-D-NEXT:    li a0, 1272116; CHECK-D-NEXT:    vsub.vx v8, v10, a02117; CHECK-D-NEXT:    ret2118;2119; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv4i16:2120; CHECK-ZVBB:       # %bb.0:2121; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma2122; CHECK-ZVBB-NEXT:    vctz.v v8, v82123; CHECK-ZVBB-NEXT:    ret2124  %a = call <vscale x 4 x i16> @llvm.cttz.nxv4i16(<vscale x 4 x i16> %va, i1 true)2125  ret <vscale x 4 x i16> %a2126}2127 2128define <vscale x 8 x i16> @cttz_zero_undef_nxv8i16(<vscale x 8 x i16> %va) {2129; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv8i16:2130; CHECK-ZVE64X:       # %bb.0:2131; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, m2, ta, ma2132; CHECK-ZVE64X-NEXT:    vadd.vi v10, v8, -12133; CHECK-ZVE64X-NEXT:    vnot.v v8, v82134; CHECK-ZVE64X-NEXT:    lui a0, 52135; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v102136; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652137; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 12138; CHECK-ZVE64X-NEXT:    vand.vx v10, v10, a02139; CHECK-ZVE64X-NEXT:    lui a0, 32140; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192141; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v102142; CHECK-ZVE64X-NEXT:    vand.vx v10, v8, a02143; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22144; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02145; CHECK-ZVE64X-NEXT:    lui a0, 12146; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412147; CHECK-ZVE64X-NEXT:    vadd.vv v8, v10, v82148; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 42149; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v102150; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02151; CHECK-ZVE64X-NEXT:    li a0, 2572152; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02153; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 82154; CHECK-ZVE64X-NEXT:    ret2155;2156; CHECK-F-LABEL: cttz_zero_undef_nxv8i16:2157; CHECK-F:       # %bb.0:2158; CHECK-F-NEXT:    vsetvli a0, zero, e16, m2, ta, ma2159; CHECK-F-NEXT:    vrsub.vi v10, v8, 02160; CHECK-F-NEXT:    vand.vv v12, v8, v102161; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v122162; CHECK-F-NEXT:    vnsrl.wi v12, v8, 232163; CHECK-F-NEXT:    li a0, 1272164; CHECK-F-NEXT:    vsub.vx v8, v12, a02165; CHECK-F-NEXT:    ret2166;2167; CHECK-D-LABEL: cttz_zero_undef_nxv8i16:2168; CHECK-D:       # %bb.0:2169; CHECK-D-NEXT:    vsetvli a0, zero, e16, m2, ta, ma2170; CHECK-D-NEXT:    vrsub.vi v10, v8, 02171; CHECK-D-NEXT:    vand.vv v12, v8, v102172; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v122173; CHECK-D-NEXT:    vnsrl.wi v12, v8, 232174; CHECK-D-NEXT:    li a0, 1272175; CHECK-D-NEXT:    vsub.vx v8, v12, a02176; CHECK-D-NEXT:    ret2177;2178; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv8i16:2179; CHECK-ZVBB:       # %bb.0:2180; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m2, ta, ma2181; CHECK-ZVBB-NEXT:    vctz.v v8, v82182; CHECK-ZVBB-NEXT:    ret2183  %a = call <vscale x 8 x i16> @llvm.cttz.nxv8i16(<vscale x 8 x i16> %va, i1 true)2184  ret <vscale x 8 x i16> %a2185}2186 2187define <vscale x 16 x i16> @cttz_zero_undef_nxv16i16(<vscale x 16 x i16> %va) {2188; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv16i16:2189; CHECK-ZVE64X:       # %bb.0:2190; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e16, m4, ta, ma2191; CHECK-ZVE64X-NEXT:    vadd.vi v12, v8, -12192; CHECK-ZVE64X-NEXT:    vnot.v v8, v82193; CHECK-ZVE64X-NEXT:    lui a0, 52194; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v122195; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652196; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 12197; CHECK-ZVE64X-NEXT:    vand.vx v12, v12, a02198; CHECK-ZVE64X-NEXT:    lui a0, 32199; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192200; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v122201; CHECK-ZVE64X-NEXT:    vand.vx v12, v8, a02202; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22203; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02204; CHECK-ZVE64X-NEXT:    lui a0, 12205; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412206; CHECK-ZVE64X-NEXT:    vadd.vv v8, v12, v82207; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 42208; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v122209; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02210; CHECK-ZVE64X-NEXT:    li a0, 2572211; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02212; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 82213; CHECK-ZVE64X-NEXT:    ret2214;2215; CHECK-F-LABEL: cttz_zero_undef_nxv16i16:2216; CHECK-F:       # %bb.0:2217; CHECK-F-NEXT:    vsetvli a0, zero, e16, m4, ta, ma2218; CHECK-F-NEXT:    vrsub.vi v12, v8, 02219; CHECK-F-NEXT:    vand.vv v16, v8, v122220; CHECK-F-NEXT:    vfwcvt.f.xu.v v8, v162221; CHECK-F-NEXT:    vnsrl.wi v16, v8, 232222; CHECK-F-NEXT:    li a0, 1272223; CHECK-F-NEXT:    vsub.vx v8, v16, a02224; CHECK-F-NEXT:    ret2225;2226; CHECK-D-LABEL: cttz_zero_undef_nxv16i16:2227; CHECK-D:       # %bb.0:2228; CHECK-D-NEXT:    vsetvli a0, zero, e16, m4, ta, ma2229; CHECK-D-NEXT:    vrsub.vi v12, v8, 02230; CHECK-D-NEXT:    vand.vv v16, v8, v122231; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v162232; CHECK-D-NEXT:    vnsrl.wi v16, v8, 232233; CHECK-D-NEXT:    li a0, 1272234; CHECK-D-NEXT:    vsub.vx v8, v16, a02235; CHECK-D-NEXT:    ret2236;2237; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv16i16:2238; CHECK-ZVBB:       # %bb.0:2239; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m4, ta, ma2240; CHECK-ZVBB-NEXT:    vctz.v v8, v82241; CHECK-ZVBB-NEXT:    ret2242  %a = call <vscale x 16 x i16> @llvm.cttz.nxv16i16(<vscale x 16 x i16> %va, i1 true)2243  ret <vscale x 16 x i16> %a2244}2245 2246define <vscale x 32 x i16> @cttz_zero_undef_nxv32i16(<vscale x 32 x i16> %va) {2247; CHECK-LABEL: cttz_zero_undef_nxv32i16:2248; CHECK:       # %bb.0:2249; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma2250; CHECK-NEXT:    vadd.vi v16, v8, -12251; CHECK-NEXT:    vnot.v v8, v82252; CHECK-NEXT:    lui a0, 52253; CHECK-NEXT:    vand.vv v8, v8, v162254; CHECK-NEXT:    addi a0, a0, 13652255; CHECK-NEXT:    vsrl.vi v16, v8, 12256; CHECK-NEXT:    vand.vx v16, v16, a02257; CHECK-NEXT:    lui a0, 32258; CHECK-NEXT:    addi a0, a0, 8192259; CHECK-NEXT:    vsub.vv v8, v8, v162260; CHECK-NEXT:    vand.vx v16, v8, a02261; CHECK-NEXT:    vsrl.vi v8, v8, 22262; CHECK-NEXT:    vand.vx v8, v8, a02263; CHECK-NEXT:    lui a0, 12264; CHECK-NEXT:    addi a0, a0, -2412265; CHECK-NEXT:    vadd.vv v8, v16, v82266; CHECK-NEXT:    vsrl.vi v16, v8, 42267; CHECK-NEXT:    vadd.vv v8, v8, v162268; CHECK-NEXT:    vand.vx v8, v8, a02269; CHECK-NEXT:    li a0, 2572270; CHECK-NEXT:    vmul.vx v8, v8, a02271; CHECK-NEXT:    vsrl.vi v8, v8, 82272; CHECK-NEXT:    ret2273;2274; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv32i16:2275; CHECK-ZVBB:       # %bb.0:2276; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e16, m8, ta, ma2277; CHECK-ZVBB-NEXT:    vctz.v v8, v82278; CHECK-ZVBB-NEXT:    ret2279  %a = call <vscale x 32 x i16> @llvm.cttz.nxv32i16(<vscale x 32 x i16> %va, i1 true)2280  ret <vscale x 32 x i16> %a2281}2282 2283define <vscale x 1 x i32> @cttz_zero_undef_nxv1i32(<vscale x 1 x i32> %va) {2284; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv1i32:2285; CHECK-ZVE64X:       # %bb.0:2286; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma2287; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -12288; CHECK-ZVE64X-NEXT:    vnot.v v8, v82289; CHECK-ZVE64X-NEXT:    lui a0, 3495252290; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v92291; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652292; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12293; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a02294; CHECK-ZVE64X-NEXT:    lui a0, 2097152295; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192296; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v92297; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a02298; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22299; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02300; CHECK-ZVE64X-NEXT:    lui a0, 616812301; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412302; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v82303; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42304; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v92305; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02306; CHECK-ZVE64X-NEXT:    lui a0, 41122307; CHECK-ZVE64X-NEXT:    addi a0, a0, 2572308; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02309; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 242310; CHECK-ZVE64X-NEXT:    ret2311;2312; CHECK-F-LABEL: cttz_zero_undef_nxv1i32:2313; CHECK-F:       # %bb.0:2314; CHECK-F-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma2315; CHECK-F-NEXT:    vrsub.vi v9, v8, 02316; CHECK-F-NEXT:    fsrmi a0, 12317; CHECK-F-NEXT:    vand.vv v8, v8, v92318; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v82319; CHECK-F-NEXT:    vsrl.vi v8, v8, 232320; CHECK-F-NEXT:    li a1, 1272321; CHECK-F-NEXT:    vsub.vx v8, v8, a12322; CHECK-F-NEXT:    fsrm a02323; CHECK-F-NEXT:    ret2324;2325; CHECK-D-LABEL: cttz_zero_undef_nxv1i32:2326; CHECK-D:       # %bb.0:2327; CHECK-D-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma2328; CHECK-D-NEXT:    vrsub.vi v9, v8, 02329; CHECK-D-NEXT:    li a0, 522330; CHECK-D-NEXT:    vand.vv v8, v8, v92331; CHECK-D-NEXT:    vfwcvt.f.xu.v v9, v82332; CHECK-D-NEXT:    vnsrl.wx v8, v9, a02333; CHECK-D-NEXT:    li a0, 10232334; CHECK-D-NEXT:    vsub.vx v8, v8, a02335; CHECK-D-NEXT:    ret2336;2337; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv1i32:2338; CHECK-ZVBB:       # %bb.0:2339; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma2340; CHECK-ZVBB-NEXT:    vctz.v v8, v82341; CHECK-ZVBB-NEXT:    ret2342  %a = call <vscale x 1 x i32> @llvm.cttz.nxv1i32(<vscale x 1 x i32> %va, i1 true)2343  ret <vscale x 1 x i32> %a2344}2345 2346define <vscale x 2 x i32> @cttz_zero_undef_nxv2i32(<vscale x 2 x i32> %va) {2347; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv2i32:2348; CHECK-ZVE64X:       # %bb.0:2349; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m1, ta, ma2350; CHECK-ZVE64X-NEXT:    vadd.vi v9, v8, -12351; CHECK-ZVE64X-NEXT:    vnot.v v8, v82352; CHECK-ZVE64X-NEXT:    lui a0, 3495252353; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v92354; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652355; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 12356; CHECK-ZVE64X-NEXT:    vand.vx v9, v9, a02357; CHECK-ZVE64X-NEXT:    lui a0, 2097152358; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192359; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v92360; CHECK-ZVE64X-NEXT:    vand.vx v9, v8, a02361; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22362; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02363; CHECK-ZVE64X-NEXT:    lui a0, 616812364; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412365; CHECK-ZVE64X-NEXT:    vadd.vv v8, v9, v82366; CHECK-ZVE64X-NEXT:    vsrl.vi v9, v8, 42367; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v92368; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02369; CHECK-ZVE64X-NEXT:    lui a0, 41122370; CHECK-ZVE64X-NEXT:    addi a0, a0, 2572371; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02372; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 242373; CHECK-ZVE64X-NEXT:    ret2374;2375; CHECK-F-LABEL: cttz_zero_undef_nxv2i32:2376; CHECK-F:       # %bb.0:2377; CHECK-F-NEXT:    vsetvli a0, zero, e32, m1, ta, ma2378; CHECK-F-NEXT:    vrsub.vi v9, v8, 02379; CHECK-F-NEXT:    fsrmi a0, 12380; CHECK-F-NEXT:    vand.vv v8, v8, v92381; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v82382; CHECK-F-NEXT:    vsrl.vi v8, v8, 232383; CHECK-F-NEXT:    li a1, 1272384; CHECK-F-NEXT:    vsub.vx v8, v8, a12385; CHECK-F-NEXT:    fsrm a02386; CHECK-F-NEXT:    ret2387;2388; CHECK-D-LABEL: cttz_zero_undef_nxv2i32:2389; CHECK-D:       # %bb.0:2390; CHECK-D-NEXT:    vsetvli a0, zero, e32, m1, ta, ma2391; CHECK-D-NEXT:    vrsub.vi v9, v8, 02392; CHECK-D-NEXT:    li a0, 522393; CHECK-D-NEXT:    vand.vv v10, v8, v92394; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v102395; CHECK-D-NEXT:    vnsrl.wx v10, v8, a02396; CHECK-D-NEXT:    li a0, 10232397; CHECK-D-NEXT:    vsub.vx v8, v10, a02398; CHECK-D-NEXT:    ret2399;2400; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv2i32:2401; CHECK-ZVBB:       # %bb.0:2402; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m1, ta, ma2403; CHECK-ZVBB-NEXT:    vctz.v v8, v82404; CHECK-ZVBB-NEXT:    ret2405  %a = call <vscale x 2 x i32> @llvm.cttz.nxv2i32(<vscale x 2 x i32> %va, i1 true)2406  ret <vscale x 2 x i32> %a2407}2408 2409define <vscale x 4 x i32> @cttz_zero_undef_nxv4i32(<vscale x 4 x i32> %va) {2410; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv4i32:2411; CHECK-ZVE64X:       # %bb.0:2412; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m2, ta, ma2413; CHECK-ZVE64X-NEXT:    vadd.vi v10, v8, -12414; CHECK-ZVE64X-NEXT:    vnot.v v8, v82415; CHECK-ZVE64X-NEXT:    lui a0, 3495252416; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v102417; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652418; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 12419; CHECK-ZVE64X-NEXT:    vand.vx v10, v10, a02420; CHECK-ZVE64X-NEXT:    lui a0, 2097152421; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192422; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v102423; CHECK-ZVE64X-NEXT:    vand.vx v10, v8, a02424; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22425; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02426; CHECK-ZVE64X-NEXT:    lui a0, 616812427; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412428; CHECK-ZVE64X-NEXT:    vadd.vv v8, v10, v82429; CHECK-ZVE64X-NEXT:    vsrl.vi v10, v8, 42430; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v102431; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02432; CHECK-ZVE64X-NEXT:    lui a0, 41122433; CHECK-ZVE64X-NEXT:    addi a0, a0, 2572434; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02435; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 242436; CHECK-ZVE64X-NEXT:    ret2437;2438; CHECK-F-LABEL: cttz_zero_undef_nxv4i32:2439; CHECK-F:       # %bb.0:2440; CHECK-F-NEXT:    vsetvli a0, zero, e32, m2, ta, ma2441; CHECK-F-NEXT:    vrsub.vi v10, v8, 02442; CHECK-F-NEXT:    fsrmi a0, 12443; CHECK-F-NEXT:    vand.vv v8, v8, v102444; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v82445; CHECK-F-NEXT:    vsrl.vi v8, v8, 232446; CHECK-F-NEXT:    li a1, 1272447; CHECK-F-NEXT:    vsub.vx v8, v8, a12448; CHECK-F-NEXT:    fsrm a02449; CHECK-F-NEXT:    ret2450;2451; CHECK-D-LABEL: cttz_zero_undef_nxv4i32:2452; CHECK-D:       # %bb.0:2453; CHECK-D-NEXT:    vsetvli a0, zero, e32, m2, ta, ma2454; CHECK-D-NEXT:    vrsub.vi v10, v8, 02455; CHECK-D-NEXT:    li a0, 522456; CHECK-D-NEXT:    vand.vv v12, v8, v102457; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v122458; CHECK-D-NEXT:    vnsrl.wx v12, v8, a02459; CHECK-D-NEXT:    li a0, 10232460; CHECK-D-NEXT:    vsub.vx v8, v12, a02461; CHECK-D-NEXT:    ret2462;2463; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv4i32:2464; CHECK-ZVBB:       # %bb.0:2465; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m2, ta, ma2466; CHECK-ZVBB-NEXT:    vctz.v v8, v82467; CHECK-ZVBB-NEXT:    ret2468  %a = call <vscale x 4 x i32> @llvm.cttz.nxv4i32(<vscale x 4 x i32> %va, i1 true)2469  ret <vscale x 4 x i32> %a2470}2471 2472define <vscale x 8 x i32> @cttz_zero_undef_nxv8i32(<vscale x 8 x i32> %va) {2473; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv8i32:2474; CHECK-ZVE64X:       # %bb.0:2475; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2476; CHECK-ZVE64X-NEXT:    vadd.vi v12, v8, -12477; CHECK-ZVE64X-NEXT:    vnot.v v8, v82478; CHECK-ZVE64X-NEXT:    lui a0, 3495252479; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v122480; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652481; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 12482; CHECK-ZVE64X-NEXT:    vand.vx v12, v12, a02483; CHECK-ZVE64X-NEXT:    lui a0, 2097152484; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192485; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v122486; CHECK-ZVE64X-NEXT:    vand.vx v12, v8, a02487; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22488; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02489; CHECK-ZVE64X-NEXT:    lui a0, 616812490; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412491; CHECK-ZVE64X-NEXT:    vadd.vv v8, v12, v82492; CHECK-ZVE64X-NEXT:    vsrl.vi v12, v8, 42493; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v122494; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02495; CHECK-ZVE64X-NEXT:    lui a0, 41122496; CHECK-ZVE64X-NEXT:    addi a0, a0, 2572497; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02498; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 242499; CHECK-ZVE64X-NEXT:    ret2500;2501; CHECK-F-LABEL: cttz_zero_undef_nxv8i32:2502; CHECK-F:       # %bb.0:2503; CHECK-F-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2504; CHECK-F-NEXT:    vrsub.vi v12, v8, 02505; CHECK-F-NEXT:    fsrmi a0, 12506; CHECK-F-NEXT:    vand.vv v8, v8, v122507; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v82508; CHECK-F-NEXT:    vsrl.vi v8, v8, 232509; CHECK-F-NEXT:    li a1, 1272510; CHECK-F-NEXT:    vsub.vx v8, v8, a12511; CHECK-F-NEXT:    fsrm a02512; CHECK-F-NEXT:    ret2513;2514; CHECK-D-LABEL: cttz_zero_undef_nxv8i32:2515; CHECK-D:       # %bb.0:2516; CHECK-D-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2517; CHECK-D-NEXT:    vrsub.vi v12, v8, 02518; CHECK-D-NEXT:    li a0, 522519; CHECK-D-NEXT:    vand.vv v16, v8, v122520; CHECK-D-NEXT:    vfwcvt.f.xu.v v8, v162521; CHECK-D-NEXT:    vnsrl.wx v16, v8, a02522; CHECK-D-NEXT:    li a0, 10232523; CHECK-D-NEXT:    vsub.vx v8, v16, a02524; CHECK-D-NEXT:    ret2525;2526; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv8i32:2527; CHECK-ZVBB:       # %bb.0:2528; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m4, ta, ma2529; CHECK-ZVBB-NEXT:    vctz.v v8, v82530; CHECK-ZVBB-NEXT:    ret2531  %a = call <vscale x 8 x i32> @llvm.cttz.nxv8i32(<vscale x 8 x i32> %va, i1 true)2532  ret <vscale x 8 x i32> %a2533}2534 2535define <vscale x 16 x i32> @cttz_zero_undef_nxv16i32(<vscale x 16 x i32> %va) {2536; CHECK-ZVE64X-LABEL: cttz_zero_undef_nxv16i32:2537; CHECK-ZVE64X:       # %bb.0:2538; CHECK-ZVE64X-NEXT:    vsetvli a0, zero, e32, m8, ta, ma2539; CHECK-ZVE64X-NEXT:    vadd.vi v16, v8, -12540; CHECK-ZVE64X-NEXT:    vnot.v v8, v82541; CHECK-ZVE64X-NEXT:    lui a0, 3495252542; CHECK-ZVE64X-NEXT:    vand.vv v8, v8, v162543; CHECK-ZVE64X-NEXT:    addi a0, a0, 13652544; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 12545; CHECK-ZVE64X-NEXT:    vand.vx v16, v16, a02546; CHECK-ZVE64X-NEXT:    lui a0, 2097152547; CHECK-ZVE64X-NEXT:    addi a0, a0, 8192548; CHECK-ZVE64X-NEXT:    vsub.vv v8, v8, v162549; CHECK-ZVE64X-NEXT:    vand.vx v16, v8, a02550; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 22551; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02552; CHECK-ZVE64X-NEXT:    lui a0, 616812553; CHECK-ZVE64X-NEXT:    addi a0, a0, -2412554; CHECK-ZVE64X-NEXT:    vadd.vv v8, v16, v82555; CHECK-ZVE64X-NEXT:    vsrl.vi v16, v8, 42556; CHECK-ZVE64X-NEXT:    vadd.vv v8, v8, v162557; CHECK-ZVE64X-NEXT:    vand.vx v8, v8, a02558; CHECK-ZVE64X-NEXT:    lui a0, 41122559; CHECK-ZVE64X-NEXT:    addi a0, a0, 2572560; CHECK-ZVE64X-NEXT:    vmul.vx v8, v8, a02561; CHECK-ZVE64X-NEXT:    vsrl.vi v8, v8, 242562; CHECK-ZVE64X-NEXT:    ret2563;2564; CHECK-F-LABEL: cttz_zero_undef_nxv16i32:2565; CHECK-F:       # %bb.0:2566; CHECK-F-NEXT:    vsetvli a0, zero, e32, m8, ta, ma2567; CHECK-F-NEXT:    vrsub.vi v16, v8, 02568; CHECK-F-NEXT:    fsrmi a0, 12569; CHECK-F-NEXT:    vand.vv v8, v8, v162570; CHECK-F-NEXT:    vfcvt.f.xu.v v8, v82571; CHECK-F-NEXT:    vsrl.vi v8, v8, 232572; CHECK-F-NEXT:    li a1, 1272573; CHECK-F-NEXT:    vsub.vx v8, v8, a12574; CHECK-F-NEXT:    fsrm a02575; CHECK-F-NEXT:    ret2576;2577; CHECK-D-LABEL: cttz_zero_undef_nxv16i32:2578; CHECK-D:       # %bb.0:2579; CHECK-D-NEXT:    vsetvli a0, zero, e32, m8, ta, ma2580; CHECK-D-NEXT:    vrsub.vi v16, v8, 02581; CHECK-D-NEXT:    fsrmi a0, 12582; CHECK-D-NEXT:    vand.vv v8, v8, v162583; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v82584; CHECK-D-NEXT:    vsrl.vi v8, v8, 232585; CHECK-D-NEXT:    li a1, 1272586; CHECK-D-NEXT:    vsub.vx v8, v8, a12587; CHECK-D-NEXT:    fsrm a02588; CHECK-D-NEXT:    ret2589;2590; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv16i32:2591; CHECK-ZVBB:       # %bb.0:2592; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e32, m8, ta, ma2593; CHECK-ZVBB-NEXT:    vctz.v v8, v82594; CHECK-ZVBB-NEXT:    ret2595  %a = call <vscale x 16 x i32> @llvm.cttz.nxv16i32(<vscale x 16 x i32> %va, i1 true)2596  ret <vscale x 16 x i32> %a2597}2598 2599define <vscale x 1 x i64> @cttz_zero_undef_nxv1i64(<vscale x 1 x i64> %va) {2600; RV32I-LABEL: cttz_zero_undef_nxv1i64:2601; RV32I:       # %bb.0:2602; RV32I-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2603; RV32I-NEXT:    vadd.vi v9, v8, -12604; RV32I-NEXT:    vnot.v v8, v82605; RV32I-NEXT:    lui a0, 3495252606; RV32I-NEXT:    addi a0, a0, 13652607; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma2608; RV32I-NEXT:    vmv.v.x v10, a02609; RV32I-NEXT:    lui a0, 2097152610; RV32I-NEXT:    vsetvli a1, zero, e64, m1, ta, ma2611; RV32I-NEXT:    vand.vv v8, v8, v92612; RV32I-NEXT:    addi a0, a0, 8192613; RV32I-NEXT:    vsrl.vi v9, v8, 12614; RV32I-NEXT:    vand.vv v9, v9, v102615; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma2616; RV32I-NEXT:    vmv.v.x v10, a02617; RV32I-NEXT:    lui a0, 616812618; RV32I-NEXT:    addi a0, a0, -2412619; RV32I-NEXT:    vsetvli a1, zero, e64, m1, ta, ma2620; RV32I-NEXT:    vsub.vv v8, v8, v92621; RV32I-NEXT:    vand.vv v9, v8, v102622; RV32I-NEXT:    vsrl.vi v8, v8, 22623; RV32I-NEXT:    vand.vv v8, v8, v102624; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma2625; RV32I-NEXT:    vmv.v.x v10, a02626; RV32I-NEXT:    lui a0, 41122627; RV32I-NEXT:    addi a0, a0, 2572628; RV32I-NEXT:    vsetvli a1, zero, e64, m1, ta, ma2629; RV32I-NEXT:    vadd.vv v8, v9, v82630; RV32I-NEXT:    vsrl.vi v9, v8, 42631; RV32I-NEXT:    vadd.vv v8, v8, v92632; RV32I-NEXT:    vsetvli a1, zero, e32, m1, ta, ma2633; RV32I-NEXT:    vmv.v.x v9, a02634; RV32I-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2635; RV32I-NEXT:    vand.vv v8, v8, v102636; RV32I-NEXT:    vmul.vv v8, v8, v92637; RV32I-NEXT:    li a0, 562638; RV32I-NEXT:    vsrl.vx v8, v8, a02639; RV32I-NEXT:    ret2640;2641; RV64I-LABEL: cttz_zero_undef_nxv1i64:2642; RV64I:       # %bb.0:2643; RV64I-NEXT:    lui a0, 3495252644; RV64I-NEXT:    lui a1, 2097152645; RV64I-NEXT:    lui a2, 616812646; RV64I-NEXT:    lui a3, 41122647; RV64I-NEXT:    addi a0, a0, 13652648; RV64I-NEXT:    addi a1, a1, 8192649; RV64I-NEXT:    addi a2, a2, -2412650; RV64I-NEXT:    addi a3, a3, 2572651; RV64I-NEXT:    slli a4, a0, 322652; RV64I-NEXT:    add a0, a0, a42653; RV64I-NEXT:    slli a4, a1, 322654; RV64I-NEXT:    add a1, a1, a42655; RV64I-NEXT:    slli a4, a2, 322656; RV64I-NEXT:    add a2, a2, a42657; RV64I-NEXT:    slli a4, a3, 322658; RV64I-NEXT:    add a3, a3, a42659; RV64I-NEXT:    vsetvli a4, zero, e64, m1, ta, ma2660; RV64I-NEXT:    vadd.vi v9, v8, -12661; RV64I-NEXT:    vnot.v v8, v82662; RV64I-NEXT:    vand.vv v8, v8, v92663; RV64I-NEXT:    vsrl.vi v9, v8, 12664; RV64I-NEXT:    vand.vx v9, v9, a02665; RV64I-NEXT:    vsub.vv v8, v8, v92666; RV64I-NEXT:    vand.vx v9, v8, a12667; RV64I-NEXT:    vsrl.vi v8, v8, 22668; RV64I-NEXT:    vand.vx v8, v8, a12669; RV64I-NEXT:    vadd.vv v8, v9, v82670; RV64I-NEXT:    vsrl.vi v9, v8, 42671; RV64I-NEXT:    vadd.vv v8, v8, v92672; RV64I-NEXT:    vand.vx v8, v8, a22673; RV64I-NEXT:    vmul.vx v8, v8, a32674; RV64I-NEXT:    li a0, 562675; RV64I-NEXT:    vsrl.vx v8, v8, a02676; RV64I-NEXT:    ret2677;2678; CHECK-F-LABEL: cttz_zero_undef_nxv1i64:2679; CHECK-F:       # %bb.0:2680; CHECK-F-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2681; CHECK-F-NEXT:    vrsub.vi v9, v8, 02682; CHECK-F-NEXT:    fsrmi a0, 12683; CHECK-F-NEXT:    vand.vv v8, v8, v92684; CHECK-F-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma2685; CHECK-F-NEXT:    vfncvt.f.xu.w v9, v82686; CHECK-F-NEXT:    vsrl.vi v9, v9, 232687; CHECK-F-NEXT:    li a1, 1272688; CHECK-F-NEXT:    vwsubu.vx v8, v9, a12689; CHECK-F-NEXT:    fsrm a02690; CHECK-F-NEXT:    ret2691;2692; CHECK-D-LABEL: cttz_zero_undef_nxv1i64:2693; CHECK-D:       # %bb.0:2694; CHECK-D-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2695; CHECK-D-NEXT:    vrsub.vi v9, v8, 02696; CHECK-D-NEXT:    fsrmi a0, 12697; CHECK-D-NEXT:    li a1, 522698; CHECK-D-NEXT:    vand.vv v8, v8, v92699; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v82700; CHECK-D-NEXT:    vsrl.vx v8, v8, a12701; CHECK-D-NEXT:    li a1, 10232702; CHECK-D-NEXT:    vsub.vx v8, v8, a12703; CHECK-D-NEXT:    fsrm a02704; CHECK-D-NEXT:    ret2705;2706; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv1i64:2707; CHECK-ZVBB:       # %bb.0:2708; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m1, ta, ma2709; CHECK-ZVBB-NEXT:    vctz.v v8, v82710; CHECK-ZVBB-NEXT:    ret2711  %a = call <vscale x 1 x i64> @llvm.cttz.nxv1i64(<vscale x 1 x i64> %va, i1 true)2712  ret <vscale x 1 x i64> %a2713}2714 2715define <vscale x 2 x i64> @cttz_zero_undef_nxv2i64(<vscale x 2 x i64> %va) {2716; RV32I-LABEL: cttz_zero_undef_nxv2i64:2717; RV32I:       # %bb.0:2718; RV32I-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2719; RV32I-NEXT:    vadd.vi v10, v8, -12720; RV32I-NEXT:    vnot.v v8, v82721; RV32I-NEXT:    lui a0, 3495252722; RV32I-NEXT:    addi a0, a0, 13652723; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma2724; RV32I-NEXT:    vmv.v.x v12, a02725; RV32I-NEXT:    lui a0, 2097152726; RV32I-NEXT:    vsetvli a1, zero, e64, m2, ta, ma2727; RV32I-NEXT:    vand.vv v8, v8, v102728; RV32I-NEXT:    addi a0, a0, 8192729; RV32I-NEXT:    vsrl.vi v10, v8, 12730; RV32I-NEXT:    vand.vv v10, v10, v122731; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma2732; RV32I-NEXT:    vmv.v.x v12, a02733; RV32I-NEXT:    lui a0, 616812734; RV32I-NEXT:    addi a0, a0, -2412735; RV32I-NEXT:    vsetvli a1, zero, e64, m2, ta, ma2736; RV32I-NEXT:    vsub.vv v8, v8, v102737; RV32I-NEXT:    vand.vv v10, v8, v122738; RV32I-NEXT:    vsrl.vi v8, v8, 22739; RV32I-NEXT:    vand.vv v8, v8, v122740; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma2741; RV32I-NEXT:    vmv.v.x v12, a02742; RV32I-NEXT:    lui a0, 41122743; RV32I-NEXT:    addi a0, a0, 2572744; RV32I-NEXT:    vsetvli a1, zero, e64, m2, ta, ma2745; RV32I-NEXT:    vadd.vv v8, v10, v82746; RV32I-NEXT:    vsrl.vi v10, v8, 42747; RV32I-NEXT:    vadd.vv v8, v8, v102748; RV32I-NEXT:    vsetvli a1, zero, e32, m2, ta, ma2749; RV32I-NEXT:    vmv.v.x v10, a02750; RV32I-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2751; RV32I-NEXT:    vand.vv v8, v8, v122752; RV32I-NEXT:    vmul.vv v8, v8, v102753; RV32I-NEXT:    li a0, 562754; RV32I-NEXT:    vsrl.vx v8, v8, a02755; RV32I-NEXT:    ret2756;2757; RV64I-LABEL: cttz_zero_undef_nxv2i64:2758; RV64I:       # %bb.0:2759; RV64I-NEXT:    lui a0, 3495252760; RV64I-NEXT:    lui a1, 2097152761; RV64I-NEXT:    lui a2, 616812762; RV64I-NEXT:    lui a3, 41122763; RV64I-NEXT:    addi a0, a0, 13652764; RV64I-NEXT:    addi a1, a1, 8192765; RV64I-NEXT:    addi a2, a2, -2412766; RV64I-NEXT:    addi a3, a3, 2572767; RV64I-NEXT:    slli a4, a0, 322768; RV64I-NEXT:    add a0, a0, a42769; RV64I-NEXT:    slli a4, a1, 322770; RV64I-NEXT:    add a1, a1, a42771; RV64I-NEXT:    slli a4, a2, 322772; RV64I-NEXT:    add a2, a2, a42773; RV64I-NEXT:    slli a4, a3, 322774; RV64I-NEXT:    add a3, a3, a42775; RV64I-NEXT:    vsetvli a4, zero, e64, m2, ta, ma2776; RV64I-NEXT:    vadd.vi v10, v8, -12777; RV64I-NEXT:    vnot.v v8, v82778; RV64I-NEXT:    vand.vv v8, v8, v102779; RV64I-NEXT:    vsrl.vi v10, v8, 12780; RV64I-NEXT:    vand.vx v10, v10, a02781; RV64I-NEXT:    vsub.vv v8, v8, v102782; RV64I-NEXT:    vand.vx v10, v8, a12783; RV64I-NEXT:    vsrl.vi v8, v8, 22784; RV64I-NEXT:    vand.vx v8, v8, a12785; RV64I-NEXT:    vadd.vv v8, v10, v82786; RV64I-NEXT:    vsrl.vi v10, v8, 42787; RV64I-NEXT:    vadd.vv v8, v8, v102788; RV64I-NEXT:    vand.vx v8, v8, a22789; RV64I-NEXT:    vmul.vx v8, v8, a32790; RV64I-NEXT:    li a0, 562791; RV64I-NEXT:    vsrl.vx v8, v8, a02792; RV64I-NEXT:    ret2793;2794; CHECK-F-LABEL: cttz_zero_undef_nxv2i64:2795; CHECK-F:       # %bb.0:2796; CHECK-F-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2797; CHECK-F-NEXT:    vrsub.vi v10, v8, 02798; CHECK-F-NEXT:    fsrmi a0, 12799; CHECK-F-NEXT:    vand.vv v8, v8, v102800; CHECK-F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma2801; CHECK-F-NEXT:    vfncvt.f.xu.w v10, v82802; CHECK-F-NEXT:    vsrl.vi v10, v10, 232803; CHECK-F-NEXT:    li a1, 1272804; CHECK-F-NEXT:    vwsubu.vx v8, v10, a12805; CHECK-F-NEXT:    fsrm a02806; CHECK-F-NEXT:    ret2807;2808; CHECK-D-LABEL: cttz_zero_undef_nxv2i64:2809; CHECK-D:       # %bb.0:2810; CHECK-D-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2811; CHECK-D-NEXT:    vrsub.vi v10, v8, 02812; CHECK-D-NEXT:    fsrmi a0, 12813; CHECK-D-NEXT:    li a1, 522814; CHECK-D-NEXT:    vand.vv v8, v8, v102815; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v82816; CHECK-D-NEXT:    vsrl.vx v8, v8, a12817; CHECK-D-NEXT:    li a1, 10232818; CHECK-D-NEXT:    vsub.vx v8, v8, a12819; CHECK-D-NEXT:    fsrm a02820; CHECK-D-NEXT:    ret2821;2822; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv2i64:2823; CHECK-ZVBB:       # %bb.0:2824; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m2, ta, ma2825; CHECK-ZVBB-NEXT:    vctz.v v8, v82826; CHECK-ZVBB-NEXT:    ret2827  %a = call <vscale x 2 x i64> @llvm.cttz.nxv2i64(<vscale x 2 x i64> %va, i1 true)2828  ret <vscale x 2 x i64> %a2829}2830 2831define <vscale x 4 x i64> @cttz_zero_undef_nxv4i64(<vscale x 4 x i64> %va) {2832; RV32I-LABEL: cttz_zero_undef_nxv4i64:2833; RV32I:       # %bb.0:2834; RV32I-NEXT:    vsetvli a0, zero, e64, m4, ta, ma2835; RV32I-NEXT:    vadd.vi v12, v8, -12836; RV32I-NEXT:    vnot.v v8, v82837; RV32I-NEXT:    lui a0, 3495252838; RV32I-NEXT:    addi a0, a0, 13652839; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma2840; RV32I-NEXT:    vmv.v.x v16, a02841; RV32I-NEXT:    lui a0, 2097152842; RV32I-NEXT:    vsetvli a1, zero, e64, m4, ta, ma2843; RV32I-NEXT:    vand.vv v8, v8, v122844; RV32I-NEXT:    addi a0, a0, 8192845; RV32I-NEXT:    vsrl.vi v12, v8, 12846; RV32I-NEXT:    vand.vv v12, v12, v162847; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma2848; RV32I-NEXT:    vmv.v.x v16, a02849; RV32I-NEXT:    lui a0, 616812850; RV32I-NEXT:    addi a0, a0, -2412851; RV32I-NEXT:    vsetvli a1, zero, e64, m4, ta, ma2852; RV32I-NEXT:    vsub.vv v8, v8, v122853; RV32I-NEXT:    vand.vv v12, v8, v162854; RV32I-NEXT:    vsrl.vi v8, v8, 22855; RV32I-NEXT:    vand.vv v8, v8, v162856; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma2857; RV32I-NEXT:    vmv.v.x v16, a02858; RV32I-NEXT:    lui a0, 41122859; RV32I-NEXT:    addi a0, a0, 2572860; RV32I-NEXT:    vsetvli a1, zero, e64, m4, ta, ma2861; RV32I-NEXT:    vadd.vv v8, v12, v82862; RV32I-NEXT:    vsrl.vi v12, v8, 42863; RV32I-NEXT:    vadd.vv v8, v8, v122864; RV32I-NEXT:    vsetvli a1, zero, e32, m4, ta, ma2865; RV32I-NEXT:    vmv.v.x v12, a02866; RV32I-NEXT:    vsetvli a0, zero, e64, m4, ta, ma2867; RV32I-NEXT:    vand.vv v8, v8, v162868; RV32I-NEXT:    vmul.vv v8, v8, v122869; RV32I-NEXT:    li a0, 562870; RV32I-NEXT:    vsrl.vx v8, v8, a02871; RV32I-NEXT:    ret2872;2873; RV64I-LABEL: cttz_zero_undef_nxv4i64:2874; RV64I:       # %bb.0:2875; RV64I-NEXT:    lui a0, 3495252876; RV64I-NEXT:    lui a1, 2097152877; RV64I-NEXT:    lui a2, 616812878; RV64I-NEXT:    lui a3, 41122879; RV64I-NEXT:    addi a0, a0, 13652880; RV64I-NEXT:    addi a1, a1, 8192881; RV64I-NEXT:    addi a2, a2, -2412882; RV64I-NEXT:    addi a3, a3, 2572883; RV64I-NEXT:    slli a4, a0, 322884; RV64I-NEXT:    add a0, a0, a42885; RV64I-NEXT:    slli a4, a1, 322886; RV64I-NEXT:    add a1, a1, a42887; RV64I-NEXT:    slli a4, a2, 322888; RV64I-NEXT:    add a2, a2, a42889; RV64I-NEXT:    slli a4, a3, 322890; RV64I-NEXT:    add a3, a3, a42891; RV64I-NEXT:    vsetvli a4, zero, e64, m4, ta, ma2892; RV64I-NEXT:    vadd.vi v12, v8, -12893; RV64I-NEXT:    vnot.v v8, v82894; RV64I-NEXT:    vand.vv v8, v8, v122895; RV64I-NEXT:    vsrl.vi v12, v8, 12896; RV64I-NEXT:    vand.vx v12, v12, a02897; RV64I-NEXT:    vsub.vv v8, v8, v122898; RV64I-NEXT:    vand.vx v12, v8, a12899; RV64I-NEXT:    vsrl.vi v8, v8, 22900; RV64I-NEXT:    vand.vx v8, v8, a12901; RV64I-NEXT:    vadd.vv v8, v12, v82902; RV64I-NEXT:    vsrl.vi v12, v8, 42903; RV64I-NEXT:    vadd.vv v8, v8, v122904; RV64I-NEXT:    vand.vx v8, v8, a22905; RV64I-NEXT:    vmul.vx v8, v8, a32906; RV64I-NEXT:    li a0, 562907; RV64I-NEXT:    vsrl.vx v8, v8, a02908; RV64I-NEXT:    ret2909;2910; CHECK-F-LABEL: cttz_zero_undef_nxv4i64:2911; CHECK-F:       # %bb.0:2912; CHECK-F-NEXT:    vsetvli a0, zero, e64, m4, ta, ma2913; CHECK-F-NEXT:    vrsub.vi v12, v8, 02914; CHECK-F-NEXT:    fsrmi a0, 12915; CHECK-F-NEXT:    vand.vv v8, v8, v122916; CHECK-F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma2917; CHECK-F-NEXT:    vfncvt.f.xu.w v12, v82918; CHECK-F-NEXT:    vsrl.vi v12, v12, 232919; CHECK-F-NEXT:    li a1, 1272920; CHECK-F-NEXT:    vwsubu.vx v8, v12, a12921; CHECK-F-NEXT:    fsrm a02922; CHECK-F-NEXT:    ret2923;2924; CHECK-D-LABEL: cttz_zero_undef_nxv4i64:2925; CHECK-D:       # %bb.0:2926; CHECK-D-NEXT:    vsetvli a0, zero, e64, m4, ta, ma2927; CHECK-D-NEXT:    vrsub.vi v12, v8, 02928; CHECK-D-NEXT:    fsrmi a0, 12929; CHECK-D-NEXT:    li a1, 522930; CHECK-D-NEXT:    vand.vv v8, v8, v122931; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v82932; CHECK-D-NEXT:    vsrl.vx v8, v8, a12933; CHECK-D-NEXT:    li a1, 10232934; CHECK-D-NEXT:    vsub.vx v8, v8, a12935; CHECK-D-NEXT:    fsrm a02936; CHECK-D-NEXT:    ret2937;2938; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv4i64:2939; CHECK-ZVBB:       # %bb.0:2940; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m4, ta, ma2941; CHECK-ZVBB-NEXT:    vctz.v v8, v82942; CHECK-ZVBB-NEXT:    ret2943  %a = call <vscale x 4 x i64> @llvm.cttz.nxv4i64(<vscale x 4 x i64> %va, i1 true)2944  ret <vscale x 4 x i64> %a2945}2946 2947define <vscale x 8 x i64> @cttz_zero_undef_nxv8i64(<vscale x 8 x i64> %va) {2948; RV32I-LABEL: cttz_zero_undef_nxv8i64:2949; RV32I:       # %bb.0:2950; RV32I-NEXT:    vsetvli a0, zero, e64, m8, ta, ma2951; RV32I-NEXT:    vadd.vi v16, v8, -12952; RV32I-NEXT:    vnot.v v8, v82953; RV32I-NEXT:    lui a0, 3495252954; RV32I-NEXT:    addi a0, a0, 13652955; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma2956; RV32I-NEXT:    vmv.v.x v24, a02957; RV32I-NEXT:    lui a0, 2097152958; RV32I-NEXT:    vsetvli a1, zero, e64, m8, ta, ma2959; RV32I-NEXT:    vand.vv v8, v8, v162960; RV32I-NEXT:    addi a0, a0, 8192961; RV32I-NEXT:    vsrl.vi v16, v8, 12962; RV32I-NEXT:    vand.vv v24, v16, v242963; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma2964; RV32I-NEXT:    vmv.v.x v16, a02965; RV32I-NEXT:    lui a0, 616812966; RV32I-NEXT:    addi a0, a0, -2412967; RV32I-NEXT:    vsetvli a1, zero, e64, m8, ta, ma2968; RV32I-NEXT:    vsub.vv v8, v8, v242969; RV32I-NEXT:    vand.vv v24, v8, v162970; RV32I-NEXT:    vsrl.vi v8, v8, 22971; RV32I-NEXT:    vand.vv v8, v8, v162972; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma2973; RV32I-NEXT:    vmv.v.x v16, a02974; RV32I-NEXT:    lui a0, 41122975; RV32I-NEXT:    addi a0, a0, 2572976; RV32I-NEXT:    vsetvli a1, zero, e64, m8, ta, ma2977; RV32I-NEXT:    vadd.vv v8, v24, v82978; RV32I-NEXT:    vsrl.vi v24, v8, 42979; RV32I-NEXT:    vadd.vv v8, v8, v242980; RV32I-NEXT:    vsetvli a1, zero, e32, m8, ta, ma2981; RV32I-NEXT:    vmv.v.x v24, a02982; RV32I-NEXT:    vsetvli a0, zero, e64, m8, ta, ma2983; RV32I-NEXT:    vand.vv v8, v8, v162984; RV32I-NEXT:    vmul.vv v8, v8, v242985; RV32I-NEXT:    li a0, 562986; RV32I-NEXT:    vsrl.vx v8, v8, a02987; RV32I-NEXT:    ret2988;2989; RV64I-LABEL: cttz_zero_undef_nxv8i64:2990; RV64I:       # %bb.0:2991; RV64I-NEXT:    lui a0, 3495252992; RV64I-NEXT:    lui a1, 2097152993; RV64I-NEXT:    lui a2, 616812994; RV64I-NEXT:    lui a3, 41122995; RV64I-NEXT:    addi a0, a0, 13652996; RV64I-NEXT:    addi a1, a1, 8192997; RV64I-NEXT:    addi a2, a2, -2412998; RV64I-NEXT:    addi a3, a3, 2572999; RV64I-NEXT:    slli a4, a0, 323000; RV64I-NEXT:    add a0, a0, a43001; RV64I-NEXT:    slli a4, a1, 323002; RV64I-NEXT:    add a1, a1, a43003; RV64I-NEXT:    slli a4, a2, 323004; RV64I-NEXT:    add a2, a2, a43005; RV64I-NEXT:    slli a4, a3, 323006; RV64I-NEXT:    add a3, a3, a43007; RV64I-NEXT:    vsetvli a4, zero, e64, m8, ta, ma3008; RV64I-NEXT:    vadd.vi v16, v8, -13009; RV64I-NEXT:    vnot.v v8, v83010; RV64I-NEXT:    vand.vv v8, v8, v163011; RV64I-NEXT:    vsrl.vi v16, v8, 13012; RV64I-NEXT:    vand.vx v16, v16, a03013; RV64I-NEXT:    vsub.vv v8, v8, v163014; RV64I-NEXT:    vand.vx v16, v8, a13015; RV64I-NEXT:    vsrl.vi v8, v8, 23016; RV64I-NEXT:    vand.vx v8, v8, a13017; RV64I-NEXT:    vadd.vv v8, v16, v83018; RV64I-NEXT:    vsrl.vi v16, v8, 43019; RV64I-NEXT:    vadd.vv v8, v8, v163020; RV64I-NEXT:    vand.vx v8, v8, a23021; RV64I-NEXT:    vmul.vx v8, v8, a33022; RV64I-NEXT:    li a0, 563023; RV64I-NEXT:    vsrl.vx v8, v8, a03024; RV64I-NEXT:    ret3025;3026; CHECK-F-LABEL: cttz_zero_undef_nxv8i64:3027; CHECK-F:       # %bb.0:3028; CHECK-F-NEXT:    vsetvli a0, zero, e64, m8, ta, ma3029; CHECK-F-NEXT:    vrsub.vi v16, v8, 03030; CHECK-F-NEXT:    fsrmi a0, 13031; CHECK-F-NEXT:    vand.vv v8, v8, v163032; CHECK-F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma3033; CHECK-F-NEXT:    vfncvt.f.xu.w v16, v83034; CHECK-F-NEXT:    vsrl.vi v16, v16, 233035; CHECK-F-NEXT:    li a1, 1273036; CHECK-F-NEXT:    vwsubu.vx v8, v16, a13037; CHECK-F-NEXT:    fsrm a03038; CHECK-F-NEXT:    ret3039;3040; CHECK-D-LABEL: cttz_zero_undef_nxv8i64:3041; CHECK-D:       # %bb.0:3042; CHECK-D-NEXT:    vsetvli a0, zero, e64, m8, ta, ma3043; CHECK-D-NEXT:    vrsub.vi v16, v8, 03044; CHECK-D-NEXT:    fsrmi a0, 13045; CHECK-D-NEXT:    li a1, 523046; CHECK-D-NEXT:    vand.vv v8, v8, v163047; CHECK-D-NEXT:    vfcvt.f.xu.v v8, v83048; CHECK-D-NEXT:    vsrl.vx v8, v8, a13049; CHECK-D-NEXT:    li a1, 10233050; CHECK-D-NEXT:    vsub.vx v8, v8, a13051; CHECK-D-NEXT:    fsrm a03052; CHECK-D-NEXT:    ret3053;3054; CHECK-ZVBB-LABEL: cttz_zero_undef_nxv8i64:3055; CHECK-ZVBB:       # %bb.0:3056; CHECK-ZVBB-NEXT:    vsetvli a0, zero, e64, m8, ta, ma3057; CHECK-ZVBB-NEXT:    vctz.v v8, v83058; CHECK-ZVBB-NEXT:    ret3059  %a = call <vscale x 8 x i64> @llvm.cttz.nxv8i64(<vscale x 8 x i64> %va, i1 true)3060  ret <vscale x 8 x i64> %a3061}3062;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:3063; RV32: {{.*}}3064; RV32D: {{.*}}3065; RV32F: {{.*}}3066; RV64: {{.*}}3067; RV64D: {{.*}}3068; RV64F: {{.*}}3069