Skip to content
  1. Jul 07, 2011
    • Devang Patel's avatar
      If known DebugLocs do not match then two DBG_VALUE machine instructions are... · bf8cc60d
      Devang Patel authored
      If known DebugLocs do not match then two DBG_VALUE machine instructions are not identical. For example,
      
              DBG_VALUE 3.310000e+02, 0, !"ds"; dbg:sse.stepfft.c:138:18 @[ sse.stepfft.c:32:10 ]
              DBG_VALUE 3.310000e+02, 0, !"ds"; dbg:sse.stepfft.c:138:18 @[ sse.stepfft.c:31:10 ]
      
      These two MIs represent identical value, 3.31...,  for one variable, ds, but they are not identical because the represent two separate instances of inlined variable "ds". 
      
      llvm-svn: 134620
      bf8cc60d
  2. Jul 02, 2011
  3. Jun 28, 2011
  4. Jun 27, 2011
    • Jakob Stoklund Olesen's avatar
      Distinguish early clobber output operands from clobbered registers. · 537a302d
      Jakob Stoklund Olesen authored
      Both become <earlyclobber> defs on the INLINEASM MachineInstr, but we
      now use two different asm operand kinds.
      
      The new Kind_Clobber is treated identically to the old
      Kind_RegDefEarlyClobber for now, but x87 floating point stack inline
      assembly does care about the difference.
      
      This will pop a register off the stack:
      
        asm("fstp %st" : : "t"(x) : "st");
      
      While this will pop the input and push an output:
      
        asm("fst %st" : "=&t"(r) : "t"(x));
      
      We need to know if ST0 was a clobber or an output operand, and we can't
      depend on <dead> flags for that.
      
      llvm-svn: 133902
      537a302d
    • Jakob Stoklund Olesen's avatar
      Decode and pretty print inline asm operand descriptors. · 6b356b18
      Jakob Stoklund Olesen authored
      The INLINEASM MachineInstrs have an immediate operand describing each
      original inline asm operand. Decode the bits in MachineInstr::print() so
      it is easier to read:
      
        INLINEASM <es:rorq $1,$0>, $0:[regdef], %vreg0<def>, %vreg1<def>, $1:[imm], 1, $2:[reguse] [tiedto:$0], %vreg2, %vreg3, $3:[regdef-ec], %EFLAGS<earlyclobber,imp-def>
      
      llvm-svn: 133901
      6b356b18
  5. Jun 24, 2011
  6. May 12, 2011
  7. May 08, 2011
    • Jakob Stoklund Olesen's avatar
      Remove an assertion to fix PR9872. · 89bd2ae5
      Jakob Stoklund Olesen authored
      It can happen that a live debug variable is the last use of a sub-register, and
      the register allocator will pick a larger register class for the virtual
      register.  If the allocated register doesn't support the sub-register index,
      just use %noreg for the debug variables instead of asserting.
      
      In PR9872, a debug variable ends up in the sub_8bit_hi part of a GR32_ABCD
      register. The register is split and one part is inflated to GR32 and assigned
      %ESI because there are no more normal uses of sub_8bit_hi.
      
      Since %ESI doesn't have that sub-register, substPhysReg asserted. Now it will
      simply insert a %noreg instead, and the debug variable will be marked
      unavailable in that range.
      
      We don't currently have a way of saying: !"value" is in bits 8-15 of %ESI, I
      don't know if DWARF even supports that.
      
      llvm-svn: 131073
      89bd2ae5
  8. Apr 30, 2011
  9. Apr 05, 2011
  10. Mar 05, 2011
  11. Jan 10, 2011
  12. Jan 09, 2011
  13. 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
  14. Jan 07, 2011
  15. Oct 22, 2010
  16. Oct 20, 2010
  17. Oct 19, 2010
    • Jakob Stoklund Olesen's avatar
      Shrink MachineOperand from 40 to 32 bytes on 64-bit hosts. · a4941690
      Jakob Stoklund Olesen authored
      Pull an unsigned out of the Contents union such that it has the same size as two
      pointers and no padding.
      
      Arrange members such that the Contents union and all pointers can be 8-byte
      aligned without padding.
      
      This speeds up code generation by 0.8% on a 64-bit host. 32-bit hosts should be
      unaffected.
      
      llvm-svn: 116857
      a4941690
  18. Sep 21, 2010
  19. Aug 02, 2010
  20. Jul 28, 2010
  21. Jul 05, 2010
  22. Jul 02, 2010
    • Dale Johannesen's avatar
      Propagate the AlignStack bit in InlineAsm's to the · 4d887f7c
      Dale Johannesen authored
      PrologEpilog code, and use it to determine whether
      the asm forces stack alignment or not.  gcc consistently
      does not do this for GCC-style asms; Apple gcc inconsistently
      sometimes does it for asm blocks.  There is no
      convenient place to put a bit in either the SDNode or
      the MachineInstr form, so I've added an extra operand
      to each; unlovely, but it does allow for expansion for
      more bits, should we need it.  PR 5125.  Some
      existing testcases are affected.
      The operand lists of the SDNode and MachineInstr forms
      are indexed with awesome mnemonics, like "2"; I may
      fix this someday, but not now.  I'm not making it any
      worse.  If anyone is inspired I think you can find all
      the right places from this patch.
      
      llvm-svn: 107506
      4d887f7c
  23. Jun 29, 2010
  24. Jun 19, 2010
  25. 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
  26. Jun 02, 2010
  27. May 28, 2010
  28. May 25, 2010
  29. May 21, 2010
Loading