[llvm-dev] May IR types be merged by llvm-link?

Friedman, Eli via llvm-dev llvm-dev at lists.llvm.org
Fri Dec 8 11:03:03 PST 2017


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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171208/22acf9ef/attachment.html>


More information about the llvm-dev mailing list