Skip to content
  1. May 19, 2013
  2. May 18, 2013
    • Hal Finkel's avatar
      Check InlineAsm clobbers in PPCCTRLoops · 2f474f0e
      Hal Finkel authored
      We don't need to reject all inline asm as using the counter register (most does
      not). Only those that explicitly clobber the counter register need to prevent
      the transformation.
      
      llvm-svn: 182191
      2f474f0e
    • Tim Northover's avatar
      AArch64: add CMake dependency to fix very parallel builds · fd2639f7
      Tim Northover authored
      llvm-svn: 182190
      fd2639f7
    • David Majnemer's avatar
      X86: Bad peephole interaction between adc, MOV32r0 · 5ba473af
      David Majnemer authored
      The peephole tries to reorder MOV32r0 instructions such that they are
      before the instruction that modifies EFLAGS.
      
      The problem is that the peephole does not consider the case where the
      instruction that modifies EFLAGS also depends on the previous state of
      EFLAGS.
      
      Instead, walk backwards until we find an instruction that has a def for
      EFLAGS but does not have a use.
      If we find such an instruction, insert the MOV32r0 before it.
      If it cannot find such an instruction, skip the optimization.
      
      llvm-svn: 182184
      5ba473af
    • Matt Arsenault's avatar
      Add LLVMContext argument to getSetCCResultType · 75865923
      Matt Arsenault authored
      llvm-svn: 182180
      75865923
    • JF Bastien's avatar
      Support unaligned load/store on more ARM targets · 97b08c40
      JF Bastien authored
      This patch matches GCC behavior: the code used to only allow unaligned
      load/store on ARM for v6+ Darwin, it will now allow unaligned load/store
      for v6+ Darwin as well as for v7+ on Linux and NaCl.
      
      The distinction is made because v6 doesn't guarantee support (but LLVM
      assumes that Apple controls hardware+kernel and therefore have
      conformant v6 CPUs), whereas v7 does provide this guarantee (and
      Linux/NaCl behave sanely).
      
      The patch keeps the -arm-strict-align command line option, and adds
      -arm-no-strict-align. They behave similarly to GCC's -mstrict-align and
      -mnostrict-align.
      
      I originally encountered this discrepancy in FastIsel tests which expect
      unaligned load/store generation. Overall this should slightly improve
      performance in most cases because of reduced I$ pressure.
      
      llvm-svn: 182175
      97b08c40
    • Rafael Espindola's avatar
      Fix the build in c++11 mode. · 5986ce0e
      Rafael Espindola authored
      The errors were:
      
      non-constant-expression cannot be narrowed from type 'int64_t' (aka 'long') to 'uint32_t' (aka 'unsigned int') in initializer list
      
      and
      
      non-constant-expression cannot be narrowed from type 'long' to 'uint32_t' (aka 'unsigned int') in initializer list
      
      llvm-svn: 182168
      5986ce0e
  3. May 17, 2013
  4. May 16, 2013
    • Akira Hatanaka's avatar
      [mips] Improve instruction selection for pattern (store (fp_to_sint $src), $ptr). · 252f54f7
      Akira Hatanaka authored
      Previously, three instructions were needed:
      
      trunc.w.s $f0, $f2
      mfc1 $4, $f0
      sw $4, 0($2)
      
      Now we need only two:
      
      trunc.w.s $f0, $f2
      swc1 $f0, 0($2)
      
      llvm-svn: 182053
      252f54f7
    • Rafael Espindola's avatar
      Remove addFrameMove. · b08d2c2d
      Rafael Espindola authored
      Now that we have good testing, remove addFrameMove and create cfi
      instructions directly.
      
      llvm-svn: 182052
      b08d2c2d
    • Akira Hatanaka's avatar
      [mips] Factor out unaligned store lowering code. · d82ee940
      Akira Hatanaka authored
      llvm-svn: 182050
      d82ee940
    • Jack Carter's avatar
      Mips assembler: Add TwoOperandConstraint definitions · 03f0fd37
      Jack Carter authored
      This patch removes alias definition for addiu $rs,$imm 
      and instead uses the TwoOperandAliasConstraint field in 
      the ArithLogicI instruction class. 
      
      This way all instructions that inherit ArithLogicI class 
      have the same macro defined. 
      
      The usage examples are added to test files.
      
      Patch by Vladimir Medic
      
      llvm-svn: 182048
      03f0fd37
    • Jack Carter's avatar
      Mips td file formatting: white space and long lines · 59817110
      Jack Carter authored
      llvm-svn: 182047
      59817110
    • Hal Finkel's avatar
      Create an new preheader in PPCCTRLoops to avoid counter register clobbers · 5f587c59
      Hal Finkel authored
      Some IR-level instructions (such as FP <-> i64 conversions) are not chained
      w.r.t. the mtctr intrinsic and yet may become function calls that clobber the
      counter register. At the selection-DAG level, these might be reordered with the
      mtctr intrinsic causing miscompiles. To avoid this situation, if an existing
      preheader has instructions that might use the counter register, create a new
      preheader for the mtctr intrinsic. This extra block will be remerged with the
      old preheader at the MI level, but will prevent unwanted reordering at the
      selection-DAG level.
      
      llvm-svn: 182045
      5f587c59
    • Akira Hatanaka's avatar
      [mips] Test case for r182042. Add comment. · fce4dd79
      Akira Hatanaka authored
      llvm-svn: 182044
      fce4dd79
    • Akira Hatanaka's avatar
      [mips] Fix instruction selection pattern for sint_to_fp node to avoid emitting an · 39d40f7b
      Akira Hatanaka authored
      invalid instruction sequence.
      
      Rather than emitting an int-to-FP move instruction and an int-to-FP conversion
      instruction during instruction selection, we emit a pseudo instruction which gets
      expanded post-RA. Without this change, register allocation can possibly insert a
      floating point register move instruction between the two instructions, which is not
      valid according to the ISA manual.
      
      mtc1 $f4, $4         # int-to-fp move instruction.
      mov.s $f2, $f4       # move contents of $f4 to $f2.
      cvt.s.w $f0, $f2     # int-to-fp conversion.
      
      llvm-svn: 182042
      39d40f7b
    • Jack Carter's avatar
      Mips assembler: Add branch macro definitions · 51785c47
      Jack Carter authored
      This patch adds bnez and beqz instructions which represent alias definitions for bne and beq instructions as follows:
      bnez $rs,$imm => bne $rs,$zero,$imm
      beqz $rs,$imm => beq $rs,$zero,$imm
      
      The corresponding test cases are added.
      
      Patch by Vladimir Medic
      
      llvm-svn: 182040
      51785c47
    • Akira Hatanaka's avatar
      [mips] Fix indentation. · 21bab5ba
      Akira Hatanaka authored
      llvm-svn: 182036
      21bab5ba
    • Akira Hatanaka's avatar
      [mips] Delete unused enum value. · 7b6e4f13
      Akira Hatanaka authored
      llvm-svn: 182035
      7b6e4f13
    • Ulrich Weigand's avatar
      · 9d980cbd
      Ulrich Weigand authored
      [PowerPC] Use true offset value in "memrix" machine operands
      
      This is the second part of the change to always return "true"
      offset values from getPreIndexedAddressParts, tackling the
      case of "memrix" type operands.
      
      This is about instructions like LD/STD that only have a 14-bit
      field to encode immediate offsets, which are implicitly extended
      by two zero bits by the machine, so that in effect we can access
      16-bit offsets as long as they are a multiple of 4.
      
      The PowerPC back end currently handles such instructions by
      carrying the 14-bit value (as it will get encoded into the
      actual machine instructions) in the machine operand fields
      for such instructions.  This means that those values are
      in fact not the true offset, but rather the offset divided
      by 4 (and then truncated to an unsigned 14-bit value).
      
      Like in the case fixed in r182012, this makes common code
      operations on such offset values not work as expected.
      Furthermore, there doesn't really appear to be any strong
      reason why we should encode machine operands this way.
      
      This patch therefore changes the encoding of "memrix" type
      machine operands to simply contain the "true" offset value
      as a signed immediate value, while enforcing the rules that
      it must fit in a 16-bit signed value and must also be a
      multiple of 4.
      
      This change must be made simultaneously in all places that
      access machine operands of this type.  However, just about
      all those changes make the code simpler; in many cases we
      can now just share the same code for memri and memrix
      operands.
      
      llvm-svn: 182032
      9d980cbd
Loading