<div dir="ltr"><div dir="ltr"><div dir="ltr">On Tue, Jan 15, 2019 at 4:03 PM Zheng CZ Chen <<a href="mailto:czhengsz@cn.ibm.com">czhengsz@cn.ibm.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p><font size="2">Yes, the same result. But the way in your link is to change source code. My proposal is to add a compiling option like -fforce-restrict-ptr-args to clang and not change user source code.</font></p></div></blockquote><div>Oh, i see, missed that, sorry.</div><div>To *me* that sounds a bit too brittle/easy to break stuff,</div><div>plus all the usual arguments about creating new language dialect //may// apply.</div><div><br></div><div>Though i wonder, is it feasible to have some sanitizer to catch the cases when</div><div>the compiler does some transform based on an assumption of non-aliasing,</div><div>while that assumption ends up being incorrect at run-time.</div><div><br></div><div>To be noted, there are some more low-level missing blocks missing,</div><div>e.g. the llvm.noalias patchset (<a href="https://reviews.llvm.org/D9375">https://reviews.llvm.org/D9375</a> & follow-ups)</div><div>^ really looking forward to that one.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p><font size="2">Thanks.</font><br><br><font size="2">BRS//</font><br><font size="2">Chen Zheng</font><br><font size="2">Power Compiler Backend Developer</font><br><br><br><img width="16" height="16" src="cid:168519f4f87308fca931" border="0" alt="Inactive hide details for Roman Lebedev ---2019/01/15 08:43:06 PM---On Tue, Jan 15, 2019 at 3:08 PM Zheng CZ Chen via llvm-dev"><font size="2" color="#424282">Roman Lebedev ---2019/01/15 08:43:06 PM---On Tue, Jan 15, 2019 at 3:08 PM Zheng CZ Chen via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:</font><br><br><font size="2" color="#5F5F5F">From:        </font><font size="2">Roman Lebedev <<a href="mailto:lebedev.ri@gmail.com" target="_blank">lebedev.ri@gmail.com</a>></font><br><font size="2" color="#5F5F5F">To:        </font><font size="2">Zheng CZ Chen <<a href="mailto:czhengsz@cn.ibm.com" target="_blank">czhengsz@cn.ibm.com</a>></font><br><font size="2" color="#5F5F5F">Cc:        </font><font size="2"><a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a></font><br><font size="2" color="#5F5F5F">Date:        </font><font size="2">2019/01/15 08:43 PM</font><br><font size="2" color="#5F5F5F">Subject:        </font><font size="2">Re: [llvm-dev] Aggressive optimization opportunity</font><br></p><hr width="100%" size="2" align="left" noshade style="color:rgb(128,145,165)"><br><br><br><tt><font size="2">On Tue, Jan 15, 2019 at 3:08 PM Zheng CZ Chen via llvm-dev<br><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>><br>> Hi,<br>><br>> There are some compilers with a aggressive optimization which restricts function pointer parameters. Let's say opt restrict_args. When restrict_args is turned on, compiler will treat all function pointer parameters as restrict one.<br>><br>> int foo(int * a) + restrict_args opt<br>><br>> equals to:<br>><br>> int foo(int * restrict a)<br>><br>><br>> Here is a complete example:<br>> source code:<br>> extern int num;<br>> int foo(int * a)<br>> {<br>> (*a) = 10;<br>> num++;<br>> (*a)++;<br>><br>> return *a;<br>> }<br>><br>> Using IBM xlc compiler with option -qrestrict at -O2, we get result:<br>><br>> 0000000000000000 <foo>:<br>> 0: 00 00 4c 3c addis r2,r12,0<br>> 4: 00 00 42 38 addi r2,r2,0<br>> 8: 00 00 a2 3c addis r5,r2,0<br>> c: 00 00 a5 e8 ld r5,0(r5)<br>> 10: 0b 00 00 38 li r0,11<br>> 14: 00 00 03 90 stw r0,0(r3)<br>> 18: 00 00 85 80 lwz r4,0(r5)<br>> 1c: 0b 00 60 38 li r3,11 ------>since we confirm num will not change the content where pointer to, compiler can directly return 11.<br>> 20: 01 00 04 38 addi r0,r4,1<br>> 24: 00 00 05 90 stw r0,0(r5)<br>> 28: 20 00 80 4e blr<br>><br>> Seems clang does not have such optimization. And I don't find similar option in gcc either.<br>><br>> Is it possible to add this optimization into clang?<br>E.g. </font></tt><tt><font size="2"><a href="https://godbolt.org/z/gB98K0" target="_blank">https://godbolt.org/z/gB98K0</a></font></tt><tt><font size="2"><br><br>> Thanks.<br>><br>> BRS//<br>> Chen Zheng<br>> Power Compiler Backend Developer<br>Roman.<br><br>> _______________________________________________<br>> LLVM Developers mailing list<br>> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>> </font></tt><tt><font size="2"><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a></font></tt><tt><font size="2"><br><br></font></tt><br><br><br>
<p></p></div>
</blockquote></div></div></div>