<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Dear Xiangyang,
<div><br>
</div>
<div>There is an LLVM pass called reg2mem which does what Diego
suggests. If you're not worried about efficiency, that might
work for you.</div>
<div><br>
</div>
<div>If you need to do an efficient conversion of code from SSA
form to non-SSA form, then you need to read Efficiently
Computing Single Static Assignment Form and the Control
Dependence Graph by Ron Cytron, Jeane Ferrante, et. al. (I may
have gotten the title or authors slightly wrong as I'm recalling
this from memory).</div>
<div><br>
</div>
<div>Anyway, that paper describes how to generate code from SSA
form. In essence, you need to do what register allocation does:
figure out which SSA values in the same def-use chain can live
in the same variable (because they don't conflict) and which SSA
values must be assigned to different variables (because they are
alive at the same time). If you read the above paper, it should
become clear.<br>
</div>
<div><br>
</div>
<div>Regards,</div>
<div><br>
</div>
<div>John Criswell<br>
<br>
</div>
<br>
On 4/24/15 4:55 PM, Xiangyang Guo wrote:<br>
</div>
<blockquote
cite="mid:CAJ9s6GTHcEb+X84Xkr12XxyKS7PQqrQ08gb2wPfUSw64p=SSdg@mail.gmail.com"
type="cite">
<meta http-equiv="Context-Type" content="text/html; charset=UTF-8">
<div dir="ltr">Hi, Diego,
<div><br>
</div>
<div>Thanks for your quick reply. Inserting a copy instruction
may not work here because I have a limitation of virtual
register number. I need to assign registers with ssa form to
registers without ssa form. I will look the source code you
point out.</div>
<div><br>
</div>
<div>Thanks</div>
<div><br>
</div>
<div>Xiangyang</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Fri, Apr 24, 2015 at 4:19 PM, Diego
Novillo <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:dnovillo@google.com" target="_blank">dnovillo@google.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote">
<div dir="ltr"><br>
<div class="gmail_extra"><br>
<div class="gmail_quote"><span class="">On Fri, Apr 24,
2015 at 3:17 PM, Xiangyang Guo <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:xguo6@ncsu.edu" target="_blank">xguo6@ncsu.edu</a>></span>
wrote:<br>
<blockquote class="gmail_quote">
<div dir="ltr">Hi,
<div><br>
</div>
<div>I want to convert LLVM IR to another type
of IR, which has no SSA form. So the most
important thing I need to handle is Phi node
and register allocation because another type
of IR has a limitation of virtual register
number. The first thing I can think about is
to learn how LLVM Backend works because LLVM
Backend handles these things. But I'm not
familiar with Backend. After reading some
source code and online tutorials, I think a
Backend is too much for my purpose. I really
appreciate that if someone can give me hints. </div>
</div>
</blockquote>
<div><br>
</div>
</span>
<div>The easiest way to think about PHI nodes is to
consider them copies on CFG edges. If you do the
naive translation of inserting a copy instruction on
the corresponding edge for each PHI argument, you'll
get a rough approximation for the corresponding
normal form.</div>
<div><br>
</div>
<div>This is, of course, very inefficient, but it's
the main idea.</div>
<div><br>
</div>
<div>If you can look at GCC's source code, take a look
at the algorithm in file gcc/tree-outof-ssa.c. That
implements an SSA->Normal transformation. I'm not
really sure where in the LLVM's backend this is
done.</div>
<span class="HOEnZb">
<div><br>
</div>
<div><br>
</div>
<div>Diego.</div>
</span></div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a> <a class="moz-txt-link-freetext" href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
<a class="moz-txt-link-freetext" href="http://www.cs.rochester.edu/u/criswell">http://www.cs.rochester.edu/u/criswell</a></pre>
</body>
</html>