Skip to content
  1. May 24, 2006
  2. May 23, 2006
    • Evan Cheng's avatar
      Better way to check for vararg. · 7068a93c
      Evan Cheng authored
      llvm-svn: 28440
      7068a93c
    • Evan Cheng's avatar
      Remove PreprocessCCCArguments and PreprocessFastCCArguments now that · 17e734f0
      Evan Cheng authored
      FORMAL_ARGUMENTS nodes include a token operand.
      
      llvm-svn: 28439
      17e734f0
    • Chris Lattner's avatar
      Implement an annoying part of the Darwin/X86 abi: the callee of a struct · 8be5be81
      Chris Lattner authored
      return argument pops the hidden struct pointer if present, not the caller.
      
      For example, in this testcase:
      
      struct X { int D, E, F, G; };
      struct X bar() {
        struct X a;
        a.D = 0;
        a.E = 1;
        a.F = 2;
        a.G = 3;
        return a;
      }
      void foo(struct X *P) {
        *P = bar();
      }
      
      We used to emit:
      
      _foo:
              subl $28, %esp
              movl 32(%esp), %eax
              movl %eax, (%esp)
              call _bar
              addl $28, %esp
              ret
      _bar:
              movl 4(%esp), %eax
              movl $0, (%eax)
              movl $1, 4(%eax)
              movl $2, 8(%eax)
              movl $3, 12(%eax)
              ret
      
      This is correct on Linux/X86 but not Darwin/X86.  With this patch, we now
      emit:
      
      _foo:
              subl $28, %esp
              movl 32(%esp), %eax
              movl %eax, (%esp)
              call _bar
      ***     addl $24, %esp
              ret
      _bar:
              movl 4(%esp), %eax
              movl $0, (%eax)
              movl $1, 4(%eax)
              movl $2, 8(%eax)
              movl $3, 12(%eax)
      ***     ret $4
      
      For the record, GCC emits (which is functionally equivalent to our new code):
      
      _bar:
              movl    4(%esp), %eax
              movl    $3, 12(%eax)
              movl    $2, 8(%eax)
              movl    $1, 4(%eax)
              movl    $0, (%eax)
              ret     $4
      _foo:
              pushl   %esi
              subl    $40, %esp
              movl    48(%esp), %esi
              leal    16(%esp), %eax
              movl    %eax, (%esp)
              call    _bar
              subl    $4, %esp
              movl    16(%esp), %eax
              movl    %eax, (%esi)
              movl    20(%esp), %eax
              movl    %eax, 4(%esi)
              movl    24(%esp), %eax
              movl    %eax, 8(%esi)
              movl    28(%esp), %eax
              movl    %eax, 12(%esi)
              addl    $40, %esp
              popl    %esi
              ret
      
      This fixes SingleSource/Benchmarks/CoyoteBench/fftbench with LLC and the
      JIT, and fixes the X86-backend portion of PR729.  The CBE still needs to
      be updated.
      
      llvm-svn: 28438
      8be5be81
    • Evan Cheng's avatar
      -enable-unsafe-fp-math implies -enable-finite-only-fp-math · ac4f66ff
      Evan Cheng authored
      llvm-svn: 28437
      ac4f66ff
    • Evan Cheng's avatar
      Added option -enable-finite-only-fp-math. When on, the codegen can assume that · ea145074
      Evan Cheng authored
      FP arithmetic arguments and results are never NaNs or +=Infs. This includes
      ignoring parity flag (PF) when checking for FP equality.
      
      llvm-svn: 28432
      ea145074
    • Rafael Espindola's avatar
      implement minimal versions of · 27f8bdc7
      Rafael Espindola authored
      ARMAsmPrinter::runOnMachineFunction
      LowerFORMAL_ARGUMENTS
      ARMInstrInfo::isMoveInstr
      
      llvm-svn: 28431
      27f8bdc7
  3. May 22, 2006
  4. May 21, 2006
  5. May 20, 2006
  6. May 19, 2006
  7. May 18, 2006
Loading