[llvm-dev] Operand Bundles generalization RE: Full restrict support - status update
Sanjoy Das via llvm-dev
llvm-dev at lists.llvm.org
Sun Mar 8 12:15:52 PDT 2020
Hi Jeroen,
On Fri, Mar 6, 2020 at 4:45 AM Jeroen Dobbelaere
<Jeroen.Dobbelaere at synopsys.com> wrote:
> In an attempt to restart the discussion:
> (Added Sanjoy, as he has done a lot of work on the operand bundles)
>
> In order to move things forward, I would like to find out:
> - how hard an implementation of generalized operand bundles would be, and
> - how we can minimize the impact on parts of the compiler that don't
> need operand bundles
It has been a while since I worked on this, but
1. I expect the data-structure bits of general operand bundles to be
fairly straightforward. That is, it is probably only a few days work
to start attaching operand bundles to instructions like load,
getelementptr etc. and making sure that LLVM passes do not crash.
2. I expect the high level semantic modelling to be significantly more
challenging. For instance, what does it mean for a getelementptr to
have an operand bundle? Does it invalidate some existing
optimizations? How will we ensure that we've discovered all of the
transforms and analyses that needed to be changed?
-- Sanjoy
>
> So that we can compare it to my current solution for the provenance (former
> 'noalias side_channel') of a pointer operand of a load/store instruction.
>
> Either by support operand bundles on any instruction (1), or, if that would
> have too big of an impact, by extending its support to load/store instructions (2).
>
> Sanjay, as you have done a decent amount of work on Operand Bundles, maybe you
> can give some insight on the feasibility, possible performance/memory impact,
> amount of work ?
>
> Thanks,
>
> Jeroen Dobbelaere
>
>
> > -----Original Message-----
> > From: Jeroen Dobbelaere
> > Sent: Tuesday, November 12, 2019 22:15
> > To: Doerfert, Johannes <jdoerfert at anl.gov>
> > Cc: Alexey Zhikhartsev <alexey.zhikhar at gmail.com>; Finkel, Hal J.
> > <hfinkel at anl.gov>; llvm-dev at lists.llvm.org
> > Subject: RE: [llvm-dev] Full restrict support - status update
> >
> > Hi Johannes et al,
> >
> > > -----Original Message-----
> > > From: Doerfert, Johannes <jdoerfert at anl.gov>
> > [..]
> [..]
> > > (B) Using operand bundles
> > >
> > > Right now, loads and stores are treated differently and given a new
> > > operand. Then there are intrinsics to decode other kinds of information.
> > > As an alternative, we could allow operand bundles on all instructions
> > > and use them to tie information to an instruction. The "sidechannel"
> > > operand of a load would then look something like:
> > > load i32* %p [ "ptr_provenance"(%p_decl) ]
> > > and for a store we could have
> > > store i32** %p.addr, i32* %p [ "ptr_provenance"(%p_decl) ]
> > >
> > > The benefit is that we do not change the operand count (which causes a
> > > lot of noise) but we still have to make sure ptr/value uses are not
> > > confused with operand bundle uses. We can attach the information to more
> > > than load/store instructions, also to remove the need for some of the
> > > intrinsics.
> >
> > To me, operand bundles sound to be more or less equivalent to the current
> > solution. It might also make the 'instruction cloning' easier, if we can omit the
> > 'ptr_provenance' there. The change of the number of operands caused some
> > noise, but it is the changes in the amount of 'uses' of a pointer that refer to the
> > same instruction that caused the most problems. Especially when that
> > instruction
> > was going to be erased. Operand bundles will still need those code changes.
> > (like in parts of D68516 and D68518)
> >
> > As the 'Call' instruction already supports operand bundles, it could eliminate
> > the need
> > for the 'llvm.noalias.arg.guard' intrinsic, which combines the normal pointer
> > with the
> > side channel (aka provenance). But, after inlining, we still need to put that
> > information
> > somewhere. Or it should be propagated during inlining.
> > Care must be taken not to lose that information when the 'call' is changed by
> > optimizations
> > as, after inlining, that might result in wrong alias analysis conclusions.
> >
> > Are you thinking of "operand bundles" support for just LoadInst/StoreInst, or for
> > all
> > instructions ?
> >
> > Greetings,
> >
> > Jeroen Dobbelaere
> >
>
More information about the llvm-dev
mailing list