Skip to content
  1. Jun 15, 2012
  2. Apr 24, 2012
  3. Apr 17, 2012
    • Chandler Carruth's avatar
      Fix updateTerminator to be resiliant to degenerate terminators where · 1f5580b6
      Chandler Carruth authored
      both fallthrough and a conditional branch target the same successor.
      Gracefully delete the conditional branch and introduce any unconditional
      branch needed to reach the actual successor. This fixes memory
      corruption in 2009-06-15-RegScavengerAssert.ll and possibly other tests.
      
      Also, while I'm here fix a latent bug I spotted by inspection. I never
      applied the same fundamental fix to this fallthrough successor finding
      logic that I did to the logic used when there are no conditional
      branches. As a consequence it would have selected landing pads had they
      be aligned in just the right way here. I don't have a test case as
      I spotted this by inspection, and the previous time I found this
      required have of TableGen's source code to produce it. =/ I hate backend
      bugs. ;]
      
      Thanks to Jim Grosbach for helping me reason through this and reviewing
      the fix.
      
      llvm-svn: 154867
      1f5580b6
  4. Mar 28, 2012
  5. Mar 07, 2012
  6. Feb 10, 2012
  7. Feb 09, 2012
  8. Jan 26, 2012
  9. Dec 20, 2011
  10. Dec 14, 2011
    • Evan Cheng's avatar
      - Add MachineInstrBundle.h and MachineInstrBundle.cpp. This includes a function · 7fae11b2
      Evan Cheng authored
        to finalize MI bundles (i.e. add BUNDLE instruction and computing register def
        and use lists of the BUNDLE instruction) and a pass to unpack bundles.
      - Teach more of MachineBasic and MachineInstr methods to be bundle aware.
      - Switch Thumb2 IT block to MI bundles and delete the hazard recognizer hack to
        prevent IT blocks from being broken apart.
      
      llvm-svn: 146542
      7fae11b2
  11. Dec 07, 2011
    • Evan Cheng's avatar
      Add bundle aware API for querying instruction properties and switch the code · 7f8e563a
      Evan Cheng authored
      generator to it. For non-bundle instructions, these behave exactly the same
      as the MC layer API.
      
      For properties like mayLoad / mayStore, look into the bundle and if any of the
      bundled instructions has the property it would return true.
      For properties like isPredicable, only return true if *all* of the bundled
      instructions have the property.
      For properties like canFoldAsLoad, isCompare, conservatively return false for
      bundles.
      
      llvm-svn: 146026
      7f8e563a
  12. Dec 06, 2011
  13. Nov 23, 2011
  14. Nov 22, 2011
    • Chandler Carruth's avatar
      Fix a devilish miscompile exposed by block placement. The · ee54feb6
      Chandler Carruth authored
      updateTerminator code didn't correctly handle EH terminators in one very
      specific case. AnalyzeBranch would find no terminator instruction, and
      so the fallback in updateTerminator is to assume fallthrough. This is
      correct, but the destination of the fallthrough was assumed to be the
      first successor.
      
      This is *almost always* true, but in certain cases the loop
      transformations will cause the landing pad to be the first successor!
      Instead of this brittle logic, actually look through the successors for
      a non-landing-pad accessor, and to assert if more than one is found.
      
      This will hopefully fix some (if not all) of the self host miscompiles
      with block placement. Thanks to Benjamin Kramer for reporting, Nick
      Lewycky for an initial stab at a reduction, and Duncan for endless
      advice on EH (which I know nothing about) as well as reviewing the
      actual fix.
      
      llvm-svn: 145062
      ee54feb6
  15. Oct 14, 2011
  16. Jun 28, 2011
  17. Jun 17, 2011
  18. Jun 16, 2011
  19. May 29, 2011
    • Jakob Stoklund Olesen's avatar
      Fix PR10046 by updating LiveVariables kill info when splitting live ranges. · dd6fcc4e
      Jakob Stoklund Olesen authored
      This only affects targets like Mips where branch instructions may kill virtual
      registers. Most other targets branch on flag values, so virtual registers are
      not involved.
      
      The problem is that MachineBasicBlock::updateTerminator deletes branches and
      inserts new ones while LiveVariables keeps a list of pointers to instructions
      that kill virtual registers. That list wasn't properly updated in
      MBB::SplitCriticalEdge.
      
      llvm-svn: 132298
      dd6fcc4e
  20. Apr 18, 2011
  21. Feb 04, 2011
    • Jakob Stoklund Olesen's avatar
      Add LiveIntervals::getLastSplitPoint(). · 096bd883
      Jakob Stoklund Olesen authored
      A live range cannot be split everywhere in a basic block. A split must go before
      the first terminator, and if the variable is live into a landing pad, the split
      must happen before the call that can throw.
      
      llvm-svn: 124894
      096bd883
  22. Jan 14, 2011
  23. Jan 13, 2011
  24. Jan 09, 2011
  25. Nov 02, 2010
    • Jakob Stoklund Olesen's avatar
      Don't try to split weird critical edges that really aren't: · ea263191
      Jakob Stoklund Olesen authored
      BB#1: derived from LLVM BB %bb.nph28
          Live Ins: %AL
          Predecessors according to CFG: BB#0
      	TEST8rr %reg16384<kill>, %reg16384, %EFLAGS<imp-def>; GR8:%reg16384
      	JNE_4 <BB#2>, %EFLAGS<imp-use,kill>
      	JMP_4 <BB#2>
          Successors according to CFG: BB#2 BB#2
      
      These double CFG edges only ever occur in bugpoint-generated code, so there is
      no need to attempt something clever.
      
      llvm-svn: 117992
      ea263191
  26. Oct 30, 2010
  27. Oct 26, 2010
  28. Aug 20, 2010
  29. Aug 17, 2010
Loading