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: unassignedclangb...@nondot.org
Reporter: sbiersdo...@nvidia.com
CC: eric.schwe...@pgroup.com, llvm-bugs@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.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs