<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">Hi, Gang:<br>
<br>
I remember there were different voices when you check-in the
code. <br>
I agree with them although I didn't reply your mail in open64's
mailing list. <br>
<br>
In the transformation you illustrate, it involves two
operations:<br>
1) promote WHILE-loop into DO-loop (i.e noncountable loop to
countable loop)<br>
2) get rid of trip-count dec/inc and compare.<br>
<br>
1) is irrelevant to HW loop. Any scalar optimizer should handle
1).<br>
It is not difficult at all to handle 2) in CodeGen and it is
unnecessary to <br>
to introduce a Operator just for that purpose. <br>
<br>
Shuxin<br>
<br>
On 11/22/2012 06:03 AM, Gang Yu wrote:<br>
</div>
<blockquote
cite="mid:7507086E-3FB2-4A71-9B9F-999EB0C1CC60@gmail.com"
type="cite">
<div>I am the designer for open64 hwloop structure, but I am not a
student.</div>
<div><br>
</div>
<div>Hope the following helps:</div>
<div><br>
</div>
<div>To transform a loop into hwloop, we need the help from
optimizer. For example, </div>
<div><span class="Apple-style-span" style="font-family:
sans-serif; -webkit-tap-highlight-color: rgba(26, 26, 26,
0.296875); -webkit-composition-fill-color: rgba(175, 192, 227,
0.230469); -webkit-composition-frame-color: rgba(77, 128, 180,
0.230469); font-size: 13px; line-height: 19px; "><code
style="background-color: rgb(249, 249, 249); " lang="text">
<pre style="padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(47, 111, 171); border-right-color: rgb(47, 111, 171); border-bottom-color: rgb(47, 111, 171); border-left-color: rgb(47, 111, 171); color: black; background-color: rgb(249, 249, 249); line-height: 1.1em; "> while(k3>=10){
sum+=k1;
k3 --;
}
</pre>
</code>
<p style="margin-top: 0.4em; margin-right: 0px; margin-bottom:
0.5em; margin-left: 0px; line-height: 1.5em; ">into the
form:<code style="background-color: rgb(249, 249, 249); "
lang="text"></code></p>
<code style="background-color: rgb(249, 249, 249); "
lang="text">
<pre style="padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(47, 111, 171); border-right-color: rgb(47, 111, 171); border-bottom-color: rgb(47, 111, 171); border-left-color: rgb(47, 111, 171); color: black; background-color: rgb(249, 249, 249); line-height: 1.1em; "> zdl_loop(k3-9) {
sum+=k1;
}
</pre>
</code>
<p style="margin-top: 0.4em; margin-right: 0px; margin-bottom:
0.5em; margin-left: 0px; line-height: 1.5em; ">So, we
introduce a new ZDLBR whirl(open64 optimizer intermediate)
operator, which represents the loop in whirl as:<code
style="background-color: rgb(249, 249, 249); " lang="text"></code></p>
<code style="background-color: rgb(249, 249, 249); "
lang="text">
<pre style="padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(47, 111, 171); border-right-color: rgb(47, 111, 171); border-bottom-color: rgb(47, 111, 171); border-left-color: rgb(47, 111, 171); color: black; background-color: rgb(249, 249, 249); line-height: 1.1em; ">LABEL L2050 0 {line: 0}
LOOP_INFO 0 1 1
I4I4LDID 73 <1,2,.preg_I4> T<4,.predef_I4,4> # k3
I4I4LDID 77 <1,2,.preg_I4> T<4,.predef_I4,4> # <preg>
END_LOOP_INFO
I4I4LDID 74 <1,2,.preg_I4> T<4,.predef_I4,4> # k1
I4I4LDID 75 <1,2,.preg_I4> T<4,.predef_I4,4> # sum
I4ADD
I4STID 75 <1,2,.preg_I4> T<4,.predef_I4,4> # sum {line: 5}
ZDLBR L2050 {line: 0}
</pre>
<div>Then, we let cg do things. Such a design abstract the
general operations in optimizer, while target specific
part in cg, still a simulated op, until cg loop
optimization finished. We implement a multi nested level
hwloop by this approach. Gcc's 3 doloop expand names do
the same, we believe.</div>
</code></span>
<div><br>
</div>
More details, please take a look at</div>
<div><br>
</div>
<div><a moz-do-not-send="true"
href="http://wiki.open64.net/index.php/Zero_Delay_Loop">http://wiki.open64.net/index.php/Zero_Delay_Loop</a></div>
<div><br>
</div>
<div>Thanks<br>
Gang</div>
<div><br>
</div>
</blockquote>
<br>
</body>
</html>