From fa50a1f2d5141d518f258e76750f65c7a3529a3f Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Sat, 24 Jan 2015 10:47:13 +0000 Subject: [PATCH] [PM] Use a SmallVector instead of std::vector to avoid heap allocations for small switches, and avoid using a complex loop to set up the weights. We know what the baseline weights will be so we can just resize the vector to contain all that value and clobber the one slot that is likely. This seems much more direct than the previous code that tested at every iteration, and started off by zeroing the vector. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226995 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/LowerExpectIntrinsic.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/Transforms/Scalar/LowerExpectIntrinsic.cpp b/lib/Transforms/Scalar/LowerExpectIntrinsic.cpp index ac3c9f4ac68..aa991faafea 100644 --- a/lib/Transforms/Scalar/LowerExpectIntrinsic.cpp +++ b/lib/Transforms/Scalar/LowerExpectIntrinsic.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Transforms/Scalar.h" +#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Statistic.h" #include "llvm/IR/BasicBlock.h" #include "llvm/IR/Constants.h" @@ -24,7 +25,6 @@ #include "llvm/Pass.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" -#include using namespace llvm; @@ -73,13 +73,12 @@ static bool handleSwitchExpect(SwitchInst &SI) { SwitchInst::CaseIt Case = SI.findCaseValue(ExpectedValue); unsigned n = SI.getNumCases(); // +1 for default case. - std::vector Weights(n + 1); + SmallVector Weights(n + 1, UnlikelyBranchWeight); - Weights[0] = - Case == SI.case_default() ? LikelyBranchWeight : UnlikelyBranchWeight; - for (unsigned i = 0; i != n; ++i) - Weights[i + 1] = - i == Case.getCaseIndex() ? LikelyBranchWeight : UnlikelyBranchWeight; + if (Case == SI.case_default()) + Weights[0] = LikelyBranchWeight; + else + Weights[Case.getCaseIndex() + 1] = LikelyBranchWeight; SI.setMetadata(LLVMContext::MD_prof, MDBuilder(CI->getContext()).createBranchWeights(Weights)); -- 2.34.1