[llvm-dev] RFC: Import of Integer Set Library into LLVM source tree
Tobias Grosser via llvm-dev
llvm-dev at lists.llvm.org
Wed Jan 17 00:22:04 PST 2018
On Wed, Jan 17, 2018, at 09:14, Tobias Grosser via llvm-dev wrote:
> On Wed, Jan 17, 2018, at 07:22, Chris Lattner via llvm-dev wrote:
> > > On Jan 15, 2018, at 8:52 AM, Michael Kruse via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> > > As for the main motivation on why to import the entire source of isl at all:
> > > Polly interacts relative tightly with isl which provide the main
> > > optimization algorithms. For instance, Polly's regression tests
> > > compare the string output of set representation, which unfortunately
> > > can change between versions. For instance, if a newer version
> > > implements a simpler string description of the same set. That means
> > > that tests would fail if a different version is installed on the host
> > > system. This is significant for buildbots that would need regular
> > > manual action to install a newer version of isl on the system.
> >
> > Hi Michael,
>
> Hi Chris,
>
> thank you for your feedback and especially for raising these concerns.
> We talked with different members of the community and share parts of
> your concerns.
>
> > I have significant concerns about including ISL into LLVM. LLVM
> > intentionally takes a very conservative approach to bundling third party
> > code with itself: we prefer instead of have them be external
> > dependencies that are conditionally configured in on demand.
>
> I understand. If needed we can make the compilation of isl optional.
>
> However, as pointed out earlier in this thread it seems preferable to
> lock LLVM with a very specific version of isl to make sure version
> differences don't cause spurious bugs. This at least has shown to be
> very useful in Polly.
>
> > I’m not an expert in ISL in particular, but it looks like it is
> > something of an odd dependency to include: it isn’t structured at all
> > like LLVM, and it (apparently, I could definitely be wrong) depends on
> > the GMP library which is LGPL.
>
> It can optionally be compiled with GMP, however especially for the use
> in LLVM we added together with Qualcomm an MIT licensed imath backend
> (and tuned its performance).
>
> > Beyond licensing, it has an old-school
> > C-style API which appears to be extremely inefficient compared to things
> > like APInt that avoid allocations for 64-bit integers and less.
>
> Over the last year we developed C++ bindings for isl which make its use
> a lot easier:
>
> https://github.com/llvm-mirror/polly/blob/master/lib/External/isl/include/isl/isl-noexceptions.h
>
> While this does not reduce heap allocations, it will make it easier to
> replace performance critical parts of isl over time. While we don't have
> concrete plans to rewrite core parts of isl, I expect over time more and
> more of isl-style functionality to be incorporated natively in LLVM.
>
> I expect that we could likely reduce heap allocations further, but some
> of the low-hanging fruits have already been picked. We avoid allocations
> of GMP/imath data structures all together for cases where integers are
> smaller than 32 bit. Most critical performance improvements today come
> from algorithmic improvements.
>
> Having an implementation that serves as baseline when considering to
> replacing parts of isl seems to be a good idea.
>
> > How much of ISL are you using?
>
> We currently use the (parameteric) integer programming solver, the
> integer constraint library, the constraint to AST code generator, the
> ILP based scheduler, ...
>
> > What other options have you considered?
>
> There are no other license compatible alternatives for the full set of
> functionalities we are using.
>
> Alternatives for the constraint library part are PPL (which does not
> provide integer constraints), as well as omega (which served as
> inspiration for isl, but is today mostly unmaintained). Omega is to my
> knowledge used in compilers such as icc.
>
> Alternatives for the code generation part are ClooG and codegen+. Both
> are older, provide less functionality, have license issues, and are C
> based.
>
> Alternatives for the scheduler are Pluto(+) (which is license incompatible).
>
> There are many alternatives for the LP solver. I did not do an extensive
> search here.
>
> > Why should this be included with every LLVM distribution instead of
> > being conditionally compiled? If the major issue is the polly
> > regression tests, why not fix the tests?
>
> We currently don't have any issue. isl is today shipped as part of the
> Polly repository.
>
> As Polly matured over time, all license issues have been resolved, we
> want to better integrate Polly also with the new pass manager, and
> alternative uses of parts of isl arose, we propose (see other thread) to
> move Polly into the LLVM core repository. This would allow also for a
> closer integration of polyhedral operations with parts of LLVM. This
> patch focuses on where/how to integrate isl.
Also, one more data-point. We currently ship isl + Polly with the standard LLVM releases, as well as the debian + ubuntu package builds. Hence, this path is well tested.
Best,
Tobias
>
> Best,
> Tobias
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
More information about the llvm-dev
mailing list