diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-03-17 01:56:10 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-03-17 01:56:10 +0000 |
commit | 312038872df0e44d74b3009c4ac03a6ee15d2a86 (patch) | |
tree | 7c9736ebae4a8ada9a71bb7dea64a385989ada6c /llvm/lib/IR | |
parent | c291e1fd4fbd5c315412ac78bbd773d1c1019cc3 (diff) | |
download | bcm5719-llvm-312038872df0e44d74b3009c4ac03a6ee15d2a86.tar.gz bcm5719-llvm-312038872df0e44d74b3009c4ac03a6ee15d2a86.zip |
[Statepoints] Separate out logic for statepoint directives; NFC
This splits out the logic that maps the `"statepoint-id"` attribute into
the actual statepoint ID, and the `"statepoint-num-patch-bytes"`
attribute into the number of patchable bytes the statpeoint is lowered
into. The new home of this logic is in IR/Statepoint.cpp, and this
refactoring will support similar functionality when lowering calls with
deopt operand bundles in the future.
llvm-svn: 263685
Diffstat (limited to 'llvm/lib/IR')
-rw-r--r-- | llvm/lib/IR/Statepoint.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/IR/Statepoint.cpp b/llvm/lib/IR/Statepoint.cpp index e56da6beaff..13e8c6312a6 100644 --- a/llvm/lib/IR/Statepoint.cpp +++ b/llvm/lib/IR/Statepoint.cpp @@ -53,3 +53,28 @@ bool llvm::isGCResult(ImmutableCallSite CS) { bool llvm::isGCResult(const Value *V) { return isGCResult(ImmutableCallSite(V)); } + +bool llvm::isStatepointDirectiveAttr(Attribute Attr) { + return Attr.hasAttribute("statepoint-id") || + Attr.hasAttribute("statepoint-num-patch-bytes"); +} + +StatepointDirectives llvm::parseStatepointDirectivesFromAttrs(AttributeSet AS) { + StatepointDirectives Result; + + Attribute AttrID = + AS.getAttribute(AttributeSet::FunctionIndex, "statepoint-id"); + uint64_t StatepointID; + if (AttrID.isStringAttribute()) + if (!AttrID.getValueAsString().getAsInteger(10, StatepointID)) + Result.StatepointID = StatepointID; + + uint32_t NumPatchBytes; + Attribute AttrNumPatchBytes = AS.getAttribute(AttributeSet::FunctionIndex, + "statepoint-num-patch-bytes"); + if (AttrNumPatchBytes.isStringAttribute()) + if (!AttrNumPatchBytes.getValueAsString().getAsInteger(10, NumPatchBytes)) + Result.NumPatchBytes = NumPatchBytes; + + return Result; +} |