summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/IntrinsicEmitter.cpp
diff options
context:
space:
mode:
authorVedant Kumar <vsk@apple.com>2018-11-14 19:53:41 +0000
committerVedant Kumar <vsk@apple.com>2018-11-14 19:53:41 +0000
commit808e157356234ecc865c0baecb2e22df5e4d54a8 (patch)
tree709d3fcfa3a621d154b82f49755bfb053498ed18 /llvm/utils/TableGen/IntrinsicEmitter.cpp
parentc0830f55779adf07809f6b1af4351c3a2f293dfc (diff)
downloadbcm5719-llvm-808e157356234ecc865c0baecb2e22df5e4d54a8.tar.gz
bcm5719-llvm-808e157356234ecc865c0baecb2e22df5e4d54a8.zip
Mark @llvm.trap cold
A call to @llvm.trap can be expected to be cold (i.e. unlikely to be reached in a normal program execution). Outlining paths which unconditionally trap is an important memory saving. As the hot/cold splitting pass (imho) should not treat all noreturn calls as cold, explicitly mark @llvm.trap cold so that it can be outlined. Split out of https://reviews.llvm.org/D54244. Differential Revision: https://reviews.llvm.org/D54329 llvm-svn: 346885
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 06e44e3b57c..049282e5ebf 100644
--- a/llvm/utils/TableGen/IntrinsicEmitter.cpp
+++ b/llvm/utils/TableGen/IntrinsicEmitter.cpp
@@ -489,6 +489,9 @@ struct AttributeComparator {
if (L->isNoReturn != R->isNoReturn)
return R->isNoReturn;
+ if (L->isCold != R->isCold)
+ return R->isCold;
+
if (L->isConvergent != R->isConvergent)
return R->isConvergent;
@@ -622,7 +625,7 @@ void IntrinsicEmitter::EmitAttributes(const CodeGenIntrinsicTable &Ints,
if (!intrinsic.canThrow ||
intrinsic.ModRef != CodeGenIntrinsic::ReadWriteMem ||
- intrinsic.isNoReturn || intrinsic.isNoDuplicate ||
+ intrinsic.isNoReturn || intrinsic.isCold || intrinsic.isNoDuplicate ||
intrinsic.isConvergent || intrinsic.isSpeculatable) {
OS << " const Attribute::AttrKind Atts[] = {";
bool addComma = false;
@@ -636,6 +639,12 @@ void IntrinsicEmitter::EmitAttributes(const CodeGenIntrinsicTable &Ints,
OS << "Attribute::NoReturn";
addComma = true;
}
+ if (intrinsic.isCold) {
+ if (addComma)
+ OS << ",";
+ OS << "Attribute::Cold";
+ addComma = true;
+ }
if (intrinsic.isNoDuplicate) {
if (addComma)
OS << ",";
OpenPOWER on IntegriCloud