<div dir="ltr">Hi folks,<div><br></div><div>I actually just wanted to point out that this means isl will also be part of any binary distribution. Especially if, as Tobias says, minor differences can lead to issues. In that, I'm not worried about the LLVM community, since they have the in-tree version available. But do we want to throw that onto the average, say, Ubuntu user?</div><div><br></div><div>Alternatively, we can pull isl from the public Polly interface, and possibly replace it with a wrapper that we can ship. I'm worried that that might incur a performance impact, but of course we'd have to see numbers on that.</div><div><br></div><div>Cheers,</div><div>Philip</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-01-16 18:04 GMT+01:00 Hal Finkel <span dir="ltr"><<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><br>
On 01/16/2018 01:59 AM, Tobias Grosser via llvm-dev wrote:<br>
> On Tue, Jan 16, 2018, at 08:53, Tobias Grosser via llvm-dev wrote:<br>
>> On Mon, Jan 15, 2018, at 22:10, Philip Pfaffe via llvm-dev wrote:<br>
>>> Hi Micheal,<br>
>>><br>
>>> thanks for moving this forward!<br>
>>><br>
>>> 2018-01-15 17:52 GMT+01:00 Michael Kruse via llvm-dev <<br>
>>> <a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>>:<br>
>>><br>
>>>> Dear community,<br>
>>>><br>
>>>> for our goal to make polyhedral optimization available in the main<br>
>>>> LLVM source, we will need the Integer Set Library (isl)[1]. It is the<br>
>>>> main dependency of Polly, but would be required even if we do not<br>
>>>> directly import Polly.<br>
>>>><br>
>>>> I already prepared a patch [2], unfortunately without feedback on the<br>
>>>> general approach. As Philip suggested in the review, I am reaching out<br>
>>>> with an RFC with a wider audience on llvm-dev.<br>
>>>><br>
>>>> As for the main motivation on why to import the entire source of isl at<br>
>>>> all:<br>
>>>> Polly interacts relative tightly with isl which provide the main<br>
>>>> optimization algorithms. For instance, Polly's regression tests<br>
>>>> compare the string output of set representation, which unfortunately<br>
>>>> can change between versions. For instance, if a newer version<br>
>>>> implements a simpler string description of the same set. That means<br>
>>>> that tests would fail if a different version is installed on the host<br>
>>>> system. This is significant for buildbots that would need regular<br>
>>>> manual action to install a newer version of isl on the system.<br>
>>>><br>
>>>> An alternative would be to only store the git sha1 and a CMake script<br>
>>>> would download that version when building. However, it would also be<br>
>>>> more difficult to both sources in-sync in the checkout (think of git<br>
>>>> bisect).<br>
>>>><br>
>>>> I suppose these were also the reasons why Polly imported the isl<br>
>>>> source in commit r228193 instead of requiring users to call<br>
>>>> utils/checkout_isl.sh manually.<br>
>>>><br>
>>>><br>
>>>> The other design decisions and rationales are mentioned in the review<br>
>>>> summary [2]. I repeat them here so they can be referred to in replies.<br>
>>>><br>
>>>> * The library is named LLVMISL and contained in the lib/ISL folder to<br>
>>>> work best with LLVM's component system. The component's name "ISL" was<br>
>>>> chosen over "isl" as it matches the capitalization of other<br>
>>>> two/three-letter-acronym components.<br>
>>>><br>
>>>> * Isl's headers are installed into $PREFIX/include/llvm/ISL/isl. This<br>
>>>> is to not conflict with potentially user/system-installed isl headers.<br>
>>>> Please note that this means that MIT-licensed headers land on the<br>
>>>> target system.<br>
>>>><br>
>>> I think this needs to be emphasized. This means we effectively ship another<br>
>>> version of isl to our users, independent of whether they have one already.<br>
>>> Is this really what we want?<br>
>> Yes, I feel this is important for predicability and reproducability of<br>
>> test cases. Even minor differences in isl version might result in<br>
>> differences in how code is compiled. Without using a fixed version of<br>
>> isl for a given SVN id, it will be more difficult to reproduce bug<br>
>> reports.<br>
>><br>
>> Do you see any drawback with this approach?<br>
> Also, to add some more context. gcc e.g. does not include isl as a dependency, but a limited set of isl versions can be chosen. So this is indeed possible. However, it the set of isl versions that are allowed is indeed rather limited, and besides the previously mentioned drawbacks, we also have less test coverage on combinations that have not been validated for a release and it is harder to get fixes fast into isl (if older releases should still somehow be supported).<br>
><br>
> I feel the LLVM community as a whole has a tradition of 1) staying on trunk and 2) including all (most) dependences in the default checkout.<br>
<br>
</div></div>I completely agree for exactly these reasons. It also gives us greater<br>
flexibility in how we move forward with the integration, for example how<br>
things are refactored, later on in the process.<br>
<span class="HOEnZb"><font color="#888888"><br>
-Hal<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
><br>
> Best,<br>
> Tobias<br>
><br>
>> Best,<br>
>> Tobias<br>
>><br>
>>> Cheers,<br>
>>> Philip<br>
>>><br>
>>><br>
>>>> * The source of isl itself is added to the contrib/isl directory. This<br>
>>>> is to keep the source in one directory rather than spreading it into<br>
>>>> the lib and include directories, facilitating integration of upstream<br>
>>>> changes. There is a script "isl-merge.py" that automates this. It<br>
>>>> currently requires LLVM being checked out using git. The new subfolder<br>
>>>> "contrib" should make it clear that this is downstream code and maybe<br>
>>>> one shouldn't run clang-format over it which would make the next merge<br>
>>>> difficult.<br>
>>>><br>
>>>> * There is an additional "GIT_HEAD_ID" file containing the upstream's<br>
>>>> revision. It is used by isl-merge.py to determine the common ancestor<br>
>>>> and CMakeLists.txt to determine the version. Normally isl's make dist<br>
>>>> would generate this file, it is done manually here to not requiring a<br>
>>>> configure/make/make dist cycle when merging the latest isl. Due to<br>
>>>> different Autotools versions being installed on the different systems,<br>
>>>> this might lead to spurious conflicts with the generated configure<br>
>>>> etc. files. However, due to the need of an isl-noexeceptions.h, I may<br>
>>>> need to include such a cycle in isl-merge.py anyway.<br>
>>>><br>
>>>> * Isl has its own unittest "isl_test.c". It is put into bin/ (but not<br>
>>>> installed) and run by llvm-lit on llvm-check. This was just the<br>
>>>> simplest to do since it doesn't require any additional lit.site.cfg in<br>
>>>> order to find the isl_test in a different directory.<br>
>>>><br>
>>>><br>
>>>> Looking forward for your feedback.<br>
>>>><br>
>>>> Michael<br>
>>>><br>
>>>><br>
>>>> [1] <a href="http://isl.gforge.inria.fr/" rel="noreferrer" target="_blank">http://isl.gforge.inria.fr/</a><br>
>>>> [2] <a href="https://reviews.llvm.org/D40122" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D40122</a><br>
>>>> ______________________________<wbr>_________________<br>
>>>> LLVM Developers mailing list<br>
>>>> <a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
>>>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
>>>><br>
>>> ______________________________<wbr>_________________<br>
>>> LLVM Developers mailing list<br>
>>> <a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
>>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
>> ______________________________<wbr>_________________<br>
>> LLVM Developers mailing list<br>
>> <a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
> ______________________________<wbr>_________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
<br>
</div></div><div class="HOEnZb"><div class="h5">--<br>
Hal Finkel<br>
Lead, Compiler Technology and Programming Languages<br>
Leadership Computing Facility<br>
Argonne National Laboratory<br>
<br>
</div></div></blockquote></div><br></div>