diff options
Diffstat (limited to 'lib/Target/Hexagon/HexagonInstrInfo.cpp')
| -rw-r--r-- | lib/Target/Hexagon/HexagonInstrInfo.cpp | 1009 | 
1 files changed, 2 insertions, 1007 deletions
diff --git a/lib/Target/Hexagon/HexagonInstrInfo.cpp b/lib/Target/Hexagon/HexagonInstrInfo.cpp index 8685ec192c7e4..77b366372cf8e 100644 --- a/lib/Target/Hexagon/HexagonInstrInfo.cpp +++ b/lib/Target/Hexagon/HexagonInstrInfo.cpp @@ -11,10 +11,10 @@  //  //===----------------------------------------------------------------------===// +#include "Hexagon.h"  #include "HexagonInstrInfo.h"  #include "HexagonRegisterInfo.h"  #include "HexagonSubtarget.h" -#include "Hexagon.h"  #include "llvm/ADT/STLExtras.h"  #include "llvm/ADT/SmallVector.h"  #include "llvm/CodeGen/DFAPacketizer.h" @@ -466,865 +466,7 @@ unsigned HexagonInstrInfo::createVR(MachineFunction* MF, MVT VT) const {    return NewReg;  } -bool HexagonInstrInfo::isExtendable(const MachineInstr *MI) const { -  switch(MI->getOpcode()) { -    // JMP_EQri -    case Hexagon::JMP_EQriPt_nv_V4: -    case Hexagon::JMP_EQriPnt_nv_V4: -    case Hexagon::JMP_EQriNotPt_nv_V4: -    case Hexagon::JMP_EQriNotPnt_nv_V4: - -    // JMP_EQri - with -1 -    case Hexagon::JMP_EQriPtneg_nv_V4: -    case Hexagon::JMP_EQriPntneg_nv_V4: -    case Hexagon::JMP_EQriNotPtneg_nv_V4: -    case Hexagon::JMP_EQriNotPntneg_nv_V4: - -    // JMP_EQrr -    case Hexagon::JMP_EQrrPt_nv_V4: -    case Hexagon::JMP_EQrrPnt_nv_V4: -    case Hexagon::JMP_EQrrNotPt_nv_V4: -    case Hexagon::JMP_EQrrNotPnt_nv_V4: - -    // JMP_GTri -    case Hexagon::JMP_GTriPt_nv_V4: -    case Hexagon::JMP_GTriPnt_nv_V4: -    case Hexagon::JMP_GTriNotPt_nv_V4: -    case Hexagon::JMP_GTriNotPnt_nv_V4: - -    // JMP_GTri - with -1 -    case Hexagon::JMP_GTriPtneg_nv_V4: -    case Hexagon::JMP_GTriPntneg_nv_V4: -    case Hexagon::JMP_GTriNotPtneg_nv_V4: -    case Hexagon::JMP_GTriNotPntneg_nv_V4: - -    // JMP_GTrr -    case Hexagon::JMP_GTrrPt_nv_V4: -    case Hexagon::JMP_GTrrPnt_nv_V4: -    case Hexagon::JMP_GTrrNotPt_nv_V4: -    case Hexagon::JMP_GTrrNotPnt_nv_V4: - -    // JMP_GTrrdn -    case Hexagon::JMP_GTrrdnPt_nv_V4: -    case Hexagon::JMP_GTrrdnPnt_nv_V4: -    case Hexagon::JMP_GTrrdnNotPt_nv_V4: -    case Hexagon::JMP_GTrrdnNotPnt_nv_V4: - -    // JMP_GTUri -    case Hexagon::JMP_GTUriPt_nv_V4: -    case Hexagon::JMP_GTUriPnt_nv_V4: -    case Hexagon::JMP_GTUriNotPt_nv_V4: -    case Hexagon::JMP_GTUriNotPnt_nv_V4: - -    // JMP_GTUrr -    case Hexagon::JMP_GTUrrPt_nv_V4: -    case Hexagon::JMP_GTUrrPnt_nv_V4: -    case Hexagon::JMP_GTUrrNotPt_nv_V4: -    case Hexagon::JMP_GTUrrNotPnt_nv_V4: - -    // JMP_GTUrrdn -    case Hexagon::JMP_GTUrrdnPt_nv_V4: -    case Hexagon::JMP_GTUrrdnPnt_nv_V4: -    case Hexagon::JMP_GTUrrdnNotPt_nv_V4: -    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4: -      return true; - -    // TFR_FI -    case Hexagon::TFR_FI: -      return true; - - -    default: -      return false; -  } -  return  false; -} - -bool HexagonInstrInfo::isExtended(const MachineInstr *MI) const { -  switch(MI->getOpcode()) { -    // JMP_EQri -    case Hexagon::JMP_EQriPt_ie_nv_V4: -    case Hexagon::JMP_EQriPnt_ie_nv_V4: -    case Hexagon::JMP_EQriNotPt_ie_nv_V4: -    case Hexagon::JMP_EQriNotPnt_ie_nv_V4: - -    // JMP_EQri - with -1 -    case Hexagon::JMP_EQriPtneg_ie_nv_V4: -    case Hexagon::JMP_EQriPntneg_ie_nv_V4: -    case Hexagon::JMP_EQriNotPtneg_ie_nv_V4: -    case Hexagon::JMP_EQriNotPntneg_ie_nv_V4: - -    // JMP_EQrr -    case Hexagon::JMP_EQrrPt_ie_nv_V4: -    case Hexagon::JMP_EQrrPnt_ie_nv_V4: -    case Hexagon::JMP_EQrrNotPt_ie_nv_V4: -    case Hexagon::JMP_EQrrNotPnt_ie_nv_V4: - -    // JMP_GTri -    case Hexagon::JMP_GTriPt_ie_nv_V4: -    case Hexagon::JMP_GTriPnt_ie_nv_V4: -    case Hexagon::JMP_GTriNotPt_ie_nv_V4: -    case Hexagon::JMP_GTriNotPnt_ie_nv_V4: - -    // JMP_GTri - with -1 -    case Hexagon::JMP_GTriPtneg_ie_nv_V4: -    case Hexagon::JMP_GTriPntneg_ie_nv_V4: -    case Hexagon::JMP_GTriNotPtneg_ie_nv_V4: -    case Hexagon::JMP_GTriNotPntneg_ie_nv_V4: - -    // JMP_GTrr -    case Hexagon::JMP_GTrrPt_ie_nv_V4: -    case Hexagon::JMP_GTrrPnt_ie_nv_V4: -    case Hexagon::JMP_GTrrNotPt_ie_nv_V4: -    case Hexagon::JMP_GTrrNotPnt_ie_nv_V4: - -    // JMP_GTrrdn -    case Hexagon::JMP_GTrrdnPt_ie_nv_V4: -    case Hexagon::JMP_GTrrdnPnt_ie_nv_V4: -    case Hexagon::JMP_GTrrdnNotPt_ie_nv_V4: -    case Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4: - -    // JMP_GTUri -    case Hexagon::JMP_GTUriPt_ie_nv_V4: -    case Hexagon::JMP_GTUriPnt_ie_nv_V4: -    case Hexagon::JMP_GTUriNotPt_ie_nv_V4: -    case Hexagon::JMP_GTUriNotPnt_ie_nv_V4: - -    // JMP_GTUrr -    case Hexagon::JMP_GTUrrPt_ie_nv_V4: -    case Hexagon::JMP_GTUrrPnt_ie_nv_V4: -    case Hexagon::JMP_GTUrrNotPt_ie_nv_V4: -    case Hexagon::JMP_GTUrrNotPnt_ie_nv_V4: - -    // JMP_GTUrrdn -    case Hexagon::JMP_GTUrrdnPt_ie_nv_V4: -    case Hexagon::JMP_GTUrrdnPnt_ie_nv_V4: -    case Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4: -    case Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4: - -    // V4 absolute set addressing. -    case Hexagon::LDrid_abs_setimm_V4: -    case Hexagon::LDriw_abs_setimm_V4: -    case Hexagon::LDrih_abs_setimm_V4: -    case Hexagon::LDrib_abs_setimm_V4: -    case Hexagon::LDriuh_abs_setimm_V4: -    case Hexagon::LDriub_abs_setimm_V4: - -    case Hexagon::STrid_abs_setimm_V4: -    case Hexagon::STrib_abs_setimm_V4: -    case Hexagon::STrih_abs_setimm_V4: -    case Hexagon::STriw_abs_setimm_V4: - -    // V4 global address load. -    case Hexagon::LDrid_GP_cPt_V4 : -    case Hexagon::LDrid_GP_cNotPt_V4 : -    case Hexagon::LDrid_GP_cdnPt_V4 : -    case Hexagon::LDrid_GP_cdnNotPt_V4 : -    case Hexagon::LDrib_GP_cPt_V4 : -    case Hexagon::LDrib_GP_cNotPt_V4 : -    case Hexagon::LDrib_GP_cdnPt_V4 : -    case Hexagon::LDrib_GP_cdnNotPt_V4 : -    case Hexagon::LDriub_GP_cPt_V4 : -    case Hexagon::LDriub_GP_cNotPt_V4 : -    case Hexagon::LDriub_GP_cdnPt_V4 : -    case Hexagon::LDriub_GP_cdnNotPt_V4 : -    case Hexagon::LDrih_GP_cPt_V4 : -    case Hexagon::LDrih_GP_cNotPt_V4 : -    case Hexagon::LDrih_GP_cdnPt_V4 : -    case Hexagon::LDrih_GP_cdnNotPt_V4 : -    case Hexagon::LDriuh_GP_cPt_V4 : -    case Hexagon::LDriuh_GP_cNotPt_V4 : -    case Hexagon::LDriuh_GP_cdnPt_V4 : -    case Hexagon::LDriuh_GP_cdnNotPt_V4 : -    case Hexagon::LDriw_GP_cPt_V4 : -    case Hexagon::LDriw_GP_cNotPt_V4 : -    case Hexagon::LDriw_GP_cdnPt_V4 : -    case Hexagon::LDriw_GP_cdnNotPt_V4 : -    case Hexagon::LDd_GP_cPt_V4 : -    case Hexagon::LDd_GP_cNotPt_V4 : -    case Hexagon::LDd_GP_cdnPt_V4 : -    case Hexagon::LDd_GP_cdnNotPt_V4 : -    case Hexagon::LDb_GP_cPt_V4 : -    case Hexagon::LDb_GP_cNotPt_V4 : -    case Hexagon::LDb_GP_cdnPt_V4 : -    case Hexagon::LDb_GP_cdnNotPt_V4 : -    case Hexagon::LDub_GP_cPt_V4 : -    case Hexagon::LDub_GP_cNotPt_V4 : -    case Hexagon::LDub_GP_cdnPt_V4 : -    case Hexagon::LDub_GP_cdnNotPt_V4 : -    case Hexagon::LDh_GP_cPt_V4 : -    case Hexagon::LDh_GP_cNotPt_V4 : -    case Hexagon::LDh_GP_cdnPt_V4 : -    case Hexagon::LDh_GP_cdnNotPt_V4 : -    case Hexagon::LDuh_GP_cPt_V4 : -    case Hexagon::LDuh_GP_cNotPt_V4 : -    case Hexagon::LDuh_GP_cdnPt_V4 : -    case Hexagon::LDuh_GP_cdnNotPt_V4 : -    case Hexagon::LDw_GP_cPt_V4 : -    case Hexagon::LDw_GP_cNotPt_V4 : -    case Hexagon::LDw_GP_cdnPt_V4 : -    case Hexagon::LDw_GP_cdnNotPt_V4 : - -    // V4 global address store. -    case Hexagon::STrid_GP_cPt_V4 : -    case Hexagon::STrid_GP_cNotPt_V4 : -    case Hexagon::STrid_GP_cdnPt_V4 : -    case Hexagon::STrid_GP_cdnNotPt_V4 : -    case Hexagon::STrib_GP_cPt_V4 : -    case Hexagon::STrib_GP_cNotPt_V4 : -    case Hexagon::STrib_GP_cdnPt_V4 : -    case Hexagon::STrib_GP_cdnNotPt_V4 : -    case Hexagon::STrih_GP_cPt_V4 : -    case Hexagon::STrih_GP_cNotPt_V4 : -    case Hexagon::STrih_GP_cdnPt_V4 : -    case Hexagon::STrih_GP_cdnNotPt_V4 : -    case Hexagon::STriw_GP_cPt_V4 : -    case Hexagon::STriw_GP_cNotPt_V4 : -    case Hexagon::STriw_GP_cdnPt_V4 : -    case Hexagon::STriw_GP_cdnNotPt_V4 : -    case Hexagon::STd_GP_cPt_V4 : -    case Hexagon::STd_GP_cNotPt_V4 : -    case Hexagon::STd_GP_cdnPt_V4 : -    case Hexagon::STd_GP_cdnNotPt_V4 : -    case Hexagon::STb_GP_cPt_V4 : -    case Hexagon::STb_GP_cNotPt_V4 : -    case Hexagon::STb_GP_cdnPt_V4 : -    case Hexagon::STb_GP_cdnNotPt_V4 : -    case Hexagon::STh_GP_cPt_V4 : -    case Hexagon::STh_GP_cNotPt_V4 : -    case Hexagon::STh_GP_cdnPt_V4 : -    case Hexagon::STh_GP_cdnNotPt_V4 : -    case Hexagon::STw_GP_cPt_V4 : -    case Hexagon::STw_GP_cNotPt_V4 : -    case Hexagon::STw_GP_cdnPt_V4 : -    case Hexagon::STw_GP_cdnNotPt_V4 : - -    // V4 predicated global address new value store. -    case Hexagon::STrib_GP_cPt_nv_V4 : -    case Hexagon::STrib_GP_cNotPt_nv_V4 : -    case Hexagon::STrib_GP_cdnPt_nv_V4 : -    case Hexagon::STrib_GP_cdnNotPt_nv_V4 : -    case Hexagon::STrih_GP_cPt_nv_V4 : -    case Hexagon::STrih_GP_cNotPt_nv_V4 : -    case Hexagon::STrih_GP_cdnPt_nv_V4 : -    case Hexagon::STrih_GP_cdnNotPt_nv_V4 : -    case Hexagon::STriw_GP_cPt_nv_V4 : -    case Hexagon::STriw_GP_cNotPt_nv_V4 : -    case Hexagon::STriw_GP_cdnPt_nv_V4 : -    case Hexagon::STriw_GP_cdnNotPt_nv_V4 : -    case Hexagon::STb_GP_cPt_nv_V4 : -    case Hexagon::STb_GP_cNotPt_nv_V4 : -    case Hexagon::STb_GP_cdnPt_nv_V4 : -    case Hexagon::STb_GP_cdnNotPt_nv_V4 : -    case Hexagon::STh_GP_cPt_nv_V4 : -    case Hexagon::STh_GP_cNotPt_nv_V4 : -    case Hexagon::STh_GP_cdnPt_nv_V4 : -    case Hexagon::STh_GP_cdnNotPt_nv_V4 : -    case Hexagon::STw_GP_cPt_nv_V4 : -    case Hexagon::STw_GP_cNotPt_nv_V4 : -    case Hexagon::STw_GP_cdnPt_nv_V4 : -    case Hexagon::STw_GP_cdnNotPt_nv_V4 : - -    // TFR_FI -    case Hexagon::TFR_FI_immext_V4: -      return true; - -    default: -      return false; -  } -  return  false; -} - -bool HexagonInstrInfo::isNewValueJump(const MachineInstr *MI) const { -  switch (MI->getOpcode()) { -    // JMP_EQri -    case Hexagon::JMP_EQriPt_nv_V4: -    case Hexagon::JMP_EQriPnt_nv_V4: -    case Hexagon::JMP_EQriNotPt_nv_V4: -    case Hexagon::JMP_EQriNotPnt_nv_V4: -    case Hexagon::JMP_EQriPt_ie_nv_V4: -    case Hexagon::JMP_EQriPnt_ie_nv_V4: -    case Hexagon::JMP_EQriNotPt_ie_nv_V4: -    case Hexagon::JMP_EQriNotPnt_ie_nv_V4: - -    // JMP_EQri - with -1 -    case Hexagon::JMP_EQriPtneg_nv_V4: -    case Hexagon::JMP_EQriPntneg_nv_V4: -    case Hexagon::JMP_EQriNotPtneg_nv_V4: -    case Hexagon::JMP_EQriNotPntneg_nv_V4: -    case Hexagon::JMP_EQriPtneg_ie_nv_V4: -    case Hexagon::JMP_EQriPntneg_ie_nv_V4: -    case Hexagon::JMP_EQriNotPtneg_ie_nv_V4: -    case Hexagon::JMP_EQriNotPntneg_ie_nv_V4: - -    // JMP_EQrr -    case Hexagon::JMP_EQrrPt_nv_V4: -    case Hexagon::JMP_EQrrPnt_nv_V4: -    case Hexagon::JMP_EQrrNotPt_nv_V4: -    case Hexagon::JMP_EQrrNotPnt_nv_V4: -    case Hexagon::JMP_EQrrPt_ie_nv_V4: -    case Hexagon::JMP_EQrrPnt_ie_nv_V4: -    case Hexagon::JMP_EQrrNotPt_ie_nv_V4: -    case Hexagon::JMP_EQrrNotPnt_ie_nv_V4: - -    // JMP_GTri -    case Hexagon::JMP_GTriPt_nv_V4: -    case Hexagon::JMP_GTriPnt_nv_V4: -    case Hexagon::JMP_GTriNotPt_nv_V4: -    case Hexagon::JMP_GTriNotPnt_nv_V4: -    case Hexagon::JMP_GTriPt_ie_nv_V4: -    case Hexagon::JMP_GTriPnt_ie_nv_V4: -    case Hexagon::JMP_GTriNotPt_ie_nv_V4: -    case Hexagon::JMP_GTriNotPnt_ie_nv_V4: - -    // JMP_GTri - with -1 -    case Hexagon::JMP_GTriPtneg_nv_V4: -    case Hexagon::JMP_GTriPntneg_nv_V4: -    case Hexagon::JMP_GTriNotPtneg_nv_V4: -    case Hexagon::JMP_GTriNotPntneg_nv_V4: -    case Hexagon::JMP_GTriPtneg_ie_nv_V4: -    case Hexagon::JMP_GTriPntneg_ie_nv_V4: -    case Hexagon::JMP_GTriNotPtneg_ie_nv_V4: -    case Hexagon::JMP_GTriNotPntneg_ie_nv_V4: - -    // JMP_GTrr -    case Hexagon::JMP_GTrrPt_nv_V4: -    case Hexagon::JMP_GTrrPnt_nv_V4: -    case Hexagon::JMP_GTrrNotPt_nv_V4: -    case Hexagon::JMP_GTrrNotPnt_nv_V4: -    case Hexagon::JMP_GTrrPt_ie_nv_V4: -    case Hexagon::JMP_GTrrPnt_ie_nv_V4: -    case Hexagon::JMP_GTrrNotPt_ie_nv_V4: -    case Hexagon::JMP_GTrrNotPnt_ie_nv_V4: - -    // JMP_GTrrdn -    case Hexagon::JMP_GTrrdnPt_nv_V4: -    case Hexagon::JMP_GTrrdnPnt_nv_V4: -    case Hexagon::JMP_GTrrdnNotPt_nv_V4: -    case Hexagon::JMP_GTrrdnNotPnt_nv_V4: -    case Hexagon::JMP_GTrrdnPt_ie_nv_V4: -    case Hexagon::JMP_GTrrdnPnt_ie_nv_V4: -    case Hexagon::JMP_GTrrdnNotPt_ie_nv_V4: -    case Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4: - -    // JMP_GTUri -    case Hexagon::JMP_GTUriPt_nv_V4: -    case Hexagon::JMP_GTUriPnt_nv_V4: -    case Hexagon::JMP_GTUriNotPt_nv_V4: -    case Hexagon::JMP_GTUriNotPnt_nv_V4: -    case Hexagon::JMP_GTUriPt_ie_nv_V4: -    case Hexagon::JMP_GTUriPnt_ie_nv_V4: -    case Hexagon::JMP_GTUriNotPt_ie_nv_V4: -    case Hexagon::JMP_GTUriNotPnt_ie_nv_V4: - -    // JMP_GTUrr -    case Hexagon::JMP_GTUrrPt_nv_V4: -    case Hexagon::JMP_GTUrrPnt_nv_V4: -    case Hexagon::JMP_GTUrrNotPt_nv_V4: -    case Hexagon::JMP_GTUrrNotPnt_nv_V4: -    case Hexagon::JMP_GTUrrPt_ie_nv_V4: -    case Hexagon::JMP_GTUrrPnt_ie_nv_V4: -    case Hexagon::JMP_GTUrrNotPt_ie_nv_V4: -    case Hexagon::JMP_GTUrrNotPnt_ie_nv_V4: - -    // JMP_GTUrrdn -    case Hexagon::JMP_GTUrrdnPt_nv_V4: -    case Hexagon::JMP_GTUrrdnPnt_nv_V4: -    case Hexagon::JMP_GTUrrdnNotPt_nv_V4: -    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4: -    case Hexagon::JMP_GTUrrdnPt_ie_nv_V4: -    case Hexagon::JMP_GTUrrdnPnt_ie_nv_V4: -    case Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4: -    case Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4: -      return true; - -    default: -      return false; -  } -  return false; -} - -unsigned HexagonInstrInfo::getImmExtForm(const MachineInstr* MI) const { -  switch(MI->getOpcode()) { -  default: llvm_unreachable("Unknown type of instruction"); - -  // JMP_EQri -  case Hexagon::JMP_EQriPt_nv_V4: -    return Hexagon::JMP_EQriPt_ie_nv_V4; -  case Hexagon::JMP_EQriNotPt_nv_V4: -    return Hexagon::JMP_EQriNotPt_ie_nv_V4; -  case Hexagon::JMP_EQriPnt_nv_V4: -    return Hexagon::JMP_EQriPnt_ie_nv_V4; -  case Hexagon::JMP_EQriNotPnt_nv_V4: -    return Hexagon::JMP_EQriNotPnt_ie_nv_V4; - -  // JMP_EQri -- with -1 -  case Hexagon::JMP_EQriPtneg_nv_V4: -    return Hexagon::JMP_EQriPtneg_ie_nv_V4; -  case Hexagon::JMP_EQriNotPtneg_nv_V4: -    return Hexagon::JMP_EQriNotPtneg_ie_nv_V4; -  case Hexagon::JMP_EQriPntneg_nv_V4: -    return Hexagon::JMP_EQriPntneg_ie_nv_V4; -  case Hexagon::JMP_EQriNotPntneg_nv_V4: -    return Hexagon::JMP_EQriNotPntneg_ie_nv_V4; - -  // JMP_EQrr -  case Hexagon::JMP_EQrrPt_nv_V4: -    return Hexagon::JMP_EQrrPt_ie_nv_V4; -  case Hexagon::JMP_EQrrNotPt_nv_V4: -    return Hexagon::JMP_EQrrNotPt_ie_nv_V4; -  case Hexagon::JMP_EQrrPnt_nv_V4: -    return Hexagon::JMP_EQrrPnt_ie_nv_V4; -  case Hexagon::JMP_EQrrNotPnt_nv_V4: -    return Hexagon::JMP_EQrrNotPnt_ie_nv_V4; - -  // JMP_GTri -  case Hexagon::JMP_GTriPt_nv_V4: -    return Hexagon::JMP_GTriPt_ie_nv_V4; -  case Hexagon::JMP_GTriNotPt_nv_V4: -    return Hexagon::JMP_GTriNotPt_ie_nv_V4; -  case Hexagon::JMP_GTriPnt_nv_V4: -    return Hexagon::JMP_GTriPnt_ie_nv_V4; -  case Hexagon::JMP_GTriNotPnt_nv_V4: -    return Hexagon::JMP_GTriNotPnt_ie_nv_V4; - -  // JMP_GTri -- with -1 -  case Hexagon::JMP_GTriPtneg_nv_V4: -    return Hexagon::JMP_GTriPtneg_ie_nv_V4; -  case Hexagon::JMP_GTriNotPtneg_nv_V4: -    return Hexagon::JMP_GTriNotPtneg_ie_nv_V4; -  case Hexagon::JMP_GTriPntneg_nv_V4: -    return Hexagon::JMP_GTriPntneg_ie_nv_V4; -  case Hexagon::JMP_GTriNotPntneg_nv_V4: -    return Hexagon::JMP_GTriNotPntneg_ie_nv_V4; - -  // JMP_GTrr -  case Hexagon::JMP_GTrrPt_nv_V4: -    return Hexagon::JMP_GTrrPt_ie_nv_V4; -  case Hexagon::JMP_GTrrNotPt_nv_V4: -    return Hexagon::JMP_GTrrNotPt_ie_nv_V4; -  case Hexagon::JMP_GTrrPnt_nv_V4: -    return Hexagon::JMP_GTrrPnt_ie_nv_V4; -  case Hexagon::JMP_GTrrNotPnt_nv_V4: -    return Hexagon::JMP_GTrrNotPnt_ie_nv_V4; - -  // JMP_GTrrdn -  case Hexagon::JMP_GTrrdnPt_nv_V4: -    return Hexagon::JMP_GTrrdnPt_ie_nv_V4; -  case Hexagon::JMP_GTrrdnNotPt_nv_V4: -    return Hexagon::JMP_GTrrdnNotPt_ie_nv_V4; -  case Hexagon::JMP_GTrrdnPnt_nv_V4: -    return Hexagon::JMP_GTrrdnPnt_ie_nv_V4; -  case Hexagon::JMP_GTrrdnNotPnt_nv_V4: -    return Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4; - -  // JMP_GTUri -  case Hexagon::JMP_GTUriPt_nv_V4: -    return Hexagon::JMP_GTUriPt_ie_nv_V4; -  case Hexagon::JMP_GTUriNotPt_nv_V4: -    return Hexagon::JMP_GTUriNotPt_ie_nv_V4; -  case Hexagon::JMP_GTUriPnt_nv_V4: -    return Hexagon::JMP_GTUriPnt_ie_nv_V4; -  case Hexagon::JMP_GTUriNotPnt_nv_V4: -    return Hexagon::JMP_GTUriNotPnt_ie_nv_V4; - -  // JMP_GTUrr -  case Hexagon::JMP_GTUrrPt_nv_V4: -    return Hexagon::JMP_GTUrrPt_ie_nv_V4; -  case Hexagon::JMP_GTUrrNotPt_nv_V4: -    return Hexagon::JMP_GTUrrNotPt_ie_nv_V4; -  case Hexagon::JMP_GTUrrPnt_nv_V4: -    return Hexagon::JMP_GTUrrPnt_ie_nv_V4; -  case Hexagon::JMP_GTUrrNotPnt_nv_V4: -    return Hexagon::JMP_GTUrrNotPnt_ie_nv_V4; - -  // JMP_GTUrrdn -  case Hexagon::JMP_GTUrrdnPt_nv_V4: -    return Hexagon::JMP_GTUrrdnPt_ie_nv_V4; -  case Hexagon::JMP_GTUrrdnNotPt_nv_V4: -    return Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4; -  case Hexagon::JMP_GTUrrdnPnt_nv_V4: -    return Hexagon::JMP_GTUrrdnPnt_ie_nv_V4; -  case Hexagon::JMP_GTUrrdnNotPnt_nv_V4: -    return Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4; -  case Hexagon::TFR_FI: -      return Hexagon::TFR_FI_immext_V4; - -  case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 : -  case Hexagon::MEMw_ADDi_indexed_MEM_V4 : -  case Hexagon::MEMw_SUBi_indexed_MEM_V4 : -  case Hexagon::MEMw_ADDr_indexed_MEM_V4 : -  case Hexagon::MEMw_SUBr_indexed_MEM_V4 : -  case Hexagon::MEMw_ANDr_indexed_MEM_V4 : -  case Hexagon::MEMw_ORr_indexed_MEM_V4 : -  case Hexagon::MEMw_ADDSUBi_MEM_V4 : -  case Hexagon::MEMw_ADDi_MEM_V4 : -  case Hexagon::MEMw_SUBi_MEM_V4 : -  case Hexagon::MEMw_ADDr_MEM_V4 : -  case Hexagon::MEMw_SUBr_MEM_V4 : -  case Hexagon::MEMw_ANDr_MEM_V4 : -  case Hexagon::MEMw_ORr_MEM_V4 : -  case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 : -  case Hexagon::MEMh_ADDi_indexed_MEM_V4 : -  case Hexagon::MEMh_SUBi_indexed_MEM_V4 : -  case Hexagon::MEMh_ADDr_indexed_MEM_V4 : -  case Hexagon::MEMh_SUBr_indexed_MEM_V4 : -  case Hexagon::MEMh_ANDr_indexed_MEM_V4 : -  case Hexagon::MEMh_ORr_indexed_MEM_V4 : -  case Hexagon::MEMh_ADDSUBi_MEM_V4 : -  case Hexagon::MEMh_ADDi_MEM_V4 : -  case Hexagon::MEMh_SUBi_MEM_V4 : -  case Hexagon::MEMh_ADDr_MEM_V4 : -  case Hexagon::MEMh_SUBr_MEM_V4 : -  case Hexagon::MEMh_ANDr_MEM_V4 : -  case Hexagon::MEMh_ORr_MEM_V4 : -  case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 : -  case Hexagon::MEMb_ADDi_indexed_MEM_V4 : -  case Hexagon::MEMb_SUBi_indexed_MEM_V4 : -  case Hexagon::MEMb_ADDr_indexed_MEM_V4 : -  case Hexagon::MEMb_SUBr_indexed_MEM_V4 : -  case Hexagon::MEMb_ANDr_indexed_MEM_V4 : -  case Hexagon::MEMb_ORr_indexed_MEM_V4 : -  case Hexagon::MEMb_ADDSUBi_MEM_V4 : -  case Hexagon::MEMb_ADDi_MEM_V4 : -  case Hexagon::MEMb_SUBi_MEM_V4 : -  case Hexagon::MEMb_ADDr_MEM_V4 : -  case Hexagon::MEMb_SUBr_MEM_V4 : -  case Hexagon::MEMb_ANDr_MEM_V4 : -  case Hexagon::MEMb_ORr_MEM_V4 : -    llvm_unreachable("Needs implementing"); -  } -} - -unsigned HexagonInstrInfo::getNormalBranchForm(const MachineInstr* MI) const { -  switch(MI->getOpcode()) { -  default: llvm_unreachable("Unknown type of jump instruction"); - -  // JMP_EQri -  case Hexagon::JMP_EQriPt_ie_nv_V4: -    return Hexagon::JMP_EQriPt_nv_V4; -  case Hexagon::JMP_EQriNotPt_ie_nv_V4: -    return Hexagon::JMP_EQriNotPt_nv_V4; -  case Hexagon::JMP_EQriPnt_ie_nv_V4: -    return Hexagon::JMP_EQriPnt_nv_V4; -  case Hexagon::JMP_EQriNotPnt_ie_nv_V4: -    return Hexagon::JMP_EQriNotPnt_nv_V4; - -  // JMP_EQri -- with -1 -  case Hexagon::JMP_EQriPtneg_ie_nv_V4: -    return Hexagon::JMP_EQriPtneg_nv_V4; -  case Hexagon::JMP_EQriNotPtneg_ie_nv_V4: -    return Hexagon::JMP_EQriNotPtneg_nv_V4; -  case Hexagon::JMP_EQriPntneg_ie_nv_V4: -    return Hexagon::JMP_EQriPntneg_nv_V4; -  case Hexagon::JMP_EQriNotPntneg_ie_nv_V4: -    return Hexagon::JMP_EQriNotPntneg_nv_V4; - -  // JMP_EQrr -  case Hexagon::JMP_EQrrPt_ie_nv_V4: -    return Hexagon::JMP_EQrrPt_nv_V4; -  case Hexagon::JMP_EQrrNotPt_ie_nv_V4: -    return Hexagon::JMP_EQrrNotPt_nv_V4; -  case Hexagon::JMP_EQrrPnt_ie_nv_V4: -    return Hexagon::JMP_EQrrPnt_nv_V4; -  case Hexagon::JMP_EQrrNotPnt_ie_nv_V4: -    return Hexagon::JMP_EQrrNotPnt_nv_V4; - -  // JMP_GTri -  case Hexagon::JMP_GTriPt_ie_nv_V4: -    return Hexagon::JMP_GTriPt_nv_V4; -  case Hexagon::JMP_GTriNotPt_ie_nv_V4: -    return Hexagon::JMP_GTriNotPt_nv_V4; -  case Hexagon::JMP_GTriPnt_ie_nv_V4: -    return Hexagon::JMP_GTriPnt_nv_V4; -  case Hexagon::JMP_GTriNotPnt_ie_nv_V4: -    return Hexagon::JMP_GTriNotPnt_nv_V4; - -  // JMP_GTri -- with -1 -  case Hexagon::JMP_GTriPtneg_ie_nv_V4: -    return Hexagon::JMP_GTriPtneg_nv_V4; -  case Hexagon::JMP_GTriNotPtneg_ie_nv_V4: -    return Hexagon::JMP_GTriNotPtneg_nv_V4; -  case Hexagon::JMP_GTriPntneg_ie_nv_V4: -    return Hexagon::JMP_GTriPntneg_nv_V4; -  case Hexagon::JMP_GTriNotPntneg_ie_nv_V4: -    return Hexagon::JMP_GTriNotPntneg_nv_V4; - -  // JMP_GTrr -  case Hexagon::JMP_GTrrPt_ie_nv_V4: -    return Hexagon::JMP_GTrrPt_nv_V4; -  case Hexagon::JMP_GTrrNotPt_ie_nv_V4: -    return Hexagon::JMP_GTrrNotPt_nv_V4; -  case Hexagon::JMP_GTrrPnt_ie_nv_V4: -    return Hexagon::JMP_GTrrPnt_nv_V4; -  case Hexagon::JMP_GTrrNotPnt_ie_nv_V4: -    return Hexagon::JMP_GTrrNotPnt_nv_V4; - -  // JMP_GTrrdn -  case Hexagon::JMP_GTrrdnPt_ie_nv_V4: -    return Hexagon::JMP_GTrrdnPt_nv_V4; -  case Hexagon::JMP_GTrrdnNotPt_ie_nv_V4: -    return Hexagon::JMP_GTrrdnNotPt_nv_V4; -  case Hexagon::JMP_GTrrdnPnt_ie_nv_V4: -    return Hexagon::JMP_GTrrdnPnt_nv_V4; -  case Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4: -    return Hexagon::JMP_GTrrdnNotPnt_nv_V4; - -  // JMP_GTUri -  case Hexagon::JMP_GTUriPt_ie_nv_V4: -    return Hexagon::JMP_GTUriPt_nv_V4; -  case Hexagon::JMP_GTUriNotPt_ie_nv_V4: -    return Hexagon::JMP_GTUriNotPt_nv_V4; -  case Hexagon::JMP_GTUriPnt_ie_nv_V4: -    return Hexagon::JMP_GTUriPnt_nv_V4; -  case Hexagon::JMP_GTUriNotPnt_ie_nv_V4: -    return Hexagon::JMP_GTUriNotPnt_nv_V4; - -  // JMP_GTUrr -  case Hexagon::JMP_GTUrrPt_ie_nv_V4: -    return Hexagon::JMP_GTUrrPt_nv_V4; -  case Hexagon::JMP_GTUrrNotPt_ie_nv_V4: -    return Hexagon::JMP_GTUrrNotPt_nv_V4; -  case Hexagon::JMP_GTUrrPnt_ie_nv_V4: -    return Hexagon::JMP_GTUrrPnt_nv_V4; -  case Hexagon::JMP_GTUrrNotPnt_ie_nv_V4: -    return Hexagon::JMP_GTUrrNotPnt_nv_V4; - -  // JMP_GTUrrdn -  case Hexagon::JMP_GTUrrdnPt_ie_nv_V4: -    return Hexagon::JMP_GTUrrdnPt_nv_V4; -  case Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4: -    return Hexagon::JMP_GTUrrdnNotPt_nv_V4; -  case Hexagon::JMP_GTUrrdnPnt_ie_nv_V4: -    return Hexagon::JMP_GTUrrdnPnt_nv_V4; -  case Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4: -    return Hexagon::JMP_GTUrrdnNotPnt_nv_V4; -  } -} - - -bool HexagonInstrInfo::isNewValueStore(const MachineInstr *MI) const { -  switch (MI->getOpcode()) { - -    // Store Byte -    case Hexagon::STrib_nv_V4: -    case Hexagon::STrib_indexed_nv_V4: -    case Hexagon::STrib_indexed_shl_nv_V4: -    case Hexagon::STrib_shl_nv_V4: -    case Hexagon::STrib_GP_nv_V4: -    case Hexagon::STb_GP_nv_V4: -    case Hexagon::POST_STbri_nv_V4: -    case Hexagon::STrib_cPt_nv_V4: -    case Hexagon::STrib_cdnPt_nv_V4: -    case Hexagon::STrib_cNotPt_nv_V4: -    case Hexagon::STrib_cdnNotPt_nv_V4: -    case Hexagon::STrib_indexed_cPt_nv_V4: -    case Hexagon::STrib_indexed_cdnPt_nv_V4: -    case Hexagon::STrib_indexed_cNotPt_nv_V4: -    case Hexagon::STrib_indexed_cdnNotPt_nv_V4: -    case Hexagon::STrib_indexed_shl_cPt_nv_V4: -    case Hexagon::STrib_indexed_shl_cdnPt_nv_V4: -    case Hexagon::STrib_indexed_shl_cNotPt_nv_V4: -    case Hexagon::STrib_indexed_shl_cdnNotPt_nv_V4: -    case Hexagon::POST_STbri_cPt_nv_V4: -    case Hexagon::POST_STbri_cdnPt_nv_V4: -    case Hexagon::POST_STbri_cNotPt_nv_V4: -    case Hexagon::POST_STbri_cdnNotPt_nv_V4: -    case Hexagon::STb_GP_cPt_nv_V4: -    case Hexagon::STb_GP_cNotPt_nv_V4: -    case Hexagon::STb_GP_cdnPt_nv_V4: -    case Hexagon::STb_GP_cdnNotPt_nv_V4: -    case Hexagon::STrib_GP_cPt_nv_V4: -    case Hexagon::STrib_GP_cNotPt_nv_V4: -    case Hexagon::STrib_GP_cdnPt_nv_V4: -    case Hexagon::STrib_GP_cdnNotPt_nv_V4: -    case Hexagon::STrib_abs_nv_V4: -    case Hexagon::STrib_abs_cPt_nv_V4: -    case Hexagon::STrib_abs_cdnPt_nv_V4: -    case Hexagon::STrib_abs_cNotPt_nv_V4: -    case Hexagon::STrib_abs_cdnNotPt_nv_V4: -    case Hexagon::STrib_imm_abs_nv_V4: -    case Hexagon::STrib_imm_abs_cPt_nv_V4: -    case Hexagon::STrib_imm_abs_cdnPt_nv_V4: -    case Hexagon::STrib_imm_abs_cNotPt_nv_V4: -    case Hexagon::STrib_imm_abs_cdnNotPt_nv_V4: - -    // Store Halfword -    case Hexagon::STrih_nv_V4: -    case Hexagon::STrih_indexed_nv_V4: -    case Hexagon::STrih_indexed_shl_nv_V4: -    case Hexagon::STrih_shl_nv_V4: -    case Hexagon::STrih_GP_nv_V4: -    case Hexagon::STh_GP_nv_V4: -    case Hexagon::POST_SThri_nv_V4: -    case Hexagon::STrih_cPt_nv_V4: -    case Hexagon::STrih_cdnPt_nv_V4: -    case Hexagon::STrih_cNotPt_nv_V4: -    case Hexagon::STrih_cdnNotPt_nv_V4: -    case Hexagon::STrih_indexed_cPt_nv_V4: -    case Hexagon::STrih_indexed_cdnPt_nv_V4: -    case Hexagon::STrih_indexed_cNotPt_nv_V4: -    case Hexagon::STrih_indexed_cdnNotPt_nv_V4: -    case Hexagon::STrih_indexed_shl_cPt_nv_V4: -    case Hexagon::STrih_indexed_shl_cdnPt_nv_V4: -    case Hexagon::STrih_indexed_shl_cNotPt_nv_V4: -    case Hexagon::STrih_indexed_shl_cdnNotPt_nv_V4: -    case Hexagon::POST_SThri_cPt_nv_V4: -    case Hexagon::POST_SThri_cdnPt_nv_V4: -    case Hexagon::POST_SThri_cNotPt_nv_V4: -    case Hexagon::POST_SThri_cdnNotPt_nv_V4: -    case Hexagon::STh_GP_cPt_nv_V4: -    case Hexagon::STh_GP_cNotPt_nv_V4: -    case Hexagon::STh_GP_cdnPt_nv_V4: -    case Hexagon::STh_GP_cdnNotPt_nv_V4: -    case Hexagon::STrih_GP_cPt_nv_V4: -    case Hexagon::STrih_GP_cNotPt_nv_V4: -    case Hexagon::STrih_GP_cdnPt_nv_V4: -    case Hexagon::STrih_GP_cdnNotPt_nv_V4: -    case Hexagon::STrih_abs_nv_V4: -    case Hexagon::STrih_abs_cPt_nv_V4: -    case Hexagon::STrih_abs_cdnPt_nv_V4: -    case Hexagon::STrih_abs_cNotPt_nv_V4: -    case Hexagon::STrih_abs_cdnNotPt_nv_V4: -    case Hexagon::STrih_imm_abs_nv_V4: -    case Hexagon::STrih_imm_abs_cPt_nv_V4: -    case Hexagon::STrih_imm_abs_cdnPt_nv_V4: -    case Hexagon::STrih_imm_abs_cNotPt_nv_V4: -    case Hexagon::STrih_imm_abs_cdnNotPt_nv_V4: - -    // Store Word -    case Hexagon::STriw_nv_V4: -    case Hexagon::STriw_indexed_nv_V4: -    case Hexagon::STriw_indexed_shl_nv_V4: -    case Hexagon::STriw_shl_nv_V4: -    case Hexagon::STriw_GP_nv_V4: -    case Hexagon::STw_GP_nv_V4: -    case Hexagon::POST_STwri_nv_V4: -    case Hexagon::STriw_cPt_nv_V4: -    case Hexagon::STriw_cdnPt_nv_V4: -    case Hexagon::STriw_cNotPt_nv_V4: -    case Hexagon::STriw_cdnNotPt_nv_V4: -    case Hexagon::STriw_indexed_cPt_nv_V4: -    case Hexagon::STriw_indexed_cdnPt_nv_V4: -    case Hexagon::STriw_indexed_cNotPt_nv_V4: -    case Hexagon::STriw_indexed_cdnNotPt_nv_V4: -    case Hexagon::STriw_indexed_shl_cPt_nv_V4: -    case Hexagon::STriw_indexed_shl_cdnPt_nv_V4: -    case Hexagon::STriw_indexed_shl_cNotPt_nv_V4: -    case Hexagon::STriw_indexed_shl_cdnNotPt_nv_V4: -    case Hexagon::POST_STwri_cPt_nv_V4: -    case Hexagon::POST_STwri_cdnPt_nv_V4: -    case Hexagon::POST_STwri_cNotPt_nv_V4: -    case Hexagon::POST_STwri_cdnNotPt_nv_V4: -    case Hexagon::STw_GP_cPt_nv_V4: -    case Hexagon::STw_GP_cNotPt_nv_V4: -    case Hexagon::STw_GP_cdnPt_nv_V4: -    case Hexagon::STw_GP_cdnNotPt_nv_V4: -    case Hexagon::STriw_GP_cPt_nv_V4: -    case Hexagon::STriw_GP_cNotPt_nv_V4: -    case Hexagon::STriw_GP_cdnPt_nv_V4: -    case Hexagon::STriw_GP_cdnNotPt_nv_V4: -    case Hexagon::STriw_abs_nv_V4: -    case Hexagon::STriw_abs_cPt_nv_V4: -    case Hexagon::STriw_abs_cdnPt_nv_V4: -    case Hexagon::STriw_abs_cNotPt_nv_V4: -    case Hexagon::STriw_abs_cdnNotPt_nv_V4: -    case Hexagon::STriw_imm_abs_nv_V4: -    case Hexagon::STriw_imm_abs_cPt_nv_V4: -    case Hexagon::STriw_imm_abs_cdnPt_nv_V4: -    case Hexagon::STriw_imm_abs_cNotPt_nv_V4: -    case Hexagon::STriw_imm_abs_cdnNotPt_nv_V4: -      return true; - -    default: -      return false; -  } -  return false; -} - -bool HexagonInstrInfo::isPostIncrement (const MachineInstr* MI) const { -  switch (MI->getOpcode()) -  { -    // Load Byte -    case Hexagon::POST_LDrib: -    case Hexagon::POST_LDrib_cPt: -    case Hexagon::POST_LDrib_cNotPt: -    case Hexagon::POST_LDrib_cdnPt_V4: -    case Hexagon::POST_LDrib_cdnNotPt_V4: - -    // Load unsigned byte -    case Hexagon::POST_LDriub: -    case Hexagon::POST_LDriub_cPt: -    case Hexagon::POST_LDriub_cNotPt: -    case Hexagon::POST_LDriub_cdnPt_V4: -    case Hexagon::POST_LDriub_cdnNotPt_V4: - -    // Load halfword -    case Hexagon::POST_LDrih: -    case Hexagon::POST_LDrih_cPt: -    case Hexagon::POST_LDrih_cNotPt: -    case Hexagon::POST_LDrih_cdnPt_V4: -    case Hexagon::POST_LDrih_cdnNotPt_V4: - -    // Load unsigned halfword -    case Hexagon::POST_LDriuh: -    case Hexagon::POST_LDriuh_cPt: -    case Hexagon::POST_LDriuh_cNotPt: -    case Hexagon::POST_LDriuh_cdnPt_V4: -    case Hexagon::POST_LDriuh_cdnNotPt_V4: - -    // Load word -    case Hexagon::POST_LDriw: -    case Hexagon::POST_LDriw_cPt: -    case Hexagon::POST_LDriw_cNotPt: -    case Hexagon::POST_LDriw_cdnPt_V4: -    case Hexagon::POST_LDriw_cdnNotPt_V4: - -    // Load double word -    case Hexagon::POST_LDrid: -    case Hexagon::POST_LDrid_cPt: -    case Hexagon::POST_LDrid_cNotPt: -    case Hexagon::POST_LDrid_cdnPt_V4: -    case Hexagon::POST_LDrid_cdnNotPt_V4: - -    // Store byte -    case Hexagon::POST_STbri: -    case Hexagon::POST_STbri_cPt: -    case Hexagon::POST_STbri_cNotPt: -    case Hexagon::POST_STbri_cdnPt_V4: -    case Hexagon::POST_STbri_cdnNotPt_V4: - -    // Store halfword -    case Hexagon::POST_SThri: -    case Hexagon::POST_SThri_cPt: -    case Hexagon::POST_SThri_cNotPt: -    case Hexagon::POST_SThri_cdnPt_V4: -    case Hexagon::POST_SThri_cdnNotPt_V4: - -    // Store word -    case Hexagon::POST_STwri: -    case Hexagon::POST_STwri_cPt: -    case Hexagon::POST_STwri_cNotPt: -    case Hexagon::POST_STwri_cdnPt_V4: -    case Hexagon::POST_STwri_cdnNotPt_V4: - -    // Store double word -    case Hexagon::POST_STdri: -    case Hexagon::POST_STdri_cPt: -    case Hexagon::POST_STdri_cNotPt: -    case Hexagon::POST_STdri_cdnPt_V4: -    case Hexagon::POST_STdri_cdnNotPt_V4: -      return true; - -    default: -      return false; -  } -} - -bool HexagonInstrInfo::isSaveCalleeSavedRegsCall(const MachineInstr *MI) const { -  return MI->getOpcode() == Hexagon::SAVE_REGISTERS_CALL_V4; -}  bool HexagonInstrInfo::isPredicable(MachineInstr *MI) const {    bool isPred = MI->getDesc().isPredicable(); @@ -2445,24 +1587,6 @@ isSpillPredRegOp(const MachineInstr *MI) const {    return false;  } -bool HexagonInstrInfo:: -isConditionalTransfer (const MachineInstr *MI) const { -  switch (MI->getOpcode()) { -    case Hexagon::TFR_cPt: -    case Hexagon::TFR_cNotPt: -    case Hexagon::TFRI_cPt: -    case Hexagon::TFRI_cNotPt: -    case Hexagon::TFR_cdnPt: -    case Hexagon::TFR_cdnNotPt: -    case Hexagon::TFRI_cdnPt: -    case Hexagon::TFRI_cdnNotPt: -      return true; - -    default: -      return false; -  } -  return false; -}  bool HexagonInstrInfo::isConditionalALU32 (const MachineInstr* MI) const {    const HexagonRegisterInfo& QRI = getRegisterInfo(); @@ -2502,6 +1626,7 @@ bool HexagonInstrInfo::isConditionalALU32 (const MachineInstr* MI) const {    }  } +  bool HexagonInstrInfo::  isConditionalLoad (const MachineInstr* MI) const {    const HexagonRegisterInfo& QRI = getRegisterInfo(); @@ -2575,136 +1700,6 @@ isConditionalLoad (const MachineInstr* MI) const {    }  } -// Returns true if an instruction is a conditional store. -// -// Note: It doesn't include conditional new-value stores as they can't be -// converted to .new predicate. -// -//               p.new NV store [ if(p0.new)memw(R0+#0)=R2.new ] -//                ^           ^ -//               /             \ (not OK. it will cause new-value store to be -//              /               X conditional on p0.new while R2 producer is -//             /                 \ on p0) -//            /                   \. -//     p.new store                 p.old NV store -// [if(p0.new)memw(R0+#0)=R2]    [if(p0)memw(R0+#0)=R2.new] -//            ^                  ^ -//             \                / -//              \              / -//               \            / -//                 p.old store -//             [if (p0)memw(R0+#0)=R2] -// -// The above diagram shows the steps involoved in the conversion of a predicated -// store instruction to its .new predicated new-value form. -// -// The following set of instructions further explains the scenario where -// conditional new-value store becomes invalid when promoted to .new predicate -// form. -// -// { 1) if (p0) r0 = add(r1, r2) -//   2) p0 = cmp.eq(r3, #0) } -// -//   3) if (p0) memb(r1+#0) = r0  --> this instruction can't be grouped with -// the first two instructions because in instr 1, r0 is conditional on old value -// of p0 but its use in instr 3 is conditional on p0 modified by instr 2 which -// is not valid for new-value stores. -bool HexagonInstrInfo:: -isConditionalStore (const MachineInstr* MI) const { -  const HexagonRegisterInfo& QRI = getRegisterInfo(); -  switch (MI->getOpcode()) -  { -    case Hexagon::STrib_imm_cPt_V4 : -    case Hexagon::STrib_imm_cNotPt_V4 : -    case Hexagon::STrib_indexed_shl_cPt_V4 : -    case Hexagon::STrib_indexed_shl_cNotPt_V4 : -    case Hexagon::STrib_cPt : -    case Hexagon::STrib_cNotPt : -    case Hexagon::POST_STbri_cPt : -    case Hexagon::POST_STbri_cNotPt : -    case Hexagon::STrid_indexed_cPt : -    case Hexagon::STrid_indexed_cNotPt : -    case Hexagon::STrid_indexed_shl_cPt_V4 : -    case Hexagon::POST_STdri_cPt : -    case Hexagon::POST_STdri_cNotPt : -    case Hexagon::STrih_cPt : -    case Hexagon::STrih_cNotPt : -    case Hexagon::STrih_indexed_cPt : -    case Hexagon::STrih_indexed_cNotPt : -    case Hexagon::STrih_imm_cPt_V4 : -    case Hexagon::STrih_imm_cNotPt_V4 : -    case Hexagon::STrih_indexed_shl_cPt_V4 : -    case Hexagon::STrih_indexed_shl_cNotPt_V4 : -    case Hexagon::POST_SThri_cPt : -    case Hexagon::POST_SThri_cNotPt : -    case Hexagon::STriw_cPt : -    case Hexagon::STriw_cNotPt : -    case Hexagon::STriw_indexed_cPt : -    case Hexagon::STriw_indexed_cNotPt : -    case Hexagon::STriw_imm_cPt_V4 : -    case Hexagon::STriw_imm_cNotPt_V4 : -    case Hexagon::STriw_indexed_shl_cPt_V4 : -    case Hexagon::STriw_indexed_shl_cNotPt_V4 : -    case Hexagon::POST_STwri_cPt : -    case Hexagon::POST_STwri_cNotPt : -      return QRI.Subtarget.hasV4TOps(); - -    // V4 global address store before promoting to dot new. -    case Hexagon::STrid_GP_cPt_V4 : -    case Hexagon::STrid_GP_cNotPt_V4 : -    case Hexagon::STrib_GP_cPt_V4 : -    case Hexagon::STrib_GP_cNotPt_V4 : -    case Hexagon::STrih_GP_cPt_V4 : -    case Hexagon::STrih_GP_cNotPt_V4 : -    case Hexagon::STriw_GP_cPt_V4 : -    case Hexagon::STriw_GP_cNotPt_V4 : -    case Hexagon::STd_GP_cPt_V4 : -    case Hexagon::STd_GP_cNotPt_V4 : -    case Hexagon::STb_GP_cPt_V4 : -    case Hexagon::STb_GP_cNotPt_V4 : -    case Hexagon::STh_GP_cPt_V4 : -    case Hexagon::STh_GP_cNotPt_V4 : -    case Hexagon::STw_GP_cPt_V4 : -    case Hexagon::STw_GP_cNotPt_V4 : -      return QRI.Subtarget.hasV4TOps(); - -    // Predicated new value stores (i.e. if (p0) memw(..)=r0.new) are excluded -    // from the "Conditional Store" list. Because a predicated new value store -    // would NOT be promoted to a double dot new store. See diagram below: -    // This function returns yes for those stores that are predicated but not -    // yet promoted to predicate dot new instructions. -    // -    //                          +---------------------+ -    //                    /-----| if (p0) memw(..)=r0 |---------\~ -    //                   ||     +---------------------+         || -    //          promote  ||       /\       /\                   ||  promote -    //                   ||      /||\     /||\                  || -    //                  \||/    demote     ||                  \||/ -    //                   \/       ||       ||                   \/ -    //       +-------------------------+   ||   +-------------------------+ -    //       | if (p0.new) memw(..)=r0 |   ||   | if (p0) memw(..)=r0.new | -    //       +-------------------------+   ||   +-------------------------+ -    //                        ||           ||         || -    //                        ||         demote      \||/ -    //                      promote        ||         \/ NOT possible -    //                        ||           ||         /\~ -    //                       \||/          ||        /||\~ -    //                        \/           ||         || -    //                      +-----------------------------+ -    //                      | if (p0.new) memw(..)=r0.new | -    //                      +-----------------------------+ -    //                           Double Dot New Store -    // - -    default: -      return false; - -  } -  return false; -} - - -  DFAPacketizer *HexagonInstrInfo::  CreateTargetScheduleState(const TargetMachine *TM,                             const ScheduleDAG *DAG) const {  | 
