mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-11 05:35:11 +00:00
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:
parent
7ef24f9773
commit
fe3db46fe0
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user