[LLVMdev] HazardRecognizer and RegisterAllocation
David Greene
dag at cray.com
Tue Jan 20 14:22:12 PST 2009
On Monday 19 January 2009 19:47, Dan Gohman wrote:
> > Can they be used in conjunction with
> > MemoryDependenceAnalysis? e.g. can we write a MachineInstructions-
> > based
> > memory dependence analysis that uses MachineMemoryOperands?
>
> Right, the existing MemoryDependenceAnalysis works in terms of
> LLVM-IR-level Instructions, but yes, it would be possible to
> implement the same thing for MachineInstrs, using AliasAnalysis
> queries from MachineMemOperands. As of this writing I'm not
> prepared to guess whether this would be a good idea :-).
Sure. It seems fairly straightforward though. Heck, it might even be
possible to take MemoryDependenceAnalysis and turn it into generic code that
could operate on Instructions or MachineMemOperands.
> >> This would probably also involve AliasAnalysis queries from codegen,
> >> possibly going though the MemoryDependenceAnalysis interface.
> >
> > Do you have a vision for how this might work? Wouldn't we need a new
> > MachineFunctionPass to essentially do the same thing as
> > MemoryDependenceAnalysis?
>
> A possible vision is that SelectionDAGBuild could use
> MemoryDependenceAnalysis when building the initial SelectionDAG.
> It's walking the IR-level Instructions, so it can use any
> IR-level analysis. I haven't yet looked into this in detail.
> A significant question is whether non-local dependencies are
> important; some day we may extend SelectionDAGs to handle
> more than one block at a time.
I should think non-local dependencies would be important. We have a number of
machine code passes that work globally.
> > I don't think it's sufficient to just preserve the information we
> > had from
> > Instructions. Codegen might introduce new memory operations after
> > lowering
> > (spilling, for example). Some of these might be easily analyzable
> > (spills)
> > but others might not be.
>
> This is where PseudoSourceValues come in. There are pseudo-values
> representing the stack, constants area, GOT, and other memory
> locations that aren't represented at the LLVM-IR level.
Ok, that's good. But what happens if some codegen pass deletes a memory
instruction (or a Value or whatever) and recreates it elsewhere. Presumably
the dependence information would be lost. How would we re-generate it.
> I think the biggest challenge here is finding a design that
> is reasonably efficient in terms of compile time and space while
> still providing useful information.
Isn't that the definition of compiler development? :)
-Dave
More information about the llvm-dev
mailing list