<div dir="ltr">I went ahead and reverted this in r324301 while we figure out what to do.</div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Feb 4, 2018 at 2:52 PM, Brooks Moses <span dir="ltr"><<a href="mailto:bmoses@google.com" target="_blank">bmoses@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Unfortunately, I think this commit needs to be reverted, as it's breaking our grub build and I don't think the problem is us.  Can someone please check the explanation below to confirm that it makes sense, and do the revert?  Thanks!<div><br></div><div>The underlying issue is in the assumption in the comment: "we don't need to assume those are local since the liker [sic] can trivially convert a call to a PLT to a direct call if the target (in the runtime library) turns out to be local."  This is relevant only when the ELF file is actually being processed by a "normal" linker -- but the grub build does its own linking of the object files that get built into bootloader modules, and it doesn't know how to handle this.</div><div><br></div><div>The patch also affects the generated assembly code, which with the non-integrated assembler also causes changes in the undefined symbols in the object files.  Since grub also does pre-processing of the object files to figure out dependencies, that gets broken as well.</div><div><br></div><div>Suppose we have a very basic C program that calls memset:</div><div><br></div><div><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">$ cat foo.c</span><br style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">void *memset (void *s, int c, unsigned int n);</span><br style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">void foo(char *c, int len) {</span><br style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">  memset(c, 32, len);</span><br style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">}</span><br></div><div><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><div><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">If we compile this with -m32, -S and some level of optimization (not -O0), we get a call to "memset@PLT" in the assembly file (where previously we just got "memset"):</span></div><div><font color="#000000" face="Arial, Helvetica, sans-serif">$ clang -m32 -O3 -S -o foo.s foo.c; grep memset foo.s</font></div><div><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px">        calll   memset@PLT</span><br></div><div><br></div><div><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">When I then build an object file using -no-integrated-as (and binutils 2.24), we get an extra undefined reference to <span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">_GLOBAL_OFFSET_TABLE_:</span></span></span></div><div><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><font color="#000000" face="Arial, Helvetica, sans-serif">$ clang -m32 -O3 -no-integrated-as -c -o foo.o foo.c; nm foo.o</font></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><font color="#000000" face="Arial, Helvetica, sans-serif"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">00000000 T foo</span><br style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">         U _GLOBAL_OFFSET_TABLE_</span><br style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">         U memset</span></font></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><font color="#000000" face="Arial, Helvetica, sans-serif"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></font></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><font color="#000000" face="Arial, Helvetica, sans-serif"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Grub's dependency checking then complains that this symbol isn't defined anywhere in other object files that make up the bootloader.</span></font></div><br class="m_-3760574684847826975gmail-Apple-interchange-newline">(Note: With -O0, we get "memset", not "memset@PLT" in the call; with the integrated assembler we don't get the undefined reference to <span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">_GLOBAL_OFFSET_TABLE_.  For what it's worth, I also verified that compiler-generated calls to memset work the same way, by making a test program with a memset-like loop.)</span></span></span></span></div><div><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></span></span></span></div><div><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">So that's the first problem.  I worked around that by editing grub's dependency analyzer to just ignore the symbol, and ended up with another problem: Grub's linker now exits with "unsupported relocation 0x4" in this code block:</span></span></span></span></div><div><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font color="#000000" face="Arial, Helvetica, sans-serif"><a href="https://github.com/coreos/grub/blob/d3fd939f18446b05d1d5456f23823498a1eb3fb4/util/grub-module-verifierXX.c#L277" target="_blank">https://github.com/coreos/<wbr>grub/blob/<wbr>d3fd939f18446b05d1d5456f238234<wbr>98a1eb3fb4/util/grub-module-<wbr>verifierXX.c#L277</a></font><br></span></span></span></span></div><div><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font color="#000000" face="Arial, Helvetica, sans-serif"><br></font></span></span></span></span></div><div><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font color="#000000" face="Arial, Helvetica, sans-serif">I don't think that issue is nearly as amenable to simple workarounds -- and even if it is, requiring patches to grub in order to support the latest LLVM version seems like a problem.</font></span></span></span></span></div><div><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font color="#000000" face="Arial, Helvetica, sans-serif"><br></font></span></span></span></span></div><div><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font color="#000000" face="Arial, Helvetica, sans-serif">Also, for what it's worth, while I was investigating this I became doubtful of the claim in the commit message that this "<span style="color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">should help with avoiding a plt </span><span style="color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">reference when calling an intrinsic with -fno-plt".  Adding -fno-plt to my test compilations still results in having a "calll memset@PLT" in the generated assembly where we previously had "calll memset", which seems directly counter to that.</span></font></span></span></span></span></div><div><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font color="#000000" face="Arial, Helvetica, sans-serif"><span style="color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></font></span></span></span></span></div><div><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font color="#000000" face="Arial, Helvetica, sans-serif"><span style="color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Thanks,</span></font></span></span></span></span></div><div><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-align:left;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font color="#000000" face="Arial, Helvetica, sans-serif"><span style="color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">- Brooks</span></font></span></span></span></span></div><div><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></span></div><div><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><div><span style="color:rgb(0,0,0);font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 23, 2018 at 6:11 PM, Rafael Espindola via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rafael<br>
Date: Tue Jan 23 18:11:18 2018<br>
New Revision: 323297<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=323297&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=323297&view=rev</a><br>
Log:<br>
Don't assume a null GV is local for ELF and MachO.<br>
<br>
This is already a simplification, and should help with avoiding a plt<br>
reference when calling an intrinsic with -fno-plt.<br>
<br>
With this change we return false for null GVs, so the caller only<br>
needs to check the new metadata to decide if it should use foo@plt or<br>
*foo@got.<br>
<br>
Modified:<br>
    llvm/trunk/lib/Target/TargetMa<wbr>chine.cpp<br>
    llvm/trunk/test/CodeGen/X86/fi<wbr>nite-libcalls.ll<br>
    llvm/trunk/test/CodeGen/X86/fp<wbr>-intrinsics.ll<br>
    llvm/trunk/test/CodeGen/X86/ha<wbr>lf.ll<br>
    llvm/trunk/test/CodeGen/X86/me<wbr>mset-nonzero.ll<br>
    llvm/trunk/test/CodeGen/X86/ne<wbr>gative-sin.ll<br>
    llvm/trunk/test/CodeGen/X86/ve<wbr>ctor-half-conversions.ll<br>
<br>
Modified: llvm/trunk/lib/Target/TargetMa<wbr>chine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachine.cpp?rev=323297&r1=323296&r2=323297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/lib/Target/Ta<wbr>rgetMachine.cpp?rev=323297&r1=<wbr>323296&r2=323297&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/TargetMa<wbr>chine.cpp (original)<br>
+++ llvm/trunk/lib/Target/TargetMa<wbr>chine.cpp Tue Jan 23 18:11:18 2018<br>
@@ -137,20 +137,27 @@ bool TargetMachine::shouldAssumeDSO<wbr>Local<br>
   if (TT.isOSBinFormatCOFF() || (TT.isOSWindows() && TT.isOSBinFormatMachO()))<br>
     return true;<br>
<br>
+  // If GV is null we know that this is a call to an intrinsic. For ELF and<br>
+  // MachO we don't need to assume those are local since the liker can trivially<br>
+  // convert a call to a PLT to a direct call if the target (in the runtime<br>
+  // library) turns out to be local.<br>
+  if (!GV)<br>
+    return false;<br>
+<br>
   // Most PIC code sequences that assume that a symbol is local cannot<br>
   // produce a 0 if it turns out the symbol is undefined. While this<br>
   // is ABI and relocation depended, it seems worth it to handle it<br>
   // here.<br>
-  if (GV && isPositionIndependent() && GV->hasExternalWeakLinkage())<br>
+  if (isPositionIndependent() && GV->hasExternalWeakLinkage())<br>
     return false;<br>
<br>
-  if (GV && !GV->hasDefaultVisibility())<br>
+  if (!GV->hasDefaultVisibility())<br>
     return true;<br>
<br>
   if (TT.isOSBinFormatMachO()) {<br>
     if (RM == Reloc::Static)<br>
       return true;<br>
-    return GV && GV->isStrongDefinitionForLinke<wbr>r();<br>
+    return GV->isStrongDefinitionForLinke<wbr>r();<br>
   }<br>
<br>
   assert(TT.isOSBinFormatELF())<wbr>;<br>
@@ -160,19 +167,19 @@ bool TargetMachine::shouldAssumeDSO<wbr>Local<br>
       RM == Reloc::Static || M.getPIELevel() != PIELevel::Default;<br>
   if (IsExecutable) {<br>
     // If the symbol is defined, it cannot be preempted.<br>
-    if (GV && !GV->isDeclarationForLinker())<br>
+    if (!GV->isDeclarationForLinker()<wbr>)<br>
       return true;<br>
<br>
     // A symbol marked nonlazybind should not be accessed with a plt. If the<br>
     // symbol turns out to be external, the linker will convert a direct<br>
     // access to an access via the plt, so don't assume it is local.<br>
-    const Function *F = dyn_cast_or_null<Function>(GV)<wbr>;<br>
+    const Function *F = dyn_cast<Function>(GV);<br>
     if (F && F->hasFnAttribute(Attribute::N<wbr>onLazyBind))<br>
       return false;<br>
<br>
-    bool IsTLS = GV && GV->isThreadLocal();<br>
+    bool IsTLS = GV->isThreadLocal();<br>
     bool IsAccessViaCopyRelocs =<br>
-        Options.MCOptions.MCPIECopyRel<wbr>ocations && GV && isa<GlobalVariable>(GV);<br>
+        Options.MCOptions.MCPIECopyRel<wbr>ocations && isa<GlobalVariable>(GV);<br>
     Triple::ArchType Arch = TT.getArch();<br>
     bool IsPPC =<br>
         Arch == Triple::ppc || Arch == Triple::ppc64 || Arch == Triple::ppc64le;<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/fi<wbr>nite-libcalls.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/finite-libcalls.ll?rev=323297&r1=323296&r2=323297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/CodeGen/<wbr>X86/finite-libcalls.ll?rev=<wbr>323297&r1=323296&r2=323297&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/X86/fi<wbr>nite-libcalls.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/fi<wbr>nite-libcalls.ll Tue Jan 23 18:11:18 2018<br>
@@ -9,7 +9,7 @@<br>
 define float @exp_f32(float %x) #0 {<br>
 ; GNU-LABEL: exp_f32:<br>
 ; GNU:       # %bb.0:<br>
-; GNU-NEXT:    jmp __expf_finite # TAILCALL<br>
+; GNU-NEXT:    jmp __expf_finite@PLT # TAILCALL<br>
 ;<br>
 ; WIN-LABEL: exp_f32:<br>
 ; WIN:       # %bb.0:<br>
@@ -25,7 +25,7 @@ define float @exp_f32(float %x) #0 {<br>
 define double @exp_f64(double %x) #0 {<br>
 ; GNU-LABEL: exp_f64:<br>
 ; GNU:       # %bb.0:<br>
-; GNU-NEXT:    jmp __exp_finite # TAILCALL<br>
+; GNU-NEXT:    jmp __exp_finite@PLT # TAILCALL<br>
 ;<br>
 ; WIN-LABEL: exp_f64:<br>
 ; WIN:       # %bb.0:<br>
@@ -72,7 +72,7 @@ define x86_fp80 @exp_f80(x86_fp80 %x) #0<br>
 define float @exp2_f32(float %x) #0 {<br>
 ; GNU-LABEL: exp2_f32:<br>
 ; GNU:       # %bb.0:<br>
-; GNU-NEXT:    jmp __exp2f_finite # TAILCALL<br>
+; GNU-NEXT:    jmp __exp2f_finite@PLT # TAILCALL<br>
 ;<br>
 ; WIN-LABEL: exp2_f32:<br>
 ; WIN:       # %bb.0:<br>
@@ -88,7 +88,7 @@ define float @exp2_f32(float %x) #0 {<br>
 define double @exp2_f64(double %x) #0 {<br>
 ; GNU-LABEL: exp2_f64:<br>
 ; GNU:       # %bb.0:<br>
-; GNU-NEXT:    jmp __exp2_finite # TAILCALL<br>
+; GNU-NEXT:    jmp __exp2_finite@PLT # TAILCALL<br>
 ;<br>
 ; WIN-LABEL: exp2_f64:<br>
 ; WIN:       # %bb.0:<br>
@@ -135,7 +135,7 @@ define x86_fp80 @exp2_f80(x86_fp80 %x) #<br>
 define float @log_f32(float %x) #0 {<br>
 ; GNU-LABEL: log_f32:<br>
 ; GNU:       # %bb.0:<br>
-; GNU-NEXT:    jmp __logf_finite # TAILCALL<br>
+; GNU-NEXT:    jmp __logf_finite@PLT # TAILCALL<br>
 ;<br>
 ; WIN-LABEL: log_f32:<br>
 ; WIN:       # %bb.0:<br>
@@ -151,7 +151,7 @@ define float @log_f32(float %x) #0 {<br>
 define double @log_f64(double %x) #0 {<br>
 ; GNU-LABEL: log_f64:<br>
 ; GNU:       # %bb.0:<br>
-; GNU-NEXT:    jmp __log_finite # TAILCALL<br>
+; GNU-NEXT:    jmp __log_finite@PLT # TAILCALL<br>
 ;<br>
 ; WIN-LABEL: log_f64:<br>
 ; WIN:       # %bb.0:<br>
@@ -198,7 +198,7 @@ define x86_fp80 @log_f80(x86_fp80 %x) #0<br>
 define float @log2_f32(float %x) #0 {<br>
 ; GNU-LABEL: log2_f32:<br>
 ; GNU:       # %bb.0:<br>
-; GNU-NEXT:    jmp __log2f_finite # TAILCALL<br>
+; GNU-NEXT:    jmp __log2f_finite@PLT # TAILCALL<br>
 ;<br>
 ; WIN-LABEL: log2_f32:<br>
 ; WIN:       # %bb.0:<br>
@@ -214,7 +214,7 @@ define float @log2_f32(float %x) #0 {<br>
 define double @log2_f64(double %x) #0 {<br>
 ; GNU-LABEL: log2_f64:<br>
 ; GNU:       # %bb.0:<br>
-; GNU-NEXT:    jmp __log2_finite # TAILCALL<br>
+; GNU-NEXT:    jmp __log2_finite@PLT # TAILCALL<br>
 ;<br>
 ; WIN-LABEL: log2_f64:<br>
 ; WIN:       # %bb.0:<br>
@@ -261,7 +261,7 @@ define x86_fp80 @log2_f80(x86_fp80 %x) #<br>
 define float @log10_f32(float %x) #0 {<br>
 ; GNU-LABEL: log10_f32:<br>
 ; GNU:       # %bb.0:<br>
-; GNU-NEXT:    jmp __log10f_finite # TAILCALL<br>
+; GNU-NEXT:    jmp __log10f_finite@PLT # TAILCALL<br>
 ;<br>
 ; WIN-LABEL: log10_f32:<br>
 ; WIN:       # %bb.0:<br>
@@ -277,7 +277,7 @@ define float @log10_f32(float %x) #0 {<br>
 define double @log10_f64(double %x) #0 {<br>
 ; GNU-LABEL: log10_f64:<br>
 ; GNU:       # %bb.0:<br>
-; GNU-NEXT:    jmp __log10_finite # TAILCALL<br>
+; GNU-NEXT:    jmp __log10_finite@PLT # TAILCALL<br>
 ;<br>
 ; WIN-LABEL: log10_f64:<br>
 ; WIN:       # %bb.0:<br>
@@ -325,7 +325,7 @@ define float @pow_f32(float %x) #0 {<br>
 ; GNU-LABEL: pow_f32:<br>
 ; GNU:       # %bb.0:<br>
 ; GNU-NEXT:    movaps %xmm0, %xmm1<br>
-; GNU-NEXT:    jmp __powf_finite # TAILCALL<br>
+; GNU-NEXT:    jmp __powf_finite@PLT # TAILCALL<br>
 ;<br>
 ; WIN-LABEL: pow_f32:<br>
 ; WIN:       # %bb.0:<br>
@@ -344,7 +344,7 @@ define double @pow_f64(double %x) #0 {<br>
 ; GNU-LABEL: pow_f64:<br>
 ; GNU:       # %bb.0:<br>
 ; GNU-NEXT:    movaps %xmm0, %xmm1<br>
-; GNU-NEXT:    jmp __pow_finite # TAILCALL<br>
+; GNU-NEXT:    jmp __pow_finite@PLT # TAILCALL<br>
 ;<br>
 ; WIN-LABEL: pow_f64:<br>
 ; WIN:       # %bb.0:<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/fp<wbr>-intrinsics.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fp-intrinsics.ll?rev=323297&r1=323296&r2=323297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/CodeGen/<wbr>X86/fp-intrinsics.ll?rev=<wbr>323297&r1=323296&r2=323297&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/X86/fp<wbr>-intrinsics.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/fp<wbr>-intrinsics.ll Tue Jan 23 18:11:18 2018<br>
@@ -245,7 +245,7 @@ entry:<br>
 ; Verify that fma(3.5) isn't simplified when the rounding mode is<br>
 ; unknown.<br>
 ; CHECK-LABEL: f17<br>
-; FMACALL32: jmp fmaf  # TAILCALL<br>
+; FMACALL32: jmp fmaf@PLT  # TAILCALL<br>
 ; FMA32: vfmadd213ss<br>
 define float @f17() {<br>
 entry:<br>
@@ -261,7 +261,7 @@ entry:<br>
 ; Verify that fma(42.1) isn't simplified when the rounding mode is<br>
 ; unknown.<br>
 ; CHECK-LABEL: f18<br>
-; FMACALL64: jmp fma  # TAILCALL<br>
+; FMACALL64: jmp fma@PLT  # TAILCALL<br>
 ; FMA64: vfmadd213sd<br>
 define double @f18() {<br>
 entry:<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/ha<wbr>lf.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/half.ll?rev=323297&r1=323296&r2=323297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/CodeGen/<wbr>X86/half.ll?rev=323297&r1=<wbr>323296&r2=323297&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/X86/ha<wbr>lf.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/ha<wbr>lf.ll Tue Jan 23 18:11:18 2018<br>
@@ -75,7 +75,7 @@ define float @test_extend32(half* %addr)<br>
 ; CHECK-LIBCALL-LABEL: test_extend32:<br>
 ; CHECK-LIBCALL:       # %bb.0:<br>
 ; CHECK-LIBCALL-NEXT:    movzwl (%rdi), %edi<br>
-; CHECK-LIBCALL-NEXT:    jmp __gnu_h2f_ieee # TAILCALL<br>
+; CHECK-LIBCALL-NEXT:    jmp __gnu_h2f_ieee@PLT # TAILCALL<br>
 ;<br>
 ; BWON-F16C-LABEL: test_extend32:<br>
 ; BWON-F16C:       # %bb.0:<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/me<wbr>mset-nonzero.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/memset-nonzero.ll?rev=323297&r1=323296&r2=323297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/CodeGen/<wbr>X86/memset-nonzero.ll?rev=<wbr>323297&r1=323296&r2=323297&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/X86/me<wbr>mset-nonzero.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/me<wbr>mset-nonzero.ll Tue Jan 23 18:11:18 2018<br>
@@ -394,7 +394,7 @@ define void @memset_256_nonconst_bytes(i<br>
 ; SSE-LABEL: memset_256_nonconst_bytes:<br>
 ; SSE:       # %bb.0:<br>
 ; SSE-NEXT:    movl $256, %edx # imm = 0x100<br>
-; SSE-NEXT:    jmp memset # TAILCALL<br>
+; SSE-NEXT:    jmp memset@PLT # TAILCALL<br>
 ;<br>
 ; SSE2FAST-LABEL: memset_256_nonconst_bytes:<br>
 ; SSE2FAST:       # %bb.0:<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/ne<wbr>gative-sin.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/negative-sin.ll?rev=323297&r1=323296&r2=323297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/CodeGen/<wbr>X86/negative-sin.ll?rev=<wbr>323297&r1=323296&r2=323297&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/X86/ne<wbr>gative-sin.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/ne<wbr>gative-sin.ll Tue Jan 23 18:11:18 2018<br>
@@ -28,7 +28,7 @@ define double @strict(double %e) nounwin<br>
 define double @fast(double %e) nounwind {<br>
 ; CHECK-LABEL: fast:<br>
 ; CHECK:       # %bb.0:<br>
-; CHECK-NEXT:    jmp sin # TAILCALL<br>
+; CHECK-NEXT:    jmp sin@PLT # TAILCALL<br>
   %f = fsub fast double 0.0, %e<br>
   %g = call double @sin(double %f) readonly<br>
   %h = fsub fast double 0.0, %g<br>
@@ -40,7 +40,7 @@ define double @fast(double %e) nounwind<br>
 define double @nsz(double %e) nounwind {<br>
 ; CHECK-LABEL: nsz:<br>
 ; CHECK:       # %bb.0:<br>
-; CHECK-NEXT:    jmp sin # TAILCALL<br>
+; CHECK-NEXT:    jmp sin@PLT # TAILCALL<br>
   %f = fsub nsz double 0.0, %e<br>
   %g = call double @sin(double %f) readonly<br>
   %h = fsub nsz double 0.0, %g<br>
@@ -88,7 +88,7 @@ define double @semi_strict2(double %e) n<br>
 define double @fn_attr(double %e) nounwind #0 {<br>
 ; CHECK-LABEL: fn_attr:<br>
 ; CHECK:       # %bb.0:<br>
-; CHECK-NEXT:    jmp sin # TAILCALL<br>
+; CHECK-NEXT:    jmp sin@PLT # TAILCALL<br>
   %f = fsub double 0.0, %e<br>
   %g = call double @sin(double %f) readonly<br>
   %h = fsub double 0.0, %g<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/ve<wbr>ctor-half-conversions.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-half-conversions.ll?rev=323297&r1=323296&r2=323297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/CodeGen/<wbr>X86/vector-half-conversions.<wbr>ll?rev=323297&r1=323296&r2=<wbr>323297&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/X86/ve<wbr>ctor-half-conversions.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/ve<wbr>ctor-half-conversions.ll Tue Jan 23 18:11:18 2018<br>
@@ -2953,7 +2953,7 @@ define void @store_cvt_16f32_to_16i16(<1<br>
 define i16 @cvt_f64_to_i16(double %a0) nounwind {<br>
 ; ALL-LABEL: cvt_f64_to_i16:<br>
 ; ALL:       # %bb.0:<br>
-; ALL-NEXT:    jmp __truncdfhf2 # TAILCALL<br>
+; ALL-NEXT:    jmp __truncdfhf2@PLT # TAILCALL<br>
   %1 = fptrunc double %a0 to half<br>
   %2 = bitcast half %1 to i16<br>
   ret i16 %2<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>