mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
Hexagon: Use relation map for getMatchingCondBranchOpcode() and
getInvertedPredicatedOpcode() functions instead of switch cases. llvm-svn: 181530
This commit is contained in:
parent
76d1441b1e
commit
15d448ba0c
@ -917,19 +917,6 @@ bool HexagonInstrInfo::isPredicable(MachineInstr *MI) const {
|
||||
// cPt ---> cNotPt
|
||||
// cNotPt ---> cPt
|
||||
//
|
||||
// however, these inversiones are NOT included:
|
||||
//
|
||||
// cdnPt -X-> cdnNotPt
|
||||
// cdnNotPt -X-> cdnPt
|
||||
// cPt_nv -X-> cNotPt_nv (new value stores)
|
||||
// cNotPt_nv -X-> cPt_nv (new value stores)
|
||||
//
|
||||
// because only the following transformations are allowed:
|
||||
//
|
||||
// cNotPt ---> cdnNotPt
|
||||
// cPt ---> cdnPt
|
||||
// cNotPt ---> cNotPt_nv
|
||||
// cPt ---> cPt_nv
|
||||
unsigned HexagonInstrInfo::getInvertedPredicatedOpcode(const int Opc) const {
|
||||
int InvPredOpcode;
|
||||
InvPredOpcode = isPredicatedTrue(Opc) ? Hexagon::getFalsePredOpcode(Opc)
|
||||
@ -939,332 +926,12 @@ unsigned HexagonInstrInfo::getInvertedPredicatedOpcode(const int Opc) const {
|
||||
|
||||
switch(Opc) {
|
||||
default: llvm_unreachable("Unexpected predicated instruction");
|
||||
case Hexagon::TFR_cPt:
|
||||
return Hexagon::TFR_cNotPt;
|
||||
case Hexagon::TFR_cNotPt:
|
||||
return Hexagon::TFR_cPt;
|
||||
|
||||
case Hexagon::TFRI_cPt:
|
||||
return Hexagon::TFRI_cNotPt;
|
||||
case Hexagon::TFRI_cNotPt:
|
||||
return Hexagon::TFRI_cPt;
|
||||
|
||||
case Hexagon::JMP_t:
|
||||
return Hexagon::JMP_f;
|
||||
case Hexagon::JMP_f:
|
||||
return Hexagon::JMP_t;
|
||||
|
||||
case Hexagon::ADD_ri_cPt:
|
||||
return Hexagon::ADD_ri_cNotPt;
|
||||
case Hexagon::ADD_ri_cNotPt:
|
||||
return Hexagon::ADD_ri_cPt;
|
||||
|
||||
case Hexagon::ADD_rr_cPt:
|
||||
return Hexagon::ADD_rr_cNotPt;
|
||||
case Hexagon::ADD_rr_cNotPt:
|
||||
return Hexagon::ADD_rr_cPt;
|
||||
|
||||
case Hexagon::XOR_rr_cPt:
|
||||
return Hexagon::XOR_rr_cNotPt;
|
||||
case Hexagon::XOR_rr_cNotPt:
|
||||
return Hexagon::XOR_rr_cPt;
|
||||
|
||||
case Hexagon::AND_rr_cPt:
|
||||
return Hexagon::AND_rr_cNotPt;
|
||||
case Hexagon::AND_rr_cNotPt:
|
||||
return Hexagon::AND_rr_cPt;
|
||||
|
||||
case Hexagon::OR_rr_cPt:
|
||||
return Hexagon::OR_rr_cNotPt;
|
||||
case Hexagon::OR_rr_cNotPt:
|
||||
return Hexagon::OR_rr_cPt;
|
||||
|
||||
case Hexagon::SUB_rr_cPt:
|
||||
return Hexagon::SUB_rr_cNotPt;
|
||||
case Hexagon::SUB_rr_cNotPt:
|
||||
return Hexagon::SUB_rr_cPt;
|
||||
|
||||
case Hexagon::COMBINE_rr_cPt:
|
||||
return Hexagon::COMBINE_rr_cNotPt;
|
||||
case Hexagon::COMBINE_rr_cNotPt:
|
||||
return Hexagon::COMBINE_rr_cPt;
|
||||
|
||||
case Hexagon::ASLH_cPt_V4:
|
||||
return Hexagon::ASLH_cNotPt_V4;
|
||||
case Hexagon::ASLH_cNotPt_V4:
|
||||
return Hexagon::ASLH_cPt_V4;
|
||||
|
||||
case Hexagon::ASRH_cPt_V4:
|
||||
return Hexagon::ASRH_cNotPt_V4;
|
||||
case Hexagon::ASRH_cNotPt_V4:
|
||||
return Hexagon::ASRH_cPt_V4;
|
||||
|
||||
case Hexagon::SXTB_cPt_V4:
|
||||
return Hexagon::SXTB_cNotPt_V4;
|
||||
case Hexagon::SXTB_cNotPt_V4:
|
||||
return Hexagon::SXTB_cPt_V4;
|
||||
|
||||
case Hexagon::SXTH_cPt_V4:
|
||||
return Hexagon::SXTH_cNotPt_V4;
|
||||
case Hexagon::SXTH_cNotPt_V4:
|
||||
return Hexagon::SXTH_cPt_V4;
|
||||
|
||||
case Hexagon::ZXTB_cPt_V4:
|
||||
return Hexagon::ZXTB_cNotPt_V4;
|
||||
case Hexagon::ZXTB_cNotPt_V4:
|
||||
return Hexagon::ZXTB_cPt_V4;
|
||||
|
||||
case Hexagon::ZXTH_cPt_V4:
|
||||
return Hexagon::ZXTH_cNotPt_V4;
|
||||
case Hexagon::ZXTH_cNotPt_V4:
|
||||
return Hexagon::ZXTH_cPt_V4;
|
||||
|
||||
|
||||
case Hexagon::JMPR_t:
|
||||
return Hexagon::JMPR_f;
|
||||
case Hexagon::JMPR_f:
|
||||
return Hexagon::JMPR_t;
|
||||
|
||||
// V4 indexed+scaled load.
|
||||
case Hexagon::LDrid_indexed_shl_cPt_V4:
|
||||
return Hexagon::LDrid_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::LDrid_indexed_shl_cNotPt_V4:
|
||||
return Hexagon::LDrid_indexed_shl_cPt_V4;
|
||||
|
||||
case Hexagon::LDrib_indexed_shl_cPt_V4:
|
||||
return Hexagon::LDrib_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::LDrib_indexed_shl_cNotPt_V4:
|
||||
return Hexagon::LDrib_indexed_shl_cPt_V4;
|
||||
|
||||
case Hexagon::LDriub_indexed_shl_cPt_V4:
|
||||
return Hexagon::LDriub_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::LDriub_indexed_shl_cNotPt_V4:
|
||||
return Hexagon::LDriub_indexed_shl_cPt_V4;
|
||||
|
||||
case Hexagon::LDrih_indexed_shl_cPt_V4:
|
||||
return Hexagon::LDrih_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::LDrih_indexed_shl_cNotPt_V4:
|
||||
return Hexagon::LDrih_indexed_shl_cPt_V4;
|
||||
|
||||
case Hexagon::LDriuh_indexed_shl_cPt_V4:
|
||||
return Hexagon::LDriuh_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::LDriuh_indexed_shl_cNotPt_V4:
|
||||
return Hexagon::LDriuh_indexed_shl_cPt_V4;
|
||||
|
||||
case Hexagon::LDriw_indexed_shl_cPt_V4:
|
||||
return Hexagon::LDriw_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::LDriw_indexed_shl_cNotPt_V4:
|
||||
return Hexagon::LDriw_indexed_shl_cPt_V4;
|
||||
|
||||
// Byte.
|
||||
case Hexagon::POST_STbri_cPt:
|
||||
return Hexagon::POST_STbri_cNotPt;
|
||||
case Hexagon::POST_STbri_cNotPt:
|
||||
return Hexagon::POST_STbri_cPt;
|
||||
|
||||
case Hexagon::STrib_cPt:
|
||||
return Hexagon::STrib_cNotPt;
|
||||
case Hexagon::STrib_cNotPt:
|
||||
return Hexagon::STrib_cPt;
|
||||
|
||||
case Hexagon::STrib_indexed_cPt:
|
||||
return Hexagon::STrib_indexed_cNotPt;
|
||||
case Hexagon::STrib_indexed_cNotPt:
|
||||
return Hexagon::STrib_indexed_cPt;
|
||||
|
||||
case Hexagon::STrib_imm_cPt_V4:
|
||||
return Hexagon::STrib_imm_cNotPt_V4;
|
||||
case Hexagon::STrib_imm_cNotPt_V4:
|
||||
return Hexagon::STrib_imm_cPt_V4;
|
||||
|
||||
case Hexagon::STrib_indexed_shl_cPt_V4:
|
||||
return Hexagon::STrib_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::STrib_indexed_shl_cNotPt_V4:
|
||||
return Hexagon::STrib_indexed_shl_cPt_V4;
|
||||
|
||||
// Halfword.
|
||||
case Hexagon::POST_SThri_cPt:
|
||||
return Hexagon::POST_SThri_cNotPt;
|
||||
case Hexagon::POST_SThri_cNotPt:
|
||||
return Hexagon::POST_SThri_cPt;
|
||||
|
||||
case Hexagon::STrih_cPt:
|
||||
return Hexagon::STrih_cNotPt;
|
||||
case Hexagon::STrih_cNotPt:
|
||||
return Hexagon::STrih_cPt;
|
||||
|
||||
case Hexagon::STrih_indexed_cPt:
|
||||
return Hexagon::STrih_indexed_cNotPt;
|
||||
case Hexagon::STrih_indexed_cNotPt:
|
||||
return Hexagon::STrih_indexed_cPt;
|
||||
|
||||
case Hexagon::STrih_imm_cPt_V4:
|
||||
return Hexagon::STrih_imm_cNotPt_V4;
|
||||
case Hexagon::STrih_imm_cNotPt_V4:
|
||||
return Hexagon::STrih_imm_cPt_V4;
|
||||
|
||||
case Hexagon::STrih_indexed_shl_cPt_V4:
|
||||
return Hexagon::STrih_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::STrih_indexed_shl_cNotPt_V4:
|
||||
return Hexagon::STrih_indexed_shl_cPt_V4;
|
||||
|
||||
// Word.
|
||||
case Hexagon::POST_STwri_cPt:
|
||||
return Hexagon::POST_STwri_cNotPt;
|
||||
case Hexagon::POST_STwri_cNotPt:
|
||||
return Hexagon::POST_STwri_cPt;
|
||||
|
||||
case Hexagon::STriw_cPt:
|
||||
return Hexagon::STriw_cNotPt;
|
||||
case Hexagon::STriw_cNotPt:
|
||||
return Hexagon::STriw_cPt;
|
||||
|
||||
case Hexagon::STriw_indexed_cPt:
|
||||
return Hexagon::STriw_indexed_cNotPt;
|
||||
case Hexagon::STriw_indexed_cNotPt:
|
||||
return Hexagon::STriw_indexed_cPt;
|
||||
|
||||
case Hexagon::STriw_indexed_shl_cPt_V4:
|
||||
return Hexagon::STriw_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::STriw_indexed_shl_cNotPt_V4:
|
||||
return Hexagon::STriw_indexed_shl_cPt_V4;
|
||||
|
||||
case Hexagon::STriw_imm_cPt_V4:
|
||||
return Hexagon::STriw_imm_cNotPt_V4;
|
||||
case Hexagon::STriw_imm_cNotPt_V4:
|
||||
return Hexagon::STriw_imm_cPt_V4;
|
||||
|
||||
// Double word.
|
||||
case Hexagon::POST_STdri_cPt:
|
||||
return Hexagon::POST_STdri_cNotPt;
|
||||
case Hexagon::POST_STdri_cNotPt:
|
||||
return Hexagon::POST_STdri_cPt;
|
||||
|
||||
case Hexagon::STrid_cPt:
|
||||
return Hexagon::STrid_cNotPt;
|
||||
case Hexagon::STrid_cNotPt:
|
||||
return Hexagon::STrid_cPt;
|
||||
|
||||
case Hexagon::STrid_indexed_cPt:
|
||||
return Hexagon::STrid_indexed_cNotPt;
|
||||
case Hexagon::STrid_indexed_cNotPt:
|
||||
return Hexagon::STrid_indexed_cPt;
|
||||
|
||||
case Hexagon::STrid_indexed_shl_cPt_V4:
|
||||
return Hexagon::STrid_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::STrid_indexed_shl_cNotPt_V4:
|
||||
return Hexagon::STrid_indexed_shl_cPt_V4;
|
||||
|
||||
// V4 Store to global address.
|
||||
case Hexagon::STd_GP_cPt_V4:
|
||||
return Hexagon::STd_GP_cNotPt_V4;
|
||||
case Hexagon::STd_GP_cNotPt_V4:
|
||||
return Hexagon::STd_GP_cPt_V4;
|
||||
|
||||
case Hexagon::STb_GP_cPt_V4:
|
||||
return Hexagon::STb_GP_cNotPt_V4;
|
||||
case Hexagon::STb_GP_cNotPt_V4:
|
||||
return Hexagon::STb_GP_cPt_V4;
|
||||
|
||||
case Hexagon::STh_GP_cPt_V4:
|
||||
return Hexagon::STh_GP_cNotPt_V4;
|
||||
case Hexagon::STh_GP_cNotPt_V4:
|
||||
return Hexagon::STh_GP_cPt_V4;
|
||||
|
||||
case Hexagon::STw_GP_cPt_V4:
|
||||
return Hexagon::STw_GP_cNotPt_V4;
|
||||
case Hexagon::STw_GP_cNotPt_V4:
|
||||
return Hexagon::STw_GP_cPt_V4;
|
||||
|
||||
// Load.
|
||||
case Hexagon::LDrid_cPt:
|
||||
return Hexagon::LDrid_cNotPt;
|
||||
case Hexagon::LDrid_cNotPt:
|
||||
return Hexagon::LDrid_cPt;
|
||||
|
||||
case Hexagon::LDriw_cPt:
|
||||
return Hexagon::LDriw_cNotPt;
|
||||
case Hexagon::LDriw_cNotPt:
|
||||
return Hexagon::LDriw_cPt;
|
||||
|
||||
case Hexagon::LDrih_cPt:
|
||||
return Hexagon::LDrih_cNotPt;
|
||||
case Hexagon::LDrih_cNotPt:
|
||||
return Hexagon::LDrih_cPt;
|
||||
|
||||
case Hexagon::LDriuh_cPt:
|
||||
return Hexagon::LDriuh_cNotPt;
|
||||
case Hexagon::LDriuh_cNotPt:
|
||||
return Hexagon::LDriuh_cPt;
|
||||
|
||||
case Hexagon::LDrib_cPt:
|
||||
return Hexagon::LDrib_cNotPt;
|
||||
case Hexagon::LDrib_cNotPt:
|
||||
return Hexagon::LDrib_cPt;
|
||||
|
||||
case Hexagon::LDriub_cPt:
|
||||
return Hexagon::LDriub_cNotPt;
|
||||
case Hexagon::LDriub_cNotPt:
|
||||
return Hexagon::LDriub_cPt;
|
||||
|
||||
// Load Indexed.
|
||||
case Hexagon::LDrid_indexed_cPt:
|
||||
return Hexagon::LDrid_indexed_cNotPt;
|
||||
case Hexagon::LDrid_indexed_cNotPt:
|
||||
return Hexagon::LDrid_indexed_cPt;
|
||||
|
||||
case Hexagon::LDriw_indexed_cPt:
|
||||
return Hexagon::LDriw_indexed_cNotPt;
|
||||
case Hexagon::LDriw_indexed_cNotPt:
|
||||
return Hexagon::LDriw_indexed_cPt;
|
||||
|
||||
case Hexagon::LDrih_indexed_cPt:
|
||||
return Hexagon::LDrih_indexed_cNotPt;
|
||||
case Hexagon::LDrih_indexed_cNotPt:
|
||||
return Hexagon::LDrih_indexed_cPt;
|
||||
|
||||
case Hexagon::LDriuh_indexed_cPt:
|
||||
return Hexagon::LDriuh_indexed_cNotPt;
|
||||
case Hexagon::LDriuh_indexed_cNotPt:
|
||||
return Hexagon::LDriuh_indexed_cPt;
|
||||
|
||||
case Hexagon::LDrib_indexed_cPt:
|
||||
return Hexagon::LDrib_indexed_cNotPt;
|
||||
case Hexagon::LDrib_indexed_cNotPt:
|
||||
return Hexagon::LDrib_indexed_cPt;
|
||||
|
||||
case Hexagon::LDriub_indexed_cPt:
|
||||
return Hexagon::LDriub_indexed_cNotPt;
|
||||
case Hexagon::LDriub_indexed_cNotPt:
|
||||
return Hexagon::LDriub_indexed_cPt;
|
||||
|
||||
// Post Inc Load.
|
||||
case Hexagon::POST_LDrid_cPt:
|
||||
return Hexagon::POST_LDrid_cNotPt;
|
||||
case Hexagon::POST_LDriw_cNotPt:
|
||||
return Hexagon::POST_LDriw_cPt;
|
||||
|
||||
case Hexagon::POST_LDrih_cPt:
|
||||
return Hexagon::POST_LDrih_cNotPt;
|
||||
case Hexagon::POST_LDrih_cNotPt:
|
||||
return Hexagon::POST_LDrih_cPt;
|
||||
|
||||
case Hexagon::POST_LDriuh_cPt:
|
||||
return Hexagon::POST_LDriuh_cNotPt;
|
||||
case Hexagon::POST_LDriuh_cNotPt:
|
||||
return Hexagon::POST_LDriuh_cPt;
|
||||
|
||||
case Hexagon::POST_LDrib_cPt:
|
||||
return Hexagon::POST_LDrib_cNotPt;
|
||||
case Hexagon::POST_LDrib_cNotPt:
|
||||
return Hexagon::POST_LDrib_cPt;
|
||||
|
||||
case Hexagon::POST_LDriub_cPt:
|
||||
return Hexagon::POST_LDriub_cNotPt;
|
||||
case Hexagon::POST_LDriub_cNotPt:
|
||||
return Hexagon::POST_LDriub_cPt;
|
||||
|
||||
// Dealloc_return.
|
||||
// Dealloc_return.
|
||||
case Hexagon::DEALLOC_RET_cPt_V4:
|
||||
return Hexagon::DEALLOC_RET_cNotPt_V4;
|
||||
case Hexagon::DEALLOC_RET_cNotPt_V4:
|
||||
@ -1285,218 +952,21 @@ getMatchingCondBranchOpcode(int Opc, bool invertPredicate) const {
|
||||
// This switch case will be removed once all the instructions have been
|
||||
// modified to use relation maps.
|
||||
switch(Opc) {
|
||||
case Hexagon::TFR:
|
||||
return !invertPredicate ? Hexagon::TFR_cPt :
|
||||
Hexagon::TFR_cNotPt;
|
||||
case Hexagon::TFRI_f:
|
||||
return !invertPredicate ? Hexagon::TFRI_cPt_f :
|
||||
Hexagon::TFRI_cNotPt_f;
|
||||
case Hexagon::TFRI:
|
||||
return !invertPredicate ? Hexagon::TFRI_cPt :
|
||||
Hexagon::TFRI_cNotPt;
|
||||
case Hexagon::JMP:
|
||||
return !invertPredicate ? Hexagon::JMP_t :
|
||||
Hexagon::JMP_f;
|
||||
|
||||
case Hexagon::COMBINE_rr:
|
||||
return !invertPredicate ? Hexagon::COMBINE_rr_cPt :
|
||||
Hexagon::COMBINE_rr_cNotPt;
|
||||
case Hexagon::ASLH:
|
||||
return !invertPredicate ? Hexagon::ASLH_cPt_V4 :
|
||||
Hexagon::ASLH_cNotPt_V4;
|
||||
case Hexagon::ASRH:
|
||||
return !invertPredicate ? Hexagon::ASRH_cPt_V4 :
|
||||
Hexagon::ASRH_cNotPt_V4;
|
||||
case Hexagon::SXTB:
|
||||
return !invertPredicate ? Hexagon::SXTB_cPt_V4 :
|
||||
Hexagon::SXTB_cNotPt_V4;
|
||||
case Hexagon::SXTH:
|
||||
return !invertPredicate ? Hexagon::SXTH_cPt_V4 :
|
||||
Hexagon::SXTH_cNotPt_V4;
|
||||
case Hexagon::ZXTB:
|
||||
return !invertPredicate ? Hexagon::ZXTB_cPt_V4 :
|
||||
Hexagon::ZXTB_cNotPt_V4;
|
||||
case Hexagon::ZXTH:
|
||||
return !invertPredicate ? Hexagon::ZXTH_cPt_V4 :
|
||||
Hexagon::ZXTH_cNotPt_V4;
|
||||
|
||||
case Hexagon::JMPR:
|
||||
return !invertPredicate ? Hexagon::JMPR_t :
|
||||
Hexagon::JMPR_f;
|
||||
|
||||
// V4 indexed+scaled load.
|
||||
case Hexagon::LDrid_indexed_shl_V4:
|
||||
return !invertPredicate ? Hexagon::LDrid_indexed_shl_cPt_V4 :
|
||||
Hexagon::LDrid_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::LDrib_indexed_shl_V4:
|
||||
return !invertPredicate ? Hexagon::LDrib_indexed_shl_cPt_V4 :
|
||||
Hexagon::LDrib_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::LDriub_indexed_shl_V4:
|
||||
return !invertPredicate ? Hexagon::LDriub_indexed_shl_cPt_V4 :
|
||||
Hexagon::LDriub_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::LDrih_indexed_shl_V4:
|
||||
return !invertPredicate ? Hexagon::LDrih_indexed_shl_cPt_V4 :
|
||||
Hexagon::LDrih_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::LDriuh_indexed_shl_V4:
|
||||
return !invertPredicate ? Hexagon::LDriuh_indexed_shl_cPt_V4 :
|
||||
Hexagon::LDriuh_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::LDriw_indexed_shl_V4:
|
||||
return !invertPredicate ? Hexagon::LDriw_indexed_shl_cPt_V4 :
|
||||
Hexagon::LDriw_indexed_shl_cNotPt_V4;
|
||||
|
||||
// V4 Load from global address
|
||||
case Hexagon::LDd_GP_V4:
|
||||
return !invertPredicate ? Hexagon::LDd_GP_cPt_V4 :
|
||||
Hexagon::LDd_GP_cNotPt_V4;
|
||||
case Hexagon::LDb_GP_V4:
|
||||
return !invertPredicate ? Hexagon::LDb_GP_cPt_V4 :
|
||||
Hexagon::LDb_GP_cNotPt_V4;
|
||||
case Hexagon::LDub_GP_V4:
|
||||
return !invertPredicate ? Hexagon::LDub_GP_cPt_V4 :
|
||||
Hexagon::LDub_GP_cNotPt_V4;
|
||||
case Hexagon::LDh_GP_V4:
|
||||
return !invertPredicate ? Hexagon::LDh_GP_cPt_V4 :
|
||||
Hexagon::LDh_GP_cNotPt_V4;
|
||||
case Hexagon::LDuh_GP_V4:
|
||||
return !invertPredicate ? Hexagon::LDuh_GP_cPt_V4 :
|
||||
Hexagon::LDuh_GP_cNotPt_V4;
|
||||
case Hexagon::LDw_GP_V4:
|
||||
return !invertPredicate ? Hexagon::LDw_GP_cPt_V4 :
|
||||
Hexagon::LDw_GP_cNotPt_V4;
|
||||
|
||||
// Byte.
|
||||
case Hexagon::POST_STbri:
|
||||
return !invertPredicate ? Hexagon::POST_STbri_cPt :
|
||||
Hexagon::POST_STbri_cNotPt;
|
||||
case Hexagon::STrib:
|
||||
return !invertPredicate ? Hexagon::STrib_cPt :
|
||||
Hexagon::STrib_cNotPt;
|
||||
case Hexagon::STrib_indexed:
|
||||
return !invertPredicate ? Hexagon::STrib_indexed_cPt :
|
||||
Hexagon::STrib_indexed_cNotPt;
|
||||
case Hexagon::STrib_imm_V4:
|
||||
return !invertPredicate ? Hexagon::STrib_imm_cPt_V4 :
|
||||
Hexagon::STrib_imm_cNotPt_V4;
|
||||
case Hexagon::STrib_indexed_shl_V4:
|
||||
return !invertPredicate ? Hexagon::STrib_indexed_shl_cPt_V4 :
|
||||
Hexagon::STrib_indexed_shl_cNotPt_V4;
|
||||
// Halfword.
|
||||
case Hexagon::POST_SThri:
|
||||
return !invertPredicate ? Hexagon::POST_SThri_cPt :
|
||||
Hexagon::POST_SThri_cNotPt;
|
||||
case Hexagon::STrih:
|
||||
return !invertPredicate ? Hexagon::STrih_cPt :
|
||||
Hexagon::STrih_cNotPt;
|
||||
case Hexagon::STrih_indexed:
|
||||
return !invertPredicate ? Hexagon::STrih_indexed_cPt :
|
||||
Hexagon::STrih_indexed_cNotPt;
|
||||
case Hexagon::STrih_imm_V4:
|
||||
return !invertPredicate ? Hexagon::STrih_imm_cPt_V4 :
|
||||
Hexagon::STrih_imm_cNotPt_V4;
|
||||
case Hexagon::STrih_indexed_shl_V4:
|
||||
return !invertPredicate ? Hexagon::STrih_indexed_shl_cPt_V4 :
|
||||
Hexagon::STrih_indexed_shl_cNotPt_V4;
|
||||
// Word.
|
||||
case Hexagon::POST_STwri:
|
||||
return !invertPredicate ? Hexagon::POST_STwri_cPt :
|
||||
Hexagon::POST_STwri_cNotPt;
|
||||
case Hexagon::STriw:
|
||||
case Hexagon::STriw_f:
|
||||
return !invertPredicate ? Hexagon::STriw_cPt :
|
||||
Hexagon::STriw_cNotPt;
|
||||
case Hexagon::STriw_indexed:
|
||||
case Hexagon::STriw_indexed_f:
|
||||
return !invertPredicate ? Hexagon::STriw_indexed_cPt :
|
||||
Hexagon::STriw_indexed_cNotPt;
|
||||
case Hexagon::STriw_indexed_shl_V4:
|
||||
return !invertPredicate ? Hexagon::STriw_indexed_shl_cPt_V4 :
|
||||
Hexagon::STriw_indexed_shl_cNotPt_V4;
|
||||
case Hexagon::STriw_imm_V4:
|
||||
return !invertPredicate ? Hexagon::STriw_imm_cPt_V4 :
|
||||
Hexagon::STriw_imm_cNotPt_V4;
|
||||
// Double word.
|
||||
case Hexagon::POST_STdri:
|
||||
return !invertPredicate ? Hexagon::POST_STdri_cPt :
|
||||
Hexagon::POST_STdri_cNotPt;
|
||||
case Hexagon::STrid:
|
||||
return !invertPredicate ? Hexagon::STrid_cPt :
|
||||
Hexagon::STrid_cNotPt;
|
||||
case Hexagon::STrid_indexed:
|
||||
return !invertPredicate ? Hexagon::STrid_indexed_cPt :
|
||||
Hexagon::STrid_indexed_cNotPt;
|
||||
case Hexagon::STrid_indexed_shl_V4:
|
||||
return !invertPredicate ? Hexagon::STrid_indexed_shl_cPt_V4 :
|
||||
Hexagon::STrid_indexed_shl_cNotPt_V4;
|
||||
|
||||
// V4 Store to global address
|
||||
case Hexagon::STd_GP_V4:
|
||||
return !invertPredicate ? Hexagon::STd_GP_cPt_V4 :
|
||||
Hexagon::STd_GP_cNotPt_V4;
|
||||
case Hexagon::STb_GP_V4:
|
||||
return !invertPredicate ? Hexagon::STb_GP_cPt_V4 :
|
||||
Hexagon::STb_GP_cNotPt_V4;
|
||||
case Hexagon::STh_GP_V4:
|
||||
return !invertPredicate ? Hexagon::STh_GP_cPt_V4 :
|
||||
Hexagon::STh_GP_cNotPt_V4;
|
||||
case Hexagon::STw_GP_V4:
|
||||
return !invertPredicate ? Hexagon::STw_GP_cPt_V4 :
|
||||
Hexagon::STw_GP_cNotPt_V4;
|
||||
|
||||
// Load.
|
||||
case Hexagon::LDrid:
|
||||
return !invertPredicate ? Hexagon::LDrid_cPt :
|
||||
Hexagon::LDrid_cNotPt;
|
||||
case Hexagon::LDriw:
|
||||
return !invertPredicate ? Hexagon::LDriw_cPt :
|
||||
Hexagon::LDriw_cNotPt;
|
||||
case Hexagon::LDrih:
|
||||
return !invertPredicate ? Hexagon::LDrih_cPt :
|
||||
Hexagon::LDrih_cNotPt;
|
||||
case Hexagon::LDriuh:
|
||||
return !invertPredicate ? Hexagon::LDriuh_cPt :
|
||||
Hexagon::LDriuh_cNotPt;
|
||||
case Hexagon::LDrib:
|
||||
return !invertPredicate ? Hexagon::LDrib_cPt :
|
||||
Hexagon::LDrib_cNotPt;
|
||||
case Hexagon::LDriub:
|
||||
return !invertPredicate ? Hexagon::LDriub_cPt :
|
||||
Hexagon::LDriub_cNotPt;
|
||||
// Load Indexed.
|
||||
case Hexagon::LDrid_indexed:
|
||||
return !invertPredicate ? Hexagon::LDrid_indexed_cPt :
|
||||
Hexagon::LDrid_indexed_cNotPt;
|
||||
case Hexagon::LDriw_indexed:
|
||||
return !invertPredicate ? Hexagon::LDriw_indexed_cPt :
|
||||
Hexagon::LDriw_indexed_cNotPt;
|
||||
case Hexagon::LDrih_indexed:
|
||||
return !invertPredicate ? Hexagon::LDrih_indexed_cPt :
|
||||
Hexagon::LDrih_indexed_cNotPt;
|
||||
case Hexagon::LDriuh_indexed:
|
||||
return !invertPredicate ? Hexagon::LDriuh_indexed_cPt :
|
||||
Hexagon::LDriuh_indexed_cNotPt;
|
||||
case Hexagon::LDrib_indexed:
|
||||
return !invertPredicate ? Hexagon::LDrib_indexed_cPt :
|
||||
Hexagon::LDrib_indexed_cNotPt;
|
||||
case Hexagon::LDriub_indexed:
|
||||
return !invertPredicate ? Hexagon::LDriub_indexed_cPt :
|
||||
Hexagon::LDriub_indexed_cNotPt;
|
||||
// Post Increment Load.
|
||||
case Hexagon::POST_LDrid:
|
||||
return !invertPredicate ? Hexagon::POST_LDrid_cPt :
|
||||
Hexagon::POST_LDrid_cNotPt;
|
||||
case Hexagon::POST_LDriw:
|
||||
return !invertPredicate ? Hexagon::POST_LDriw_cPt :
|
||||
Hexagon::POST_LDriw_cNotPt;
|
||||
case Hexagon::POST_LDrih:
|
||||
return !invertPredicate ? Hexagon::POST_LDrih_cPt :
|
||||
Hexagon::POST_LDrih_cNotPt;
|
||||
case Hexagon::POST_LDriuh:
|
||||
return !invertPredicate ? Hexagon::POST_LDriuh_cPt :
|
||||
Hexagon::POST_LDriuh_cNotPt;
|
||||
case Hexagon::POST_LDrib:
|
||||
return !invertPredicate ? Hexagon::POST_LDrib_cPt :
|
||||
Hexagon::POST_LDrib_cNotPt;
|
||||
case Hexagon::POST_LDriub:
|
||||
return !invertPredicate ? Hexagon::POST_LDriub_cPt :
|
||||
Hexagon::POST_LDriub_cNotPt;
|
||||
// DEALLOC_RETURN.
|
||||
case Hexagon::DEALLOC_RET_V4:
|
||||
return !invertPredicate ? Hexagon::DEALLOC_RET_cPt_V4 :
|
||||
|
30
test/CodeGen/Hexagon/pred-instrs.ll
Normal file
30
test/CodeGen/Hexagon/pred-instrs.ll
Normal file
@ -0,0 +1,30 @@
|
||||
; RUN: llc -march=hexagon -mcpu=hexagonv4 < %s | FileCheck %s
|
||||
; Check that we are able to predicate instructions.
|
||||
|
||||
; CHECK: if{{ *}}({{!*}}p{{[0-3]}}{{[.new]*}}){{ *}}r{{[0-9]+}}{{ *}}={{ *}}{{and|aslh}}
|
||||
; CHECK: if{{ *}}({{!*}}p{{[0-3]}}{{[.new]*}}){{ *}}r{{[0-9]+}}{{ *}}={{ *}}{{and|aslh}}
|
||||
@a = external global i32
|
||||
@d = external global i32
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define i32 @test1(i8 zeroext %la, i8 zeroext %lb) {
|
||||
entry:
|
||||
%cmp = icmp eq i8 %la, %lb
|
||||
br i1 %cmp, label %if.then, label %if.else
|
||||
|
||||
if.then: ; preds = %entry
|
||||
%conv1 = zext i8 %la to i32
|
||||
%shl = shl nuw nsw i32 %conv1, 16
|
||||
br label %if.end
|
||||
|
||||
if.else: ; preds = %entry
|
||||
%and8 = and i8 %lb, %la
|
||||
%and = zext i8 %and8 to i32
|
||||
br label %if.end
|
||||
|
||||
if.end: ; preds = %if.else, %if.then
|
||||
%storemerge = phi i32 [ %and, %if.else ], [ %shl, %if.then ]
|
||||
store i32 %storemerge, i32* @a, align 4
|
||||
%0 = load i32* @d, align 4
|
||||
ret i32 %0
|
||||
}
|
Loading…
Reference in New Issue
Block a user