[llvm-bugs] [Bug 35336] New: OpenPOWER: Evaluate branch before storing values
via llvm-bugs
llvm-bugs at lists.llvm.org
Thu Nov 16 16:13:36 PST 2017
https://bugs.llvm.org/show_bug.cgi?id=35336
Bug ID: 35336
Summary: OpenPOWER: Evaluate branch before storing values
Product: clang
Version: 3.6
Hardware: PC
OS: Linux
Status: NEW
Keywords: code-quality, performance
Severity: enhancement
Priority: P
Component: LLVM Codegen
Assignee: unassignedclangbugs at nondot.org
Reporter: sbiersdorff at nvidia.com
CC: eric.schweitz at pgroup.com, llvm-bugs at lists.llvm.org
Created attachment 19434
--> https://bugs.llvm.org/attachment.cgi?id=19434&action=edit
Example code showing performance issue
Consider the attached code. On entry to the ‘quick_return’ function a check is
made whether to return immediately. Hopefully if this flag is true this
function returns quickly--executing only a minimal number of instructions.
However, compare Clang generated instruction verses GNU generated code:
Clang:
0000000010000630 <quick_return>:
10000630: 02 10 40 3c lis r2,4098
10000634: 00 8c 42 38 addi r2,r2,-29696
10000638: a6 02 08 7c mflr r0
1000063c: f8 ff e1 fb std r31,-8(r1)
10000640: 10 00 01 f8 std r0,16(r1)
10000644: 91 ff 21 f8 stdu r1,-112(r1)
10000648: 78 0b 3f 7c mr r31,r1
1000064c: 00 00 03 28 cmplwi r3,0
10000650: 60 00 df fb std r30,96(r31)
10000654: 78 23 9e 7c mr r30,r4
10000658: 50 00 82 40 bne 100006a8 <quick_return+0x78>
GNU:
00000000100007c0 <quick_return>:
100007c0: 02 10 40 3c lis r2,4098
100007c4: 00 7f 42 38 addi r2,r2,32512
100007c8: 00 00 a3 2f cmpdi cr7,r3,0
100007cc: 20 00 9e 4c bnelr cr7
Notice the three ‘store’ instruction generated by Clang before the branch is
evaluated. An improvement would be generating code more similar to GNU placing
these ‘store’ instruction after the check to see if the function should return
immediately.
Note these examples both used the flag ‘-O3’.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20171117/cb7ea63b/attachment.html>
More information about the llvm-bugs
mailing list