@@ -958,54 +958,41 @@ void RISCVInstrInfo::movImm(MachineBasicBlock &MBB,
958958 }
959959}
960960
961- static RISCVCC::CondCode getCondFromBranchOpc (unsigned Opc) {
961+ RISCVCC::CondCode RISCVInstrInfo:: getCondFromBranchOpc (unsigned Opc) {
962962 switch (Opc) {
963963 default :
964964 return RISCVCC::COND_INVALID;
965965 case RISCV::BEQ:
966- return RISCVCC::COND_EQ;
967- case RISCV::BNE:
968- return RISCVCC::COND_NE;
969- case RISCV::BLT:
970- return RISCVCC::COND_LT;
971- case RISCV::BGE:
972- return RISCVCC::COND_GE;
973- case RISCV::BLTU:
974- return RISCVCC::COND_LTU;
975- case RISCV::BGEU:
976- return RISCVCC::COND_GEU;
977966 case RISCV::CV_BEQIMM:
978- return RISCVCC::COND_CV_BEQIMM;
979- case RISCV::CV_BNEIMM:
980- return RISCVCC::COND_CV_BNEIMM;
981967 case RISCV::QC_BEQI:
982- return RISCVCC::COND_QC_BEQI;
983968 case RISCV::QC_E_BEQI:
984- return RISCVCC::COND_QC_E_BEQI;
969+ return RISCVCC::COND_EQ;
970+ case RISCV::BNE:
985971 case RISCV::QC_BNEI:
986- return RISCVCC::COND_QC_BNEI;
987972 case RISCV::QC_E_BNEI:
988- return RISCVCC::COND_QC_E_BNEI;
973+ case RISCV::CV_BNEIMM:
974+ return RISCVCC::COND_NE;
975+ case RISCV::BLT:
989976 case RISCV::QC_BLTI:
990- return RISCVCC::COND_QC_BLTI;
991977 case RISCV::QC_E_BLTI:
992- return RISCVCC::COND_QC_E_BLTI;
978+ return RISCVCC::COND_LT;
979+ case RISCV::BGE:
993980 case RISCV::QC_BGEI:
994- return RISCVCC::COND_QC_BGEI;
995981 case RISCV::QC_E_BGEI:
996- return RISCVCC::COND_QC_E_BGEI;
982+ return RISCVCC::COND_GE;
983+ case RISCV::BLTU:
997984 case RISCV::QC_BLTUI:
998- return RISCVCC::COND_QC_BLTUI;
999985 case RISCV::QC_E_BLTUI:
1000- return RISCVCC::COND_QC_E_BLTUI;
986+ return RISCVCC::COND_LTU;
987+ case RISCV::BGEU:
1001988 case RISCV::QC_BGEUI:
1002- return RISCVCC::COND_QC_BGEUI;
1003989 case RISCV::QC_E_BGEUI:
1004- return RISCVCC::COND_QC_E_BGEUI ;
990+ return RISCVCC::COND_GEU ;
1005991 }
1006992}
1007993
1008- bool RISCVInstrInfo::evaluateCondBranch (unsigned CC, int64_t C0, int64_t C1) {
994+ bool RISCVInstrInfo::evaluateCondBranch (RISCVCC::CondCode CC, int64_t C0,
995+ int64_t C1) {
1009996 switch (CC) {
1010997 default :
1011998 llvm_unreachable (" Unexpected CC" );
@@ -1033,63 +1020,92 @@ static void parseCondBranch(MachineInstr &LastInst, MachineBasicBlock *&Target,
10331020 assert (LastInst.getDesc ().isConditionalBranch () &&
10341021 " Unknown conditional branch" );
10351022 Target = LastInst.getOperand (2 ).getMBB ();
1036- unsigned CC = getCondFromBranchOpc (LastInst.getOpcode ());
1037- Cond.push_back (MachineOperand::CreateImm (CC));
1023+ Cond.push_back (MachineOperand::CreateImm (LastInst.getOpcode ()));
10381024 Cond.push_back (LastInst.getOperand (0 ));
10391025 Cond.push_back (LastInst.getOperand (1 ));
10401026}
10411027
1042- unsigned RISCVCC::getBrCond (RISCVCC::CondCode CC) {
1043- switch (CC ) {
1028+ unsigned RISCVCC::getBrCond (RISCVCC::CondCode CC, unsigned SelectOpc ) {
1029+ switch (SelectOpc ) {
10441030 default :
1045- llvm_unreachable (" Unknown condition code!" );
1046- case RISCVCC::COND_EQ:
1047- return RISCV::BEQ;
1048- case RISCVCC::COND_NE:
1049- return RISCV::BNE;
1050- case RISCVCC::COND_LT:
1051- return RISCV::BLT;
1052- case RISCVCC::COND_GE:
1053- return RISCV::BGE;
1054- case RISCVCC::COND_LTU:
1055- return RISCV::BLTU;
1056- case RISCVCC::COND_GEU:
1057- return RISCV::BGEU;
1058- case RISCVCC::COND_CV_BEQIMM:
1059- return RISCV::CV_BEQIMM;
1060- case RISCVCC::COND_CV_BNEIMM:
1061- return RISCV::CV_BNEIMM;
1062- case RISCVCC::COND_QC_BEQI:
1063- return RISCV::QC_BEQI;
1064- case RISCVCC::COND_QC_E_BEQI:
1065- return RISCV::QC_E_BEQI;
1066- case RISCVCC::COND_QC_BNEI:
1067- return RISCV::QC_BNEI;
1068- case RISCVCC::COND_QC_E_BNEI:
1069- return RISCV::QC_E_BNEI;
1070- case RISCVCC::COND_QC_BLTI:
1071- return RISCV::QC_BLTI;
1072- case RISCVCC::COND_QC_E_BLTI:
1073- return RISCV::QC_E_BLTI;
1074- case RISCVCC::COND_QC_BGEI:
1075- return RISCV::QC_BGEI;
1076- case RISCVCC::COND_QC_E_BGEI:
1077- return RISCV::QC_E_BGEI;
1078- case RISCVCC::COND_QC_BLTUI:
1079- return RISCV::QC_BLTUI;
1080- case RISCVCC::COND_QC_E_BLTUI:
1081- return RISCV::QC_E_BLTUI;
1082- case RISCVCC::COND_QC_BGEUI:
1083- return RISCV::QC_BGEUI;
1084- case RISCVCC::COND_QC_E_BGEUI:
1085- return RISCV::QC_E_BGEUI;
1031+ switch (CC) {
1032+ default :
1033+ llvm_unreachable (" Unexpected condition code!" );
1034+ case RISCVCC::COND_EQ:
1035+ return RISCV::BEQ;
1036+ case RISCVCC::COND_NE:
1037+ return RISCV::BNE;
1038+ case RISCVCC::COND_LT:
1039+ return RISCV::BLT;
1040+ case RISCVCC::COND_GE:
1041+ return RISCV::BGE;
1042+ case RISCVCC::COND_LTU:
1043+ return RISCV::BLTU;
1044+ case RISCVCC::COND_GEU:
1045+ return RISCV::BGEU;
1046+ }
1047+ break ;
1048+ case RISCV::Select_GPR_Using_CC_SImm5_CV:
1049+ switch (CC) {
1050+ default :
1051+ llvm_unreachable (" Unexpected condition code!" );
1052+ case RISCVCC::COND_EQ:
1053+ return RISCV::CV_BEQIMM;
1054+ case RISCVCC::COND_NE:
1055+ return RISCV::CV_BNEIMM;
1056+ }
1057+ break ;
1058+ case RISCV::Select_GPRNoX0_Using_CC_SImm5NonZero_QC:
1059+ switch (CC) {
1060+ default :
1061+ llvm_unreachable (" Unexpected condition code!" );
1062+ case RISCVCC::COND_EQ:
1063+ return RISCV::QC_BEQI;
1064+ case RISCVCC::COND_NE:
1065+ return RISCV::QC_BNEI;
1066+ case RISCVCC::COND_LT:
1067+ return RISCV::QC_BLTI;
1068+ case RISCVCC::COND_GE:
1069+ return RISCV::QC_BGEI;
1070+ }
1071+ break ;
1072+ case RISCV::Select_GPRNoX0_Using_CC_UImm5NonZero_QC:
1073+ switch (CC) {
1074+ default :
1075+ llvm_unreachable (" Unexpected condition code!" );
1076+ case RISCVCC::COND_LTU:
1077+ return RISCV::QC_BLTUI;
1078+ case RISCVCC::COND_GEU:
1079+ return RISCV::QC_BGEUI;
1080+ }
1081+ break ;
1082+ case RISCV::Select_GPRNoX0_Using_CC_SImm16NonZero_QC:
1083+ switch (CC) {
1084+ default :
1085+ llvm_unreachable (" Unexpected condition code!" );
1086+ case RISCVCC::COND_EQ:
1087+ return RISCV::QC_E_BEQI;
1088+ case RISCVCC::COND_NE:
1089+ return RISCV::QC_E_BNEI;
1090+ case RISCVCC::COND_LT:
1091+ return RISCV::QC_E_BLTI;
1092+ case RISCVCC::COND_GE:
1093+ return RISCV::QC_E_BGEI;
1094+ }
1095+ break ;
1096+ case RISCV::Select_GPRNoX0_Using_CC_UImm16NonZero_QC:
1097+ switch (CC) {
1098+ default :
1099+ llvm_unreachable (" Unexpected condition code!" );
1100+ case RISCVCC::COND_LTU:
1101+ return RISCV::QC_E_BLTUI;
1102+ case RISCVCC::COND_GEU:
1103+ return RISCV::QC_E_BGEUI;
1104+ }
1105+ break ;
10861106 }
10871107}
10881108
1089- const MCInstrDesc &RISCVInstrInfo::getBrCond (RISCVCC::CondCode CC) const {
1090- return get (RISCVCC::getBrCond (CC));
1091- }
1092-
10931109RISCVCC::CondCode RISCVCC::getOppositeBranchCondition (RISCVCC::CondCode CC) {
10941110 switch (CC) {
10951111 default :
@@ -1106,34 +1122,6 @@ RISCVCC::CondCode RISCVCC::getOppositeBranchCondition(RISCVCC::CondCode CC) {
11061122 return RISCVCC::COND_GEU;
11071123 case RISCVCC::COND_GEU:
11081124 return RISCVCC::COND_LTU;
1109- case RISCVCC::COND_CV_BEQIMM:
1110- return RISCVCC::COND_CV_BNEIMM;
1111- case RISCVCC::COND_CV_BNEIMM:
1112- return RISCVCC::COND_CV_BEQIMM;
1113- case RISCVCC::COND_QC_BEQI:
1114- return RISCVCC::COND_QC_BNEI;
1115- case RISCVCC::COND_QC_E_BEQI:
1116- return RISCVCC::COND_QC_E_BNEI;
1117- case RISCVCC::COND_QC_BNEI:
1118- return RISCVCC::COND_QC_BEQI;
1119- case RISCVCC::COND_QC_E_BNEI:
1120- return RISCVCC::COND_QC_E_BEQI;
1121- case RISCVCC::COND_QC_BLTI:
1122- return RISCVCC::COND_QC_BGEI;
1123- case RISCVCC::COND_QC_E_BLTI:
1124- return RISCVCC::COND_QC_E_BGEI;
1125- case RISCVCC::COND_QC_BGEI:
1126- return RISCVCC::COND_QC_BLTI;
1127- case RISCVCC::COND_QC_E_BGEI:
1128- return RISCVCC::COND_QC_E_BLTI;
1129- case RISCVCC::COND_QC_BLTUI:
1130- return RISCVCC::COND_QC_BGEUI;
1131- case RISCVCC::COND_QC_E_BLTUI:
1132- return RISCVCC::COND_QC_E_BGEUI;
1133- case RISCVCC::COND_QC_BGEUI:
1134- return RISCVCC::COND_QC_BLTUI;
1135- case RISCVCC::COND_QC_E_BGEUI:
1136- return RISCVCC::COND_QC_E_BLTUI;
11371125 }
11381126}
11391127
@@ -1263,9 +1251,10 @@ unsigned RISCVInstrInfo::insertBranch(
12631251 }
12641252
12651253 // Either a one or two-way conditional branch.
1266- auto CC = static_cast <RISCVCC::CondCode>(Cond[0 ].getImm ());
1267- MachineInstr &CondMI =
1268- *BuildMI (&MBB, DL, getBrCond (CC)).add (Cond[1 ]).add (Cond[2 ]).addMBB (TBB);
1254+ MachineInstr &CondMI = *BuildMI (&MBB, DL, get (Cond[0 ].getImm ()))
1255+ .add (Cond[1 ])
1256+ .add (Cond[2 ])
1257+ .addMBB (TBB);
12691258 if (BytesAdded)
12701259 *BytesAdded += getInstSizeInBytes (CondMI);
12711260
@@ -1348,8 +1337,71 @@ void RISCVInstrInfo::insertIndirectBranch(MachineBasicBlock &MBB,
13481337bool RISCVInstrInfo::reverseBranchCondition (
13491338 SmallVectorImpl<MachineOperand> &Cond) const {
13501339 assert ((Cond.size () == 3 ) && " Invalid branch condition!" );
1351- auto CC = static_cast <RISCVCC::CondCode>(Cond[0 ].getImm ());
1352- Cond[0 ].setImm (getOppositeBranchCondition (CC));
1340+ switch (Cond[0 ].getImm ()) {
1341+ default :
1342+ llvm_unreachable (" Unknown conditional branch!" );
1343+ case RISCV::BEQ:
1344+ Cond[0 ].setImm (RISCV::BNE);
1345+ break ;
1346+ case RISCV::BNE:
1347+ Cond[0 ].setImm (RISCV::BEQ);
1348+ break ;
1349+ case RISCV::BLT:
1350+ Cond[0 ].setImm (RISCV::BGE);
1351+ break ;
1352+ case RISCV::BGE:
1353+ Cond[0 ].setImm (RISCV::BLT);
1354+ break ;
1355+ case RISCV::BLTU:
1356+ Cond[0 ].setImm (RISCV::BGEU);
1357+ break ;
1358+ case RISCV::BGEU:
1359+ Cond[0 ].setImm (RISCV::BLTU);
1360+ break ;
1361+ case RISCV::CV_BEQIMM:
1362+ Cond[0 ].setImm (RISCV::CV_BNEIMM);
1363+ break ;
1364+ case RISCV::CV_BNEIMM:
1365+ Cond[0 ].setImm (RISCV::CV_BEQIMM);
1366+ break ;
1367+ case RISCV::QC_BEQI:
1368+ Cond[0 ].setImm (RISCV::QC_BNEI);
1369+ break ;
1370+ case RISCV::QC_BNEI:
1371+ Cond[0 ].setImm (RISCV::QC_BEQI);
1372+ break ;
1373+ case RISCV::QC_BGEI:
1374+ Cond[0 ].setImm (RISCV::QC_BLTI);
1375+ break ;
1376+ case RISCV::QC_BLTI:
1377+ Cond[0 ].setImm (RISCV::QC_BGEI);
1378+ break ;
1379+ case RISCV::QC_BGEUI:
1380+ Cond[0 ].setImm (RISCV::QC_BLTUI);
1381+ break ;
1382+ case RISCV::QC_BLTUI:
1383+ Cond[0 ].setImm (RISCV::QC_BGEUI);
1384+ break ;
1385+ case RISCV::QC_E_BEQI:
1386+ Cond[0 ].setImm (RISCV::QC_E_BNEI);
1387+ break ;
1388+ case RISCV::QC_E_BNEI:
1389+ Cond[0 ].setImm (RISCV::QC_E_BEQI);
1390+ break ;
1391+ case RISCV::QC_E_BGEI:
1392+ Cond[0 ].setImm (RISCV::QC_E_BLTI);
1393+ break ;
1394+ case RISCV::QC_E_BLTI:
1395+ Cond[0 ].setImm (RISCV::QC_E_BGEI);
1396+ break ;
1397+ case RISCV::QC_E_BGEUI:
1398+ Cond[0 ].setImm (RISCV::QC_E_BLTUI);
1399+ break ;
1400+ case RISCV::QC_E_BLTUI:
1401+ Cond[0 ].setImm (RISCV::QC_E_BGEUI);
1402+ break ;
1403+ }
1404+
13531405 return false ;
13541406}
13551407
0 commit comments