diff options
author | Akira Hatanaka <ahatanaka@apple.com> | 2014-12-01 04:27:03 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@apple.com> | 2014-12-01 04:27:03 +0000 |
commit | b9991a265642cea3c544fe407cbb5eb300582f43 (patch) | |
tree | a0bf852deabdc99009879a35744edcc18b180473 /llvm/lib/CodeGen/StackProtector.cpp | |
parent | 04a74af73479477f2e866719f9b773c4da648872 (diff) | |
download | bcm5719-llvm-b9991a265642cea3c544fe407cbb5eb300582f43.tar.gz bcm5719-llvm-b9991a265642cea3c544fe407cbb5eb300582f43.zip |
[stack protector] Set edge weights for newly created basic blocks.
This commit fixes a bug in stack protector pass where edge weights were not set
when new basic blocks were added to lists of successor basic blocks.
Differential Revision: http://reviews.llvm.org/D5766
llvm-svn: 222987
Diffstat (limited to 'llvm/lib/CodeGen/StackProtector.cpp')
-rw-r--r-- | llvm/lib/CodeGen/StackProtector.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/StackProtector.cpp b/llvm/lib/CodeGen/StackProtector.cpp index 3fc0a36dd22..58e4ad971e8 100644 --- a/llvm/lib/CodeGen/StackProtector.cpp +++ b/llvm/lib/CodeGen/StackProtector.cpp @@ -17,6 +17,7 @@ #include "llvm/CodeGen/StackProtector.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/Statistic.h" +#include "llvm/Analysis/BranchProbabilityInfo.h" #include "llvm/Analysis/ValueTracking.h" #include "llvm/CodeGen/Analysis.h" #include "llvm/CodeGen/Passes.h" @@ -31,6 +32,7 @@ #include "llvm/IR/Instructions.h" #include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/Intrinsics.h" +#include "llvm/IR/MDBuilder.h" #include "llvm/IR/Module.h" #include "llvm/Support/CommandLine.h" #include "llvm/Target/TargetSubtargetInfo.h" @@ -459,7 +461,13 @@ bool StackProtector::InsertStackProtectors() { LoadInst *LI1 = B.CreateLoad(StackGuardVar); LoadInst *LI2 = B.CreateLoad(AI); Value *Cmp = B.CreateICmpEQ(LI1, LI2); - B.CreateCondBr(Cmp, NewBB, FailBB); + unsigned SuccessWeight = + BranchProbabilityInfo::getBranchWeightStackProtector(true); + unsigned FailureWeight = + BranchProbabilityInfo::getBranchWeightStackProtector(false); + MDNode *Weights = MDBuilder(F->getContext()) + .createBranchWeights(SuccessWeight, FailureWeight); + B.CreateCondBr(Cmp, NewBB, FailBB, Weights); } } |