[llvm-dev] [GSoC 2016] [Weekly Status] Interprocedural Register Allocation
vivek pandya via llvm-dev
llvm-dev at lists.llvm.org
Mon Jun 20 20:56:08 PDT 2016
On Tue, Jun 21, 2016 at 1:45 AM, Matthias Braun <matze at braunis.de> wrote:
>
> > On Jun 20, 2016, at 12:53 PM, Sanjoy Das via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
> >
> > Hi Vivek,
> >
> > vivek pandya via llvm-dev wrote:
> > > int foo() {
> > > return 12;
> > > }
> > >
> > > int bar(int a) {
> > > return foo() + a;
> > > }
> > >
> > > int (*fp)() = 0;
> > > int (*fp1)(int) = 0;
> > >
> > > int main() {
> > > fp = foo;
> > > fp();
> > > fp1 = bar;
> > > fp1(15);
> > > return 0;
> > > }
> >
> > IMO it is waste of time trying to do a better job at the IPRA level on
> > IR like the above ^. LLVM should be folding the indirect calls to
> > direct calls at the IR level, and if it isn't that's a bug in the IR
> > level optimizer.
> +1 from me.
>
> Yes at -O3 level simple indirect calls including virtual functions are
getting optimized to direct call.
> The interesting cases are the non-obvious ones (assumeing foo/bar have the
> same parameters). Things gets interesting once you have uncertainty in the
> mix. The minimally interesting case would look like this:
>
> int main() {
> int (*fp)();
> if (rand()) {
> fp = foo;
> } else {
> fp = bar;
> }
> fp(42);
> }
>
I tried this case and my simple hack fails to optimize it :-) . This
requires discussion on IRC.
Sincerely,
-Vivek
> However predicting the possible targets of a call is IMO a question of
> computing a call graph datastructure and improving upon that. We should be
> sure that we discuss and implement this independently of the register
> allocation work!
>
> - Matthias
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160621/386d09b3/attachment.html>
More information about the llvm-dev
mailing list