[llvm-commits] [llvm] r72514 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Bill Wendling isanbard at gmail.com
Thu May 28 11:23:12 PDT 2009


In particular, it was during a cross compilation from i686 to powerpc:

/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/obj-i686-powerpc/./gcc/xgcc
-B/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/obj-i686-powerpc/./gcc/
-B/Developer/usr/llvm-gcc-4.2/powerpc-apple-darwin10/bin/
-B/Developer/usr/llvm-gcc-4.2/powerpc-apple-darwin10/lib/ -isystem
/Developer/usr/llvm-gcc-4.2/powerpc-apple-darwin10/include -isystem
/Developer/usr/llvm-gcc-4.2/powerpc-apple-darwin10/sys-include
-mmacosx-version-min=10.4 -O2  -O2 -g -O2   -DIN_GCC    -W -Wall
-Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
-Wold-style-definition  -isystem ./include  -Wa,-force_cpusubtype_ALL
-pipe -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED
-I. -I. -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/.
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../include
-I./../intl -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../libcpp/include
 -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../libdecnumber
-I../libdecnumber
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~dst/Developer/usr/local/include
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~obj/src/include
-DL_fixunsxfsi  -c
/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/libgcc2.c
-o libgcc/./_fixunsxfsi.o

-bw

On Thu, May 28, 2009 at 11:19 AM, Bill Wendling <isanbard at gmail.com> wrote:
> 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