@@ -299,11 +299,11 @@ Z80LegalizerInfo::Z80LegalizerInfo(const Z80Subtarget &STI,
299299 G_USUBSAT, G_SSUBSAT, G_USHLSAT, G_SSHLSAT, G_FPOWI})
300300 .lower ();
301301
302- getActionDefinitionsBuilder ({G_CTTZ, G_CTTZ_ZERO_UNDEF, G_CTLZ_ZERO_UNDEF})
302+ getActionDefinitionsBuilder ({G_CTTZ_ZERO_UNDEF, G_CTLZ_ZERO_UNDEF})
303303 .lowerForCartesianProduct ({s8}, LegalLibcallScalars)
304304 .clampScalar (0 , s8, s8);
305305
306- getActionDefinitionsBuilder (G_CTLZ)
306+ getActionDefinitionsBuilder ({ G_CTLZ, G_CTTZ} )
307307 .customForCartesianProduct ({s8}, LegalLibcallScalars)
308308 .clampScalar (0 , s8, s8);
309309
@@ -374,7 +374,8 @@ LegalizerHelper::LegalizeResult Z80LegalizerInfo::legalizeCustomMaybeLegal(
374374 case G_FCANONICALIZE:
375375 return legalizeFCanonicalize (Helper, MI);
376376 case G_CTLZ:
377- return legalizeCtlz (Helper, MI);
377+ case G_CTTZ:
378+ return legalizeCtz (Helper, MI);
378379 case G_MEMCPY:
379380 case G_MEMCPY_INLINE:
380381 case G_MEMMOVE:
@@ -892,9 +893,9 @@ Z80LegalizerInfo::legalizeFCanonicalize(LegalizerHelper &Helper,
892893}
893894
894895LegalizerHelper::LegalizeResult
895- Z80LegalizerInfo::legalizeCtlz (LegalizerHelper &Helper,
896- MachineInstr &MI) const {
897- assert (MI.getOpcode () == G_CTLZ);
896+ Z80LegalizerInfo::legalizeCtz (LegalizerHelper &Helper,
897+ MachineInstr &MI) const {
898+ assert (MI.getOpcode () == G_CTLZ || MI. getOpcode () == G_CTTZ );
898899 MachineIRBuilder &MIRBuilder = Helper.MIRBuilder ;
899900 MachineRegisterInfo &MRI = *MIRBuilder.getMRI ();
900901 auto &Ctx = MIRBuilder.getMF ().getFunction ().getContext ();
@@ -910,14 +911,15 @@ Z80LegalizerInfo::legalizeCtlz(LegalizerHelper &Helper,
910911 return LegalizerHelper::UnableToLegalize;
911912
912913 RTLIB::Libcall Libcall;
914+ bool Leading = MI.getOpcode () == G_CTLZ;
913915 switch (SrcSize) {
914916 default : return LegalizerHelper::UnableToLegalize;
915- case 8 : Libcall = RTLIB::CTLZ_I8 ; break ;
916- case 16 : Libcall = RTLIB::CTLZ_I16; break ;
917- case 24 : Libcall = RTLIB::CTLZ_I24; break ;
918- case 32 : Libcall = RTLIB::CTLZ_I32; break ;
919- case 48 : Libcall = RTLIB::CTLZ_I48; break ;
920- case 64 : Libcall = RTLIB::CTLZ_I64; break ;
917+ case 8 : Libcall = Leading ? RTLIB::CTLZ_I8 : RTLIB::CTTZ_I8; break ;
918+ case 16 : Libcall = Leading ? RTLIB::CTLZ_I16 : RTLIB::CTTZ_I16 ; break ;
919+ case 24 : Libcall = Leading ? RTLIB::CTLZ_I24 : RTLIB::CTTZ_I24 ; break ;
920+ case 32 : Libcall = Leading ? RTLIB::CTLZ_I32 : RTLIB::CTTZ_I32 ; break ;
921+ case 48 : Libcall = Leading ? RTLIB::CTLZ_I48 : RTLIB::CTTZ_I48 ; break ;
922+ case 64 : Libcall = Leading ? RTLIB::CTLZ_I64 : RTLIB::CTTZ_I64 ; break ;
921923 }
922924 auto Result = createLibcall (MIRBuilder, Libcall,
923925 {DstReg, IntegerType::get (Ctx, DstSize), 0 },
0 commit comments