[llvm-dev] trouble hoisting GlobalValues

Ansari, Zia via llvm-dev
Mon, 14 Dec 2015 17:55:14 -0000

+1

As Hal mentioned, ConstantHoisting.cpp should be able to do this fine for global
values. You just need to be careful because I found that the CG needs a little
work to make sure that the extra global register pressure doesn't cause any
issues.

For local values, if you don't have it, check out my patch :
http://reviews.llvm.org/D11363

This will run at ISEL/DAG with the intent of being more precise in the cases
that it targets/catches, and to run at a point where more opportunities are
exposed. It was worth a fair bit of code size (over 1% on spec2000), and can be
extended to catch more cases, if need be.

Thanks,
Zia.

|-----Original Message-----
|From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Hal
|Finkel via llvm-dev
|Sent: Friday, December 11, 2015 2:33 PM
|To: Rafael Espíndola
|Cc: llvm-dev
|Subject: Re: [llvm-dev] trouble hoisting GlobalValues
|
|----- Original Message -----
|> From: "Rafael Espíndola via llvm-dev" <llvm-dev at
lists.llvm.org>
|> To: "Steve King" <steve at metrokings.com>
|> Cc: "llvm-dev" <llvm-dev at lists.llvm.org>
|> Sent: Friday, December 11, 2015 4:28:33 PM
|> Subject: Re: [llvm-dev] trouble hoisting GlobalValues
|>
|> On 11 December 2015 at 16:53, Steve King via llvm-dev
|> <llvm-dev at lists.llvm.org> wrote:
|> > Hello LLVM,
|> > To reduce the code-size cost of relocations, I'm trying to hoist
|> > GlobalValues that are used many times.  A new pass hides each
|> > hoisted GV behind a BITCAST in the dominating BB.  The pass then
|> > updates users with the output of the BITCAST.  This pass works
|> > properly AFAICT.
|> >
|> > The problems come in instruction selection.
|> > SelectionDAGBuilder::visitBitCast() treats the BITCAST as a no-op
|> > and eventually users of the GV fold the relocation as if hoisting
|> > never happened.  Experiments turning the BITCAST into a copytoreg
|> > failed and anyway I feel like I'm just shooting in the dark.
|> >
|> > Can anyone can suggest a strategy for lowering a hoisted GV?  The
|> > end result should be that the GV materializes as a simple
|> > move-immediate to register.
|
|Also, something similar-sounding to this is done in
|lib/Transforms/Scalar/ConstantHoisting.cpp
|
| -Hal
|
|>
|> Nothing simple. One possibility would be to make constants explicitly
|> materialized. Something like:
|>
|> https://github.com/apple/swift/blob/master/docs/SIL.rst#global-addr
|>
|> Which would also be useful for architectures where some constants are
|> expensive to place in a register.
|>
|> Cheers,
|> Rafael
|> _______________________________________________
|> LLVM Developers mailing list
|> llvm-dev at lists.llvm.org
|> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
|>
|
|--
|Hal Finkel
|Assistant Computational Scientist
|Leadership Computing Facility
|Argonne National Laboratory
|_______________________________________________
|LLVM Developers mailing list
|llvm-dev at lists.llvm.org
|http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev