Tied-to constraint must be op_with_larger_idx = op_with_smaller_idx or else throw...
authorEvan Cheng <evan.cheng@apple.com>
Wed, 1 Nov 2006 23:03:11 +0000 (23:03 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 1 Nov 2006 23:03:11 +0000 (23:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31361 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/CodeGenTarget.cpp

index 489aba981413973799f4ed397872b8d39a568726..753651d950fd7ddfab69b422e5ce75bf3d7ace55 100644 (file)
@@ -280,6 +280,7 @@ static std::pair<unsigned, unsigned> parseConstraint(const std::string &CStr,
   assert(pos != std::string::npos && "Unrecognized constraint");
   std::string Name = CStr.substr(1, pos); // Skip '$'
 
+  // TIED_TO: $src1 = $dst
   const std::string delims(" \t");
   std::string::size_type wpos = Name.find_first_of(delims);
   if (wpos != std::string::npos)
@@ -291,6 +292,8 @@ static std::pair<unsigned, unsigned> parseConstraint(const std::string &CStr,
   if (wpos != std::string::npos)
     Name = Name.substr(wpos+1);
   unsigned TIdx = I->getOperandNamed(Name);
+  if (TIdx >= FIdx)
+    throw "Illegal tied-to operand constraint '" + CStr + "'";
   return std::make_pair(FIdx, (TIdx << 16) | 1);
 }