<div dir="ltr"><div dir="ltr"><div dir="ltr">My guess is that it is due to lld change r360841 on that date (Introduce CommonSymbol). +Rui for comments.</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jun 10, 2019 at 4:45 AM Mani, Suresh via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div class="gmail-m_-5899584911161328454WordSection1">
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Hi ,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I have an issue during LTO phase of llvm compiler which is as follows,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">File t3.c<u></u><u></u></p>
<p class="MsoNormal">---------<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">#include <stdio.h>  <u></u><u></u></p>
<p class="MsoNormal">#include <stdlib.h>  <u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">// A linked list node  <u></u><u></u></p>
<p class="MsoNormal">struct Node {  <u></u><u></u></p>
<p class="MsoNormal">    int data;  <u></u><u></u></p>
<p class="MsoNormal">    struct Node* next;  <u></u><u></u></p>
<p class="MsoNormal">    struct Node* prev;  <u></u><u></u></p>
<p class="MsoNormal">};  <u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><b><span style="font-size:14pt">struct Node* head;<u></u><u></u></span></b></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">/* Given a reference (pointer to pointer) to the head of a list 
<u></u><u></u></p>
<p class="MsoNormal">and an int, inserts a new node on the front of the list. */<u></u><u></u></p>
<p class="MsoNormal">void push(struct Node** head_ref, int new_data)  <u></u><u></u></p>
<p class="MsoNormal">{  <u></u><u></u></p>
<p class="MsoNormal">    struct Node* new_node = (struct Node*)malloc(sizeof(struct Node)); 
<u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">    new_node->data = new_data;  <u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">    new_node->next = (*head_ref);  <u></u><u></u></p>
<p class="MsoNormal">    new_node->prev = NULL;  <u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">    if ((*head_ref) != NULL)  <u></u><u></u></p>
<p class="MsoNormal">        (*head_ref)->prev = new_node;  <u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">    (*head_ref) = new_node;  <u></u><u></u></p>
<p class="MsoNormal">}  <u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">// This function prints contents of linked list starting from the given node 
<u></u><u></u></p>
<p class="MsoNormal">void printList(struct Node* node)  <u></u><u></u></p>
<p class="MsoNormal">{  <u></u><u></u></p>
<p class="MsoNormal">    struct Node* last;  <u></u><u></u></p>
<p class="MsoNormal">    printf("\nTraversal in forward direction \n");  <u></u><u></u></p>
<p class="MsoNormal">    while (node != NULL) {  <u></u><u></u></p>
<p class="MsoNormal">        printf(" %d ", node->data);  <u></u><u></u></p>
<p class="MsoNormal">        last = node;  <u></u><u></u></p>
<p class="MsoNormal">        node = node->next;  <u></u><u></u></p>
<p class="MsoNormal">    }  <u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">    printf("\nTraversal in reverse direction \n");  <u></u><u></u></p>
<p class="MsoNormal">    while (last != NULL) {  <u></u><u></u></p>
<p class="MsoNormal">        printf(" %d ", last->data);  <u></u><u></u></p>
<p class="MsoNormal">        last = last->prev;  <u></u><u></u></p>
<p class="MsoNormal">    }  <u></u><u></u></p>
<p class="MsoNormal">}  <u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">/* Driver program to test above functions*/<u></u><u></u></p>
<p class="MsoNormal">int main()  <u></u><u></u></p>
<p class="MsoNormal">{  <u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">    head = NULL;<u></u><u></u></p>
<p class="MsoNormal">    push(&head, 7);  <u></u><u></u></p>
<p class="MsoNormal">    push(&head, 1);  <u></u><u></u></p>
<p class="MsoNormal">    push(&head, 4);  <u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">    printList(head);  <u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">    return 0;  <u></u><u></u></p>
<p class="MsoNormal">} <u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Compiler invocation: <u></u><u></u></p>
<p class="MsoNormal">--------------------<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">clang -flto -fuse-ld=lld -O3 t3.c -o a.out<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Expected behavior during LTO:<u></u><u></u></p>
<p class="MsoNormal">------------------------------<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">The compiler optimization during LTO needs to figure out that variable "head" is not referred by any precompiled object or library.<u></u><u></u></p>
<p class="MsoNormal">Until May-16-2019 variable "head" had internal attribute as follows,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">@head = internal global %struct.Node* null, align 8<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">And the compiler was rightly able to recognize that "head" is not referred by any external precompiled object or library.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">But after May-16-2019  the attribute of head was changed as follows,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">@head = common dso_local global %struct.Node* null, align 8<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Not sure if this is correct behavior?<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">If this is a correct behavior then can you please let me know how could the compiler figure out that variable "head" is not referred by any external precompiled object or library?<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thanks<u></u><u></u></p>
<p class="MsoNormal">M Suresh<u></u><u></u></p>
</div>
</div>

_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><span style="font-family:Times;font-size:medium"><table cellspacing="0" cellpadding="0"><tbody><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small"><td nowrap style="border-top:2px solid rgb(213,15,37)">Teresa Johnson |</td><td nowrap style="border-top:2px solid rgb(51,105,232)"> Software Engineer |</td><td nowrap style="border-top:2px solid rgb(0,153,57)"> <a href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a> |</td><td nowrap style="border-top:2px solid rgb(238,178,17)"><br></td></tr></tbody></table></span></div></div></div>