@@ -1257,22 +1257,9 @@ LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalar(MachineInstr &MI,
12571257 Observer.changedInstr (MI);
12581258 return Legalized;
12591259 }
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);
12761263 case TargetOpcode::G_FPEXT:
12771264 if (TypeIdx != 0 )
12781265 return UnableToLegalize;
@@ -4496,6 +4483,31 @@ LegalizerHelper::narrowScalarMul(MachineInstr &MI, LLT NarrowTy) {
44964483 return Legalized;
44974484}
44984485
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+
44994511LegalizerHelper::LegalizeResult
45004512LegalizerHelper::narrowScalarExtract (MachineInstr &MI, unsigned TypeIdx,
45014513 LLT NarrowTy) {
0 commit comments