Skip to content
  1. 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
  2. Aug 05, 2009
  3. 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
  4. Aug 03, 2009
    • Jakob Stoklund Olesen's avatar
      Fix Bug 4657: register scavenger asserts with subreg lowering · 5d8ace09
      Jakob Stoklund Olesen authored
      When LowerSubregsInstructionPass::LowerInsert eliminates an INSERT_SUBREG
      instriction because it is an identity copy, make sure that the same registers
      are alive before and after the elimination.
      
      When the super-register is marked <undef> this requires inserting an
      IMPLICIT_DEF instruction to make sure the super register is live.
      
      Fix a related bug where a kill flag on the inserted sub-register was not transferred properly.
      
      Finally, clear the undef flag in MachineInstr::addRegisterKilled. Undef implies dead and kill implies live, so they cant both be valid.
      
      llvm-svn: 77989
      5d8ace09
  5. Aug 01, 2009
  6. Jul 25, 2009
    • Daniel Dunbar's avatar
      More migration to raw_ostream, the water has dried up around the iostream hole. · 0dd5e1ed
      Daniel Dunbar authored
       - Some clients which used DOUT have moved to DEBUG. We are deprecating the
         "magic" DOUT behavior which avoided calling printing functions when the
         statement was disabled. In addition to being unnecessary magic, it had the
         downside of leaving code in -Asserts builds, and of hiding potentially
         unnecessary computations.
      
      llvm-svn: 77019
      0dd5e1ed
  7. Jul 16, 2009
  8. Mar 23, 2009
    • Evan Cheng's avatar
      Do not fold away subreg_to_reg if the source register has a sub-register... · 47c9750f
      Evan Cheng authored
      Do not fold away subreg_to_reg if the source register has a sub-register index. That means the source register is taking a sub-register of a larger register. e.g. On x86
      %RAX<def> = ...
      %RAX<def> = SUBREG_TO_REG 0, %EAX:3<kill>, 3
      The first def is defining RAX, not EAX so the top bits were not zero-extended.
      
      llvm-svn: 67511
      47c9750f
  9. Dec 18, 2008
  10. Nov 21, 2008
  11. Oct 03, 2008
  12. Sep 25, 2008
  13. Sep 23, 2008
  14. Sep 22, 2008
  15. Sep 04, 2008
  16. Aug 20, 2008
  17. Aug 07, 2008
    • Dan Gohman's avatar
      Re-enable elimination of unnecessary SUBREG_TO_REG instructions in · 527ca7e2
      Dan Gohman authored
      LowerSubregs, and fix an x86-64 isel bug that this exposed.
      
      SUBREG_TO_REG for x86-64 implicit zero extension is only safe for
      isel to generate when the source is known to always have zeros in
      the high 32 bits. The EXTRACT_SUBREG instruction does not clear
      the high 32 bits.
      
      llvm-svn: 54444
      527ca7e2
  18. Jul 18, 2008
  19. Jun 17, 2008
  20. Jun 04, 2008
  21. Mar 16, 2008
  22. Mar 13, 2008
    • Christopher Lamb's avatar
      Get rid of a pseudo instruction and replace it with subreg based operation on... · dd55d3f1
      Christopher Lamb authored
      Get rid of a pseudo instruction and replace it with subreg based operation on real instructions, ridding the asm printers of the hack used to do this previously. In the process, update LowerSubregs to be careful about eliminating copies that have side affects. 
      
      Note: the coalescer will have to be careful about this too, when it starts coalescing insert_subreg nodes.
      llvm-svn: 48329
      dd55d3f1
  23. Mar 11, 2008
  24. Mar 10, 2008
  25. Feb 10, 2008
  26. Dec 31, 2007
  27. Dec 29, 2007
  28. Oct 23, 2007
  29. Sep 26, 2007
Loading