[llvm-dev] Use of array type in globals in LTO

via llvm-dev llvm-dev at lists.llvm.org
Fri Aug 26 09:06:18 PDT 2016

On 2016-08-26 11:32, Mehdi Amini wrote:
> Hi,
>> Recently, I noticed that less number of global variables are merged in 
>> global-merge pass and in some global variable, array types are used 
>> instead of its original type. For example, [4xi8] with align 4 is used 
>> for a i32  global variable. For me, it seems that such pattern is 
>> observed after r278338  (Resolution-based LTO API).
> Are you sure it is performed in the global merge pass? Can you provide
> an example of input IR where you see this now but didn’t before?
> Also can you confirm you’re using the gold-linker?

I used gold linker. In spec2006/perlbench, I observed the less number of 
globals are merged in GlobalMerge.cpp after r278338. The reason is 
because, from the very first pass, several global variables use [4xi8] 
with align 4, instead of its original type i32 after r278338. Current 
GlobalMerge pass doesn't seem to handle such fancy-aligned globals. If 
such type change (e.g., from i32 to [4xi8]) in global variables was 
intended in r278338, I think we should enhance GlobalMerge to handle 
such cases.

>> Can anyone give me little bit more insight if such type change was 
>> intended? If then why such uses of array type is needed?
> The transformation I know of is the common variables merging, bug it
> is not new. We use an array because we have to merge globals from
> different size and an array of bytes is the most straightforward
> representation for that.
>> Mehdi

Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm 
Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a 
Linux Foundation Collaborative Project.

More information about the llvm-dev mailing list