@@ -1257,22 +1257,9 @@ LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalar(MachineInstr &MI,
1257
1257
Observer.changedInstr (MI);
1258
1258
return Legalized;
1259
1259
}
1260
- case TargetOpcode::G_FPTOUI: {
1261
- if (TypeIdx != 0 )
1262
- return UnableToLegalize;
1263
- Observer.changingInstr (MI);
1264
- narrowScalarDst (MI, NarrowTy, 0 , TargetOpcode::G_ZEXT);
1265
- Observer.changedInstr (MI);
1266
- return Legalized;
1267
- }
1268
- case TargetOpcode::G_FPTOSI: {
1269
- if (TypeIdx != 0 )
1270
- return UnableToLegalize;
1271
- Observer.changingInstr (MI);
1272
- narrowScalarDst (MI, NarrowTy, 0 , TargetOpcode::G_SEXT);
1273
- Observer.changedInstr (MI);
1274
- return Legalized;
1275
- }
1260
+ case TargetOpcode::G_FPTOUI:
1261
+ case TargetOpcode::G_FPTOSI:
1262
+ return narrowScalarFPTOI (MI, TypeIdx, NarrowTy);
1276
1263
case TargetOpcode::G_FPEXT:
1277
1264
if (TypeIdx != 0 )
1278
1265
return UnableToLegalize;
@@ -4496,6 +4483,31 @@ LegalizerHelper::narrowScalarMul(MachineInstr &MI, LLT NarrowTy) {
4496
4483
return Legalized;
4497
4484
}
4498
4485
4486
+ LegalizerHelper::LegalizeResult
4487
+ LegalizerHelper::narrowScalarFPTOI (MachineInstr &MI, unsigned TypeIdx,
4488
+ LLT NarrowTy) {
4489
+ if (TypeIdx != 0 )
4490
+ return UnableToLegalize;
4491
+
4492
+ bool IsSigned = MI.getOpcode () == TargetOpcode::G_FPTOSI;
4493
+
4494
+ Register Src = MI.getOperand (1 ).getReg ();
4495
+ LLT SrcTy = MRI.getType (Src);
4496
+
4497
+ // If all finite floats fit into the narrowed integer type, we can just swap
4498
+ // out the result type. This is practically only useful for conversions from
4499
+ // half to at least 16-bits, so just handle the one case.
4500
+ if (SrcTy.getScalarType () != LLT::scalar (16 ) ||
4501
+ NarrowTy.getScalarSizeInBits () < (IsSigned ? 17 : 16 ))
4502
+ return UnableToLegalize;
4503
+
4504
+ Observer.changingInstr (MI);
4505
+ narrowScalarDst (MI, NarrowTy, 0 ,
4506
+ IsSigned ? TargetOpcode::G_SEXT : TargetOpcode::G_ZEXT);
4507
+ Observer.changedInstr (MI);
4508
+ return Legalized;
4509
+ }
4510
+
4499
4511
LegalizerHelper::LegalizeResult
4500
4512
LegalizerHelper::narrowScalarExtract (MachineInstr &MI, unsigned TypeIdx,
4501
4513
LLT NarrowTy) {
0 commit comments