[PATCH] D12456: [IR] Add operand bundles to CallInst and InvokeInst.

Duncan P. N. Exon Smith via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 10 18:43:10 PDT 2015


> On 2015-Sep-09, at 19:04, Sanjoy Das <sanjoy at playingwithpointers.com> wrote:
> 
> >
> > Not sure if you want to wait for other reviews, but FWIW this LGTM with
> > a few nitpicks below.
> 
> I'd prefer landing this one with http://reviews.llvm.org/D12457 as I
> don't want to check in a bunch of untested code.  I'm currently
> waiting for reviews on D12457 (hint! :) ).

Done :).

> > I don't really understand this function name.  What does "intern" mean
> > in this context?  Is it a verb?
> >
> > (From its functionality, I'd expect a name similar to
> > "getOrInsertBundleTag()".)
> 
> Done.
> 
> >> +  auto I = BundleTagCache.find(Tag);
> >> +  if (I != BundleTagCache.end())
> >> +    return&*I;
> >> +
> >> +  auto *Entry =
> >> +      StringMapEntry<uint32_t>::Create(Tag, BundleTagCache.getAllocator(), 0);
> >> +  bool WasInserted = BundleTagCache.insert(Entry);
> >> +  (void)WasInserted;
> >> +  assert(WasInserted&&  "Expected entry to be inserted");
> >> +  return Entry;
> >
> > Is this function doing anything different from the following one-liner?
> > --
> > return *&BundleTagCache.insert(std::make_pair(Tag, 0)).first;
> 
> Nothing except the assertion on `WasInserted`, but that looks
> redundant.  Fixed.
> 
> > I haven't looked at how `isCall()` is implemented, but this looks
> > vaguely like an `isa<>` (in disguise) plus `cast<>`.  If so, this would
> > be better as:
> > --
> > Instruction *I = getInstruction();
> > if (auto *CI = dyn_cast<CallInst>(I))
> >    return 1 + CI->...;
> > return 3 + cast<InvokeInst>(I)->...;
> > --
> 
> `CallSite` uses the lower bits of the `Instruction *` to remember if
> the `Instruction` is a `CallInst` or an `InvokeInst`.  So, at least in
> theory using `isCall` over `isa<CallInst>` saves one dereference; but
> that's of dubious value since after this change `getArgumentEndOffset`
> will have to touch memory anyway in `getNumTotalBundleOperands`.
> 
> I have a mild preference for using `isCall` since that's what the rest
> of `CallSite` uses.

Okay, sounds good.  I didn't know CallSite had this cached.


More information about the llvm-commits mailing list