[LLVMbugs] [Bug 368] NEW: [sparcv9] null often spilled to constant pool

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Thu Jun 10 15:50:36 PDT 2004


           Summary: [sparcv9] null often spilled to constant pool
           Product: libraries
           Version: trunk
          Platform: Sun
        OS/Version: Solaris
            Status: NEW
          Severity: normal
          Priority: P2
         Component: SPARC Backend
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: gaeke+bugs at uiuc.edu

I have noticed that the 64-bit constant pointer null is often spilled to the
constant pool in the sparcv9 backend, requiring a 7-instruction sequence to
load it out of the constant pool. This is a pretty serious pessimization. For
an example of this behavior, try running llc -print-machineinstrs on the
following code:


void %foobar (sbyte* %arg) {
  ret void

void %caller () {
  call void %foobar (sbyte* null)
  ret void

For %caller, SunPRO cc with -O on the C-backend code produces the following
(ignoring prolog/epilog instrs):

/* 0x0004        */     or  %g0,0,%o0
/* 0x0008        */     call    foobar  ! params =  %o0 ! Result =  ! (tail call)

llc produces the following:

    sethi   %hh(.CPI_caller_0), %o1
    sethi   %lm(.CPI_caller_0), %o0
    or  %o1, %hm(.CPI_caller_0), %o1
    sllx    %o1, 32, %o1
    or  %o0, %o1, %o0
    or  %o0, %lo(.CPI_caller_0), %o0
    ldx [%o0+0], %o0
    call    foobar

    .xword  0

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

More information about the llvm-bugs mailing list