diff options
author | Hal Finkel <hfinkel@anl.gov> | 2016-07-11 01:28:42 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2016-07-11 01:28:42 +0000 |
commit | 47646c09818bd3571d72b3f0e312b1f301ec66ee (patch) | |
tree | d0644b42bcf449127b342c831980cdfd6f4a348c /llvm | |
parent | ce881a41f9b8ffcf722bb1772035aa8e2a47f7f4 (diff) | |
download | bcm5719-llvm-47646c09818bd3571d72b3f0e312b1f301ec66ee.tar.gz bcm5719-llvm-47646c09818bd3571d72b3f0e312b1f301ec66ee.zip |
Add a 'Returned' intrinsic property corresponding to the 'returned' argument attribute
This will be used by the upcoming llvm.noalias intrinsic.
Differential Revision: http://reviews.llvm.org/D22201
llvm-svn: 275034
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/IR/Intrinsics.td | 6 | ||||
-rw-r--r-- | llvm/utils/TableGen/CodeGenIntrinsics.h | 2 | ||||
-rw-r--r-- | llvm/utils/TableGen/CodeGenTarget.cpp | 3 | ||||
-rw-r--r-- | llvm/utils/TableGen/IntrinsicEmitter.cpp | 6 |
4 files changed, 16 insertions, 1 deletions
diff --git a/llvm/include/llvm/IR/Intrinsics.td b/llvm/include/llvm/IR/Intrinsics.td index e543ef56ef3..5ece731fa14 100644 --- a/llvm/include/llvm/IR/Intrinsics.td +++ b/llvm/include/llvm/IR/Intrinsics.td @@ -54,6 +54,12 @@ class NoCapture<int argNo> : IntrinsicProperty { int ArgNo = argNo; } +// Returned - The specified argument is always the return value of the +// intrinsic. +class Returned<int argNo> : IntrinsicProperty { + int ArgNo = argNo; +} + // ReadOnly - The specified argument pointer is not written to through the // pointer by the intrinsic. class ReadOnly<int argNo> : IntrinsicProperty { diff --git a/llvm/utils/TableGen/CodeGenIntrinsics.h b/llvm/utils/TableGen/CodeGenIntrinsics.h index 1c82e05d1a5..76554a52a15 100644 --- a/llvm/utils/TableGen/CodeGenIntrinsics.h +++ b/llvm/utils/TableGen/CodeGenIntrinsics.h @@ -108,7 +108,7 @@ struct CodeGenIntrinsic { /// True if the intrinsic is marked as convergent. bool isConvergent; - enum ArgAttribute { NoCapture, ReadOnly, WriteOnly, ReadNone }; + enum ArgAttribute { NoCapture, Returned, ReadOnly, WriteOnly, ReadNone }; std::vector<std::pair<unsigned, ArgAttribute>> ArgumentAttributes; CodeGenIntrinsic(Record *R); diff --git a/llvm/utils/TableGen/CodeGenTarget.cpp b/llvm/utils/TableGen/CodeGenTarget.cpp index 1367e24bb2d..85fc4be901e 100644 --- a/llvm/utils/TableGen/CodeGenTarget.cpp +++ b/llvm/utils/TableGen/CodeGenTarget.cpp @@ -592,6 +592,9 @@ CodeGenIntrinsic::CodeGenIntrinsic(Record *R) { else if (Property->isSubClassOf("NoCapture")) { unsigned ArgNo = Property->getValueAsInt("ArgNo"); ArgumentAttributes.push_back(std::make_pair(ArgNo, NoCapture)); + } else if (Property->isSubClassOf("Returned")) { + unsigned ArgNo = Property->getValueAsInt("ArgNo"); + ArgumentAttributes.push_back(std::make_pair(ArgNo, Returned)); } else if (Property->isSubClassOf("ReadOnly")) { unsigned ArgNo = Property->getValueAsInt("ArgNo"); ArgumentAttributes.push_back(std::make_pair(ArgNo, ReadOnly)); diff --git a/llvm/utils/TableGen/IntrinsicEmitter.cpp b/llvm/utils/TableGen/IntrinsicEmitter.cpp index bee7fbf715b..062d25c6a4e 100644 --- a/llvm/utils/TableGen/IntrinsicEmitter.cpp +++ b/llvm/utils/TableGen/IntrinsicEmitter.cpp @@ -548,6 +548,12 @@ EmitAttributes(const std::vector<CodeGenIntrinsic> &Ints, raw_ostream &OS) { OS << "Attribute::NoCapture"; addComma = true; break; + case CodeGenIntrinsic::Returned: + if (addComma) + OS << ","; + OS << "Attribute::Returned"; + addComma = true; + break; case CodeGenIntrinsic::ReadOnly: if (addComma) OS << ","; |