Skip to content

Commit 025dd59

Browse files
committed
[RISCV][GISel] Add instruction selection for G_FADD/G_FSUB/G_FMUL/G_FDIV with F/D extensions.
1 parent c2b64df commit 025dd59

File tree

2 files changed

+205
-0
lines changed

2 files changed

+205
-0
lines changed

llvm/lib/Target/RISCV/GISel/RISCVInstructionSelector.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,13 @@ const TargetRegisterClass *RISCVInstructionSelector::getRegClassForTypeOnBank(
450450
return &RISCV::GPRRegClass;
451451
}
452452

453+
if (RB.getID() == RISCV::FPRRegBankID) {
454+
if (Ty.getSizeInBits() == 32)
455+
return &RISCV::FPR32RegClass;
456+
if (Ty.getSizeInBits() == 64)
457+
return &RISCV::FPR64RegClass;
458+
}
459+
453460
// TODO: Non-GPR register classes.
454461
return nullptr;
455462
}
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -mattr=+d -run-pass=instruction-select \
3+
# RUN: -simplify-mir -verify-machineinstrs %s -o - | FileCheck %s
4+
# RUN: llc -mtriple=riscv64 -mattr=+d -run-pass=instruction-select \
5+
# RUN: -simplify-mir -verify-machineinstrs %s -o - | FileCheck %s
6+
7+
---
8+
name: fadd_f32
9+
legalized: true
10+
regBankSelected: true
11+
tracksRegLiveness: true
12+
body: |
13+
bb.0:
14+
liveins: $f10_f, $f11_f
15+
16+
; CHECK-LABEL: name: fadd_f32
17+
; CHECK: liveins: $f10_f, $f11_f
18+
; CHECK-NEXT: {{ $}}
19+
; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr32 = COPY $f10_f
20+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY $f11_f
21+
; CHECK-NEXT: [[FADD_S:%[0-9]+]]:fpr32 = nofpexcept FADD_S [[COPY]], [[COPY1]], 7
22+
; CHECK-NEXT: $f10_f = COPY [[FADD_S]]
23+
; CHECK-NEXT: PseudoRET implicit $f10_f
24+
%0:fprb(s32) = COPY $f10_f
25+
%1:fprb(s32) = COPY $f11_f
26+
%2:fprb(s32) = G_FADD %0, %1
27+
$f10_f = COPY %2(s32)
28+
PseudoRET implicit $f10_f
29+
30+
...
31+
---
32+
name: fsub_f32
33+
legalized: true
34+
regBankSelected: true
35+
tracksRegLiveness: true
36+
body: |
37+
bb.0:
38+
liveins: $f10_f, $f11_f
39+
40+
; CHECK-LABEL: name: fsub_f32
41+
; CHECK: liveins: $f10_f, $f11_f
42+
; CHECK-NEXT: {{ $}}
43+
; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr32 = COPY $f10_f
44+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY $f11_f
45+
; CHECK-NEXT: [[FSUB_S:%[0-9]+]]:fpr32 = nofpexcept FSUB_S [[COPY]], [[COPY1]], 7
46+
; CHECK-NEXT: $f10_f = COPY [[FSUB_S]]
47+
; CHECK-NEXT: PseudoRET implicit $f10_f
48+
%0:fprb(s32) = COPY $f10_f
49+
%1:fprb(s32) = COPY $f11_f
50+
%2:fprb(s32) = G_FSUB %0, %1
51+
$f10_f = COPY %2(s32)
52+
PseudoRET implicit $f10_f
53+
54+
...
55+
---
56+
name: fmul_f32
57+
legalized: true
58+
regBankSelected: true
59+
tracksRegLiveness: true
60+
body: |
61+
bb.0:
62+
liveins: $f10_f, $f11_f
63+
64+
; CHECK-LABEL: name: fmul_f32
65+
; CHECK: liveins: $f10_f, $f11_f
66+
; CHECK-NEXT: {{ $}}
67+
; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr32 = COPY $f10_f
68+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY $f11_f
69+
; CHECK-NEXT: [[FMUL_S:%[0-9]+]]:fpr32 = nofpexcept FMUL_S [[COPY]], [[COPY1]], 7
70+
; CHECK-NEXT: $f10_f = COPY [[FMUL_S]]
71+
; CHECK-NEXT: PseudoRET implicit $f10_f
72+
%0:fprb(s32) = COPY $f10_f
73+
%1:fprb(s32) = COPY $f11_f
74+
%2:fprb(s32) = G_FMUL %0, %1
75+
$f10_f = COPY %2(s32)
76+
PseudoRET implicit $f10_f
77+
78+
...
79+
---
80+
name: fdiv_f32
81+
legalized: true
82+
regBankSelected: true
83+
tracksRegLiveness: true
84+
body: |
85+
bb.0:
86+
liveins: $f10_f, $f11_f
87+
88+
; CHECK-LABEL: name: fdiv_f32
89+
; CHECK: liveins: $f10_f, $f11_f
90+
; CHECK-NEXT: {{ $}}
91+
; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr32 = COPY $f10_f
92+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY $f11_f
93+
; CHECK-NEXT: [[FDIV_S:%[0-9]+]]:fpr32 = nofpexcept FDIV_S [[COPY]], [[COPY1]], 7
94+
; CHECK-NEXT: $f10_f = COPY [[FDIV_S]]
95+
; CHECK-NEXT: PseudoRET implicit $f10_f
96+
%0:fprb(s32) = COPY $f10_f
97+
%1:fprb(s32) = COPY $f11_f
98+
%2:fprb(s32) = G_FDIV %0, %1
99+
$f10_f = COPY %2(s32)
100+
PseudoRET implicit $f10_f
101+
102+
...
103+
---
104+
name: fadd_f64
105+
legalized: true
106+
regBankSelected: true
107+
tracksRegLiveness: true
108+
body: |
109+
bb.0:
110+
liveins: $f10_d, $f11_d
111+
112+
; CHECK-LABEL: name: fadd_f64
113+
; CHECK: liveins: $f10_d, $f11_d
114+
; CHECK-NEXT: {{ $}}
115+
; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $f10_d
116+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $f11_d
117+
; CHECK-NEXT: [[FADD_D:%[0-9]+]]:fpr64 = nofpexcept FADD_D [[COPY]], [[COPY1]], 7
118+
; CHECK-NEXT: $f10_d = COPY [[FADD_D]]
119+
; CHECK-NEXT: PseudoRET implicit $f10_d
120+
%0:fprb(s64) = COPY $f10_d
121+
%1:fprb(s64) = COPY $f11_d
122+
%2:fprb(s64) = G_FADD %0, %1
123+
$f10_d = COPY %2(s64)
124+
PseudoRET implicit $f10_d
125+
126+
...
127+
---
128+
name: fsub_f64
129+
legalized: true
130+
regBankSelected: true
131+
tracksRegLiveness: true
132+
body: |
133+
bb.0:
134+
liveins: $f10_d, $f11_d
135+
136+
; CHECK-LABEL: name: fsub_f64
137+
; CHECK: liveins: $f10_d, $f11_d
138+
; CHECK-NEXT: {{ $}}
139+
; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $f10_d
140+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $f11_d
141+
; CHECK-NEXT: [[FSUB_D:%[0-9]+]]:fpr64 = nofpexcept FSUB_D [[COPY]], [[COPY1]], 7
142+
; CHECK-NEXT: $f10_d = COPY [[FSUB_D]]
143+
; CHECK-NEXT: PseudoRET implicit $f10_d
144+
%0:fprb(s64) = COPY $f10_d
145+
%1:fprb(s64) = COPY $f11_d
146+
%2:fprb(s64) = G_FSUB %0, %1
147+
$f10_d = COPY %2(s64)
148+
PseudoRET implicit $f10_d
149+
150+
...
151+
---
152+
name: fmul_f64
153+
legalized: true
154+
regBankSelected: true
155+
tracksRegLiveness: true
156+
body: |
157+
bb.0:
158+
liveins: $f10_d, $f11_d
159+
160+
; CHECK-LABEL: name: fmul_f64
161+
; CHECK: liveins: $f10_d, $f11_d
162+
; CHECK-NEXT: {{ $}}
163+
; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $f10_d
164+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $f11_d
165+
; CHECK-NEXT: [[FMUL_D:%[0-9]+]]:fpr64 = nofpexcept FMUL_D [[COPY]], [[COPY1]], 7
166+
; CHECK-NEXT: $f10_d = COPY [[FMUL_D]]
167+
; CHECK-NEXT: PseudoRET implicit $f10_d
168+
%0:fprb(s64) = COPY $f10_d
169+
%1:fprb(s64) = COPY $f11_d
170+
%2:fprb(s64) = G_FMUL %0, %1
171+
$f10_d = COPY %2(s64)
172+
PseudoRET implicit $f10_d
173+
174+
...
175+
---
176+
name: fdiv_f64
177+
legalized: true
178+
regBankSelected: true
179+
tracksRegLiveness: true
180+
body: |
181+
bb.0:
182+
liveins: $f10_d, $f11_d
183+
184+
; CHECK-LABEL: name: fdiv_f64
185+
; CHECK: liveins: $f10_d, $f11_d
186+
; CHECK-NEXT: {{ $}}
187+
; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $f10_d
188+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $f11_d
189+
; CHECK-NEXT: [[FDIV_D:%[0-9]+]]:fpr64 = nofpexcept FDIV_D [[COPY]], [[COPY1]], 7
190+
; CHECK-NEXT: $f10_d = COPY [[FDIV_D]]
191+
; CHECK-NEXT: PseudoRET implicit $f10_d
192+
%0:fprb(s64) = COPY $f10_d
193+
%1:fprb(s64) = COPY $f11_d
194+
%2:fprb(s64) = G_FDIV %0, %1
195+
$f10_d = COPY %2(s64)
196+
PseudoRET implicit $f10_d
197+
198+
...

0 commit comments

Comments
 (0)