Skip to content

Commit c31a810

Browse files
committed
[RISCV] Add -mattr=+v to intrinsic-cttz-elts.ll. NFC
1 parent f9d761d commit c31a810

File tree

1 file changed

+38
-70
lines changed

1 file changed

+38
-70
lines changed

llvm/test/CodeGen/RISCV/intrinsic-cttz-elts.ll

Lines changed: 38 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,39 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2-
; RUN: llc -mtriple=riscv32 < %s | FileCheck %s -check-prefix=RV32
3-
; RUN: llc -mtriple=riscv64 < %s | FileCheck %s -check-prefix=RV64
2+
; RUN: llc -mtriple=riscv32 -mattr=+v < %s | FileCheck %s -check-prefix=RV32
3+
; RUN: llc -mtriple=riscv64 -mattr=+v < %s | FileCheck %s -check-prefix=RV64
44

55
; FIXED WIDTH
66

77
define i16 @ctz_v4i32(<4 x i32> %a) {
88
; RV32-LABEL: ctz_v4i32:
99
; RV32: # %bb.0:
10-
; RV32-NEXT: lw a3, 0(a0)
11-
; RV32-NEXT: lw a1, 4(a0)
12-
; RV32-NEXT: lw a2, 12(a0)
13-
; RV32-NEXT: lw a4, 8(a0)
14-
; RV32-NEXT: seqz a0, a3
15-
; RV32-NEXT: addi a0, a0, -1
16-
; RV32-NEXT: andi a0, a0, 4
17-
; RV32-NEXT: seqz a3, a4
18-
; RV32-NEXT: addi a3, a3, -1
19-
; RV32-NEXT: andi a3, a3, 2
20-
; RV32-NEXT: bltu a3, a0, .LBB0_2
21-
; RV32-NEXT: # %bb.1:
22-
; RV32-NEXT: mv a0, a3
23-
; RV32-NEXT: .LBB0_2:
24-
; RV32-NEXT: snez a2, a2
25-
; RV32-NEXT: seqz a1, a1
26-
; RV32-NEXT: addi a1, a1, -1
27-
; RV32-NEXT: andi a1, a1, 3
28-
; RV32-NEXT: bltu a2, a1, .LBB0_4
29-
; RV32-NEXT: # %bb.3:
30-
; RV32-NEXT: mv a1, a2
31-
; RV32-NEXT: .LBB0_4:
32-
; RV32-NEXT: bltu a1, a0, .LBB0_6
33-
; RV32-NEXT: # %bb.5:
34-
; RV32-NEXT: mv a0, a1
35-
; RV32-NEXT: .LBB0_6:
10+
; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
11+
; RV32-NEXT: vmsne.vi v0, v8, 0
12+
; RV32-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
13+
; RV32-NEXT: vmv.v.i v8, 0
14+
; RV32-NEXT: vmerge.vim v8, v8, -1, v0
15+
; RV32-NEXT: vid.v v9
16+
; RV32-NEXT: vrsub.vi v9, v9, 4
17+
; RV32-NEXT: vand.vv v8, v8, v9
18+
; RV32-NEXT: vredmaxu.vs v8, v8, v8
19+
; RV32-NEXT: vmv.x.s a0, v8
3620
; RV32-NEXT: li a1, 4
3721
; RV32-NEXT: sub a1, a1, a0
3822
; RV32-NEXT: andi a0, a1, 255
3923
; RV32-NEXT: ret
4024
;
4125
; RV64-LABEL: ctz_v4i32:
4226
; RV64: # %bb.0:
43-
; RV64-NEXT: lw a3, 0(a0)
44-
; RV64-NEXT: lw a1, 8(a0)
45-
; RV64-NEXT: lw a2, 24(a0)
46-
; RV64-NEXT: lw a4, 16(a0)
47-
; RV64-NEXT: seqz a0, a3
48-
; RV64-NEXT: addi a0, a0, -1
49-
; RV64-NEXT: andi a0, a0, 4
50-
; RV64-NEXT: seqz a3, a4
51-
; RV64-NEXT: addi a3, a3, -1
52-
; RV64-NEXT: andi a3, a3, 2
53-
; RV64-NEXT: bltu a3, a0, .LBB0_2
54-
; RV64-NEXT: # %bb.1:
55-
; RV64-NEXT: mv a0, a3
56-
; RV64-NEXT: .LBB0_2:
57-
; RV64-NEXT: snez a2, a2
58-
; RV64-NEXT: seqz a1, a1
59-
; RV64-NEXT: addi a1, a1, -1
60-
; RV64-NEXT: andi a1, a1, 3
61-
; RV64-NEXT: bltu a2, a1, .LBB0_4
62-
; RV64-NEXT: # %bb.3:
63-
; RV64-NEXT: mv a1, a2
64-
; RV64-NEXT: .LBB0_4:
65-
; RV64-NEXT: bltu a1, a0, .LBB0_6
66-
; RV64-NEXT: # %bb.5:
67-
; RV64-NEXT: mv a0, a1
68-
; RV64-NEXT: .LBB0_6:
27+
; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma
28+
; RV64-NEXT: vmsne.vi v0, v8, 0
29+
; RV64-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
30+
; RV64-NEXT: vmv.v.i v8, 0
31+
; RV64-NEXT: vmerge.vim v8, v8, -1, v0
32+
; RV64-NEXT: vid.v v9
33+
; RV64-NEXT: vrsub.vi v9, v9, 4
34+
; RV64-NEXT: vand.vv v8, v8, v9
35+
; RV64-NEXT: vredmaxu.vs v8, v8, v8
36+
; RV64-NEXT: vmv.x.s a0, v8
6937
; RV64-NEXT: li a1, 4
7038
; RV64-NEXT: subw a1, a1, a0
7139
; RV64-NEXT: andi a0, a1, 255
@@ -79,29 +47,29 @@ define i16 @ctz_v4i32(<4 x i32> %a) {
7947
define i32 @ctz_v2i1_poison(<2 x i1> %a) {
8048
; RV32-LABEL: ctz_v2i1_poison:
8149
; RV32: # %bb.0:
82-
; RV32-NEXT: andi a1, a1, 1
83-
; RV32-NEXT: slli a0, a0, 31
84-
; RV32-NEXT: srai a0, a0, 31
85-
; RV32-NEXT: andi a0, a0, 2
86-
; RV32-NEXT: bltu a1, a0, .LBB1_2
87-
; RV32-NEXT: # %bb.1:
88-
; RV32-NEXT: mv a0, a1
89-
; RV32-NEXT: .LBB1_2:
50+
; RV32-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
51+
; RV32-NEXT: vmv.v.i v8, 0
52+
; RV32-NEXT: vmerge.vim v8, v8, -1, v0
53+
; RV32-NEXT: vid.v v9
54+
; RV32-NEXT: vrsub.vi v9, v9, 2
55+
; RV32-NEXT: vand.vv v8, v8, v9
56+
; RV32-NEXT: vredmaxu.vs v8, v8, v8
57+
; RV32-NEXT: vmv.x.s a0, v8
9058
; RV32-NEXT: li a1, 2
9159
; RV32-NEXT: sub a1, a1, a0
9260
; RV32-NEXT: andi a0, a1, 255
9361
; RV32-NEXT: ret
9462
;
9563
; RV64-LABEL: ctz_v2i1_poison:
9664
; RV64: # %bb.0:
97-
; RV64-NEXT: andi a1, a1, 1
98-
; RV64-NEXT: slli a0, a0, 63
99-
; RV64-NEXT: srai a0, a0, 63
100-
; RV64-NEXT: andi a0, a0, 2
101-
; RV64-NEXT: bltu a1, a0, .LBB1_2
102-
; RV64-NEXT: # %bb.1:
103-
; RV64-NEXT: mv a0, a1
104-
; RV64-NEXT: .LBB1_2:
65+
; RV64-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
66+
; RV64-NEXT: vmv.v.i v8, 0
67+
; RV64-NEXT: vmerge.vim v8, v8, -1, v0
68+
; RV64-NEXT: vid.v v9
69+
; RV64-NEXT: vrsub.vi v9, v9, 2
70+
; RV64-NEXT: vand.vv v8, v8, v9
71+
; RV64-NEXT: vredmaxu.vs v8, v8, v8
72+
; RV64-NEXT: vmv.x.s a0, v8
10573
; RV64-NEXT: li a1, 2
10674
; RV64-NEXT: subw a1, a1, a0
10775
; RV64-NEXT: andi a0, a1, 255

0 commit comments

Comments
 (0)