[llvm-commits] [llvm] r72514 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
Bill Wendling
isanbard at gmail.com
Thu May 28 11:19:55 PDT 2009
Eli,
I had to revert this and r72516 (which depended upon this patch)
because it was breaking the llvm-gcc bootstrap:
Assertion failed: (!Tmp2.getNode() && "Can't legalize BR_CC with legal
condition!"), function ExpandNode, file
/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~obj/src/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp,
line 2923.
/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/libgcc2.c:1727:
internal compiler error: Abort trap
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://developer.apple.com/bugreporter> for instructions.
Please investigate.
-bw
On Wed, May 27, 2009 at 9:39 PM, Eli Friedman <eli.friedman at gmail.com> wrote:
> Author: efriedma
> Date: Wed May 27 23:39:57 2009
> New Revision: 72514
>
> URL: http://llvm.org/viewvc/llvm-project?rev=72514&view=rev
> Log:
> Remove special cases for more opcodes.
>
> This is basically the end of this series of patches for LegalizeDAG; the
> remaining special cases can't be removed without more infrastructure
> work. There's a FIXME for each relevant opcode near the beginning of
> SelectionDAGLegalize::LegalizeOp.
>
>
> Modified:
> llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=72514&r1=72513&r2=72514&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed May 27 23:39:57 2009
> @@ -1038,39 +1038,6 @@
> if (Node->getNumValues() == 2)
> AddLegalizedOperand(SDValue(Node, 1), Result.getValue(1));
> return Result.getValue(Op.getResNo());
> - case ISD::BR_CC:
> - Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain.
> - // Ensure that libcalls are emitted before a branch.
> - Tmp1 = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Tmp1, LastCALLSEQ_END);
> - Tmp1 = LegalizeOp(Tmp1);
> - Tmp2 = Node->getOperand(2); // LHS
> - Tmp3 = Node->getOperand(3); // RHS
> - Tmp4 = Node->getOperand(1); // CC
> -
> - LegalizeSetCC(TLI.getSetCCResultType(Tmp2.getValueType()),
> - Tmp2, Tmp3, Tmp4, dl);
> - LastCALLSEQ_END = DAG.getEntryNode();
> -
> - // If we didn't get both a LHS and RHS back from LegalizeSetCC,
> - // the LHS is a legal SETCC itself. In this case, we need to compare
> - // the result against zero to select between true and false values.
> - if (Tmp3.getNode() == 0) {
> - Tmp3 = DAG.getConstant(0, Tmp2.getValueType());
> - Tmp4 = DAG.getCondCode(ISD::SETNE);
> - }
> -
> - Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp4, Tmp2, Tmp3,
> - Node->getOperand(4));
> -
> - switch (TLI.getOperationAction(ISD::BR_CC, Tmp3.getValueType())) {
> - default: assert(0 && "Unexpected action for BR_CC!");
> - case TargetLowering::Legal: break;
> - case TargetLowering::Custom:
> - Tmp4 = TLI.LowerOperation(Result, DAG);
> - if (Tmp4.getNode()) Result = Tmp4;
> - break;
> - }
> - break;
> case ISD::LOAD: {
> LoadSDNode *LD = cast<LoadSDNode>(Node);
> Tmp1 = LegalizeOp(LD->getChain()); // Legalize the chain.
> @@ -1512,38 +1479,7 @@
> }
> break;
> }
> - case ISD::SELECT_CC: {
> - Tmp1 = Node->getOperand(0); // LHS
> - Tmp2 = Node->getOperand(1); // RHS
> - Tmp3 = LegalizeOp(Node->getOperand(2)); // True
> - Tmp4 = LegalizeOp(Node->getOperand(3)); // False
> - SDValue CC = Node->getOperand(4);
> -
> - LegalizeSetCC(TLI.getSetCCResultType(Tmp1.getValueType()),
> - Tmp1, Tmp2, CC, dl);
> -
> - // If we didn't get both a LHS and RHS back from LegalizeSetCC,
> - // the LHS is a legal SETCC itself. In this case, we need to compare
> - // the result against zero to select between true and false values.
> - if (Tmp2.getNode() == 0) {
> - Tmp2 = DAG.getConstant(0, Tmp1.getValueType());
> - CC = DAG.getCondCode(ISD::SETNE);
> - }
> - Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3, Tmp4, CC);
> -
> - // Everything is legal, see if we should expand this op or something.
> - switch (TLI.getOperationAction(ISD::SELECT_CC, Tmp3.getValueType())) {
> - default: assert(0 && "This action is not supported yet!");
> - case TargetLowering::Legal: break;
> - case TargetLowering::Custom:
> - Tmp1 = TLI.LowerOperation(Result, DAG);
> - if (Tmp1.getNode()) Result = Tmp1;
> - break;
> - }
> - break;
> - }
> }
> -
> assert(Result.getValueType() == Op.getValueType() &&
> "Bad legalization!");
>
> @@ -2355,7 +2291,7 @@
> void SelectionDAGLegalize::ExpandNode(SDNode *Node,
> SmallVectorImpl<SDValue> &Results) {
> DebugLoc dl = Node->getDebugLoc();
> - SDValue Tmp1, Tmp2, Tmp3;
> + SDValue Tmp1, Tmp2, Tmp3, Tmp4;
> switch (Node->getOpcode()) {
> case ISD::CTPOP:
> case ISD::CTLZ:
> @@ -2977,6 +2913,47 @@
> Results.push_back(Tmp1);
> break;
> }
> + case ISD::SELECT_CC: {
> + Tmp1 = Node->getOperand(0); // LHS
> + Tmp2 = Node->getOperand(1); // RHS
> + Tmp3 = Node->getOperand(2); // True
> + Tmp4 = Node->getOperand(3); // False
> + SDValue CC = Node->getOperand(4);
> +
> + LegalizeSetCC(TLI.getSetCCResultType(Tmp1.getValueType()),
> + Tmp1, Tmp2, CC, dl);
> +
> + assert(!Tmp2.getNode() && "Can't legalize SELECT_CC with legal condition!");
> + Tmp2 = DAG.getConstant(0, Tmp1.getValueType());
> + CC = DAG.getCondCode(ISD::SETNE);
> + Tmp1 = DAG.getNode(ISD::SELECT_CC, dl, Node->getValueType(0), Tmp1, Tmp2,
> + Tmp3, Tmp4, CC);
> + Results.push_back(Tmp1);
> + break;
> + }
> + case ISD::BR_CC: {
> + Tmp1 = Node->getOperand(0); // Chain
> + Tmp2 = Node->getOperand(2); // LHS
> + Tmp3 = Node->getOperand(3); // RHS
> + Tmp4 = Node->getOperand(1); // CC
> +
> + LegalizeSetCC(TLI.getSetCCResultType(Tmp2.getValueType()),
> + Tmp2, Tmp3, Tmp4, dl);
> + LastCALLSEQ_END = DAG.getEntryNode();
> +
> + // If we didn't get both a LHS and RHS back from LegalizeSetCC,
> + // the LHS is a legal SETCC itself. In this case, we need to compare
> + // the result against zero to select between true and false values.
> + if (Tmp3.getNode() == 0) {
> + Tmp3 = DAG.getConstant(0, Tmp2.getValueType());
> + Tmp4 = DAG.getCondCode(ISD::SETNE);
> + }
> +
> + Tmp1 = DAG.getNode(ISD::BR_CC, dl, Node->getValueType(0), Tmp1, Tmp4, Tmp2,
> + Tmp3, Node->getOperand(4));
> + Results.push_back(Tmp1);
> + break;
> + }
> case ISD::GLOBAL_OFFSET_TABLE:
> case ISD::GlobalAddress:
> case ISD::GlobalTLSAddress:
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list