@@ -335,10 +335,6 @@ XtensaTargetLowering::XtensaTargetLowering(const TargetMachine &tm,
335335
336336 // Compute derived properties from the register classes
337337 computeRegisterProperties (STI.getRegisterInfo ());
338-
339- if (Subtarget.hasBoolean ()) {
340- addRegisterClass (MVT::i1, &Xtensa::BRRegClass);
341- }
342338}
343339
344340// / If a physical register, this returns the register that receives the
@@ -1084,73 +1080,6 @@ XtensaTargetLowering::LowerReturn(SDValue Chain, CallingConv::ID CallConv,
10841080 DL, MVT::Other, RetOps);
10851081}
10861082
1087- static SDValue EmitCMP (SDValue &LHS, SDValue &RHS, ISD::CondCode CC, SDLoc dl,
1088- SelectionDAG &DAG, int &br_code) {
1089- // Minor optimization: if LHS is a constant, swap operands, then the
1090- // constant can be folded into comparison.
1091- if (LHS.getOpcode () == ISD::Constant)
1092- std::swap (LHS, RHS);
1093- int cmp_code = 0 ;
1094-
1095- switch (CC) {
1096- default :
1097- llvm_unreachable (" Invalid condition!" );
1098- break ;
1099- case ISD::SETUNE:
1100- br_code = XtensaISD::BR_CC_F;
1101- cmp_code = XtensaISD::CMPOEQ;
1102- break ;
1103- case ISD::SETUO:
1104- br_code = XtensaISD::BR_CC_T;
1105- cmp_code = XtensaISD::CMPUO;
1106- break ;
1107- case ISD::SETO:
1108- br_code = XtensaISD::BR_CC_F;
1109- cmp_code = XtensaISD::CMPUO;
1110- break ;
1111- case ISD::SETUEQ:
1112- br_code = XtensaISD::BR_CC_T;
1113- cmp_code = XtensaISD::CMPUEQ;
1114- break ;
1115- case ISD::SETULE:
1116- br_code = XtensaISD::BR_CC_T;
1117- cmp_code = XtensaISD::CMPULE;
1118- break ;
1119- case ISD::SETULT:
1120- br_code = XtensaISD::BR_CC_T;
1121- cmp_code = XtensaISD::CMPULT;
1122- break ;
1123- case ISD::SETEQ:
1124- case ISD::SETOEQ:
1125- br_code = XtensaISD::BR_CC_T;
1126- cmp_code = XtensaISD::CMPOEQ;
1127- break ;
1128- case ISD::SETNE:
1129- br_code = XtensaISD::BR_CC_F;
1130- cmp_code = XtensaISD::CMPOEQ;
1131- break ;
1132- case ISD::SETLE:
1133- case ISD::SETOLE:
1134- br_code = XtensaISD::BR_CC_T;
1135- cmp_code = XtensaISD::CMPOLE;
1136- break ;
1137- case ISD::SETLT:
1138- case ISD::SETOLT:
1139- br_code = XtensaISD::BR_CC_T;
1140- cmp_code = XtensaISD::CMPOLT;
1141- break ;
1142- case ISD::SETGE:
1143- br_code = XtensaISD::BR_CC_F;
1144- cmp_code = XtensaISD::CMPOLT;
1145- break ;
1146- case ISD::SETGT:
1147- br_code = XtensaISD::BR_CC_F;
1148- cmp_code = XtensaISD::CMPOLE;
1149- break ;
1150- }
1151- return DAG.getNode (cmp_code, dl, MVT::i1, LHS, RHS);
1152- }
1153-
11541083SDValue XtensaTargetLowering::LowerBR_CC (SDValue Op, SelectionDAG &DAG) const {
11551084 SDValue Chain = Op.getOperand (0 );
11561085 ISD::CondCode CC = cast<CondCodeSDNode>(Op.getOperand (1 ))->get ();
@@ -1160,9 +1089,9 @@ SDValue XtensaTargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const {
11601089 SDLoc DL (Op);
11611090
11621091 if (LHS.getValueType () == MVT::f32 ) {
1163- int br_code ;
1164- SDValue Flag = EmitCMP (LHS, RHS, CC, DL, DAG, br_code);
1165- return DAG. getNode (br_code, DL, Op. getValueType (), Chain, Flag , Dest);
1092+ SDValue TargetCC = DAG. getConstant (CC, DL, MVT:: i32 ) ;
1093+ return DAG. getNode (XtensaISD::BR_CC_FP, DL, Op. getValueType (), Chain,
1094+ TargetCC, LHS, RHS , Dest);
11661095 } else {
11671096 llvm_unreachable (" invalid BR_CC to lower" );
11681097 }
@@ -1765,8 +1694,9 @@ const char *XtensaTargetLowering::getTargetNodeName(unsigned Opcode) const {
17651694 OPCODE (SELECT);
17661695 OPCODE (SELECT_CC);
17671696 OPCODE (SELECT_CC_FP);
1768- OPCODE (BR_CC_T);
1769- OPCODE (BR_CC_F);
1697+ OPCODE (BR_T);
1698+ OPCODE (BR_F);
1699+ OPCODE (BR_CC_FP);
17701700 OPCODE (BR_JT);
17711701 OPCODE (CMPUO);
17721702 OPCODE (CMPUEQ);
@@ -1943,7 +1873,7 @@ XtensaTargetLowering::emitSelectCC(MachineInstr &MI,
19431873 int CmpKind = 0 ;
19441874 MachineFunction *MF = BB->getParent ();
19451875 MachineRegisterInfo &RegInfo = MF->getRegInfo ();
1946- const TargetRegisterClass *RC = getRegClassFor (MVT::i1) ;
1876+ const TargetRegisterClass *RC = &Xtensa::BRRegClass ;
19471877 unsigned b = RegInfo.createVirtualRegister (RC);
19481878 GetFPBranchKind (Cond.getImm (), BrKind, CmpKind);
19491879 BuildMI (BB, DL, TII.get (CmpKind), b)
@@ -2997,6 +2927,28 @@ MachineBasicBlock *XtensaTargetLowering::EmitInstrWithCustomInserter(
29972927 return MBB;
29982928 }
29992929
2930+ case Xtensa::BRCC_FP: {
2931+ MachineOperand &Cond = MI.getOperand (0 );
2932+ MachineOperand &LHS = MI.getOperand (1 );
2933+ MachineOperand &RHS = MI.getOperand (2 );
2934+ MachineBasicBlock *TargetBB = MI.getOperand (3 ).getMBB ();
2935+ int BrKind = 0 ;
2936+ int CmpKind = 0 ;
2937+ MachineFunction *MF = MBB->getParent ();
2938+ MachineRegisterInfo &RegInfo = MF->getRegInfo ();
2939+ const TargetRegisterClass *RC = &Xtensa::BRRegClass;
2940+
2941+ unsigned RegB = RegInfo.createVirtualRegister (RC);
2942+ GetFPBranchKind (Cond.getImm (), BrKind, CmpKind);
2943+ BuildMI (*MBB, MI, DL, TII.get (CmpKind), RegB)
2944+ .addReg (LHS.getReg ())
2945+ .addReg (RHS.getReg ());
2946+ BuildMI (*MBB, MI, DL, TII.get (BrKind)).addReg (RegB).addMBB (TargetBB);
2947+
2948+ MI.eraseFromParent ();
2949+ return MBB;
2950+ }
2951+
30002952 case Xtensa::SELECT_CC_FP_FP:
30012953 case Xtensa::SELECT_CC_FP_INT:
30022954 case Xtensa::SELECT_CC_INT_FP:
0 commit comments