summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/IntrinsicEmitter.cpp
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2015-05-26 23:48:40 +0000
committerOwen Anderson <resistor@mac.com>2015-05-26 23:48:40 +0000
commit85fa7d5037fed8191ef67c2b4d954218b942a7d1 (patch)
tree7e3c7d6e771cbbe3926c0411cd3d1ee678a493b6 /llvm/utils/TableGen/IntrinsicEmitter.cpp
parent3abb86da627a01b1e2091c08a9117dc273f9473f (diff)
downloadbcm5719-llvm-85fa7d5037fed8191ef67c2b4d954218b942a7d1.tar.gz
bcm5719-llvm-85fa7d5037fed8191ef67c2b4d954218b942a7d1.zip
Add initial support for the convergent attribute.
llvm-svn: 238264
Diffstat (limited to 'llvm/utils/TableGen/IntrinsicEmitter.cpp')
-rw-r--r--llvm/utils/TableGen/IntrinsicEmitter.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/llvm/utils/TableGen/IntrinsicEmitter.cpp b/llvm/utils/TableGen/IntrinsicEmitter.cpp
index 1a2555ebbf6..3f62f205fe5 100644
--- a/llvm/utils/TableGen/IntrinsicEmitter.cpp
+++ b/llvm/utils/TableGen/IntrinsicEmitter.cpp
@@ -537,6 +537,9 @@ struct AttributeComparator {
if (L->isNoReturn != R->isNoReturn)
return R->isNoReturn;
+ if (L->isConvergent != R->isConvergent)
+ return R->isConvergent;
+
// Try to order by readonly/readnone attribute.
ModRefKind LK = getModRefKind(*L);
ModRefKind RK = getModRefKind(*R);
@@ -649,7 +652,7 @@ EmitAttributes(const std::vector<CodeGenIntrinsic> &Ints, raw_ostream &OS) {
ModRefKind modRef = getModRefKind(intrinsic);
if (!intrinsic.canThrow || modRef || intrinsic.isNoReturn ||
- intrinsic.isNoDuplicate) {
+ intrinsic.isNoDuplicate || intrinsic.isConvergent) {
OS << " const Attribute::AttrKind Atts[] = {";
bool addComma = false;
if (!intrinsic.canThrow) {
@@ -668,6 +671,12 @@ EmitAttributes(const std::vector<CodeGenIntrinsic> &Ints, raw_ostream &OS) {
OS << "Attribute::NoDuplicate";
addComma = true;
}
+ if (intrinsic.isConvergent) {
+ if (addComma)
+ OS << ",";
+ OS << "Attribute::Convergent";
+ addComma = true;
+ }
switch (modRef) {
case MRK_none: break;
OpenPOWER on IntegriCloud