diff options
| author | Reid Kleckner <rnk@google.com> | 2017-04-13 18:10:30 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2017-04-13 18:10:30 +0000 |
| commit | 3a1150352db548888caab09e2314845bd11ebdbb (patch) | |
| tree | 74b1e1c6894cd871683eed685b982b2c88e35917 /llvm/lib/Transforms/IPO | |
| parent | 4ae261bcf70f9f11607e55011fdbb5182fbf7d56 (diff) | |
| download | bcm5719-llvm-3a1150352db548888caab09e2314845bd11ebdbb.tar.gz bcm5719-llvm-3a1150352db548888caab09e2314845bd11ebdbb.zip | |
[ArgPromotion] Don't drop !prof metadata on promoted calls
Noticed by inspection while doing attribute work. DAE, InstCombineCalls,
and ArgPromotion have a fair amount of duplicated code for hacking on
call sites, and you can find bugs by comparing them.
Add a test case for this.
llvm-svn: 300229
Diffstat (limited to 'llvm/lib/Transforms/IPO')
| -rw-r--r-- | llvm/lib/Transforms/IPO/ArgumentPromotion.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/IPO/ArgumentPromotion.cpp b/llvm/lib/Transforms/IPO/ArgumentPromotion.cpp index 00235d46dc5..940c1ead096 100644 --- a/llvm/lib/Transforms/IPO/ArgumentPromotion.cpp +++ b/llvm/lib/Transforms/IPO/ArgumentPromotion.cpp @@ -291,7 +291,7 @@ doPromotion(Function *F, SmallPtrSetImpl<Argument *> &ArgsToPromote, CallSite NewCS; if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) { NewCS = InvokeInst::Create(NF, II->getNormalDest(), II->getUnwindDest(), - Args, OpBundles, "", Call); + Args, OpBundles, "", Call); } else { auto *NewCall = CallInst::Create(NF, Args, OpBundles, "", Call); NewCall->setTailCallKind(cast<CallInst>(Call)->getTailCallKind()); @@ -302,6 +302,9 @@ doPromotion(Function *F, SmallPtrSetImpl<Argument *> &ArgsToPromote, AttributeList::get(F->getContext(), CallPAL.getFnAttributes(), CallPAL.getRetAttributes(), ArgAttrVec)); NewCS->setDebugLoc(Call->getDebugLoc()); + uint64_t W; + if (Call->extractProfTotalWeight(W)) + NewCS->setProfWeight(W); Args.clear(); ArgAttrVec.clear(); |

