diff options
author | Michael Gottesman <mgottesman@apple.com> | 2013-04-03 22:41:59 +0000 |
---|---|---|
committer | Michael Gottesman <mgottesman@apple.com> | 2013-04-03 22:41:59 +0000 |
commit | 43e7e00a681dcc0a71fb54ece53f8eacad136c9a (patch) | |
tree | 05be6491dec1ac637ea7e69983281478b151e569 /llvm/lib/Transforms/ObjCARC | |
parent | de3d01e2c45deb7dcb59532d5fa4d582ebaa803c (diff) | |
download | bcm5719-llvm-43e7e00a681dcc0a71fb54ece53f8eacad136c9a.tar.gz bcm5719-llvm-43e7e00a681dcc0a71fb54ece53f8eacad136c9a.zip |
Clean up arc annotations by moving the top/bottom BB annotations into conditional macros that no-op in Release mode instead of #ifdef sections of the code.
This is to follow the example of the DEBUG macro.
llvm-svn: 178705
Diffstat (limited to 'llvm/lib/Transforms/ObjCARC')
-rw-r--r-- | llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp | 104 |
1 files changed, 46 insertions, 58 deletions
diff --git a/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp b/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp index 5ac8c8e6c27..27bcf35ac99 100644 --- a/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp +++ b/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp @@ -907,10 +907,39 @@ static void GenerateARCAnnotation(unsigned InstMDId, ARCAnnotationProvenanceSourceMDKind, (inst), \ const_cast<Value*>(ptr), (old), (new)) +#define ANNOTATE_BB(_states, _bb, _name, _type, _direction) \ + do { \ + if (EnableARCAnnotations) { \ + for(BBState::ptr_const_iterator I = (_states)._direction##_ptr_begin(), \ + E = (_states)._direction##_ptr_end(); I != E; ++I) { \ + Value *Ptr = const_cast<Value*>(I->first); \ + Sequence Seq = I->second.GetSeq(); \ + GenerateARCBB ## _type ## Annotation(_name, (_bb), Ptr, Seq); \ + } \ + } \ +} while (0) + +#define ANNOTATE_BOTTOMUP_BBSTART(_states, _basicblock) \ + ANNOTATE_BB(_states, _basicblock, "llvm.arc.annotation.bottomup.bbstart", \ + Entrance, bottom_up) +#define ANNOTATE_BOTTOMUP_BBEND(_states, _basicblock) \ + ANNOTATE_BB(_states, _basicblock, "llvm.arc.annotation.bottomup.bbend", \ + Terminator, bottom_up) +#define ANNOTATE_TOPDOWN_BBSTART(_states, _basicblock) \ + ANNOTATE_BB(_states, _basicblock, "llvm.arc.annotation.topdown.bbstart", \ + Entrance, top_down) +#define ANNOTATE_TOPDOWN_BBEND(_states, _basicblock) \ + ANNOTATE_BB(_states, _basicblock, "llvm.arc.annotation.topdown.bbend", \ + Terminator, top_down) + #else // !ARC_ANNOTATION // If annotations are off, noop. #define ANNOTATE_BOTTOMUP(inst, ptr, old, new) #define ANNOTATE_TOPDOWN(inst, ptr, old, new) +#define ANNOTATE_BOTTOMUP_BBSTART(states, basicblock) +#define ANNOTATE_BOTTOMUP_BBEND(states, basicblock) +#define ANNOTATE_TOPDOWN_BBSTART(states, basicblock) +#define ANNOTATE_TOPDOWN_BBEND(states, basicblock) #endif // !ARC_ANNOTATION namespace { @@ -1919,21 +1948,10 @@ ObjCARCOpt::VisitBottomUp(BasicBlock *BB, } } -#ifdef ARC_ANNOTATIONS - if (EnableARCAnnotations) { - // If ARC Annotations are enabled, output the current state of pointers at the - // bottom of the basic block. - for(BBState::ptr_const_iterator I = MyStates.bottom_up_ptr_begin(), - E = MyStates.bottom_up_ptr_end(); I != E; ++I) { - Value *Ptr = const_cast<Value*>(I->first); - Sequence Seq = I->second.GetSeq(); - GenerateARCBBTerminatorAnnotation("llvm.arc.annotation.bottomup.bbend", - BB, Ptr, Seq); - } - } -#endif - - + // If ARC Annotations are enabled, output the current state of pointers at the + // bottom of the basic block. + ANNOTATE_BOTTOMUP_BBEND(MyStates, BB); + // Visit all the instructions, bottom-up. for (BasicBlock::iterator I = BB->end(), E = BB->begin(); I != E; --I) { Instruction *Inst = llvm::prior(I); @@ -1957,20 +1975,10 @@ ObjCARCOpt::VisitBottomUp(BasicBlock *BB, NestingDetected |= VisitInstructionBottomUp(II, BB, Retains, MyStates); } -#ifdef ARC_ANNOTATIONS - if (EnableARCAnnotations) { - // If ARC Annotations are enabled, output the current state of pointers at the - // top of the basic block. - for(BBState::ptr_const_iterator I = MyStates.bottom_up_ptr_begin(), - E = MyStates.bottom_up_ptr_end(); I != E; ++I) { - Value *Ptr = const_cast<Value*>(I->first); - Sequence Seq = I->second.GetSeq(); - GenerateARCBBEntranceAnnotation("llvm.arc.annotation.bottomup.bbstart", - BB, Ptr, Seq); - } - } -#endif - + // If ARC Annotations are enabled, output the current state of pointers at the + // top of the basic block. + ANNOTATE_BOTTOMUP_BBSTART(MyStates, BB); + return NestingDetected; } @@ -2140,20 +2148,10 @@ ObjCARCOpt::VisitTopDown(BasicBlock *BB, } } -#ifdef ARC_ANNOTATIONS - if (EnableARCAnnotations) { - // If ARC Annotations are enabled, output the current state of pointers at the - // top of the basic block. - for(BBState::ptr_const_iterator I = MyStates.top_down_ptr_begin(), - E = MyStates.top_down_ptr_end(); I != E; ++I) { - Value *Ptr = const_cast<Value*>(I->first); - Sequence Seq = I->second.GetSeq(); - GenerateARCBBEntranceAnnotation("llvm.arc.annotation.topdown.bbstart", - BB, Ptr, Seq); - } - } -#endif - + // If ARC Annotations are enabled, output the current state of pointers at the + // top of the basic block. + ANNOTATE_TOPDOWN_BBSTART(MyStates, BB); + // Visit all the instructions, top-down. for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) { Instruction *Inst = I; @@ -2162,21 +2160,11 @@ ObjCARCOpt::VisitTopDown(BasicBlock *BB, NestingDetected |= VisitInstructionTopDown(Inst, Releases, MyStates); } - -#ifdef ARC_ANNOTATIONS - if (EnableARCAnnotations) { - // If ARC Annotations are enabled, output the current state of pointers at the - // bottom of the basic block. - for(BBState::ptr_const_iterator I = MyStates.top_down_ptr_begin(), - E = MyStates.top_down_ptr_end(); I != E; ++I) { - Value *Ptr = const_cast<Value*>(I->first); - Sequence Seq = I->second.GetSeq(); - GenerateARCBBTerminatorAnnotation("llvm.arc.annotation.topdown.bbend", - BB, Ptr, Seq); - } - } -#endif - + + // If ARC Annotations are enabled, output the current state of pointers at the + // bottom of the basic block. + ANNOTATE_TOPDOWN_BBEND(MyStates, BB); + CheckForCFGHazards(BB, BBStates, MyStates); return NestingDetected; } |