Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:Update
llvm.7809
backport-llvm-r204049
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File backport-llvm-r204049 of Package llvm.7809
------------------------------------------------------------------------ r204049 | eliben | 2014-03-17 17:19:07 +0100 (Mon, 17 Mar 2014) | 7 lines Consistent use of the noduplicate attribute. The "noduplicate" attribute of call instructions is sometimes queried directly and sometimes through the cannotDuplicate() predicate. This patch streamlines all queries to use the cannotDuplicate() predicate. It also adds this predicate to InvokeInst, to mirror what CallInst has. ------------------------------------------------------------------------ Index: lib/Transforms/Scalar/JumpThreading.cpp =================================================================== --- lib/Transforms/Scalar/JumpThreading.cpp.orig +++ lib/Transforms/Scalar/JumpThreading.cpp @@ -251,7 +251,7 @@ static unsigned getJumpThreadDuplication // as having cost of 2 total, and if they are a vector intrinsic, we model // them as having cost 1. if (const CallInst *CI = dyn_cast<CallInst>(I)) { - if (CI->hasFnAttr(Attribute::NoDuplicate)) + if (CI->cannotDuplicate()) // Blocks with NoDuplicate are modelled as having infinite cost, so they // are never duplicated. return ~0U; Index: lib/Analysis/CodeMetrics.cpp =================================================================== --- lib/Analysis/CodeMetrics.cpp.orig +++ lib/Analysis/CodeMetrics.cpp @@ -65,11 +65,11 @@ void CodeMetrics::analyzeBasicBlock(cons ++NumVectorInsts; if (const CallInst *CI = dyn_cast<CallInst>(II)) - if (CI->hasFnAttr(Attribute::NoDuplicate)) + if (CI->cannotDuplicate()) notDuplicatable = true; if (const InvokeInst *InvI = dyn_cast<InvokeInst>(II)) - if (InvI->hasFnAttr(Attribute::NoDuplicate)) + if (InvI->cannotDuplicate()) notDuplicatable = true; NumInsts += TTI.getUserCost(&*II); Index: lib/Analysis/LoopInfo.cpp =================================================================== --- lib/Analysis/LoopInfo.cpp.orig +++ lib/Analysis/LoopInfo.cpp @@ -220,12 +220,12 @@ bool Loop::isSafeToClone() const { return false; if (const InvokeInst *II = dyn_cast<InvokeInst>((*I)->getTerminator())) - if (II->hasFnAttr(Attribute::NoDuplicate)) + if (II->cannotDuplicate()) return false; for (BasicBlock::iterator BI = (*I)->begin(), BE = (*I)->end(); BI != BE; ++BI) { if (const CallInst *CI = dyn_cast<CallInst>(BI)) { - if (CI->hasFnAttr(Attribute::NoDuplicate)) + if (CI->cannotDuplicate()) return false; } } Index: lib/Analysis/IPA/InlineCost.cpp =================================================================== --- lib/Analysis/IPA/InlineCost.cpp.orig +++ lib/Analysis/IPA/InlineCost.cpp @@ -721,7 +721,7 @@ bool CallAnalyzer::visitCallSite(CallSit return false; } if (CS.isCall() && - cast<CallInst>(CS.getInstruction())->hasFnAttr(Attribute::NoDuplicate)) + cast<CallInst>(CS.getInstruction())->cannotDuplicate()) ContainsNoDuplicateCall = true; if (Function *F = CS.getCalledFunction()) { Index: include/llvm/IR/Instructions.h =================================================================== --- include/llvm/IR/Instructions.h.orig +++ include/llvm/IR/Instructions.h @@ -2970,6 +2970,12 @@ public: addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind); } + /// \brief Determine if the invoke cannot be duplicated. + bool cannotDuplicate() const {return hasFnAttr(Attribute::NoDuplicate); } + void setCannotDuplicate() { + addAttribute(AttributeSet::FunctionIndex, Attribute::NoDuplicate); + } + /// \brief Determine if the call returns a structure through first /// pointer argument. bool hasStructRetAttr() const {
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor