Complex pattern's custom matcher should not call Select() on any operands.
authorEvan Cheng <evan.cheng@apple.com>
Sat, 4 Feb 2006 08:50:49 +0000 (08:50 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sat, 4 Feb 2006 08:50:49 +0000 (08:50 +0000)
Select them afterwards if it returns true.

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

lib/Target/X86/X86ISelDAGToDAG.cpp
utils/TableGen/DAGISelEmitter.cpp

index f007b28a5d6008a8530bd4478b774bf2063a2a68..e30be1b41ac93dbef5e914632bb63da844a5fe47 100644 (file)
@@ -369,17 +369,11 @@ bool X86DAGToDAGISel::SelectAddr(SDOperand N, SDOperand &Base, SDOperand &Scale,
     return false;
 
   if (AM.BaseType == X86ISelAddressMode::RegBase) {
-    if (AM.Base.Reg.Val) {
-      if (AM.Base.Reg.getOpcode() != ISD::Register)
-        AM.Base.Reg = Select(AM.Base.Reg);
-    } else {
+    if (!AM.Base.Reg.Val)
       AM.Base.Reg = CurDAG->getRegister(0, MVT::i32);
-    }
   }
 
-  if (AM.IndexReg.Val)
-    AM.IndexReg = Select(AM.IndexReg);
-  else
+  if (!AM.IndexReg.Val)
     AM.IndexReg = CurDAG->getRegister(0, MVT::i32);
 
   getAddressOperands(AM, Base, Scale, Index, Disp);
@@ -441,11 +435,6 @@ bool X86DAGToDAGISel::SelectLEAAddr(SDOperand N, SDOperand &Base,
         return false;
     }
 
-    if (SelectBase)
-      AM.Base.Reg = Select(AM.Base.Reg);
-    if (SelectIndex)
-      AM.IndexReg = Select(AM.IndexReg);
-
     getAddressOperands(AM, Base, Scale, Index, Disp);
     return true;
   }
@@ -461,6 +450,11 @@ SDOperand X86DAGToDAGISel::Select(SDOperand N) {
   if (Opcode >= ISD::BUILTIN_OP_END && Opcode < X86ISD::FIRST_NUMBER)
     return N;   // Already selected.
 
+  // These are probably emitted by SelectAddr().
+  if (Opcode == ISD::TargetConstant || Opcode == ISD::TargetConstantPool ||
+      Opcode == ISD::TargetFrameIndex || Opcode == ISD::TargetGlobalAddress)
+    return N;
+
   std::map<SDOperand, SDOperand>::iterator CGMI = CodeGenMap.find(N);
   if (CGMI != CodeGenMap.end()) return CGMI->second;
   
index b85ee8c64cc70a397c3e93ed9108d7e0abd1d6ce..0b3d6df0d1f7c8fcf2fcd016861f23075183c09f 100644 (file)
@@ -2136,6 +2136,11 @@ public:
         for (unsigned i = 0; i < NumRes; i++)
           Code += ", Tmp" + utostr(i + ResNo);
         emitCheck(Code + ")");
+
+        for (unsigned i = 0; i < NumRes; ++i)
+          emitCode("Tmp" + utostr(i+ResNo) + " = Select(Tmp" +
+                   utostr(i+ResNo) + ");");
+
         TmpNo = ResNo + NumRes;
       } else {
         emitCode("SDOperand Tmp" + utostr(ResNo) + " = Select(" + Val + ");");