[LLVMdev] alias information on machine instructions
Evan Cheng
evan.cheng at apple.com
Tue Jun 19 18:20:03 PDT 2007
On Jun 18, 2007, at 8:27 AM, Dan Gohman wrote:
> On Fri, Jun 15, 2007 at 04:16:57PM +0200, Florian Brandner wrote:
>> hi,
>>
>>
>> Florian Brandner wrote:
>>> Dan Gohman wrote:
>>>> On Wed, May 23, 2007 at 12:23:38AM -0700, Chris Lattner wrote:
>>>>> Right. The original Value*'s are preserved in the DAG, but
>>>>> dropped when
>>>>> MachineInstrs are created. We could add a machineoperand to
>>>>> capture this
>>>>> Value* if desired.
>>>> Another benefit of keeping the original Value*'s (and offsets)
>>>> around is it
>>>> would provide more information that could be used for verbose
>>>> asm output
>>>> and MachineInstr-level dumps, which would be quite nice.
>>>>
>>>
>>> i'll do this and post a patch, unless someone else is already
>>> working on
>>> this.
>>>
>>
>> i have extended the DAG instruction selector and scheduler to
>> preserve
>> Value*'s. the values are attached to machine instructions as a
>> separate
>> operand list (at least for now). for now this looks very good.
>
> Cool!
>
>> but i found that the alias analysis is not as good as expected. the
>> problem seems to be the codegenprepare pass. GEP instructions are
>> lowered to integer calculations (e.g. ptrtoint, add, inttoptr). this
>> causes the (basic) alias analysis to answer MayAlias for most
>> queries.
>>
>> this is also a problem for the DAG combiner, when the
>> -combiner-global-alias-analysis switch is given to llc.
>>
>> any ideas how to handle this?
>
> I don't have any that are both easy and clean :-/.
>
> It probably wouldn't be difficult to teach the basic alias analysis
> how
> to dig past adds and casts to find base expressions. Or, make the
I think this is very much doable and would provide much immediate
benefit. It's not a trivial task. We have to make sure DAG combiner
and legalizer do not muck up alias information (among other challenges).
> CodeGenPrepare pass use getelementptrs directly instead of expanding
> addressing into integer operations. Or maybe instcombine could be run
> after CodeGenPrepare so it could fold the integer operations into
> getelementptrs?
>
> I think the long-term solution is to teach the SelectionDAG framework
> how to look beyond basic-block boundaries so that CodeGenPrepare
> doesn't
> have to do this de-hoisting of addressing.
Whole-function isel is being considered. No immediate plan yet though.
Evan
>
> It also might make sense to write a SCEV-based AliasAnalysis some day.
>
> Dan
>
> --
> Dan Gohman, Cray Inc.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list