Skip to content
  1. Jul 04, 2013
  2. Jul 03, 2013
    • Quentin Colombet's avatar
      [ARM] Improve the instruction selection of vector loads. · 04b3a0fd
      Quentin Colombet authored
      In the ARM back-end, build_vector nodes are lowered to a target specific
      build_vector that uses floating point type. 
      This works well, unless the inserted bitcasts survive until instruction
      selection. In that case, they incur moves between integer unit and floating
      point unit that may result in inefficient code.
      
      In other words, this conversion may introduce artificial dependencies when the
      code leading to the build vector cannot be completed with a floating point type.
      
      In particular, this happens when loads are not aligned.
      
      Before this patch, in that case, the compiler generates general purpose loads
      and creates the floating point vector from them, instead of directly using the
      vector unit.
      
      The patch uses a vector friendly sequence of code when the inserted bitcasts to
      floating point survived DAGCombine.
      
      This is done by a target specific DAGCombine that changes the target specific
      build_vector into a sequence of insert_vector_elt that get rid of the bitcasts.
      
      <rdar://problem/14170854>
      
      llvm-svn: 185587
      04b3a0fd
    • Eric Christopher's avatar
      Elaborate on comment. · 270a12cf
      Eric Christopher authored
      llvm-svn: 185586
      270a12cf
    • Eric Christopher's avatar
      Add names to the header file since they help in documenting the API · dd7b4615
      Eric Christopher authored
      (and for consistency).
      
      llvm-svn: 185585
      dd7b4615
    • Bill Schmidt's avatar
      [PowerPC] FreeBSD does not require f128 in its data layout string. · 541758da
      Bill Schmidt authored
      Long double is 64 bits on FreeBSD PPC, so the f128 entry is superfluous.
      
      llvm-svn: 185583
      541758da
    • Tilmann Scheller's avatar
      ARM: Prevent ARMAsmParser::shouldOmitCCOutOperand() from misidentifying... · ef5666fb
      Tilmann Scheller authored
      ARM: Prevent ARMAsmParser::shouldOmitCCOutOperand() from misidentifying certain Thumb2 add immediate T3 encodings.
      
      Before the fix Thumb2 instructions of type "add rD, rN, #imm" (T3 encoding, see ARM ARM A8.8.4) with rD and rN both being low registers (r0-r7) were classified as having the T4 encoding.
      
      The T4 encoding doesn't have a cc_out operand so for above instructions the operand gets erroneously removed, corrupting the token stream and leading to parse errors later in the process.
      
      This bug prevented "add r1, r7, #0xcbcbcbcb" from being assembled correctly.
      
      Fixes <rdar://problem/14224440>.
      
      llvm-svn: 185575
      ef5666fb
    • Eric Christopher's avatar
      Move typedefs inside the class that they belong to. · 18cf0610
      Eric Christopher authored
      llvm-svn: 185573
      18cf0610
    • Chad Rosier's avatar
      Use an RWMutex instead of a Mutex in PassRegistry. · 673a7db2
      Chad Rosier authored
      Patch by Alex Crichton <alex@crichton.co>.  Approved by Chris Lattner.
      
      llvm-svn: 185566
      673a7db2
    • Ulrich Weigand's avatar
      · 2542b3b1
      Ulrich Weigand authored
      [PowerPC] Support lmw/stmw in the asm parser
      
      This adds support for the load/store multiple instructions,
      currently used by the asm parser only.
      
      llvm-svn: 185564
      2542b3b1
    • Ulrich Weigand's avatar
      · 49f487e6
      Ulrich Weigand authored
      [PowerPC] Use mtocrf when available
      
      Just as with mfocrf, it is also preferable to use mtocrf instead of
      mtcrf when only a single CR register is to be written.
      
      Current code however always emits mtcrf.  This probably does not matter
      when using an external assembler, since the GNU assembler will in fact
      automatically replace mtcrf with mtocrf when possible.  It does create
      inefficient code with the integrated assembler, however.
      
      To fix this, this patch adds MTOCRF/MTOCRF8 instruction patterns and
      uses those instead of MTCRF/MTCRF8 everything.  Just as done in the
      MFOCRF patch committed as 185556, these patterns will be converted
      back to MTCRF if MTOCRF is not available on the machine.
      
      As a side effect, this allows to modify the MTCRF pattern to accept
      the full range of mask operands for the benefit of the asm parser.
      
      llvm-svn: 185561
      49f487e6
    • Ulrich Weigand's avatar
      · d5ebc626
      Ulrich Weigand authored
      [PowerPC] Always use mfocrf if available
      
      When accessing just a single CR register, it is always preferable to
      use mfocrf instead of mfcr, if the former is available on the CPU.
      
      Current code makes that distinction in many, but not all places
      where a single CR register value is retrieved.  One missing
      location is PPCRegisterInfo::lowerCRSpilling.
      
      To fix this and make this simpler in the future, this patch changes
      the bulk of the back-end to always assume mfocrf is available and
      simply generate it when needed.
      
      On machines that actually do not support mfocrf, the instruction
      is replaced by mfcr at the very end, in EmitInstruction.
      
      This has the additional benefit that we no longer need the
      MFCRpseud hack, since before EmitInstruction we always have
      a MFOCRF instruction pattern, which already models data flow
      as required.
      
      The patch also adds the MFOCRF8 version of the instruction,
      which was missing so far.
      
      Except for the PPCRegisterInfo::lowerCRSpilling case, no change
      in generated code intended.
      
      llvm-svn: 185556
      d5ebc626
Loading