more decent branches for FP. I might have to make some intermediate nodes to actually be able to use the DAG for FPcmp

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24625 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Andrew Lenharth 2005-12-06 20:43:30 +00:00
parent cfb2815695
commit f88471ded7

View File

@ -155,6 +155,38 @@ SDOperand AlphaDAGToDAGISel::Select(SDOperand Op) {
return SDOperand(Result.Val, Op.ResNo);
}
case ISD::BRCOND: {
if (N->getOperand(1).getOpcode() == ISD::SETCC &&
MVT::isFloatingPoint(N->getOperand(1).getOperand(0).getValueType())) {
SDOperand Chain = Select(N->getOperand(0));
SDOperand CC1 = Select(N->getOperand(1).getOperand(0));
SDOperand CC2 = Select(N->getOperand(1).getOperand(1));
ISD::CondCode cCode= cast<CondCodeSDNode>(N->getOperand(1).getOperand(2))->get();
bool rev = false;
bool isNE = false;
unsigned Opc = Alpha::WTF;
switch(cCode) {
default: N->dump(); assert(0 && "Unknown FP comparison!");
case ISD::SETEQ: Opc = Alpha::CMPTEQ; break;
case ISD::SETLT: Opc = Alpha::CMPTLT; break;
case ISD::SETLE: Opc = Alpha::CMPTLE; break;
case ISD::SETGT: Opc = Alpha::CMPTLT; rev = true; break;
case ISD::SETGE: Opc = Alpha::CMPTLE; rev = true; break;
case ISD::SETNE: Opc = Alpha::CMPTEQ; isNE = true; break;
};
SDOperand cmp = CurDAG->getTargetNode(Opc, MVT::f64,
rev?CC2:CC1,
rev?CC1:CC2);
MachineBasicBlock *Dest =
cast<BasicBlockSDNode>(N->getOperand(2))->getBasicBlock();
if(isNE)
return CurDAG->SelectNodeTo(N, Alpha::FBEQ, MVT::Other, cmp,
CurDAG->getBasicBlock(Dest), Chain);
else
return CurDAG->SelectNodeTo(N, Alpha::FBNE, MVT::Other, cmp,
CurDAG->getBasicBlock(Dest), Chain);
}
SDOperand Chain = Select(N->getOperand(0));
SDOperand CC = Select(N->getOperand(1));
MachineBasicBlock *Dest =
@ -223,7 +255,6 @@ SDOperand AlphaDAGToDAGISel::Select(SDOperand Op) {
case ISD::BR:
return CurDAG->SelectNodeTo(N, Alpha::BR_DAG, MVT::Other, N->getOperand(1),
Select(N->getOperand(0)));
case ISD::FrameIndex: {
int FI = cast<FrameIndexSDNode>(N)->getIndex();
return CurDAG->SelectNodeTo(N, Alpha::LDA, MVT::i64,