mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 02:52:53 +02:00
[IR] NoFree IntrinsicProperty.
Summary: Separate introduction of IntrNoFree property as suggested in D70365 Reviewers: arsenm, nhaehnle Tags: #llvm Differential Revision: https://reviews.llvm.org/D82587
This commit is contained in:
parent
7f193e60c4
commit
b5d0352264
@ -117,6 +117,8 @@ class ReadNone<AttrIndex idx> : IntrinsicProperty {
|
||||
|
||||
def IntrNoReturn : IntrinsicProperty;
|
||||
|
||||
def IntrNoFree : IntrinsicProperty;
|
||||
|
||||
def IntrWillReturn : IntrinsicProperty;
|
||||
|
||||
// IntrCold - Calls to this intrinsic are cold.
|
||||
|
@ -126,6 +126,9 @@ struct CodeGenIntrinsic {
|
||||
/// True if the intrinsic is no-sync.
|
||||
bool isNoSync;
|
||||
|
||||
/// True if the intrinsic is no-free.
|
||||
bool isNoFree;
|
||||
|
||||
/// True if the intrinsic is will-return.
|
||||
bool isWillReturn;
|
||||
|
||||
|
@ -624,6 +624,7 @@ CodeGenIntrinsic::CodeGenIntrinsic(Record *R) {
|
||||
canThrow = false;
|
||||
isNoReturn = false;
|
||||
isNoSync = false;
|
||||
isNoFree = false;
|
||||
isWillReturn = false;
|
||||
isCold = false;
|
||||
isNoDuplicate = false;
|
||||
@ -790,6 +791,8 @@ CodeGenIntrinsic::CodeGenIntrinsic(Record *R) {
|
||||
isNoReturn = true;
|
||||
else if (Property->getName() == "IntrNoSync")
|
||||
isNoSync = true;
|
||||
else if (Property->getName() == "IntrNoFree")
|
||||
isNoFree = true;
|
||||
else if (Property->getName() == "IntrWillReturn")
|
||||
isWillReturn = true;
|
||||
else if (Property->getName() == "IntrCold")
|
||||
|
@ -584,6 +584,9 @@ struct AttributeComparator {
|
||||
if (L->isNoSync != R->isNoSync)
|
||||
return R->isNoSync;
|
||||
|
||||
if (L->isNoFree != R->isNoFree)
|
||||
return R->isNoFree;
|
||||
|
||||
if (L->isWillReturn != R->isWillReturn)
|
||||
return R->isWillReturn;
|
||||
|
||||
@ -751,10 +754,11 @@ void IntrinsicEmitter::EmitAttributes(const CodeGenIntrinsicTable &Ints,
|
||||
}
|
||||
|
||||
if (!intrinsic.canThrow ||
|
||||
(intrinsic.ModRef != CodeGenIntrinsic::ReadWriteMem && !intrinsic.hasSideEffects) ||
|
||||
intrinsic.isNoReturn || intrinsic.isNoSync || intrinsic.isWillReturn ||
|
||||
intrinsic.isCold || intrinsic.isNoDuplicate || intrinsic.isConvergent ||
|
||||
intrinsic.isSpeculatable) {
|
||||
(intrinsic.ModRef != CodeGenIntrinsic::ReadWriteMem &&
|
||||
!intrinsic.hasSideEffects) ||
|
||||
intrinsic.isNoReturn || intrinsic.isNoSync || intrinsic.isNoFree ||
|
||||
intrinsic.isWillReturn || intrinsic.isCold || intrinsic.isNoDuplicate ||
|
||||
intrinsic.isConvergent || intrinsic.isSpeculatable) {
|
||||
OS << " const Attribute::AttrKind Atts[] = {";
|
||||
bool addComma = false;
|
||||
if (!intrinsic.canThrow) {
|
||||
@ -773,6 +777,12 @@ void IntrinsicEmitter::EmitAttributes(const CodeGenIntrinsicTable &Ints,
|
||||
OS << "Attribute::NoSync";
|
||||
addComma = true;
|
||||
}
|
||||
if (intrinsic.isNoFree) {
|
||||
if (addComma)
|
||||
OS << ",";
|
||||
OS << "Attribute::NoFree";
|
||||
addComma = true;
|
||||
}
|
||||
if (intrinsic.isWillReturn) {
|
||||
if (addComma)
|
||||
OS << ",";
|
||||
|
Loading…
Reference in New Issue
Block a user