<html><body><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><br><br><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:1__=C7BB0910DFD4E9E48f9e8a93df938690918cC7B@" 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 <llvm-dev@lists.llvm.org> wrote:</font><br><br><font size="2" color="#5F5F5F">From:        </font><font size="2">Roman Lebedev <lebedev.ri@gmail.com></font><br><font size="2" color="#5F5F5F">To:        </font><font size="2">Zheng CZ Chen <czhengsz@cn.ibm.com></font><br><font size="2" color="#5F5F5F">Cc:        </font><font size="2">llvm-dev@lists.llvm.org</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><hr width="100%" size="2" align="left" noshade style="color:#8091A5; "><br><br><br><tt><font size="2">On Tue, Jan 15, 2019 at 3:08 PM Zheng CZ Chen via llvm-dev<br><llvm-dev@lists.llvm.org> 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">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>> llvm-dev@lists.llvm.org<br>> </font></tt><tt><font size="2"><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a></font></tt><tt><font size="2"><br><br></font></tt><br><br><BR>
</body></html>