Use pattern information to determine whether the use expects this
authorEvan Cheng <evan.cheng@apple.com>
Thu, 19 Jan 2006 10:12:58 +0000 (10:12 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 19 Jan 2006 10:12:58 +0000 (10:12 +0000)
instruction to produce a result. e.g MUL8m, the instruction does not
produce a explicit result. However it produces an implicit result in
AL which would be copied to a temp. The root operator of the matching
pattern is a mul so the use would expect it to produce a result.

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

utils/TableGen/DAGISelEmitter.cpp

index cd0527729aff8f1dc526a6bfc442b16578d0c4bd..03ec9951dcb40b3616026dd768abdd3d0b9e70e0 100644 (file)
@@ -2255,10 +2255,13 @@ public:
           OS << "      CodeGenMap[N.getValue(" << ValNo << ")] = InFlag;\n";
 
         if (AddedChain && HasOutFlag) {
-          if (NumResults == 0) {
+          // Is this pattern expected to produce a result?
+          if (Pattern->getTypeNum(0) == MVT::isVoid ||
+              Pattern->getTypeNum(0) == MVT::Flag) {
             OS << "      return Result.getValue(N.ResNo+1);\n";
           } else {
-            OS << "      if (N.ResNo < " << NumResults << ")\n";
+            OS << "      if (N.ResNo < "
+               << ((NumResults > 1) ? NumResults : 1) << ")\n";
             OS << "        return Result.getValue(N.ResNo);\n";
             OS << "      else\n";
             OS << "        return Result.getValue(N.ResNo+1);\n";