From: Evan Cheng Date: Tue, 18 Apr 2006 01:22:57 +0000 (+0000) Subject: Another entry X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=74e955d9312f4d0dcc9c2022e58c71341afce1f4;p=oota-llvm.git Another entry git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27786 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/README.txt b/lib/Target/X86/README.txt index 33be39ee91b..39a4407f8be 100644 --- a/lib/Target/X86/README.txt +++ b/lib/Target/X86/README.txt @@ -961,3 +961,38 @@ selector should select pshufd or The register allocator can made the two-address to three-address transformation. It also exposes some other problems. See MOV32ri -3 and the spills. + +//===---------------------------------------------------------------------===// + +http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25500 + +LLVM is producing bad code. + +LBB_main_4: # cond_true44 + addps %xmm1, %xmm2 + subps %xmm3, %xmm2 + movaps (%ecx), %xmm4 + movaps %xmm2, %xmm1 + addps %xmm4, %xmm1 + addl $16, %ecx + incl %edx + cmpl $262144, %edx + movaps %xmm3, %xmm2 + movaps %xmm4, %xmm3 + jne LBB_main_4 # cond_true44 + +There are two problems. 1) No need to two loop induction variables. We can +compare against 262144 * 16. 2) Poor register allocation decisions. We should +be able eliminate one of the movaps: + + addps %xmm1, %xmm2 + subps %xmm3, %xmm2 + movaps (%ecx), %xmm4 + movaps %xmm2, %xmm2 <=== Eliminate! + addps %xmm4, %xmm2 + addl $16, %ecx + incl %edx + cmpl $262144, %edx + movaps %xmm3, %xmm1 + movaps %xmm4, %xmm3 + jne LBB_main_4 # cond_true44