Skip to content
  1. May 23, 2013
  2. Feb 05, 2013
  3. Jan 28, 2013
    • Bill Schmidt's avatar
      This patch addresses bug 15031. · 2e4ae4e1
      Bill Schmidt authored
      The common code in the post-RA scheduler to break anti-dependencies on the
      critical path contained a flaw.  In the reported case, an anti-dependency
      between the overlapping registers %X4 and %R4 exists:
      
      	%X29<def> = OR8 %X4, %X4
      	%R4<def>, %X3<def,dead,tied3> = LBZU 1, %X3<kill,tied1>
      
      The unpatched code breaks the dependency by replacing %R4 and its uses
      with %R3, the first register on the available list.  However, %R3 and
      %X3 overlap, so this creates two overlapping definitions on the same
      instruction.
      
      The fix is straightforward, preventing selection of a register that
      overlaps any other defined register on the same instruction.
      
      The test case is reduced from the bug report, and verifies that we no
      longer produce "lbzu 3, 1(3)" when breaking this anti-dependency.
      
      llvm-svn: 173706
      2e4ae4e1
  4. Dec 03, 2012
    • Chandler Carruth's avatar
      Use the new script to sort the includes of every file under lib. · ed0881b2
      Chandler Carruth authored
      Sooooo many of these had incorrect or strange main module includes.
      I have manually inspected all of these, and fixed the main module
      include to be the nearest plausible thing I could find. If you own or
      care about any of these source files, I encourage you to take some time
      and check that these edits were sensible. I can't have broken anything
      (I strictly added headers, and reordered them, never removed), but they
      may not be the headers you'd really like to identify as containing the
      API being implemented.
      
      Many forward declarations and missing includes were added to a header
      files to allow them to parse cleanly when included first. The main
      module rule does in fact have its merits. =]
      
      llvm-svn: 169131
      ed0881b2
  5. Nov 29, 2012
  6. Oct 16, 2012
  7. Jun 02, 2012
  8. Jun 01, 2012
  9. May 08, 2012
    • Jakob Stoklund Olesen's avatar
      Add an MF argument to TRI::getPointerRegClass() and TII::getRegClass(). · 3c52f028
      Jakob Stoklund Olesen authored
      The getPointerRegClass() hook can return register classes that depend on
      the calling convention of the current function (ptr_rc_tailcall).
      
      So far, we have been able to infer the calling convention from the
      subtarget alone, but as we add support for multiple calling conventions
      per target, that no longer works.
      
      Patch by Yiannis Tsiouris!
      
      llvm-svn: 156328
      3c52f028
  10. Mar 17, 2012
  11. Mar 16, 2012
  12. Mar 05, 2012
  13. Mar 04, 2012
  14. Feb 23, 2012
  15. Feb 22, 2012
    • Andrew Trick's avatar
      Initialize SUnits before DAG building. · 46cc9a4a
      Andrew Trick authored
      Affect on SD scheduling and postRA scheduling:
      Printing the DAG will display the nodes in top-down topological order.
      This matches the order within the MBB and makes my life much easier in general.
      
      Affect on misched:
      We don't need to track virtual register uses at all. This is awesome.
      I also intend to rely on the SUnit ID as a topo-sort index. So if A < B then we cannot have an edge B -> A.
      
      llvm-svn: 151135
      46cc9a4a
  16. Jan 07, 2012
    • Evan Cheng's avatar
      Added a late machine instruction copy propagation pass. This catches · 00b1a3cd
      Evan Cheng authored
      opportunities that only present themselves after late optimizations
      such as tail duplication .e.g.
      ## BB#1:
              movl    %eax, %ecx
              movl    %ecx, %eax
              ret
      
      The register allocator also leaves some of them around (due to false
      dep between copies from phi-elimination, etc.)
      
      This required some changes in codegen passes. Post-ra scheduler and the
      pseudo-instruction expansion passes have been moved after branch folding
      and tail merging. They were before branch folding before because it did
      not always update block livein's. That's fixed now. The pass change makes
      independently since we want to properly schedule instructions after
      branch folding / tail duplication.
      
      rdar://10428165
      rdar://10640363
      
      llvm-svn: 147716
      00b1a3cd
  17. 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
  18. Jun 27, 2011
  19. Jun 16, 2011
  20. Jun 02, 2011
  21. Feb 08, 2011
  22. Feb 05, 2011
    • Andrew Trick's avatar
      Fix an anti-dep breaker corner case. · f8415714
      Andrew Trick authored
      <rdar://problem/8959122> illegal register operands for UMULL instruction in cfrac nightly test
      I'm stil working on a unit test, but the case is:
      rx = movcc rx, r3
      r2 = ldr
      r2, r3 = umull r2, r2
      
      The anti-dep breaker should not convert this into an illegal instruction:
      r2, r2 = umull
      
      llvm-svn: 124932
      f8415714
  23. Nov 02, 2010
  24. Oct 02, 2010
    • Bob Wilson's avatar
      Fix a miscompile in 186.crafty for Thumb2 that was exposed by Evan's · c57c220d
      Bob Wilson authored
      scheduling change in svn 115121.  The CriticalAntiDepBreaker had bad
      liveness information.  It was calculating the KillIndices for one scheduling
      region in a basic block, rescheduling that region so the KillIndices were
      no longer valid, and then using those wrong KillIndices to make decisions
      for the next scheduling region.  I've not been able to reduce a small
      testcase for this.  Radar 8502534.
      
      llvm-svn: 115400
      c57c220d
  25. Sep 11, 2010
  26. Sep 02, 2010
  27. Jul 27, 2010
  28. Jul 15, 2010
  29. Jun 16, 2010
  30. Jun 02, 2010
  31. May 14, 2010
  32. Apr 20, 2010
  33. Mar 05, 2010
  34. Jan 06, 2010
Loading