File tree 5 files changed +179
-0
lines changed
test/CodeGen/RISCV/GlobalISel 5 files changed +179
-0
lines changed Original file line number Diff line number Diff line change @@ -197,6 +197,17 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST) {
197
197
(ST.hasStdExtD () && typeIs (0 , s64)(Query));
198
198
});
199
199
200
+ getActionDefinitionsBuilder (G_FPTRUNC).legalIf (
201
+ [=, &ST](const LegalityQuery &Query) -> bool {
202
+ return (ST.hasStdExtD () && typeIs (0 , s32)(Query) &&
203
+ typeIs (1 , s64)(Query));
204
+ });
205
+ getActionDefinitionsBuilder (G_FPEXT).legalIf (
206
+ [=, &ST](const LegalityQuery &Query) -> bool {
207
+ return (ST.hasStdExtD () && typeIs (0 , s64)(Query) &&
208
+ typeIs (1 , s32)(Query));
209
+ });
210
+
200
211
getLegacyLegalizerInfo ().computeTables ();
201
212
}
202
213
Original file line number Diff line number Diff line change @@ -204,6 +204,30 @@ RISCVRegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
204
204
&RISCV::ValueMappings[RISCV::FPR32Idx]});
205
205
break ;
206
206
}
207
+ case TargetOpcode::G_FPEXT: {
208
+ LLT ToTy = MRI.getType (MI.getOperand (0 ).getReg ());
209
+ (void )ToTy;
210
+ LLT FromTy = MRI.getType (MI.getOperand (1 ).getReg ());
211
+ (void )FromTy;
212
+ assert (ToTy.getSizeInBits () == 64 && FromTy.getSizeInBits () == 32 &&
213
+ " Unsupported size for G_FPEXT" );
214
+ OperandsMapping =
215
+ getOperandsMapping ({&RISCV::ValueMappings[RISCV::FPR64Idx],
216
+ &RISCV::ValueMappings[RISCV::FPR32Idx]});
217
+ break ;
218
+ }
219
+ case TargetOpcode::G_FPTRUNC: {
220
+ LLT ToTy = MRI.getType (MI.getOperand (0 ).getReg ());
221
+ (void )ToTy;
222
+ LLT FromTy = MRI.getType (MI.getOperand (1 ).getReg ());
223
+ (void )FromTy;
224
+ assert (ToTy.getSizeInBits () == 32 && FromTy.getSizeInBits () == 64 &&
225
+ " Unsupported size for G_FPTRUNC" );
226
+ OperandsMapping =
227
+ getOperandsMapping ({&RISCV::ValueMappings[RISCV::FPR32Idx],
228
+ &RISCV::ValueMappings[RISCV::FPR64Idx]});
229
+ break ;
230
+ }
207
231
default :
208
232
return getInvalidInstructionMapping ();
209
233
}
Original file line number Diff line number Diff line change
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 : fpext
9
+ legalized : true
10
+ regBankSelected : true
11
+ tracksRegLiveness : true
12
+ body : |
13
+ bb.1:
14
+ liveins: $f10_f
15
+
16
+ ; CHECK-LABEL: name: fpext
17
+ ; CHECK: liveins: $f10_f
18
+ ; CHECK-NEXT: {{ $}}
19
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr32 = COPY $f10_f
20
+ ; CHECK-NEXT: [[FCVT_D_S:%[0-9]+]]:fpr64 = nofpexcept FCVT_D_S [[COPY]], 0
21
+ ; CHECK-NEXT: $f10_d = COPY [[FCVT_D_S]]
22
+ ; CHECK-NEXT: PseudoRET implicit $f10_d
23
+ %0:fprb(s32) = COPY $f10_f
24
+ %1:fprb(s64) = G_FPEXT %0(s32)
25
+ $f10_d = COPY %1(s64)
26
+ PseudoRET implicit $f10_d
27
+
28
+ ...
29
+ ---
30
+ name : fptrunc
31
+ legalized : true
32
+ regBankSelected : true
33
+ tracksRegLiveness : true
34
+ body : |
35
+ bb.1:
36
+ liveins: $f10_d
37
+
38
+ ; CHECK-LABEL: name: fptrunc
39
+ ; CHECK: liveins: $f10_d
40
+ ; CHECK-NEXT: {{ $}}
41
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $f10_d
42
+ ; CHECK-NEXT: [[FCVT_S_D:%[0-9]+]]:fpr32 = nofpexcept FCVT_S_D [[COPY]], 7
43
+ ; CHECK-NEXT: $f10_f = COPY [[FCVT_S_D]]
44
+ ; CHECK-NEXT: PseudoRET implicit $f10_f
45
+ %0:fprb(s64) = COPY $f10_d
46
+ %1:fprb(s32) = G_FPTRUNC %0(s64)
47
+ $f10_f = COPY %1(s32)
48
+ PseudoRET implicit $f10_f
49
+
50
+ ...
Original file line number Diff line number Diff line change
1
+ # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3
2
+ # RUN: llc -mtriple=riscv32 -mattr=+d -run-pass=legalizer %s -o - \
3
+ # RUN: | FileCheck %s
4
+ # RUN: llc -mtriple=riscv64 -mattr=+d -run-pass=legalizer %s -o - \
5
+ # RUN: | FileCheck %s
6
+
7
+ ---
8
+ name : fpext
9
+ body : |
10
+ bb.1:
11
+ liveins: $f10_f
12
+
13
+ ; CHECK-LABEL: name: fpext
14
+ ; CHECK: liveins: $f10_f
15
+ ; CHECK-NEXT: {{ $}}
16
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f
17
+ ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(s64) = G_FPEXT [[COPY]](s32)
18
+ ; CHECK-NEXT: $f10_d = COPY [[FPEXT]](s64)
19
+ ; CHECK-NEXT: PseudoRET implicit $f10_d
20
+ %0:_(s32) = COPY $f10_f
21
+ %1:_(s64) = G_FPEXT %0(s32)
22
+ $f10_d = COPY %1(s64)
23
+ PseudoRET implicit $f10_d
24
+
25
+ ...
26
+ ---
27
+ name : fptrunc
28
+ body : |
29
+ bb.1:
30
+ liveins: $f10_d
31
+
32
+ ; CHECK-LABEL: name: fptrunc
33
+ ; CHECK: liveins: $f10_d
34
+ ; CHECK-NEXT: {{ $}}
35
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $f10_d
36
+ ; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s32) = G_FPTRUNC [[COPY]](s64)
37
+ ; CHECK-NEXT: $f10_f = COPY [[FPTRUNC]](s32)
38
+ ; CHECK-NEXT: PseudoRET implicit $f10_f
39
+ %0:_(s64) = COPY $f10_d
40
+ %1:_(s32) = G_FPTRUNC %0(s64)
41
+ $f10_f = COPY %1(s32)
42
+ PseudoRET implicit $f10_f
43
+
44
+ ...
Original file line number Diff line number Diff line change
1
+ # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2
+ # RUN: llc -mtriple=riscv32 -mattr=+d -run-pass=regbankselect \
3
+ # RUN: -simplify-mir -verify-machineinstrs %s \
4
+ # RUN: -o - | FileCheck %s
5
+ # RUN: llc -mtriple=riscv64 -mattr=+d -run-pass=regbankselect \
6
+ # RUN: -simplify-mir -verify-machineinstrs %s \
7
+ # RUN: -o - | FileCheck %s
8
+
9
+ ---
10
+ name : fpext
11
+ legalized : true
12
+ tracksRegLiveness : true
13
+ body : |
14
+ bb.1:
15
+ liveins: $f10_f
16
+
17
+ ; CHECK-LABEL: name: fpext
18
+ ; CHECK: liveins: $f10_f
19
+ ; CHECK-NEXT: {{ $}}
20
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:fprb(s32) = COPY $f10_f
21
+ ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:fprb(s64) = G_FPEXT [[COPY]](s32)
22
+ ; CHECK-NEXT: $f10_d = COPY [[FPEXT]](s64)
23
+ ; CHECK-NEXT: PseudoRET implicit $f10_d
24
+ %0:_(s32) = COPY $f10_f
25
+ %1:_(s64) = G_FPEXT %0(s32)
26
+ $f10_d = COPY %1(s64)
27
+ PseudoRET implicit $f10_d
28
+
29
+ ...
30
+ ---
31
+ name : fptrunc
32
+ legalized : true
33
+ tracksRegLiveness : true
34
+ body : |
35
+ bb.1:
36
+ liveins: $f10_d
37
+
38
+ ; CHECK-LABEL: name: fptrunc
39
+ ; CHECK: liveins: $f10_d
40
+ ; CHECK-NEXT: {{ $}}
41
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:fprb(s64) = COPY $f10_d
42
+ ; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:fprb(s32) = G_FPTRUNC [[COPY]](s64)
43
+ ; CHECK-NEXT: $f10_f = COPY [[FPTRUNC]](s32)
44
+ ; CHECK-NEXT: PseudoRET implicit $f10_f
45
+ %0:_(s64) = COPY $f10_d
46
+ %1:_(s32) = G_FPTRUNC %0(s64)
47
+ $f10_f = COPY %1(s32)
48
+ PseudoRET implicit $f10_f
49
+
50
+ ...
You can’t perform that action at this time.
0 commit comments