Parse the %*# constraint modifiers

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26341 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2006-02-23 23:36:53 +00:00
parent 7ef24f9773
commit fe3db46fe0

View File

@ -51,6 +51,7 @@ bool InlineAsm::ConstraintInfo::Parse(const std::string &Str,
isEarlyClobber = false;
isIndirectOutput = false;
hasMatchingInput = false;
isCommutative = false;
// Parse the prefix.
if (*I == '~') {
@ -74,12 +75,21 @@ bool InlineAsm::ConstraintInfo::Parse(const std::string &Str,
default:
DoneWithModifiers = true;
break;
case '&':
case '&': // Early clobber.
if (Type != isOutput || // Cannot early clobber anything but output.
isEarlyClobber) // Reject &&&&&&
return true;
isEarlyClobber = true;
break;
case '%': // Commutative.
if (Type == isClobber || // Cannot commute clobbers.
isCommutative) // Reject %%%%%
return true;
isCommutative = true;
break;
case '#': // Comment.
case '*': // Register preferencing.
return true; // Not supported.
}
if (!DoneWithModifiers) {