mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
[objc-arc] Added annotation option to only emit annotations for a specific ssa identifier.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179729 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
43239078ad
commit
f92bf40ced
@ -716,6 +716,12 @@ static cl::opt<bool>
|
|||||||
DisableCheckForCFGHazards("disable-objc-arc-checkforcfghazards", cl::init(false),
|
DisableCheckForCFGHazards("disable-objc-arc-checkforcfghazards", cl::init(false),
|
||||||
cl::desc("Disable check for cfg hazards when "
|
cl::desc("Disable check for cfg hazards when "
|
||||||
"annotating"));
|
"annotating"));
|
||||||
|
static cl::opt<std::string>
|
||||||
|
ARCAnnotationTargetIdentifier("objc-arc-annotation-target-identifier",
|
||||||
|
cl::init(""),
|
||||||
|
cl::desc("filter out all data flow annotations "
|
||||||
|
"but those that apply to the given "
|
||||||
|
"target llvm identifier."));
|
||||||
|
|
||||||
/// This function appends a unique ARCAnnotationProvenanceSourceMDKind id to an
|
/// This function appends a unique ARCAnnotationProvenanceSourceMDKind id to an
|
||||||
/// instruction so that we can track backwards when post processing via the llvm
|
/// instruction so that we can track backwards when post processing via the llvm
|
||||||
@ -800,6 +806,12 @@ static void AppendMDNodeToInstForPtr(unsigned NodeId,
|
|||||||
/// state of a pointer at the entrance to a basic block.
|
/// state of a pointer at the entrance to a basic block.
|
||||||
static void GenerateARCBBEntranceAnnotation(const char *Name, BasicBlock *BB,
|
static void GenerateARCBBEntranceAnnotation(const char *Name, BasicBlock *BB,
|
||||||
Value *Ptr, Sequence Seq) {
|
Value *Ptr, Sequence Seq) {
|
||||||
|
// If we have a target identifier, make sure that we match it before
|
||||||
|
// continuing.
|
||||||
|
if(!ARCAnnotationTargetIdentifier.empty() &&
|
||||||
|
!Ptr->getName().equals(ARCAnnotationTargetIdentifier))
|
||||||
|
return;
|
||||||
|
|
||||||
Module *M = BB->getParent()->getParent();
|
Module *M = BB->getParent()->getParent();
|
||||||
LLVMContext &C = M->getContext();
|
LLVMContext &C = M->getContext();
|
||||||
Type *I8X = PointerType::getUnqual(Type::getInt8Ty(C));
|
Type *I8X = PointerType::getUnqual(Type::getInt8Ty(C));
|
||||||
@ -837,6 +849,12 @@ static void GenerateARCBBEntranceAnnotation(const char *Name, BasicBlock *BB,
|
|||||||
/// of the pointer at the bottom of the basic block.
|
/// of the pointer at the bottom of the basic block.
|
||||||
static void GenerateARCBBTerminatorAnnotation(const char *Name, BasicBlock *BB,
|
static void GenerateARCBBTerminatorAnnotation(const char *Name, BasicBlock *BB,
|
||||||
Value *Ptr, Sequence Seq) {
|
Value *Ptr, Sequence Seq) {
|
||||||
|
// If we have a target identifier, make sure that we match it before emitting
|
||||||
|
// an annotation.
|
||||||
|
if(!ARCAnnotationTargetIdentifier.empty() &&
|
||||||
|
!Ptr->getName().equals(ARCAnnotationTargetIdentifier))
|
||||||
|
return;
|
||||||
|
|
||||||
Module *M = BB->getParent()->getParent();
|
Module *M = BB->getParent()->getParent();
|
||||||
LLVMContext &C = M->getContext();
|
LLVMContext &C = M->getContext();
|
||||||
Type *I8X = PointerType::getUnqual(Type::getInt8Ty(C));
|
Type *I8X = PointerType::getUnqual(Type::getInt8Ty(C));
|
||||||
@ -878,6 +896,12 @@ static void GenerateARCAnnotation(unsigned InstMDId,
|
|||||||
Sequence OldSeq,
|
Sequence OldSeq,
|
||||||
Sequence NewSeq) {
|
Sequence NewSeq) {
|
||||||
if (EnableARCAnnotations) {
|
if (EnableARCAnnotations) {
|
||||||
|
// If we have a target identifier, make sure that we match it before
|
||||||
|
// emitting an annotation.
|
||||||
|
if(!ARCAnnotationTargetIdentifier.empty() &&
|
||||||
|
!Ptr->getName().equals(ARCAnnotationTargetIdentifier))
|
||||||
|
return;
|
||||||
|
|
||||||
// First generate the source annotation on our pointer. This will return an
|
// First generate the source annotation on our pointer. This will return an
|
||||||
// MDString* if Ptr actually comes from an instruction implying we can put
|
// MDString* if Ptr actually comes from an instruction implying we can put
|
||||||
// in a source annotation. If AppendMDNodeToSourcePtr returns 0 (i.e. NULL),
|
// in a source annotation. If AppendMDNodeToSourcePtr returns 0 (i.e. NULL),
|
||||||
|
Loading…
Reference in New Issue
Block a user