[LLVMdev] LLVM IR in DAG form
Philip Reames
listmail at philipreames.com
Mon Feb 23 11:48:08 PST 2015
I don't want to get into the debate w.r.t. which IR style is better -
ask me over beer if you care about my opinions - but as an FYI, there
are serious proposals being worked on to introduce some notion of memory
def-use edges to help in analysing memory operations. I don't think
we've settled on a concrete proposal yet, but I wouldn't be surprised to
see something in the form of an analysis pass which produces 'def-use'
information for memory operations.
Philip
On 02/22/2015 07:47 PM, Jeehoon Kang wrote:
> Thank you David and Jeremy!
>
> I am quite convinced that LLVM IR in SSA form already expresses data
> dependence quite well, as said David and Jeremy. Expressing IR in DAG
> may enable more optimizations on memory operations, but the benefit
> seems to be not so much.
>
> Furthermore, I strongly agree with Jeremy in that instruction orders
> should be preserved for -O1 for debugging purposes.
>
> Thank you,
> Jeehoon
>
>
> 2015-02-21 21:41 GMT+09:00 Jeremy Lakeman <Jeremy.Lakeman at gmail.com
> <mailto:Jeremy.Lakeman at gmail.com>>:
>
>
>
> On Sat, Feb 21, 2015 at 6:38 PM, David Chisnall
> <David.Chisnall at cl.cam.ac.uk <mailto:David.Chisnall at cl.cam.ac.uk>>
> wrote:
>
>
> > On 21 Feb 2015, at 05:59, Jeehoon Kang
> <jeehoon.kang at sf.snu.ac.kr <mailto:jeehoon.kang at sf.snu.ac.kr>>
> wrote:
> >
> > this is Jeehoon Kang, a CS PhD student and a newbie to LLVM.
> >
> > I am wondering why LLVM IR's basic block consists of a list
> of instructions,
> > rather than a DAG of instruction as in the low level
> (ISelectionDAG).
>
> SSA form is implicitly a DAG, defined by the uses relation
> (registers in LLVM can be thought of as edges between
> instructions). It is not *solely* a DAG, however. For
> example, in some places the order of two loads matters -
> particularly when they are atomic operations - it's only
> side-effect-free operations that can be represented entirely
> as a DAG. In general, optimisations that work best with a DAG
> representation deal with use-def chains and are not explicitly
> aware of the sequence of instructions in the basic blocks
> unless they need to be.
>
> The order of loads is still essentially a directed graph.
> Currently that information is implicit in the basic block order,
> and optimisations need to know if it is safe to screw around with
> them. Perhaps these relationships would be better represented
> explicitly instead, in which case the order of instructions in a
> block would be less relevant.
>
> Though of course machine instructions need to be ordered, -O0
> shouldn't mess with the order of operations for debugging
> purposes, and you do need some deterministic way to iterate over
> instructions. So I'm not certain there'd be much benefit in trying
> to remove the current ordering of instructions. If you want to
> walk the instructions as a DAG you can, if you want to walk them
> in execution order you can do that too.
>
> David
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
> http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>
>
>
> --
> Jeehoon Kang (Ph.D. student) <http://sf.snu.ac.kr/jeehoon.kang>
> Software Foundations Laboratory <http://sf.snu.ac.kr>
> Seoul National University <http://www.snu.ac.kr>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150223/1663dc8f/attachment.html>
More information about the llvm-dev
mailing list