Skip to content
  1. 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
  2. Aug 22, 2012
  3. Jul 27, 2012
  4. Feb 08, 2012
    • Andrew Trick's avatar
      Codegen pass definition cleanup. No functionality. · 1fa5bcbe
      Andrew Trick authored
      Moving toward a uniform style of pass definition to allow easier target configuration.
      Globally declare Pass ID.
      Globally declare pass initializer.
      Use INITIALIZE_PASS consistently.
      Add a call to the initializer from CodeGen.cpp.
      Remove redundant "createPass" functions and "getPassName" methods.
      
      While cleaning up declarations, cleaned up comments (sorry for large diff).
      
      llvm-svn: 150100
      1fa5bcbe
  5. 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
  6. Oct 10, 2011
    • Jakob Stoklund Olesen's avatar
      Give targets a chance to expand even standard pseudos. · add0c43e
      Jakob Stoklund Olesen authored
      Allow targets to expand COPY and other standard pseudo-instructions
      before they are expanded with copyPhysReg().
      
      This allows the target to examine the COPY instruction for extra
      operands indicating it can be widened to a preferable super-register
      copy.  See the ARM -widen-vmovs option.
      
      llvm-svn: 141578
      add0c43e
  7. Sep 25, 2011
    • Jakob Stoklund Olesen's avatar
      Add target hook for pseudo instruction expansion. · df977fed
      Jakob Stoklund Olesen authored
      Many targets use pseudo instructions to help register allocation.  Like
      the COPY instruction, these pseudos can be expanded after register
      allocation.  The early expansion can make life easier for PEI and the
      post-ra scheduler.
      
      This patch adds a hook that is called for all remaining pseudo
      instructions from the ExpandPostRAPseudos pass.
      
      llvm-svn: 140472
      df977fed
    • Jakob Stoklund Olesen's avatar
      Clean up code after renaming LowerSubregs -> ExpandPostRAPseudos. · fd719d18
      Jakob Stoklund Olesen authored
      No functional change intended.
      
      llvm-svn: 140470
      fd719d18
    • Jakob Stoklund Olesen's avatar
      Rename LowerSubregs to ExpandPostRAPseudos. · f152df1e
      Jakob Stoklund Olesen authored
      I'll fix the file contents in the next commit.
      
      This pass is currently expanding the COPY and SUBREG_TO_REG pseudos. I
      am going to add a hook so targets can expand more pseudo-instructions
      after register allocation.
      
      Many targets have pseudo-instructions that assist the register
      allocator.  They can be expanded after register allocation, before PEI
      and PostRA scheduling.
      
      llvm-svn: 140469
      f152df1e
  8. Feb 25, 2011
  9. Aug 16, 2010
  10. Aug 06, 2010
  11. Jul 08, 2010
  12. Jul 07, 2010
  13. Jul 03, 2010
  14. Jun 29, 2010
  15. Jun 23, 2010
  16. May 06, 2010
  17. Feb 09, 2010
  18. Jan 05, 2010
    • David Greene's avatar
      · c4878b13
      David Greene authored
      Change errs() to dbgs().
      
      llvm-svn: 92535
      c4878b13
  19. Dec 03, 2009
  20. Oct 25, 2009
  21. Oct 24, 2009
  22. Sep 28, 2009
  23. Sep 22, 2009
    • Evan Cheng's avatar
      Minor bug fix. LowerSubregs should translate · 8c500100
      Evan Cheng authored
      %S0<def> = EXTRACT_SUBREG %Q0<kill>, 1
      to
      %S0<def> = IMPLICIT_DEF %Q0<imp-use,kill>
      
      Implicit_def does not *read* any register so the operand should be marked "implicit". The missing "implicit" marker on the operand is wrong, but it doesn't actually break anything.
      
      llvm-svn: 82503
      8c500100
  24. Aug 22, 2009
  25. Aug 08, 2009
    • Jakob Stoklund Olesen's avatar
      Remove RegisterScavenger::isSuperRegUsed(). This completely reverses the mistaken commit r77904. · 8e96c6ab
      Jakob Stoklund Olesen authored
      Now there is no special treatment of instructions that redefine part of a
      super-register. Instead, the super-register is marked with <imp-use,kill> and
      <imp-def>. For instance, from LowerSubregs on ARM:
      
      subreg: CONVERTING: %Q1<def> = INSERT_SUBREG %Q1<undef>, %D1<kill>, 5
      subreg: %D2<def> = FCPYD %D1<kill>, 14, %reg0, %Q1<imp-def>
      
      subreg: CONVERTING: %Q1<def> = INSERT_SUBREG %Q1, %D0<kill>, 6
      subreg: %D3<def> = FCPYD %D0<kill>, 14, %reg0, %Q1<imp-use,kill>, %Q1<imp-def>
      llvm-svn: 78466
      8e96c6ab
  26. Aug 05, 2009
  27. Aug 04, 2009
    • Jakob Stoklund Olesen's avatar
      LowerSubregsInstructionPass::LowerExtract should not extend the live range of registers. · 6304369c
      Jakob Stoklund Olesen authored
      When LowerExtract eliminates an EXTRACT_SUBREG with a kill flag, it moves the
      kill flag to the place where the sub-register is killed. This can accidentally
      overlap with the use of a sibling sub-register, and we have trouble.
      
      In the test case we have this code:
      
      Live Ins: %R0 %R1 %R2
      	%R2L<def> = EXTRACT_SUBREG %R2<kill>, 1
      	%R2H<def> = LOAD16fi <fi#-1>, 0, Mem:LD(2,4) [FixedStack-1 + 0]
      	%R1L<def> = EXTRACT_SUBREG %R1<kill>, 1
      	%R0L<def> = EXTRACT_SUBREG %R0<kill>, 1
      	%R0H<def> = ADD16 %R2H<kill>, %R2L<kill>, %AZ<imp-def>, %AN<imp-def>, %AC0<imp-def>, %V<imp-def>, %VS<imp-def>
      
      subreg: CONVERTING: %R2L<def> = EXTRACT_SUBREG %R2<kill>, 1
      subreg: eliminated!
      subreg: killed here: %R0H<def> = ADD16 %R2H, %R2L, %R2<imp-use,kill>, %AZ<imp-def>, %AN<imp-def>, %AC0<imp-def>, %V<imp-def>, %VS<imp-def>
      
      The kill flag on %R2 is moved to the last instruction, and the live range overlaps with the definition of %R2H:
      
      *** Bad machine code: Redefining a live physical register ***
      - function:    f
      - basic block:  0x18358c0 (#0)
      - instruction: %R2H<def> = LOAD16fi <fi#-1>, 0, Mem:LD(2,4) [FixedStack-1 + 0]
      Register R2H was defined but already live.
      
      The fix is to replace EXTRACT_SUBREG with IMPLICIT_DEF instead of eliminating
      it completely:
      
      subreg: CONVERTING: %R2L<def> = EXTRACT_SUBREG %R2<kill>, 1
      subreg: replace by: %R2L<def> = IMPLICIT_DEF %R2<kill>
      
      Note that these IMPLICIT_DEF instructions survive to the asm output. It is
      necessary to fix the stack-color-with-reg test case because of that.
      
      llvm-svn: 78093
      6304369c
Loading