Skip to content
  1. Jan 07, 2008
    • Gordon Henriksen's avatar
      Ammending r45669 with a missing file. · 2d684b1f
      Gordon Henriksen authored
      llvm-svn: 45671
      2d684b1f
    • Gordon Henriksen's avatar
      With this patch, the LowerGC transformation becomes the · 6047b6e1
      Gordon Henriksen authored
      ShadowStackCollector, which additionally has reduced overhead with
      no sacrifice in portability.
      
      Considering a function @fun with 8 loop-local roots,
      ShadowStackCollector introduces the following overhead
      (x86):
      
      ; shadowstack prologue
              movl    L_llvm_gc_root_chain$non_lazy_ptr, %eax
              movl    (%eax), %ecx
              movl    $___gc_fun, 20(%esp)
              movl    $0, 24(%esp)
              movl    $0, 28(%esp)
              movl    $0, 32(%esp)
              movl    $0, 36(%esp)
              movl    $0, 40(%esp)
              movl    $0, 44(%esp)
              movl    $0, 48(%esp)
              movl    $0, 52(%esp)
              movl    %ecx, 16(%esp)
              leal    16(%esp), %ecx
              movl    %ecx, (%eax)
      
      ; shadowstack loop overhead
              (none)
      
      ; shadowstack epilogue
              movl    48(%esp), %edx
              movl    %edx, (%ecx)
      
      ; shadowstack metadata
              .align  3
      ___gc_fun:                              # __gc_fun
              .long   8
              .space  4
      
      In comparison to LowerGC:
      
      ; lowergc prologue
              movl    L_llvm_gc_root_chain$non_lazy_ptr, %eax
              movl    (%eax), %ecx
              movl    %ecx, 48(%esp)
              movl    $8, 52(%esp)
              movl    $0, 60(%esp)
              movl    $0, 56(%esp)
              movl    $0, 68(%esp)
              movl    $0, 64(%esp)
              movl    $0, 76(%esp)
              movl    $0, 72(%esp)
              movl    $0, 84(%esp)
              movl    $0, 80(%esp)
              movl    $0, 92(%esp)
              movl    $0, 88(%esp)
              movl    $0, 100(%esp)
              movl    $0, 96(%esp)
              movl    $0, 108(%esp)
              movl    $0, 104(%esp)
              movl    $0, 116(%esp)
              movl    $0, 112(%esp)
      
      ; lowergc loop overhead
              leal    44(%esp), %eax
              movl    %eax, 56(%esp)
              leal    40(%esp), %eax
              movl    %eax, 64(%esp)
              leal    36(%esp), %eax
              movl    %eax, 72(%esp)
              leal    32(%esp), %eax
              movl    %eax, 80(%esp)
              leal    28(%esp), %eax
              movl    %eax, 88(%esp)
              leal    24(%esp), %eax
              movl    %eax, 96(%esp)
              leal    20(%esp), %eax
              movl    %eax, 104(%esp)
              leal    16(%esp), %eax
              movl    %eax, 112(%esp)
      
      ; lowergc epilogue
              movl    48(%esp), %edx
              movl    %edx, (%ecx)
      
      ; lowergc metadata
              (none)
      
      llvm-svn: 45670
      6047b6e1
    • Gordon Henriksen's avatar
      Enabling the target-independent garbage collection infrastructure by hooking it · 5180e856
      Gordon Henriksen authored
      up to the various compiler pipelines.
      
      This doesn't actually add support for any GC algorithms, which means it 
      temporarily breaks a few tests. To be fixed shortly.
      
      llvm-svn: 45669
      5180e856
    • Chris Lattner's avatar
      a4ce4f69
  2. Jan 06, 2008
  3. Jan 05, 2008
  4. Jan 04, 2008
  5. Jan 02, 2008
  6. Jan 01, 2008
  7. Dec 31, 2007
  8. Dec 30, 2007
    • Chris Lattner's avatar
      More cleanups for MachineOperand: · 6005589f
      Chris Lattner authored
        - Eliminate the static "print" method for operands, moving it
          into MachineOperand::print.
        - Change various set* methods for register flags to take a bool
          for the value to set it to.  Remove unset* methods.
        - Group methods more logically by operand flavor in MachineOperand.h
      
      llvm-svn: 45461
      6005589f
    • Chris Lattner's avatar
      MachineOperand: · c98c0e57
      Chris Lattner authored
        - Add getParent() accessors.
        - Move SubReg out of the AuxInfo union, to make way for future changes.
        - Remove the getImmedValue/setImmedValue methods.
        - in some MachineOperand::Create* methods, stop initializing fields that are dead.
      
      MachineInstr:
        - Delete one copy of the MachineInstr printing code, now there is only one dump
          format and one copy of the code.
        - Make MachineOperand use the parent field to get info about preg register names if
          no target info is otherwise available.
        - Move def/use/kill/dead flag printing to the machineoperand printer, so they are
          always printed for an operand.
      
      llvm-svn: 45460
      c98c0e57
    • Chris Lattner's avatar
      fix typo duncan noticed! · 96317d24
      Chris Lattner authored
      llvm-svn: 45459
      96317d24
    • Chris Lattner's avatar
      simpilfy some register printing code. · 35fecece
      Chris Lattner authored
      llvm-svn: 45458
      35fecece
Loading