Skip to content
  1. Jul 09, 2009
  2. Jul 08, 2009
    • Bill Wendling's avatar
      Recommit r74952 with a bug fix: · 0c9f367d
      Bill Wendling authored
      DWARF requires frame moves be specified at specific times. If you have a
      prologue like this:
      
      __Z3fooi:
      Leh_func_begin1:
      LBB1_0: ## entry
             pushl   %ebp
      Llabel1:
             movl    %esp, %ebp
      Llabel2:
             pushl   %esi
      Llabel3:
             subl    $20, %esp
             call    "L1$pb"
      "L1$pb":
             popl    %esi
      
      The "pushl %ebp" needs a table entry specifying the offset. The "movl %esp,
      %ebp" makes %ebp the new stack frame register, so that needs to be specified in
      DWARF. And "pushl %esi" saves the callee-saved %esi register, which also needs
      to be specified in DWARF.
      
      Before, all of this logic was in one method. This didn't work too well, because
      as you can see there are multiple FDE line entries that need to be created.
      
      This fix creates the "MachineMove" objects directly when they're needed; instead
      of waiting until the end, and losing information.
      
      There is some ugliness where we generate code like this:
      
      
      LBB22_0:	## entry
      	pushl	%ebp
      Llabel280:
      	movl	%esp, %ebp
      Llabel281:
      Llabel284:
      	pushl	%ebp  <----------
      	pushl	%ebx
      	pushl	%edi
      	pushl	%esi
      Llabel282:
      	subl	$328, %esp
      
      Notice the extra "pushl %ebp". If we generate a "machine move" instruction in
      the FDE for that pushl, the linker may get very confused about what value %ebp
      should have when exitting the function. I.e., it'll give it the value %esp
      instead of the %ebp value from the first "pushl". Not to mention that, in this
      case, %ebp isn't modified in the function (that's a separate bug). I put a small
      hack in to get it to work. It might be the only solution, but should be
      revisited once the above case is fixed.
      
      llvm-svn: 75047
      0c9f367d
    • Torok Edwin's avatar
      Implement changes from Chris's feedback. · fb8d6d5b
      Torok Edwin authored
      Finish converting lib/Target.
      
      llvm-svn: 75043
      fb8d6d5b
    • Torok Edwin's avatar
      Convert more abort() calls to llvm_report_error(). · fa040022
      Torok Edwin authored
      Also remove trailing semicolon.
      
      llvm-svn: 75027
      fa040022
    • Torok Edwin's avatar
      Start converting to new error handling API. · 6dd27300
      Torok Edwin authored
      cerr+abort -> llvm_report_error
      assert(0)+abort -> LLVM_UNREACHABLE (assert(0)+llvm_unreachable-> abort() included)
      
      llvm-svn: 75018
      6dd27300
    • Bill Wendling's avatar
      --- Reverse-merging (from foreign repository) r74952 into '.': · 69bf0a1e
      Bill Wendling authored
      U    lib/Target/X86/X86RegisterInfo.cpp
      U    lib/Target/X86/X86RegisterInfo.h
      
      Temporarily revert. This was causing an infinite loop in the linker on Leopard.
      
      llvm-svn: 74970
      69bf0a1e
    • Dale Johannesen's avatar
      Commit the file I actually changed as part of last · 9e5b64b7
      Dale Johannesen authored
      patch, instead of one I didn't.
      
      llvm-svn: 74968
      9e5b64b7
  3. Jul 07, 2009
    • Bill Wendling's avatar
      DWARF requires frame moves be specified at specific times. If you have a · 7a87a78c
      Bill Wendling authored
      prologue like this:
      
      __Z3fooi:
      Leh_func_begin1:
      LBB1_0: ## entry
              pushl   %ebp
      Llabel1:
              movl    %esp, %ebp
      Llabel2:
              pushl   %esi
      Llabel3:
              subl    $20, %esp
              call    "L1$pb"
      "L1$pb":
              popl    %esi
      
      The "pushl %ebp" needs a table entry specifying the offset. The "movl %esp,
      %ebp" makes %ebp the new stack frame register, so that needs to be specified in
      DWARF. And "pushl %esi" saves the callee-saved %esi register, which also needs
      to be specified in DWARF.
      
      Before, all of this logic was in one method. This didn't work too well, because
      as you can see there are multiple FDE line entries that need to be created.
      
      This fix creates the "MachineMove" objects directly when they're needed; instead
      of waiting until the end, and losing information.
      
      llvm-svn: 74952
      7a87a78c
    • Dale Johannesen's avatar
      Don't accept globals as matching 'i' constraint · 56a53d02
      Dale Johannesen authored
      in PIC modes (in accordance with existing comment).
      gcc.apple/asm-block-25.c
      
      llvm-svn: 74886
      56a53d02
  4. Jul 06, 2009
  5. Jul 03, 2009
    • Tilmann Scheller's avatar
      Add NumFixedArgs attribute to CallSDNode which indicates the number of fixed... · aea6059e
      Tilmann Scheller authored
      Add NumFixedArgs attribute to CallSDNode which indicates the number of fixed arguments in a vararg call.
      
      With the SVR4 ABI on PowerPC, vector arguments for vararg calls are passed differently depending on whether they are a fixed or a variable argument. Variable vector arguments always go into memory, fixed vector arguments are put 
      into vector registers. If there are no free vector registers available, fixed vector arguments are put on the stack.
      
      The NumFixedArgs attribute allows to decide for an argument in a vararg call whether it belongs to the fixed or variable portion of the parameter list.
      
      llvm-svn: 74764
      aea6059e
  6. Jul 02, 2009
  7. Jul 01, 2009
  8. Jun 30, 2009
    • David Greene's avatar
      · 50475de6
      David Greene authored
      Add 256-bit memory operand support.
      
      llvm-svn: 74548
      50475de6
    • Rafael Espindola's avatar
      Fix PR4485. · 317fd045
      Rafael Espindola authored
      Avoid unnecessary duplication of operand 0 of X86::FpSET_ST0_80. This duplication would
      cause one register to remain on the stack at the function return.
      
      llvm-svn: 74534
      317fd045
    • Rafael Espindola's avatar
      Fix PR4484. · bd971ffc
      Rafael Espindola authored
      This was caused by me confounding FP0 and ST(0).
      
      llvm-svn: 74523
      bd971ffc
    • Evan Cheng's avatar
      Add a bit IsUndef to MachineOperand. This indicates the def / use register... · 0dc101b8
      Evan Cheng authored
      Add a bit IsUndef to MachineOperand. This indicates the def / use register operand is defined by an implicit_def. That means it can def / use any register and passes (e.g. register scavenger) can feel free to ignore them.
      
      The register allocator, when it allocates a register to a virtual register defined by an implicit_def, can allocate any physical register without worrying about overlapping live ranges. It should mark all of operands of the said virtual register so later passes will do the right thing.
      
      This is not the best solution. But it should be a lot less fragile to having the scavenger try to track what is defined by implicit_def.
      
      llvm-svn: 74518
      0dc101b8
    • Chris Lattner's avatar
      remove a bogus note. · b127c068
      Chris Lattner authored
      llvm-svn: 74509
      b127c068
    • Chris Lattner's avatar
      add a note · 5ed255e6
      Chris Lattner authored
      llvm-svn: 74508
      5ed255e6
    • David Greene's avatar
      · 8adf1fdc
      David Greene authored
      Add a 256-bit register class and YMM registers.
      
      llvm-svn: 74469
      8adf1fdc
  9. Jun 29, 2009
    • Rafael Espindola's avatar
      FIX PR 4459. · 538064d6
      Rafael Espindola authored
      Not sure I understand how the temp register gets used,
      but this fixes a bug and introduces no regressions.
      
      llvm-svn: 74446
      538064d6
    • Owen Anderson's avatar
      Add a target-specific DAG combine on X86 to fold the common pattern of · 45c299ef
      Owen Anderson authored
      fence-atomic-fence down to just the atomic op.  This is possible thanks to
      X86's relatively strong memory model, which guarantees that locked instructions
      (which are used to implement atomics) are implicit fences.
      
      llvm-svn: 74435
      45c299ef
    • David Greene's avatar
      · 46b56ffa
      David Greene authored
      Add processor descriptions for Istanbul and Shanghai.
      
      llvm-svn: 74429
      46b56ffa
    • David Greene's avatar
      · a4b8998f
      David Greene authored
      Fix a subtarget feature bug.
      
      llvm-svn: 74428
      a4b8998f
    • David Greene's avatar
      · f92ba97c
      David Greene authored
      Add more vector ValueTypes for AVX and other extended vector instruction
      sets.
      
      llvm-svn: 74427
      f92ba97c
  10. Jun 27, 2009
Loading