diff options
Diffstat (limited to 'llvm/utils/TableGen/CodeGenTarget.cpp')
-rw-r--r-- | llvm/utils/TableGen/CodeGenTarget.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/llvm/utils/TableGen/CodeGenTarget.cpp b/llvm/utils/TableGen/CodeGenTarget.cpp index 61b9fa8..0e93635 100644 --- a/llvm/utils/TableGen/CodeGenTarget.cpp +++ b/llvm/utils/TableGen/CodeGenTarget.cpp @@ -821,11 +821,19 @@ void CodeGenIntrinsic::setDefaultProperties( void CodeGenIntrinsic::setProperty(Record *R) { if (R->getName() == "IntrNoMem") ModRef = NoMem; - else if (R->getName() == "IntrReadMem") + else if (R->getName() == "IntrReadMem") { + if (!(ModRef & MR_Ref)) + PrintFatalError(TheDef->getLoc(), + Twine("IntrReadMem cannot be used after IntrNoMem or " + "IntrWriteMem. Default is ReadWrite")); ModRef = ModRefBehavior(ModRef & ~MR_Mod); - else if (R->getName() == "IntrWriteMem") + } else if (R->getName() == "IntrWriteMem") { + if (!(ModRef & MR_Mod)) + PrintFatalError(TheDef->getLoc(), + Twine("IntrWriteMem cannot be used after IntrNoMem or " + "IntrReadMem. Default is ReadWrite")); ModRef = ModRefBehavior(ModRef & ~MR_Ref); - else if (R->getName() == "IntrArgMemOnly") + } else if (R->getName() == "IntrArgMemOnly") ModRef = ModRefBehavior((ModRef & ~MR_Anywhere) | MR_ArgMem); else if (R->getName() == "IntrInaccessibleMemOnly") ModRef = ModRefBehavior((ModRef & ~MR_Anywhere) | MR_InaccessibleMem); |