[llvm-dev] May IR types be merged by llvm-link?
Ivan Kosarev via llvm-dev
llvm-dev at lists.llvm.org
Fri Dec 22 06:57:25 PST 2017
Hello Eli,
Nonetheless, It seems opaqueness of types affects analyses and code
generation; see isSized() calls. So maybe it's not purely about readability.
On 08/12/17 21:03, Friedman, Eli via llvm-dev wrote:
> On 12/7/2017 2:16 AM, Serge Pavlov via llvm-dev wrote:
>> Hi all,
>>
>> There is some uncertainty in the concept of LLVM IR, which results in
>> unexpected IR in some cases. The problem description is here:
>> https://reviews.llvm.org/D40567#943747. In short, llvm-link tries to
>> merge an opaque type with its definition, using type name for that.
>> Clang uses the same name for all specializations of a class template,
>> so in this case llvm-link chooses arbitrary type as a definition. As
>> a result the opaque type is mapped to wrong type in IR.
>>
>> The question here is whether the opaque type resolution made by
>> llvm-link is a correct operation, which in turn depends on what
>> source language objects are represented in IR. Variables and
>> function must exist in IR because these are entities directly
>> represented in object files, but types do not have similar
>> requirement. There are at least two viewpoints on which entities of
>> source language should be represented in IR.
>>
>> Case 1
>>
>> LLVM IR is a functional equivalent of the compiled program. It tries
>> to preserve information about externally visible objects (variables,
>> functions) that may be used in operation on IR modules. In
>> particular, as C++ defines rules of equivalence for types defined in
>> different translation units, and these rules make opaque type
>> resolution possible, the IR must have an equivalent for C++ type.
>>
>
> This simply doesn't reflect reality. Opaque and identified structure
> types exist to make IR easier to understand for humans; the names
> don't affect the semantics of any IR instruction, and transformations
> frequently throw away types to perform optimizations.
>
>> In this case clang must provide appropriate IR type identification,
>> so that the same types in different translation units can be
>> recognized. It can be made by assigning each type a unique name.
>>
>
> clang should try to do this anyway; not because we have to, but just
> to make IR easier to read.
>
> -Eli
> --
> Employee of Qualcomm Innovation Center, Inc.
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171222/ca595eb9/attachment.html>
More information about the llvm-dev
mailing list