| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3 |
| ; RUN: llc -mtriple=riscv32 -mattr=+v < %s | FileCheck %s -check-prefix=RV32 |
| ; RUN: llc -mtriple=riscv64 -mattr=+v < %s | FileCheck %s -check-prefix=RV64 |
| |
| ; FIXED WIDTH |
| |
| define i16 @ctz_v4i32(<4 x i32> %a) { |
| ; RV32-LABEL: ctz_v4i32: |
| ; RV32: # %bb.0: |
| ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma |
| ; RV32-NEXT: vmsne.vi v8, v8, 0 |
| ; RV32-NEXT: vfirst.m a0, v8 |
| ; RV32-NEXT: bgez a0, .LBB0_2 |
| ; RV32-NEXT: # %bb.1: |
| ; RV32-NEXT: li a0, 4 |
| ; RV32-NEXT: .LBB0_2: |
| ; RV32-NEXT: ret |
| ; |
| ; RV64-LABEL: ctz_v4i32: |
| ; RV64: # %bb.0: |
| ; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma |
| ; RV64-NEXT: vmsne.vi v8, v8, 0 |
| ; RV64-NEXT: vfirst.m a0, v8 |
| ; RV64-NEXT: bgez a0, .LBB0_2 |
| ; RV64-NEXT: # %bb.1: |
| ; RV64-NEXT: li a0, 4 |
| ; RV64-NEXT: .LBB0_2: |
| ; RV64-NEXT: ret |
| %res = call i16 @llvm.experimental.cttz.elts.i16.v4i32(<4 x i32> %a, i1 0) |
| ret i16 %res |
| } |
| |
| define i16 @ctz_v2048i1(<2048 x i1> %a) { |
| ; RV32-LABEL: ctz_v2048i1: |
| ; RV32: # %bb.0: |
| ; RV32-NEXT: li a1, 128 |
| ; RV32-NEXT: vsetvli zero, a1, e8, m8, ta, ma |
| ; RV32-NEXT: vfirst.m a0, v0 |
| ; RV32-NEXT: bltz a0, .LBB1_32 |
| ; RV32-NEXT: # %bb.1: |
| ; RV32-NEXT: vfirst.m a2, v8 |
| ; RV32-NEXT: bltz a2, .LBB1_33 |
| ; RV32-NEXT: .LBB1_2: |
| ; RV32-NEXT: beq a0, a1, .LBB1_34 |
| ; RV32-NEXT: .LBB1_3: |
| ; RV32-NEXT: vfirst.m a3, v9 |
| ; RV32-NEXT: bltz a3, .LBB1_35 |
| ; RV32-NEXT: .LBB1_4: |
| ; RV32-NEXT: vfirst.m a2, v10 |
| ; RV32-NEXT: bltz a2, .LBB1_36 |
| ; RV32-NEXT: .LBB1_5: |
| ; RV32-NEXT: beq a3, a1, .LBB1_37 |
| ; RV32-NEXT: .LBB1_6: |
| ; RV32-NEXT: li a2, 256 |
| ; RV32-NEXT: beq a0, a2, .LBB1_38 |
| ; RV32-NEXT: .LBB1_7: |
| ; RV32-NEXT: vfirst.m a4, v11 |
| ; RV32-NEXT: bltz a4, .LBB1_39 |
| ; RV32-NEXT: .LBB1_8: |
| ; RV32-NEXT: vfirst.m a3, v12 |
| ; RV32-NEXT: bltz a3, .LBB1_40 |
| ; RV32-NEXT: .LBB1_9: |
| ; RV32-NEXT: beq a4, a1, .LBB1_41 |
| ; RV32-NEXT: .LBB1_10: |
| ; RV32-NEXT: vfirst.m a3, v13 |
| ; RV32-NEXT: bltz a3, .LBB1_42 |
| ; RV32-NEXT: .LBB1_11: |
| ; RV32-NEXT: vfirst.m a5, v14 |
| ; RV32-NEXT: bltz a5, .LBB1_43 |
| ; RV32-NEXT: .LBB1_12: |
| ; RV32-NEXT: beq a3, a1, .LBB1_44 |
| ; RV32-NEXT: .LBB1_13: |
| ; RV32-NEXT: beq a4, a2, .LBB1_45 |
| ; RV32-NEXT: .LBB1_14: |
| ; RV32-NEXT: li a3, 512 |
| ; RV32-NEXT: beq a0, a3, .LBB1_46 |
| ; RV32-NEXT: .LBB1_15: |
| ; RV32-NEXT: vfirst.m a4, v15 |
| ; RV32-NEXT: bltz a4, .LBB1_47 |
| ; RV32-NEXT: .LBB1_16: |
| ; RV32-NEXT: vfirst.m a5, v16 |
| ; RV32-NEXT: bltz a5, .LBB1_48 |
| ; RV32-NEXT: .LBB1_17: |
| ; RV32-NEXT: beq a4, a1, .LBB1_49 |
| ; RV32-NEXT: .LBB1_18: |
| ; RV32-NEXT: vfirst.m a5, v17 |
| ; RV32-NEXT: bltz a5, .LBB1_50 |
| ; RV32-NEXT: .LBB1_19: |
| ; RV32-NEXT: vfirst.m a6, v18 |
| ; RV32-NEXT: bltz a6, .LBB1_51 |
| ; RV32-NEXT: .LBB1_20: |
| ; RV32-NEXT: beq a5, a1, .LBB1_52 |
| ; RV32-NEXT: .LBB1_21: |
| ; RV32-NEXT: beq a4, a2, .LBB1_53 |
| ; RV32-NEXT: .LBB1_22: |
| ; RV32-NEXT: vfirst.m a5, v19 |
| ; RV32-NEXT: bltz a5, .LBB1_54 |
| ; RV32-NEXT: .LBB1_23: |
| ; RV32-NEXT: vfirst.m a6, v20 |
| ; RV32-NEXT: bltz a6, .LBB1_55 |
| ; RV32-NEXT: .LBB1_24: |
| ; RV32-NEXT: beq a5, a1, .LBB1_56 |
| ; RV32-NEXT: .LBB1_25: |
| ; RV32-NEXT: vfirst.m a6, v21 |
| ; RV32-NEXT: bltz a6, .LBB1_57 |
| ; RV32-NEXT: .LBB1_26: |
| ; RV32-NEXT: vfirst.m a7, v22 |
| ; RV32-NEXT: bltz a7, .LBB1_58 |
| ; RV32-NEXT: .LBB1_27: |
| ; RV32-NEXT: beq a6, a1, .LBB1_59 |
| ; RV32-NEXT: .LBB1_28: |
| ; RV32-NEXT: beq a5, a2, .LBB1_60 |
| ; RV32-NEXT: .LBB1_29: |
| ; RV32-NEXT: beq a4, a3, .LBB1_61 |
| ; RV32-NEXT: .LBB1_30: |
| ; RV32-NEXT: li a1, 1024 |
| ; RV32-NEXT: beq a0, a1, .LBB1_62 |
| ; RV32-NEXT: .LBB1_31: |
| ; RV32-NEXT: ret |
| ; RV32-NEXT: .LBB1_32: |
| ; RV32-NEXT: li a0, 128 |
| ; RV32-NEXT: vfirst.m a2, v8 |
| ; RV32-NEXT: bgez a2, .LBB1_2 |
| ; RV32-NEXT: .LBB1_33: |
| ; RV32-NEXT: li a2, 128 |
| ; RV32-NEXT: bne a0, a1, .LBB1_3 |
| ; RV32-NEXT: .LBB1_34: |
| ; RV32-NEXT: addi a0, a2, 128 |
| ; RV32-NEXT: vfirst.m a3, v9 |
| ; RV32-NEXT: bgez a3, .LBB1_4 |
| ; RV32-NEXT: .LBB1_35: |
| ; RV32-NEXT: li a3, 128 |
| ; RV32-NEXT: vfirst.m a2, v10 |
| ; RV32-NEXT: bgez a2, .LBB1_5 |
| ; RV32-NEXT: .LBB1_36: |
| ; RV32-NEXT: li a2, 128 |
| ; RV32-NEXT: bne a3, a1, .LBB1_6 |
| ; RV32-NEXT: .LBB1_37: |
| ; RV32-NEXT: addi a3, a2, 128 |
| ; RV32-NEXT: li a2, 256 |
| ; RV32-NEXT: bne a0, a2, .LBB1_7 |
| ; RV32-NEXT: .LBB1_38: |
| ; RV32-NEXT: addi a0, a3, 256 |
| ; RV32-NEXT: vfirst.m a4, v11 |
| ; RV32-NEXT: bgez a4, .LBB1_8 |
| ; RV32-NEXT: .LBB1_39: |
| ; RV32-NEXT: li a4, 128 |
| ; RV32-NEXT: vfirst.m a3, v12 |
| ; RV32-NEXT: bgez a3, .LBB1_9 |
| ; RV32-NEXT: .LBB1_40: |
| ; RV32-NEXT: li a3, 128 |
| ; RV32-NEXT: bne a4, a1, .LBB1_10 |
| ; RV32-NEXT: .LBB1_41: |
| ; RV32-NEXT: addi a4, a3, 128 |
| ; RV32-NEXT: vfirst.m a3, v13 |
| ; RV32-NEXT: bgez a3, .LBB1_11 |
| ; RV32-NEXT: .LBB1_42: |
| ; RV32-NEXT: li a3, 128 |
| ; RV32-NEXT: vfirst.m a5, v14 |
| ; RV32-NEXT: bgez a5, .LBB1_12 |
| ; RV32-NEXT: .LBB1_43: |
| ; RV32-NEXT: li a5, 128 |
| ; RV32-NEXT: bne a3, a1, .LBB1_13 |
| ; RV32-NEXT: .LBB1_44: |
| ; RV32-NEXT: addi a3, a5, 128 |
| ; RV32-NEXT: bne a4, a2, .LBB1_14 |
| ; RV32-NEXT: .LBB1_45: |
| ; RV32-NEXT: addi a4, a3, 256 |
| ; RV32-NEXT: li a3, 512 |
| ; RV32-NEXT: bne a0, a3, .LBB1_15 |
| ; RV32-NEXT: .LBB1_46: |
| ; RV32-NEXT: addi a0, a4, 512 |
| ; RV32-NEXT: vfirst.m a4, v15 |
| ; RV32-NEXT: bgez a4, .LBB1_16 |
| ; RV32-NEXT: .LBB1_47: |
| ; RV32-NEXT: li a4, 128 |
| ; RV32-NEXT: vfirst.m a5, v16 |
| ; RV32-NEXT: bgez a5, .LBB1_17 |
| ; RV32-NEXT: .LBB1_48: |
| ; RV32-NEXT: li a5, 128 |
| ; RV32-NEXT: bne a4, a1, .LBB1_18 |
| ; RV32-NEXT: .LBB1_49: |
| ; RV32-NEXT: addi a4, a5, 128 |
| ; RV32-NEXT: vfirst.m a5, v17 |
| ; RV32-NEXT: bgez a5, .LBB1_19 |
| ; RV32-NEXT: .LBB1_50: |
| ; RV32-NEXT: li a5, 128 |
| ; RV32-NEXT: vfirst.m a6, v18 |
| ; RV32-NEXT: bgez a6, .LBB1_20 |
| ; RV32-NEXT: .LBB1_51: |
| ; RV32-NEXT: li a6, 128 |
| ; RV32-NEXT: bne a5, a1, .LBB1_21 |
| ; RV32-NEXT: .LBB1_52: |
| ; RV32-NEXT: addi a5, a6, 128 |
| ; RV32-NEXT: bne a4, a2, .LBB1_22 |
| ; RV32-NEXT: .LBB1_53: |
| ; RV32-NEXT: addi a4, a5, 256 |
| ; RV32-NEXT: vfirst.m a5, v19 |
| ; RV32-NEXT: bgez a5, .LBB1_23 |
| ; RV32-NEXT: .LBB1_54: |
| ; RV32-NEXT: li a5, 128 |
| ; RV32-NEXT: vfirst.m a6, v20 |
| ; RV32-NEXT: bgez a6, .LBB1_24 |
| ; RV32-NEXT: .LBB1_55: |
| ; RV32-NEXT: li a6, 128 |
| ; RV32-NEXT: bne a5, a1, .LBB1_25 |
| ; RV32-NEXT: .LBB1_56: |
| ; RV32-NEXT: addi a5, a6, 128 |
| ; RV32-NEXT: vfirst.m a6, v21 |
| ; RV32-NEXT: bgez a6, .LBB1_26 |
| ; RV32-NEXT: .LBB1_57: |
| ; RV32-NEXT: li a6, 128 |
| ; RV32-NEXT: vfirst.m a7, v22 |
| ; RV32-NEXT: bgez a7, .LBB1_27 |
| ; RV32-NEXT: .LBB1_58: |
| ; RV32-NEXT: li a7, 128 |
| ; RV32-NEXT: bne a6, a1, .LBB1_28 |
| ; RV32-NEXT: .LBB1_59: |
| ; RV32-NEXT: addi a6, a7, 128 |
| ; RV32-NEXT: bne a5, a2, .LBB1_29 |
| ; RV32-NEXT: .LBB1_60: |
| ; RV32-NEXT: addi a5, a6, 256 |
| ; RV32-NEXT: bne a4, a3, .LBB1_30 |
| ; RV32-NEXT: .LBB1_61: |
| ; RV32-NEXT: addi a4, a5, 512 |
| ; RV32-NEXT: li a1, 1024 |
| ; RV32-NEXT: bne a0, a1, .LBB1_31 |
| ; RV32-NEXT: .LBB1_62: |
| ; RV32-NEXT: addi a0, a4, 1024 |
| ; RV32-NEXT: ret |
| ; |
| ; RV64-LABEL: ctz_v2048i1: |
| ; RV64: # %bb.0: |
| ; RV64-NEXT: li a1, 128 |
| ; RV64-NEXT: vsetvli zero, a1, e8, m8, ta, ma |
| ; RV64-NEXT: vfirst.m a0, v0 |
| ; RV64-NEXT: bltz a0, .LBB1_32 |
| ; RV64-NEXT: # %bb.1: |
| ; RV64-NEXT: vfirst.m a2, v8 |
| ; RV64-NEXT: bltz a2, .LBB1_33 |
| ; RV64-NEXT: .LBB1_2: |
| ; RV64-NEXT: beq a0, a1, .LBB1_34 |
| ; RV64-NEXT: .LBB1_3: |
| ; RV64-NEXT: vfirst.m a3, v9 |
| ; RV64-NEXT: bltz a3, .LBB1_35 |
| ; RV64-NEXT: .LBB1_4: |
| ; RV64-NEXT: vfirst.m a2, v10 |
| ; RV64-NEXT: bltz a2, .LBB1_36 |
| ; RV64-NEXT: .LBB1_5: |
| ; RV64-NEXT: beq a3, a1, .LBB1_37 |
| ; RV64-NEXT: .LBB1_6: |
| ; RV64-NEXT: li a2, 256 |
| ; RV64-NEXT: beq a0, a2, .LBB1_38 |
| ; RV64-NEXT: .LBB1_7: |
| ; RV64-NEXT: vfirst.m a4, v11 |
| ; RV64-NEXT: bltz a4, .LBB1_39 |
| ; RV64-NEXT: .LBB1_8: |
| ; RV64-NEXT: vfirst.m a3, v12 |
| ; RV64-NEXT: bltz a3, .LBB1_40 |
| ; RV64-NEXT: .LBB1_9: |
| ; RV64-NEXT: beq a4, a1, .LBB1_41 |
| ; RV64-NEXT: .LBB1_10: |
| ; RV64-NEXT: vfirst.m a3, v13 |
| ; RV64-NEXT: bltz a3, .LBB1_42 |
| ; RV64-NEXT: .LBB1_11: |
| ; RV64-NEXT: vfirst.m a5, v14 |
| ; RV64-NEXT: bltz a5, .LBB1_43 |
| ; RV64-NEXT: .LBB1_12: |
| ; RV64-NEXT: beq a3, a1, .LBB1_44 |
| ; RV64-NEXT: .LBB1_13: |
| ; RV64-NEXT: beq a4, a2, .LBB1_45 |
| ; RV64-NEXT: .LBB1_14: |
| ; RV64-NEXT: li a3, 512 |
| ; RV64-NEXT: beq a0, a3, .LBB1_46 |
| ; RV64-NEXT: .LBB1_15: |
| ; RV64-NEXT: vfirst.m a4, v15 |
| ; RV64-NEXT: bltz a4, .LBB1_47 |
| ; RV64-NEXT: .LBB1_16: |
| ; RV64-NEXT: vfirst.m a5, v16 |
| ; RV64-NEXT: bltz a5, .LBB1_48 |
| ; RV64-NEXT: .LBB1_17: |
| ; RV64-NEXT: beq a4, a1, .LBB1_49 |
| ; RV64-NEXT: .LBB1_18: |
| ; RV64-NEXT: vfirst.m a5, v17 |
| ; RV64-NEXT: bltz a5, .LBB1_50 |
| ; RV64-NEXT: .LBB1_19: |
| ; RV64-NEXT: vfirst.m a6, v18 |
| ; RV64-NEXT: bltz a6, .LBB1_51 |
| ; RV64-NEXT: .LBB1_20: |
| ; RV64-NEXT: beq a5, a1, .LBB1_52 |
| ; RV64-NEXT: .LBB1_21: |
| ; RV64-NEXT: beq a4, a2, .LBB1_53 |
| ; RV64-NEXT: .LBB1_22: |
| ; RV64-NEXT: vfirst.m a5, v19 |
| ; RV64-NEXT: bltz a5, .LBB1_54 |
| ; RV64-NEXT: .LBB1_23: |
| ; RV64-NEXT: vfirst.m a6, v20 |
| ; RV64-NEXT: bltz a6, .LBB1_55 |
| ; RV64-NEXT: .LBB1_24: |
| ; RV64-NEXT: beq a5, a1, .LBB1_56 |
| ; RV64-NEXT: .LBB1_25: |
| ; RV64-NEXT: vfirst.m a6, v21 |
| ; RV64-NEXT: bltz a6, .LBB1_57 |
| ; RV64-NEXT: .LBB1_26: |
| ; RV64-NEXT: vfirst.m a7, v22 |
| ; RV64-NEXT: bltz a7, .LBB1_58 |
| ; RV64-NEXT: .LBB1_27: |
| ; RV64-NEXT: beq a6, a1, .LBB1_59 |
| ; RV64-NEXT: .LBB1_28: |
| ; RV64-NEXT: beq a5, a2, .LBB1_60 |
| ; RV64-NEXT: .LBB1_29: |
| ; RV64-NEXT: beq a4, a3, .LBB1_61 |
| ; RV64-NEXT: .LBB1_30: |
| ; RV64-NEXT: li a1, 1024 |
| ; RV64-NEXT: beq a0, a1, .LBB1_62 |
| ; RV64-NEXT: .LBB1_31: |
| ; RV64-NEXT: ret |
| ; RV64-NEXT: .LBB1_32: |
| ; RV64-NEXT: li a0, 128 |
| ; RV64-NEXT: vfirst.m a2, v8 |
| ; RV64-NEXT: bgez a2, .LBB1_2 |
| ; RV64-NEXT: .LBB1_33: |
| ; RV64-NEXT: li a2, 128 |
| ; RV64-NEXT: bne a0, a1, .LBB1_3 |
| ; RV64-NEXT: .LBB1_34: |
| ; RV64-NEXT: addi a0, a2, 128 |
| ; RV64-NEXT: vfirst.m a3, v9 |
| ; RV64-NEXT: bgez a3, .LBB1_4 |
| ; RV64-NEXT: .LBB1_35: |
| ; RV64-NEXT: li a3, 128 |
| ; RV64-NEXT: vfirst.m a2, v10 |
| ; RV64-NEXT: bgez a2, .LBB1_5 |
| ; RV64-NEXT: .LBB1_36: |
| ; RV64-NEXT: li a2, 128 |
| ; RV64-NEXT: bne a3, a1, .LBB1_6 |
| ; RV64-NEXT: .LBB1_37: |
| ; RV64-NEXT: addi a3, a2, 128 |
| ; RV64-NEXT: li a2, 256 |
| ; RV64-NEXT: bne a0, a2, .LBB1_7 |
| ; RV64-NEXT: .LBB1_38: |
| ; RV64-NEXT: addi a0, a3, 256 |
| ; RV64-NEXT: vfirst.m a4, v11 |
| ; RV64-NEXT: bgez a4, .LBB1_8 |
| ; RV64-NEXT: .LBB1_39: |
| ; RV64-NEXT: li a4, 128 |
| ; RV64-NEXT: vfirst.m a3, v12 |
| ; RV64-NEXT: bgez a3, .LBB1_9 |
| ; RV64-NEXT: .LBB1_40: |
| ; RV64-NEXT: li a3, 128 |
| ; RV64-NEXT: bne a4, a1, .LBB1_10 |
| ; RV64-NEXT: .LBB1_41: |
| ; RV64-NEXT: addi a4, a3, 128 |
| ; RV64-NEXT: vfirst.m a3, v13 |
| ; RV64-NEXT: bgez a3, .LBB1_11 |
| ; RV64-NEXT: .LBB1_42: |
| ; RV64-NEXT: li a3, 128 |
| ; RV64-NEXT: vfirst.m a5, v14 |
| ; RV64-NEXT: bgez a5, .LBB1_12 |
| ; RV64-NEXT: .LBB1_43: |
| ; RV64-NEXT: li a5, 128 |
| ; RV64-NEXT: bne a3, a1, .LBB1_13 |
| ; RV64-NEXT: .LBB1_44: |
| ; RV64-NEXT: addi a3, a5, 128 |
| ; RV64-NEXT: bne a4, a2, .LBB1_14 |
| ; RV64-NEXT: .LBB1_45: |
| ; RV64-NEXT: addi a4, a3, 256 |
| ; RV64-NEXT: li a3, 512 |
| ; RV64-NEXT: bne a0, a3, .LBB1_15 |
| ; RV64-NEXT: .LBB1_46: |
| ; RV64-NEXT: addi a0, a4, 512 |
| ; RV64-NEXT: vfirst.m a4, v15 |
| ; RV64-NEXT: bgez a4, .LBB1_16 |
| ; RV64-NEXT: .LBB1_47: |
| ; RV64-NEXT: li a4, 128 |
| ; RV64-NEXT: vfirst.m a5, v16 |
| ; RV64-NEXT: bgez a5, .LBB1_17 |
| ; RV64-NEXT: .LBB1_48: |
| ; RV64-NEXT: li a5, 128 |
| ; RV64-NEXT: bne a4, a1, .LBB1_18 |
| ; RV64-NEXT: .LBB1_49: |
| ; RV64-NEXT: addi a4, a5, 128 |
| ; RV64-NEXT: vfirst.m a5, v17 |
| ; RV64-NEXT: bgez a5, .LBB1_19 |
| ; RV64-NEXT: .LBB1_50: |
| ; RV64-NEXT: li a5, 128 |
| ; RV64-NEXT: vfirst.m a6, v18 |
| ; RV64-NEXT: bgez a6, .LBB1_20 |
| ; RV64-NEXT: .LBB1_51: |
| ; RV64-NEXT: li a6, 128 |
| ; RV64-NEXT: bne a5, a1, .LBB1_21 |
| ; RV64-NEXT: .LBB1_52: |
| ; RV64-NEXT: addi a5, a6, 128 |
| ; RV64-NEXT: bne a4, a2, .LBB1_22 |
| ; RV64-NEXT: .LBB1_53: |
| ; RV64-NEXT: addi a4, a5, 256 |
| ; RV64-NEXT: vfirst.m a5, v19 |
| ; RV64-NEXT: bgez a5, .LBB1_23 |
| ; RV64-NEXT: .LBB1_54: |
| ; RV64-NEXT: li a5, 128 |
| ; RV64-NEXT: vfirst.m a6, v20 |
| ; RV64-NEXT: bgez a6, .LBB1_24 |
| ; RV64-NEXT: .LBB1_55: |
| ; RV64-NEXT: li a6, 128 |
| ; RV64-NEXT: bne a5, a1, .LBB1_25 |
| ; RV64-NEXT: .LBB1_56: |
| ; RV64-NEXT: addi a5, a6, 128 |
| ; RV64-NEXT: vfirst.m a6, v21 |
| ; RV64-NEXT: bgez a6, .LBB1_26 |
| ; RV64-NEXT: .LBB1_57: |
| ; RV64-NEXT: li a6, 128 |
| ; RV64-NEXT: vfirst.m a7, v22 |
| ; RV64-NEXT: bgez a7, .LBB1_27 |
| ; RV64-NEXT: .LBB1_58: |
| ; RV64-NEXT: li a7, 128 |
| ; RV64-NEXT: bne a6, a1, .LBB1_28 |
| ; RV64-NEXT: .LBB1_59: |
| ; RV64-NEXT: addi a6, a7, 128 |
| ; RV64-NEXT: bne a5, a2, .LBB1_29 |
| ; RV64-NEXT: .LBB1_60: |
| ; RV64-NEXT: addi a5, a6, 256 |
| ; RV64-NEXT: bne a4, a3, .LBB1_30 |
| ; RV64-NEXT: .LBB1_61: |
| ; RV64-NEXT: addi a4, a5, 512 |
| ; RV64-NEXT: li a1, 1024 |
| ; RV64-NEXT: bne a0, a1, .LBB1_31 |
| ; RV64-NEXT: .LBB1_62: |
| ; RV64-NEXT: addi a0, a4, 1024 |
| ; RV64-NEXT: ret |
| %res = call i16 @llvm.experimental.cttz.elts(<2048 x i1> %a, i1 0) |
| ret i16 %res |
| } |
| |
| ; ZERO IS POISON |
| |
| define i32 @ctz_v2i1_poison(<2 x i1> %a) { |
| ; RV32-LABEL: ctz_v2i1_poison: |
| ; RV32: # %bb.0: |
| ; RV32-NEXT: vsetivli zero, 2, e8, mf8, ta, ma |
| ; RV32-NEXT: vfirst.m a0, v0 |
| ; RV32-NEXT: ret |
| ; |
| ; RV64-LABEL: ctz_v2i1_poison: |
| ; RV64: # %bb.0: |
| ; RV64-NEXT: vsetivli zero, 2, e8, mf8, ta, ma |
| ; RV64-NEXT: vfirst.m a0, v0 |
| ; RV64-NEXT: ret |
| %res = call i32 @llvm.experimental.cttz.elts.i32.v2i1(<2 x i1> %a, i1 1) |
| ret i32 %res |
| } |
| |