On 18/02/2011 19:42, Nathan Howell wrote:
On Fri, Feb 18, 2011 at 12:54 AM, Roman Leshchinskiy <r...@cse.unsw.edu.au
<mailto:r...@cse.unsw.edu.au>> wrote:
Max Bolingbroke wrote:
> On 18 February 2011 01:18, Johan Tibell <johan.tib...@gmail.com
<mailto:johan.tib...@gmail.com>> wrote:> It seems like a sufficient
solution for your needs would be for us to
> use the LTO support in LLVM to inline across module boundaries - in
> particular to inline primop implementations into their call
sites. LLVM
> would then probably deal with unrolling small loops with
statically known
> bounds.
Could we simply use this?
http://llvm.org/docs/LangRef.html#int_memcpy
Might be easier to implement a PrimOp inlining pass, and to run it
before LLVM's built-in MemCpyOptimization pass [0]. This wouldn't
generally be as good as LTO but would work without gold.
[0] http://llvm.org/doxygen/MemCpyOptimizer_8cpp_source.html
Ideally you'd want the heap check in the primop to be aggregated into
the calling function's heap check, and the primop should allocate
directly from the heap instead of calling out to the RTS allocate().
All this is a bit much to expect LLVM to do, but we could do it in the
Glorious New Code Generator...
For small arrays like this maybe we should have a new array type that
leaves out all the card-marking stuff too (or just use tuples, as Roman
suggested).
Cheers,
Simon
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users