<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 27, 2016 at 3:43 AM, Umesh Kalappa via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi All ,<br>
<br>
We are in process of exploring the  LTO  and found that internalize<br>
pass is the replacement for whole program optimisation<br>
(-fwhole-program in gcc)  in clang  and  in the below case<br>
<br>
define i32 @test() #0 {<br>
<br>
entry:<br>
<br>
  ret i32 0<br>
<br>
}<br>
<br>
<br>
define i32 @main() #0 {<br>
<br>
entry:<br>
<br>
  %retval = alloca i32, align 4<br>
<br>
  store i32 0, i32* %retval, align 4<br>
<br>
  %call = call i32 @test()<br>
<br>
  ret i32 %call<br>
<br>
}<br>
<br>
*** IR Dump After Internalize Global Symbols ***; ModuleID = 'ld-temp.o'<br>
<br>
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"<br>
<br>
target triple = "x86_64-unknown-linux-gnu"<br>
<br>
<br>
; Function Attrs: nounwind uwtable<br>
<br>
define internal i32 @test() #0 {<br>
<br>
entry:<br>
<br>
  ret i32 0<br>
<br>
}<br>
<br>
<br>
; Function Attrs: nounwind uwtable<br>
<br>
define internal i32 @main() #0 {<br>
<br>
entry:<br>
<br>
  %retval = alloca i32, align 4<br>
<br>
  store i32 0, i32* %retval, align 4<br>
<br>
  %call = call i32 @test()<br>
<br>
  ret i32 %call<br>
<br>
}<br>
<br>
<br>
the functions  def like test() and the main()  are marked internal by<br>
the internalize pass.<br>
<br>
Queries is ,we tried to prevent mark the internal string attribute<br>
before function name i.e<br></blockquote><div> </div><div>The option you would want is -exported-symbol=main, so that llvm-lto tells internalize to preserve it. No need to list 'test' since presumably it is fine to internalize that (and the use in 'main' will prevent it from being dead code eliminated, which I assume is currently happening to both of these symbols).<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><br>><br>> $bin/llvm-lto -print-after-all  test.o<br>
-internalize-public-api-list=test,main  -o output.o<br>
<br>
$bin/llvm-lto -print-after-all  test.o<br>
-internalize-public-api-file=file  -o output.o<br>
$cat file<br>
 test<br>
 main<br>
<br>
Both cases ,no luck here ,still the functions are marked internal :(<br>
<br>
Any suggestions here or its a bug with internalize pass.<br>
<br>
<br>
Thank you<br>
~Umesh<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><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-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px">Teresa Johnson |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"> Software Engineer |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"> <a href="mailto:tejohnson@google.com">tejohnson@google.com</a> |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"> 408-460-2413</td></tr></tbody></table></span></div>
</div></div>