[LLVMdev] Area for improvement
Vikram S. Adve
vadve at cs.uiuc.edu
Tue Feb 22 08:46:03 PST 2005
On Feb 22, 2005, at 10:29 AM, Chris Lattner wrote:
> On Tue, 22 Feb 2005, Vikram S. Adve wrote:
>
>>> The second issue is that we need to do redundancy elimination and
>>> hoisting on operations that are only exposed once instruction
>>> selection is performed. Getelementptr expansion is just ONE
>>> particular case of this, but it can happen with any instructions
>>> (including the use of large integer (or any FP) constants on RISC
>>> machines, addressing globals with PIC code, handling
>>> extended/truncated operations (for RISC machines with a single
>>> integer size), etc. Note that hacks like "LowerMultiDimRefs" and
>>> the sparc Preselection pass sorta-kinda work around SOME of this,
>>
>> Actually, they are capable of working around much of this, and most
>> such optimizations are actually quite architecture-independent, e.g.,
>> LowerMultiDimRefs, which is a major optimization for array-intensive
>> languages.
>
> I obviously agree that high-quality codegen of getelementptr
> instructions is very important! I have two primary problems with
> LowerMultiDimRefs:
>
> 1. We don't want the code generator munching on the LLVM code as it
> generates code. The code generator should only read the LLVM code.
> Right now if we do thinks like a "quick JIT" followed by a "good
> code
> JIT" (when we find that a piece of code is hot), the second JIT gets
> different LLVM code than the first one had as input. We are still
> not
> quite to the point where this is the case, but we are getting there.
> 2. The way LowerMultiDimRefs works is by decimating GEP instructions
> into
> pieces, then relying on GCSE and LICM to clean them up. The problem
> with this is that GCSE and LICM are not the trivial passes that
> you'd
> like them to be for a simple cleanup job like this. In particular,
> GCSE requires a value numbering implementation, LICM requires
> loop info and alias analysis.
>
> Finally, while the *code* for MultiDimRefs isn't target specific, the
> decisions it makes *are*.
Let's take these details offline but I'll just address this one point
here -DecomposeMultiDimRefs actually makes virtually no decisions at
all. It just decomposes into single-index operations to allow LICM to
work. The selector makes the rest of the decisions about how to put
GEPs back together to match the target.
>
>> I don't claim such choices are the right long-term solution but the
>> right long-term solution is exactly what you're implying below - a
>> new optimization framework within the back-end, working on it's own
>> representation, etc. This has taken 4 years and is still under
>> development. This is why what you call "hacks" are sometimes the
>> right choice in the short term.
>
> I can appreciate that the LowerMultiDimRefs pass made a *lot* of sense
> 4 years ago, but I'm concerned about moving forward. Now we have more
> of the infrastructure that is needed to move beyond it. Also, the new
> instruction selection framework is only a couple months old, not 4
> years. :)
What I meant was that it took 4 years after work on LLVM (and the sparc
back end) first began. Anyway, it should solve these problems much
more cleanly.
--Vikram
>
> -Chris
>
> --
> http://nondot.org/sabre/
> http://llvm.cs.uiuc.edu/
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list