[LLVMbugs] [Bug 10928] New: [AVX] build2.c performs worse on AVX than on SSE!

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Sep 14 17:10:32 PDT 2011


           Summary: [AVX] build2.c performs worse on AVX than on SSE!
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Register Allocator
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: bruno.cardoso at gmail.com
                CC: llvmbugs at cs.uiuc.edu

Created an attachment (id=7270)
 --> (http://llvm.org/bugs/attachment.cgi?id=7270)

Given the b.bc attached bitcode (extracted from
test-suite/SingleSource/UnitTests/Vector/build2.c), the only hot loop in the
program yields:

$ llc b.bc
  movss LCPI0_0(%rip), %xmm6                                                  
  addps %xmm9, %xmm6
  addps LCPI0_1(%rip), %xmm6
  addps %xmm12, %xmm6                                                         
  addps %xmm13, %xmm8                   
  addps %xmm14, %xmm8                   
  addps %xmm15, %xmm7                   
  addps %xmm0, %xmm7
  addps %xmm2, %xmm7
  addps %xmm1, %xmm6
  addps %xmm4, %xmm7
  addps %xmm3, %xmm8
  addps %xmm10, %xmm8
  addps %xmm5, %xmm8
  addps %xmm11, %xmm8
  decl  %ecx

while in AVX mode,
$ llc -mattr=+avx b.bc

  vaddps  %xmm12, %xmm10, %xmm0
  vaddps  %xmm13, %xmm0, %xmm0
  vaddps  %xmm14, %xmm0, %xmm1
  vaddps  %xmm15, %xmm7, %xmm0
  vaddps  %xmm9, %xmm0, %xmm7
  vaddps  %xmm11, %xmm6, %xmm0
  vaddps  LCPI0_6(%rip), %xmm0, %xmm0
  vaddps  %xmm3, %xmm0, %xmm8
  vaddps  %xmm4, %xmm1, %xmm10
  vaddps  %xmm5, %xmm8, %xmm6
  vaddps  LCPI0_10(%rip), %xmm7, %xmm7
  vaddps  LCPI0_11(%rip), %xmm7, %xmm7
  vaddps  LCPI0_12(%rip), %xmm7, %xmm7
  vaddps  %xmm2, %xmm7, %xmm7
  decl  %ecx

Although AVX is 3-addr instruction, it's rematerializing some constant pool
loads before the end of the loop, and that is making it becomes slower than the
SSE version. Digging into the problem (using -print-machineinstrs) I found out
that LICM hoist all constant pool loads out of the loop, but RA brings some of
them back (probably because it's running out of registers?).

Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

More information about the llvm-bugs mailing list