Skip to content
  1. Oct 16, 2013
    • Rafael Espindola's avatar
      Add a MCAsmInfoELF class and factor some code into it. · 43c4e24f
      Rafael Espindola authored
      We had a MCAsmInfoCOFF, but no common class for all the ELF MCAsmInfos before.
      
      llvm-svn: 192760
      43c4e24f
    • Rafael Espindola's avatar
      Move .ident handling to MCStreamer. · 5645bade
      Rafael Espindola authored
      No functionality change, but exposes the API so that codegen can use it too.
      
      Patch by Katya Romanova.
      
      llvm-svn: 192757
      5645bade
    • Andrew Trick's avatar
      Enable MI Sched for x86. · e97d8d6d
      Andrew Trick authored
      This changes the SelectionDAG scheduling preference to source
      order. Soon, the SelectionDAG scheduler can be bypassed saving
      a nice chunk of compile time.
      
      Performance differences that result from this change are often a
      consequence of register coalescing. The register coalescer is far from
      perfect. Bugs can be filed for deficiencies.
      
      On x86 SandyBridge/Haswell, the source order schedule is often
      preserved, particularly for small blocks.
      
      Register pressure is generally improved over the SD scheduler's ILP
      mode. However, we are still able to handle large blocks that require
      latency hiding, unlike the SD scheduler's BURR mode. MI scheduler also
      attempts to discover the critical path in single-block loops and
      adjust heuristics accordingly.
      
      The MI scheduler relies on the new machine model. This is currently
      unimplemented for AVX, so we may not be generating the best code yet.
      
      Unit tests are updated so they don't depend on SD scheduling heuristics.
      
      llvm-svn: 192750
      e97d8d6d
  2. Oct 15, 2013
    • Michael Liao's avatar
      Fix PR17546 · ad71659d
      Michael Liao authored
      - Type of index used in extract_vector_elt or insert_vector_elt supposes
        to be TLI.getVectorIdxTy() which is pointer type on most targets. It'd
        better to truncate (or zero-extend in case it's changed later) it to
        mask element type to guarantee they are matching instead of asserting
        that.
      
      llvm-svn: 192722
      ad71659d
    • Michael Liao's avatar
      Fix PR16807 · 8ba06821
      Michael Liao authored
      - Lower signed division by constant powers-of-2 to target-independent
        DAG operators instead of target-dependent ones to support them better
        on targets where vector types are legal but shift operators on that
        types are illegal. E.g., on AVX, PSRAW is only available on <8 x i16>
        though <16 x i16> is a legal type.
      
      llvm-svn: 192721
      8ba06821
    • Craig Topper's avatar
      Remove x86_sse42_crc32_64_8 intrinsic. It has no functional difference from... · ef9e993e
      Craig Topper authored
      Remove x86_sse42_crc32_64_8 intrinsic. It has no functional difference from x86_sse42_crc32_32_8 and was not mapped to a clang builtin. I'm not even sure why this form of the instruction is even called out explicitly in the docs. Also add AutoUpgrade support to convert it into the other intrinsic with appropriate trunc and zext.
      
      llvm-svn: 192672
      ef9e993e
    • Quentin Colombet's avatar
      [X86][FastISel] During X86 fastisel, the address of indirect call was resolved · 778dba1d
      Quentin Colombet authored
      through bitcast, ptrtoint, and inttoptr instructions. This is valid
      only if the related instructions are in that same basic block, otherwise
      we may reference variables that were not live accross basic blocks
      resulting in undefined virtual registers.
      
      The bug was exposed when both SDISel and FastISel were used within the same
      function, i.e., one basic block is issued with FastISel and another with SDISel,
      as demonstrated with the testcase.
      
      <rdar://problem/15192473>
      
      llvm-svn: 192636
      778dba1d
    • Andrew Trick's avatar
      Fix the ExecutionDepsFix pass to handle AVX instructions. · b6d56be6
      Andrew Trick authored
      This pass is needed to break false dependencies. Without it, unlucky
      register assignment can result in wild (5x) swings in
      performance. This pass was trying to handle AVX but not getting it
      right. AVX doesn't have partial register defs, it has unused register
      reads in which the high bits of a source operand are copied into the
      unused bits of the dest.
      
      Fixing this requires conservative liveness analysis. This is awkard
      because the pass already has its own pseudo-liveness. However, proper
      liveness is expensive, and we would like to use a generic utility to
      compute it. The fix only invokes liveness on-demand. It is rare to
      detect a case that needs undef-read dependence breaking, but when it
      happens, it can be needed many times within a very large block.
      
      I think the existing heuristic which uses a register window of 16 is
      too conservative for loop-carried false dependencies. If the loop is a
      reduction. The out-of-order engine may be able to execute several loop
      iterations in parallel. However, I'll leave this tuning exercise for
      next time.
      
      llvm-svn: 192635
      b6d56be6
    • Andrew Trick's avatar
      whitespace · 8460a3bf
      Andrew Trick authored
      llvm-svn: 192633
      8460a3bf
  3. Oct 14, 2013
  4. Oct 12, 2013
  5. Oct 10, 2013
  6. Oct 09, 2013
  7. Oct 08, 2013
    • Rafael Espindola's avatar
      Add a MCTargetStreamer interface. · a17151ad
      Rafael Espindola authored
      This patch fixes an old FIXME by creating a MCTargetStreamer interface
      and moving the target specific functions for ARM, Mips and PPC to it.
      
      The ARM streamer is still declared in a common place because it is
      used from lib/CodeGen/ARMException.cpp, but the Mips and PPC are
      completely hidden in the corresponding Target directories.
      
      I will send an email to llvmdev with instructions on how to use this.
      
      llvm-svn: 192181
      a17151ad
    • Craig Topper's avatar
      Remove unneeded MMX instruction definition by moving pattern to an equivalent... · a984729f
      Craig Topper authored
      Remove unneeded MMX instruction definition by moving pattern to an equivalent instruction definition and removing the filtering from the disassembler table building.
      
      llvm-svn: 192175
      a984729f
    • Craig Topper's avatar
      Remove some instructions that existed to provide aliases to the assembler. Can... · 72c8cd7b
      Craig Topper authored
      Remove some instructions that existed to provide aliases to the assembler. Can be done with InstAlias instead. Unfortunately, this was causing printer to use 'vmovq' or 'vmovd' based on what was parsed. To cleanup the inconsistencies convert all 'vmovd' with 64-bit registers to 'vmovq', but provide an alias so that 'vmovd' will still parse.
      
      llvm-svn: 192171
      72c8cd7b
  8. Oct 07, 2013
  9. Oct 06, 2013
Loading