Skip to content

Commit 478ec63

Browse files
authored
[RISCV] Mark VFIRST and VCPOP as SignExtendingOpW (#77022)
Since their values are small enough ([-1, 65535] & [0, 65535], respectively) to fit into signed 32 bits, any sext (or downcasting + sext) will be redundnat. Hence marking them as SignExtendingOpW.
1 parent 5cbf74b commit 478ec63

File tree

2 files changed

+63
-15
lines changed

2 files changed

+63
-15
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6719,12 +6719,14 @@ defm PseudoVMSET : VPseudoNullaryPseudoM<"VMXNOR">;
67196719
// 15.2. Vector mask population count vcpop
67206720
//===----------------------------------------------------------------------===//
67216721

6722+
let IsSignExtendingOpW = 1 in
67226723
defm PseudoVCPOP: VPseudoVPOP_M;
67236724

67246725
//===----------------------------------------------------------------------===//
67256726
// 15.3. vfirst find-first-set mask bit
67266727
//===----------------------------------------------------------------------===//
67276728

6729+
let IsSignExtendingOpW = 1 in
67286730
defm PseudoVFIRST: VPseudoV1ST_M;
67296731

67306732
//===----------------------------------------------------------------------===//
Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3
2-
# RUN: llc -mtriple=riscv64 -mattr='+d,+zfa' -verify-machineinstrs -run-pass=riscv-opt-w-instrs %s -o - | FileCheck %s --check-prefix=CHECK-ZFA
2+
# RUN: llc -mtriple=riscv64 -mattr='+d,+zfa,+v' -verify-machineinstrs -run-pass=riscv-opt-w-instrs %s -o - | FileCheck %s
33

44
---
55
name: fcvtmod_w_d
@@ -8,13 +8,13 @@ body: |
88
bb.0.entry:
99
liveins: $x10
1010
11-
; CHECK-ZFA-LABEL: name: fcvtmod_w_d
12-
; CHECK-ZFA: liveins: $x10
13-
; CHECK-ZFA-NEXT: {{ $}}
14-
; CHECK-ZFA-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $x10
15-
; CHECK-ZFA-NEXT: [[FCVTMOD_W_D:%[0-9]+]]:gpr = nofpexcept FCVTMOD_W_D [[COPY]], 1
16-
; CHECK-ZFA-NEXT: $x10 = COPY [[FCVTMOD_W_D]]
17-
; CHECK-ZFA-NEXT: PseudoRET
11+
; CHECK-LABEL: name: fcvtmod_w_d
12+
; CHECK: liveins: $x10
13+
; CHECK-NEXT: {{ $}}
14+
; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $x10
15+
; CHECK-NEXT: [[FCVTMOD_W_D:%[0-9]+]]:gpr = nofpexcept FCVTMOD_W_D [[COPY]], 1
16+
; CHECK-NEXT: $x10 = COPY [[FCVTMOD_W_D]]
17+
; CHECK-NEXT: PseudoRET
1818
%0:fpr64 = COPY $x10
1919
2020
%1:gpr = nofpexcept FCVTMOD_W_D %0, 1
@@ -30,15 +30,61 @@ body: |
3030
bb.0.entry:
3131
liveins: $x10, $x11
3232
33-
; CHECK-ZFA-LABEL: name: physreg
34-
; CHECK-ZFA: liveins: $x10, $x11
35-
; CHECK-ZFA-NEXT: {{ $}}
36-
; CHECK-ZFA-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
37-
; CHECK-ZFA-NEXT: [[ADDIW:%[0-9]+]]:gpr = ADDIW [[COPY]], 0
38-
; CHECK-ZFA-NEXT: $x10 = COPY [[ADDIW]]
39-
; CHECK-ZFA-NEXT: PseudoRET
33+
; CHECK-LABEL: name: physreg
34+
; CHECK: liveins: $x10, $x11
35+
; CHECK-NEXT: {{ $}}
36+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
37+
; CHECK-NEXT: [[ADDIW:%[0-9]+]]:gpr = ADDIW [[COPY]], 0
38+
; CHECK-NEXT: $x10 = COPY [[ADDIW]]
39+
; CHECK-NEXT: PseudoRET
4040
%0:gpr = COPY $x10
4141
%1:gpr = ADDIW %0, 0
4242
$x10 = COPY %1
4343
PseudoRET
4444
...
45+
---
46+
name: vfirst
47+
tracksRegLiveness: true
48+
body: |
49+
bb.0.entry:
50+
liveins: $x10, $v8
51+
52+
; CHECK-LABEL: name: vfirst
53+
; CHECK: liveins: $x10, $v8
54+
; CHECK-NEXT: {{ $}}
55+
; CHECK-NEXT: [[COPY:%[0-9]+]]:vr = COPY $v8
56+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gprnox0 = COPY $x10
57+
; CHECK-NEXT: [[PseudoVFIRST_M_B1_:%[0-9]+]]:gpr = PseudoVFIRST_M_B1 [[COPY]], [[COPY1]], 0 /* e8 */
58+
; CHECK-NEXT: $x11 = COPY [[PseudoVFIRST_M_B1_]]
59+
; CHECK-NEXT: PseudoRET
60+
%0:vr = COPY $v8
61+
%1:gprnox0 = COPY $x10
62+
63+
%2:gpr = PseudoVFIRST_M_B1 %0:vr, %1:gprnox0, 0
64+
%3:gpr = ADDIW %2, 0
65+
$x11 = COPY %3
66+
PseudoRET
67+
...
68+
---
69+
name: vcpop
70+
tracksRegLiveness: true
71+
body: |
72+
bb.0.entry:
73+
liveins: $x10, $v8
74+
75+
; CHECK-LABEL: name: vcpop
76+
; CHECK: liveins: $x10, $v8
77+
; CHECK-NEXT: {{ $}}
78+
; CHECK-NEXT: [[COPY:%[0-9]+]]:vr = COPY $v8
79+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gprnox0 = COPY $x10
80+
; CHECK-NEXT: [[PseudoVCPOP_M_B1_:%[0-9]+]]:gpr = PseudoVCPOP_M_B1 [[COPY]], [[COPY1]], 0 /* e8 */
81+
; CHECK-NEXT: $x11 = COPY [[PseudoVCPOP_M_B1_]]
82+
; CHECK-NEXT: PseudoRET
83+
%0:vr = COPY $v8
84+
%1:gprnox0 = COPY $x10
85+
86+
%2:gpr = PseudoVCPOP_M_B1 %0:vr, %1:gprnox0, 0
87+
%3:gpr = ADDIW %2, 0
88+
$x11 = COPY %3
89+
PseudoRET
90+
...

0 commit comments

Comments
 (0)