@@ -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