When expanding an operand, it's not the result value
authorDuncan Sands <baldrick@free.fr>
Tue, 29 Jan 2008 19:29:08 +0000 (19:29 +0000)
committerDuncan Sands <baldrick@free.fr>
Tue, 29 Jan 2008 19:29:08 +0000 (19:29 +0000)
type that matters but the operand type.  This fixes
2008-01-08-IllegalCMP.ll which crashed with the new
legalize infrastructure because SETCC with result
type i8 and operand type i64 was being custom expanded
by the X86 backend.  With this fix, the gcc build gets
as far as the first libcall.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46525 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeTypesExpand.cpp

index ec8d6faf4849f3a640ba2e6a3b722dbadbf55e8b..282137273d97da70a16768ab72700b9d5d0820e3 100644 (file)
@@ -747,8 +747,8 @@ bool DAGTypeLegalizer::ExpandOperand(SDNode *N, unsigned OpNo) {
   DEBUG(cerr << "Expand node operand: "; N->dump(&DAG); cerr << "\n");
   SDOperand Res(0, 0);
   
-  if (TLI.getOperationAction(N->getOpcode(), N->getValueType(0)) == 
-      TargetLowering::Custom)
+  if (TLI.getOperationAction(N->getOpcode(), N->getOperand(OpNo).getValueType())
+      == TargetLowering::Custom)
     Res = TLI.LowerOperation(SDOperand(N, 0), DAG);
   
   if (Res.Val == 0) {