On Feb 16, 2008, at 6:41 PM, Duncan Sands wrote: > Hi Chris, >>> Remove any 'nest' parameter attributes if the function >>> is not passed as an argument to a trampoline intrinsic. >> >> Nice. Out of curiousity, how does nest do to codegen? > > 'nest' causes a specific register to be grabbed for the > parameter in calls. So removing it doesn't do much :)
Ok. >> Alternatively, maybe ParamAttrsList >> should have a 'find attribute' function that returns the first >> argument that has the specified attribute? > > I think that would only be useful for attributes that can occur at > most once, i.e. sret and nest, and since sret is always on the first > parameter it's not useful for sret. I did consider a > removeAttrEverywhere method, but again it didn't seem generally > useful. Fair enough! >>> +static void RemoveNestAttribute(Function *F) { >>> + F->setParamAttrs(StripNest(F->getParamAttrs())); >>> + for (Value::use_iterator UI = F->use_begin(), E = F->use_end(); >>> UI != E;++UI){ >>> + Instruction *User = cast<Instruction>(*UI); >> >>> + if (CallInst *CI = dyn_cast<CallInst>(User)) { >> >> Please use CallSite to handle CallInst/Invoke uniformly. > > To create a CallSite don't you first need to get your hands on > either a CI > or an II? Which means doing the dyn_cast and test anyway, to > produce the > CallSite (this is annoying, maybe it should be possible to create > one from > an Instruction*). You can just do: CallSite User(cast<Instruction>(*UI)); and then handle user generically. > So I don't see that it gains you much. Also, in > ChangeCalleesToFastCall a few lines above I see that a certain > "lattner" > didn't consider a CallSite useful for the calling convention case :) Heh, CallSite probably didn't exist when that was written, or my commit wasn't adequately reviewed by my peers ;-) -Chris _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits