summaryrefslogtreecommitdiff
path: root/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
diff options
context:
space:
mode:
authorMichael Gottesman <mgottesman@apple.com>2013-04-03 22:41:59 +0000
committerMichael Gottesman <mgottesman@apple.com>2013-04-03 22:41:59 +0000
commit7a424bd5deac40ad7520a9a31104723c6f08182b (patch)
tree14c548c8828502d55da03f37f2074504c81cf2c4 /lib/Transforms/ObjCARC/ObjCARCOpts.cpp
parent6b6050b229976a2f53184f6d6857e6f445a869d0 (diff)
downloadllvm-7a424bd5deac40ad7520a9a31104723c6f08182b.tar.gz
llvm-7a424bd5deac40ad7520a9a31104723c6f08182b.tar.bz2
llvm-7a424bd5deac40ad7520a9a31104723c6f08182b.tar.xz
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178705 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/ObjCARC/ObjCARCOpts.cpp')
-rw-r--r--lib/Transforms/ObjCARC/ObjCARCOpts.cpp104
1 files changed, 46 insertions, 58 deletions
diff --git a/lib/Transforms/ObjCARC/ObjCARCOpts.cpp b/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
index 5ac8c8e6c2..27bcf35ac9 100644
--- a/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
+++ b/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;
}