OSDN Git Service

fold trivial token factor nodes. This allows us to compile
authorChris Lattner <sabre@nondot.org>
Sun, 25 Feb 2007 08:24:27 +0000 (08:24 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 25 Feb 2007 08:24:27 +0000 (08:24 +0000)
test/CodeGen/X86/fp-stack-ret.ll into:

        movl 4(%esp), %eax
        fldl (%eax)
        ret

instead of:

        subl $12, %esp
        movl 16(%esp), %eax
        movsd (%eax), %xmm0
        movsd %xmm0, (%esp)
        fldl (%esp)
        addl $12, %esp
        ret

by eliminating a token factor that blocked a check.

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

lib/CodeGen/SelectionDAG/SelectionDAG.cpp

index 23a66f5..2679a8c 100644 (file)
@@ -1351,6 +1351,12 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
 
   // Fold operations.
   switch (Opcode) {
+  case ISD::TokenFactor:
+    // Fold trivial token factors.
+    if (N1.getOpcode() == ISD::EntryToken) return N2;
+    if (N2.getOpcode() == ISD::EntryToken) return N1;
+    break;
+      
   case ISD::AND:
     // (X & 0) -> 0.  This commonly occurs when legalizing i64 values, so it's
     // worth handling here.