summaryrefslogtreecommitdiff
path: root/unittests
diff options
context:
space:
mode:
authorShuxin Yang <shuxin.llvm@gmail.com>2013-06-04 01:00:57 +0000
committerShuxin Yang <shuxin.llvm@gmail.com>2013-06-04 01:00:57 +0000
commit45c75443394b92a8ba8e2474a393039feb5b7d78 (patch)
tree6fee8cb2bd292d36f5816c58dbd9df267e88cf64 /unittests
parent4526d1cd4a4238f67710f98a1e44688b99fc3ba7 (diff)
downloadllvm-45c75443394b92a8ba8e2474a393039feb5b7d78.tar.gz
llvm-45c75443394b92a8ba8e2474a393039feb5b7d78.tar.bz2
llvm-45c75443394b92a8ba8e2474a393039feb5b7d78.tar.xz
Fix a defect in code-layout pass, improving Benchmarks/Olden/em3d/em3d by about 30%
(4.58s vs 3.2s on an oldish Mac Tower). The corresponding src is excerpted bellow. The lopp accounts for about 90% of execution time. -------------------- cat -n test-suite/MultiSource/Benchmarks/Olden/em3d/make_graph.c 90 91 for (k=0; k<j; k++) 92 if (other_node == cur_node->to_nodes[k]) break; The defective layout is sketched bellow, where the two branches need to swap. ------------------------------------------------------------------------ L: ... if (cond) goto out-of-loop goto L While this code sequence is defective, I don't understand why it incurs 1/3 of execution time. CPU-event-profiling indicates the poor laoyout dose not increase in br-misprediction; it dosen't increase stall cycle at all, and it dosen't prevent the CPU detect the loop (i.e. Loop-Stream-Detector seems to be working fine as well)... The root cause of the problem is that the layout pass calls AnalyzeBranch() with basic-block which is not updated to reflect its current layout. rdar://13966341 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183174 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
0 files changed, 0 insertions, 0 deletions