Skip to content
  1. Jan 27, 2011
    • Andrew Trick's avatar
      VirtRegRewriter fix: update kill flags, which are used by the scavenger. · 13bb644f
      Andrew Trick authored
      rdar://problem/8893967: JM/lencod miscompile at -arch armv7 -mthumb -O3
      
      Added ResurrectKill to remove kill flags after we decide to reused a
      physical register. And (hopefully) ensure that we call it in all the
      right places.
      
      Sorry, I'm not checking in a unit test given that it's a miscompile I
      can't reproduce easily with a toy example. Failures in the rewriter
      depend on a series of heuristic decisions maked during one of the many
      upstream phases in codegen. This case would require coercing regalloc
      to generate a couple of rematerialzations in a way that causes the
      scavenger to reuse the same register at just the wrong point.
      
      The general way to test this is to implement kill flags
      verification. Then we could have a simple, robust compile-only unit
      test. That would be worth doing if the whole pass was not about to
      disappear. At this point we focus verification work on the next
      generation of regalloc.
      
      llvm-svn: 124442
      13bb644f
  2. Jan 12, 2011
  3. Jan 08, 2011
    • Evan Cheng's avatar
      Do not model all INLINEASM instructions as having unmodelled side effects. · 6eb516db
      Evan Cheng authored
      Instead encode llvm IR level property "HasSideEffects" in an operand (shared
      with IsAlignStack). Added MachineInstrs::hasUnmodeledSideEffects() to check
      the operand when the instruction is an INLINEASM.
      
      This allows memory instructions to be moved around INLINEASM instructions.
      
      llvm-svn: 123044
      6eb516db
  4. Jan 07, 2011
  5. Nov 06, 2010
  6. Oct 11, 2010
  7. Oct 09, 2010
  8. Sep 08, 2010
    • Jakob Stoklund Olesen's avatar
      Don't add <imp-def> operands during register rewriting. · 4d19d265
      Jakob Stoklund Olesen authored
      LiveIntervals already adds <imp-def> operands for super-registers when a subreg
      def defines the whole register. Thus, it is not necessary to do it again when
      rewriting.
      
      In fact, the super-register imp-defs caused miscompilations because the late
      scheduler couldn't see that the super-register was read.
      
      We still add super-reg <imp-use,kill> operands when rewriting virtuals to
      physicals.
      
      llvm-svn: 113299
      4d19d265
  9. Sep 03, 2010
  10. Aug 05, 2010
  11. Jul 27, 2010
  12. Jul 16, 2010
  13. Jul 12, 2010
  14. Jul 11, 2010
  15. Jul 09, 2010
  16. Jul 08, 2010
  17. Jun 25, 2010
  18. Jun 03, 2010
    • Jakob Stoklund Olesen's avatar
      Slightly change the meaning of the reMaterialize target hook when the original · a8ad9774
      Jakob Stoklund Olesen authored
      instruction defines subregisters.
      
      Any existing subreg indices on the original instruction are preserved or
      composed with the new subreg index.
      
      Also substitute multiple operands mentioning the original register by using the
      new MachineInstr::substituteRegister() function. This is necessary because there
      will soon be <imp-def> operands added to non read-modify-write partial
      definitions. This instruction:
      
        %reg1234:foo = FLAP %reg1234<imp-def>
      
      will reMaterialize(%reg3333, bar) like this:
      
        %reg3333:bar-foo = FLAP %reg333:bar<imp-def>
      
      Finally, replace the TargetRegisterInfo pointer argument with a reference to
      indicate that it cannot be NULL.
      
      llvm-svn: 105358
      a8ad9774
  19. May 21, 2010
    • Jakob Stoklund Olesen's avatar
      Teach VirtRegRewriter to handle spilling in instructions that have multiple · a648c6a7
      Jakob Stoklund Olesen authored
      definitions of the virtual register.
      
      This happens when spilling the registers produced by REG_SEQUENCE:
      
      %reg1047:5<def>, %reg1047:6<def>, %reg1047:7<def> = VLD3d8 %reg1033, 0, pred:14, pred:%reg0
      
      The rewriter would spill the register multiple times, dead store elimination
      tried to keep up, but ended up cutting the branch it was sitting on.
      
      llvm-svn: 104321
      a648c6a7
  20. May 11, 2010
  21. May 06, 2010
  22. Apr 29, 2010
  23. Apr 07, 2010
  24. Apr 06, 2010
  25. Mar 30, 2010
  26. Mar 26, 2010
  27. Mar 12, 2010
  28. Mar 11, 2010
  29. Feb 18, 2010
  30. Feb 13, 2010
    • Jakob Stoklund Olesen's avatar
      Fix PR6283. · b659c76c
      Jakob Stoklund Olesen authored
      When coalescing with a physreg, remember to add imp-def and imp-kill when
      dealing with sub-registers.
      
      Also fix a related bug in VirtRegRewriter where substitutePhysReg may
      reallocate the operand list on an instruction and invalidate the reg_iterator.
      This can happen when a register is mentioned twice on the same instruction.
      
      llvm-svn: 96072
      b659c76c
  31. Feb 10, 2010
  32. Feb 09, 2010
Loading