<div style="font-family:SimSun,STSong;font-size:large;;"><div><span style="font-family: Arial;"><font size="2">Hi,</font></span></div><div><span style="font-family: Arial;"><font size="2"><br></font></span></div><div><span style="font-family: Arial;"><font size="2">Did you check your variable is inserted successfully? As far as I know, to insert functions you need to instrument the bitcode as the following:</font></span></div><div><span style="font-family: Arial;"><font size="2"><br></font></span></div><div><span style="font-family: Arial;"><font size="2">        Constant *c = module->getOrInsertFunction("cmpr",<br>                FunctionType::getVoidTy(*context),<br>                Type::getInt64Ty(*context),<br>                Type::getInt64Ty(*context), NULL);<br><br>        f = &cast<Function>(*c);</font></span></div><div><span style="font-family: Arial;"><font size="2"><br></font></span></div><div><span style="font-family: Arial;"><font size="2">The upper code inserts a new function "cmpr" (declaration) to the function table, but later you need to add definitions.<br></font></span></div><div><span style="font-family: Arial;"><font size="2"><br></font></span></div><div><span style="font-family: Arial;"><font size="2">Or if you want to insert a variable (e.g. int), the following is code from StackOverflow I found work for my case: <br></font></span></div><div><span style="font-family: Arial;"><font size="2"><br></font></span></div><div><span style="font-family: Arial;"><font size="2"><sign signid="-1"></sign><div><qzone></qzone></div></font></span></div><div><span style="font-family: Arial;"><font size="2"><includetail><div>  GlobalVariable* gvar_int = new GlobalVariable(<br>            /*Type=*/i64_type,<br>            /*isConstant=*/false,<br>            /*Linkage=*/GlobalValue::CommonLinkage,<br>            /*Initializer=*/0, // has initializer, specified below<br>            /*Name=*/name);<br></div><div> </div><div>And you could retrieve this variable with:</div><div>    module->getGlobalVariable("var_name")<br></div><div><br></div><div><br></div><div>If you have further questions, I'm happy to discuss.</div><div><br></div><div><br></div><div>Regards,</div><div>Yushan</div><div><br></div><div style="font:Verdana normal 14px;color:#000;"><div style="font-size: 12px; padding: 2px 0px;">------------------ Original ------------------</div><div style="FONT-SIZE: 12px;background:#efefef;padding:8px;"><div id="menu_sender"><b>From: </b> "n3v3rm03 via llvm-dev"<llvm-dev@lists.llvm.org>;</div><div><b>Date: </b> Sat, Jan 19, 2019 02:52 PM</div><div><b>To: </b> "paul.robinson"<paul.robinson@sony.com>; <wbr></div><div><b>Cc: </b> "llvm-dev"<llvm-dev@lists.llvm.org>; <wbr></div><div><b>Subject: </b> Re: [llvm-dev] Can't find symbol from llvm backend</div></div><div> </div><div style="position:relative;"><div><div><div dir="auto">No, I don't. But I’m sure it is not optimized because I can see this variable in the final binary file emitted. </div></div><div dir="auto"><br></div><div dir="auto">Do you mean if I don’t refer to this variable in the front end, then I can’t see it in the backend? (although it’s in the final binary file)</div><div dir="auto"><br></div><div>Thank you!<br><div class="gmail_quote"><div dir="ltr">2019年1月19日(土) 2:00 <<a href="mailto:paul.robinson@sony.com" target="_blank">paul.robinson@sony.com</a>>:<br></div></div></div></div><div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div link="blue" vlink="purple" lang="EN-US">
<div class="m_-1578992637024306577m_-3029430411328008854WordSection1">
<p class="MsoNormal"><span style=" font-size:11.0pt ; ; ; ;;color:#1f497d ">Do you have a use of the new variable as well?  If not, it might be optimized out between the point where you create it and your MachineFunction pass.</span></p>
<p class="MsoNormal"><span style=" font-size:11.0pt ; ; ; ;;color:#1f497d ">--paulr</span></p>
<p class="MsoNormal"><a name="m_-1578992637024306577_m_-3029430411328008854__MailEndCompose"><span style=" font-size:11.0pt ; ; ; ;;color:#1f497d "> </span></a></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style=" font-size:10.0pt ; ; ; ; ">From:</span></b><span style=" font-size:10.0pt ; ; ; ; "> llvm-dev [mailto:<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>]
<b>On Behalf Of </b>n3v3rm03 via llvm-dev<br>
<b>Sent:</b> Friday, January 18, 2019 5:57 AM<br>
<b>To:</b> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<b>Subject:</b> [llvm-dev] Can't find symbol from llvm backend</span></p>
</div>
</div></div></div></div><div link="blue" vlink="purple" lang="EN-US"><div class="m_-1578992637024306577m_-3029430411328008854WordSection1"><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<p class="MsoNormal"> </p>
<div>
<p class="MsoNormal">Hi, I am new to llvm. </p>
<div>
<p class="MsoNormal">I create a global variable called "test_llvm_var" in the front end function pass like this:</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<p class="MsoNormal">            new GlobalVariable(*m, tmp->getType(), true, llvm::GlobalValue::ExternalLinkage, tmp, "test_llvm_var");</p>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">where tmp is a function.</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">Then I tried to access this global variable in the back end MachineFunctionPass like this:</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<p class="MsoNormal">            MCContext& MCC = MF.getContext();<br>
            MCSymbol* MCS = MCC.lookupSymbol("test_llvm_var");<br>
            if (MCS == NULL) {<br>
                errs() << ">>> MCSymbol is null\n";<br>
            }  <br>
            else {<br>
                MCS->dump();<br>
            }  </p>
<div>
<p class="MsoNormal"> </p>
<div>
<p class="MsoNormal"> (MF is a MachineFunction).</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">However I always get MCS==NULL, there is no symbol called test_llvm_var in the backend.</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">Am I doing something wrong? What I would like to do is to modify the global variable's value from the backend pass.</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">Any help would be appreciated.</p>
</div>
<div>
<p class="MsoNormal">Thank you!</p>
</div>
</div>
</div>
</div>
</div>
</div>

</blockquote></div></div>
</div>

</div></div><!--<![endif]--></includetail></font></span></div></div>