Skip to content
  1. Aug 14, 2009
  2. Aug 13, 2009
  3. Aug 12, 2009
  4. Aug 11, 2009
    • Owen Anderson's avatar
      Fix warnings. · c6daf8f1
      Owen Anderson authored
      llvm-svn: 78725
      c6daf8f1
    • Owen Anderson's avatar
      Split EVT into MVT and EVT, the former representing _just_ a primitive type, while · 9f94459d
      Owen Anderson authored
      the latter is capable of representing either a primitive or an extended type.
      
      llvm-svn: 78713
      9f94459d
    • Chris Lattner's avatar
      "TAI::JumpTableDirective" is always null for current arm targets, simplify · d5a91796
      Chris Lattner authored
      the code based on this and make it fall through better.
      
      llvm-svn: 78708
      d5a91796
    • David Goodwin's avatar
      Use DEBUG macro for debug output. · 92492f2f
      David Goodwin authored
      llvm-svn: 78694
      92492f2f
    • David Goodwin's avatar
      Add some debug output. · ebd694bb
      David Goodwin authored
      llvm-svn: 78687
      ebd694bb
    • Dan Gohman's avatar
      Tidy #includes. · 7c50c9bd
      Dan Gohman authored
      llvm-svn: 78677
      7c50c9bd
    • Dan Gohman's avatar
      c7c2bc96
    • Dan Gohman's avatar
      Remove unnecessary casts. · 38484cee
      Dan Gohman authored
      llvm-svn: 78664
      38484cee
    • Dan Gohman's avatar
      Add const qualifiers. · e02f9ba9
      Dan Gohman authored
      llvm-svn: 78663
      e02f9ba9
    • Jakob Stoklund Olesen's avatar
      Rebuild RegScavenger::DistanceMap each time it is needed. · b39a5aa7
      Jakob Stoklund Olesen authored
      The register scavenger maintains a DistanceMap that maps MI pointers to their
      distance from the top of the current MBB. The DistanceMap is built
      incrementally in forward() and in bulk in findFirstUse(). It is used by
      scavengeRegister() to determine which candidate register has the longest
      unused interval.
      
      Unfortunately the DistanceMap contents can become outdated. The first time
      scavengeRegister() is called, the DistanceMap is filled to cover the MBB. If
      then instructions are inserted in the MBB (as they always are following
      scavengeRegister()), the recorded distances are too short. This causes bad
      behaviour in the included test case where a register use /after/ the current
      position is ignored because findFirstUse() thinks is is /before/ the current
      position. A "using an undefined register" assertion follows promptly.
      
      The fix is to build a fresh DistanceMap at the top of scavengeRegister(), and
      discard it after use. This means that DistanceMap is no longer needed as a
      RegScavenger member variable, and forward() doesn't need to update it.
      
      The fix then discloses issue number two in the same test case: The candidate
      search in scavengeRegister() finds a CSR that has been saved in the prologue,
      but is currently unused. It would be both inefficient and wrong to spill such
      a register in the emergency spill slot. In the present case, the emergency
      slot restore is placed immediately before the normal epilogue restore, leading
      to a "Redefining a live register" assertion.
      
      Fix number two: When scavengerRegister() stumbles upon an unused register that
      is overwritten later in the MBB, return that register early. It is important
      to verify that the register is defined later in the MBB, otherwise it might be
      an unspilled CSR.
      
      llvm-svn: 78650
      b39a5aa7
    • Daniel Dunbar's avatar
      Fix a -Asserts warning. · 0c04f2b4
      Daniel Dunbar authored
       - Since the function is never called in NDEBUG mode, just dropped the DEBUG()
         uses here.
      
      llvm-svn: 78649
      0c04f2b4
    • David Goodwin's avatar
      Replace DOUT. · f20236ac
      David Goodwin authored
      llvm-svn: 78634
      f20236ac
    • Jim Grosbach's avatar
      SjLj based exception handling unwinding support. This patch is nasty, brutish · 693e36a3
      Jim Grosbach authored
      and short. Well, it's kinda short. Definitely nasty and brutish.
      
      The front-end generates the register/unregister calls into the SjLj runtime,
      call-site indices and landing pad dispatch. The back end fills in the LSDA
      with the call-site information provided by the front end. Catch blocks are
      not yet implemented.
      
      Built on Darwin and verified no llvm-core "make check" regressions.
      
      llvm-svn: 78625
      693e36a3
Loading