<div dir="ltr">Got it.<div><br></div><div>Thanks!<div><br></div><div>-- Sean Silva<br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 24, 2014 at 9:33 PM, Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 24 November 2014 at 23:57, Sean Silva <<a href="mailto:chisophugis@gmail.com">chisophugis@gmail.com</a>> wrote:<br>
> What is the meaning of "unrelated" in this context?<br>
<br>
</span>The linker has not seen two values it wants to link where each has one<br>
of those types. That only happens when it gets to<br>
<br>
define %t @g() {<br>
<span class=""> %x = call %t @f()<br>
</span> ret %t %x<br>
}<br>
<br>
Where it becomes clear that it is advantageous for @g and @f to return<br>
the same type.<br>
<div class="HOEnZb"><div class="h5"><br>
> -- Sean Silva<br>
><br>
> On Mon, Nov 24, 2014 at 7:47 PM, Rafael Espindola<br>
> <<a href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a>> wrote:<br>
>><br>
>> Author: rafael<br>
>> Date: Mon Nov 24 21:47:57 2014<br>
>> New Revision: 222720<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=222720&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=222720&view=rev</a><br>
>> Log:<br>
>> Add an interesting test that we already get right. NFC.<br>
>><br>
>> Added:<br>
>>     llvm/trunk/test/Linker/Inputs/type-unique-unrelated2.ll<br>
>>     llvm/trunk/test/Linker/Inputs/type-unique-unrelated3.ll<br>
>>     llvm/trunk/test/Linker/type-unique-unrelated.ll<br>
>><br>
>> Added: llvm/trunk/test/Linker/Inputs/type-unique-unrelated2.ll<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/type-unique-unrelated2.ll?rev=222720&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/type-unique-unrelated2.ll?rev=222720&view=auto</a><br>
>><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Linker/Inputs/type-unique-unrelated2.ll (added)<br>
>> +++ llvm/trunk/test/Linker/Inputs/type-unique-unrelated2.ll Mon Nov 24<br>
>> 21:47:57 2014<br>
>> @@ -0,0 +1,7 @@<br>
>> +%t = type { i8* }<br>
>> +declare %t @g()<br>
>> +<br>
>> +define %t @g2() {<br>
>> + %x = call %t @g()<br>
>> + ret %t %x<br>
>> +}<br>
>><br>
>> Added: llvm/trunk/test/Linker/Inputs/type-unique-unrelated3.ll<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/type-unique-unrelated3.ll?rev=222720&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/type-unique-unrelated3.ll?rev=222720&view=auto</a><br>
>><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Linker/Inputs/type-unique-unrelated3.ll (added)<br>
>> +++ llvm/trunk/test/Linker/Inputs/type-unique-unrelated3.ll Mon Nov 24<br>
>> 21:47:57 2014<br>
>> @@ -0,0 +1,7 @@<br>
>> +%t = type { i8* }<br>
>> +declare %t @f()<br>
>> +<br>
>> +define %t @g() {<br>
>> + %x = call %t @f()<br>
>> + ret %t %x<br>
>> +}<br>
>><br>
>> Added: llvm/trunk/test/Linker/type-unique-unrelated.ll<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/type-unique-unrelated.ll?rev=222720&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/type-unique-unrelated.ll?rev=222720&view=auto</a><br>
>><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Linker/type-unique-unrelated.ll (added)<br>
>> +++ llvm/trunk/test/Linker/type-unique-unrelated.ll Mon Nov 24 21:47:57<br>
>> 2014<br>
>> @@ -0,0 +1,31 @@<br>
>> +; RUN: llvm-link -S %s %p/Inputs/type-unique-unrelated2.ll<br>
>> %p/Inputs/type-unique-unrelated3.ll | FileCheck %s<br>
>> +<br>
>> +; CHECK: %t = type { i8* }<br>
>> +<br>
>> +; CHECK: define %t @f2() {<br>
>> +; CHECK-NEXT:   %x = call %t @f2()<br>
>> +; CHECK-NEXT:   ret %t %x<br>
>> +; CHECK-NEXT: }<br>
>> +<br>
>> +; CHECK: define %t @g2() {<br>
>> +; CHECK-NEXT:   %x = call %t @g()<br>
>> +; CHECK-NEXT:   ret %t %x<br>
>> +; CHECK-NEXT: }<br>
>> +<br>
>> +; CHECK: define %t @g() {<br>
>> +; CHECK-NEXT:  %x = call %t @f()<br>
>> +; CHECK-NEXT:  ret %t %x<br>
>> +; CHECK-NEXT: }<br>
>> +<br>
>> +; The idea of this test is that the %t in this file and the one in<br>
>> +; type-unique-unrelated2.ll look unrelated until<br>
>> type-unique-unrelated3.ll<br>
>> +; is merged in.<br>
>> +<br>
>> +%t = type { i8* }<br>
>> +declare %t @f()<br>
>> +<br>
>> +define %t @f2() {<br>
>> + %x = call %t @f2()<br>
>> + ret %t %x<br>
>> +}<br>
>> +<br>
>><br>
>><br>
>> _______________________________________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
><br>
><br>
</div></div></blockquote></div><br></div></div></div></div>