[llvm-commits] [llvm-gcc-4.2] r44456 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
Duncan Sands
baldrick at free.fr
Fri Nov 30 10:19:18 PST 2007
Author: baldrick
Date: Fri Nov 30 12:19:15 2007
New Revision: 44456
URL: http://llvm.org/viewvc/llvm-project?rev=44456&view=rev
Log:
Add the nounwind attribute to calls in nothrow
regions.
Modified:
llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=44456&r1=44455&r2=44456&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Fri Nov 30 12:19:15 2007
@@ -2311,7 +2311,6 @@
// call) and if so, what the exception destination will be.
BasicBlock *LandingPad = 0;
bool NoUnwind = false;
- // FIXME: set the nounwind attribute if NoUnwind.
// Do not turn intrinsic calls into invokes.
if (!isa<Function>(Callee) || !cast<Function>(Callee)->getIntrinsicID()) {
@@ -2342,6 +2341,17 @@
}
}
+ if (NoUnwind && !(PAL && PAL->paramHasAttr(0, ParamAttr::NoUnwind))) {
+ // This particular call does not unwind even though the callee may
+ // unwind in general. Add the 'nounwind' attribute to the call.
+ uint16_t RAttributes = PAL ? PAL->getParamAttrs(0) : 0;
+ RAttributes |= ParamAttr::NoUnwind;
+
+ ParamAttrsVector modVec;
+ modVec.push_back(ParamAttrsWithIndex::get(0, RAttributes));
+ PAL = ParamAttrsList::getModified(PAL, modVec);
+ }
+
SmallVector<Value*, 16> CallOperands;
CallingConv::ID CallingConvention;
FunctionCallArgumentConversion Client(exp, CallOperands, CallingConvention,
More information about the llvm-commits
mailing list