Skip to content
  1. Feb 18, 2012
  2. Feb 17, 2012
  3. Feb 16, 2012
    • Jakob Stoklund Olesen's avatar
      Remove the YMM_HI_6_15 hack. · bc6ba479
      Jakob Stoklund Olesen authored
      Call clobbers are now represented with register mask operands.  The
      regmask can easily represent the fact that xmm6 is call-preserved while
      ymm6 isn't.  This is automatically computed by TableGen from the
      CalleeSavedRegs containing xmm6.
      
      llvm-svn: 150709
      bc6ba479
    • Jakob Stoklund Olesen's avatar
      Use the same CALL instructions for Windows as for everything else. · 97e3115d
      Jakob Stoklund Olesen authored
      The different calling conventions and call-preserved registers are
      represented with regmask operands that are added dynamically.
      
      llvm-svn: 150708
      97e3115d
    • Jakob Stoklund Olesen's avatar
      Enable register mask operands for x86 calls. · 8a450cb2
      Jakob Stoklund Olesen authored
      Call instructions no longer have a list of 43 call-clobbered registers.
      Instead, they get a single register mask operand with a bit vector of
      call-preserved registers.
      
      This saves a lot of memory, 42 x 32 bytes = 1344 bytes per call
      instruction, and it speeds up building call instructions because those
      43 imp-def operands no longer need to be added to use-def lists. (And
      removed and shifted and re-added for every explicit call operand).
      
      Passes like LiveVariables, LiveIntervals, RAGreedy, PEI, and
      BranchFolding are significantly faster because they can deal with call
      clobbers in bulk.
      
      Overall, clang -O2 is between 0% and 8% faster, uniformly distributed
      depending on call density in the compiled code.  Debug builds using
      clang -O0 are 0% - 3% faster.
      
      I have verified that this patch doesn't change the assembly generated
      for the LLVM nightly test suite when building with -disable-copyprop
      and -disable-branch-fold.
      
      Branch folding behaves slightly differently in a few cases because call
      instructions have different hash values now.
      
      Copy propagation flushes its data structures when it crosses a register
      mask operand. This causes it to leave a few dead copies behind, on the
      order of 20 instruction across the entire nightly test suite, including
      SPEC. Fixing this properly would require the pass to use different data
      structures.
      
      llvm-svn: 150638
      8a450cb2
  4. Feb 15, 2012
  5. Feb 14, 2012
  6. Feb 13, 2012
  7. Feb 12, 2012
  8. Feb 11, 2012
  9. Feb 09, 2012
  10. Feb 08, 2012
    • Elena Demikhovsky's avatar
      Fixed a bug in printing "cmp" pseudo ops. · 1adc1d53
      Elena Demikhovsky authored
      > This IR code
      > %res = call <8 x float> @llvm.x86.avx.cmp.ps.256(<8 x float> %a0, <8 x float> %a1, i8 14)
      > fails with assertion:
      >
      > llc: X86ATTInstPrinter.cpp:62: void llvm::X86ATTInstPrinter::printSSECC(const llvm::MCInst*, unsigned int, llvm::raw_ostream&): Assertion `0 && "Invalid ssecc argument!"' failed.
      > 0  llc             0x0000000001355803
      > 1  llc             0x0000000001355dc9
      > 2  libpthread.so.0 0x00007f79a30575d0
      > 3  libc.so.6       0x00007f79a23a1945 gsignal + 53
      > 4  libc.so.6       0x00007f79a23a2f21 abort + 385
      > 5  libc.so.6       0x00007f79a239a810 __assert_fail + 240
      > 6  llc             0x00000000011858d5 llvm::X86ATTInstPrinter::printSSECC(llvm::MCInst const*, unsigned int, llvm::raw_ostream&) + 119
      
      I added the full testing for all possible pseudo-ops of cmp.
      I extended X86AsmPrinter.cpp and X86IntelInstPrinter.cpp.
      
      You'l also see lines alignments (unrelated to this fix) in X86IselLowering.cpp from my previous check-in.
      
      llvm-svn: 150068
      1adc1d53
    • Craig Topper's avatar
      Remove a couple unneeded intrinsic patterns · 172b9243
      Craig Topper authored
      llvm-svn: 150067
      172b9243
    • Craig Topper's avatar
      Remove GCC builtins for vpermilp* intrinsics as clang no longer needs them.... · 5405571f
      Craig Topper authored
      Remove GCC builtins for vpermilp* intrinsics as clang no longer needs them. Custom lower the intrinsics to the vpermilp target specific node and remove intrinsic patterns.
      
      llvm-svn: 150060
      5405571f
  11. Feb 07, 2012
  12. Feb 06, 2012
  13. Feb 05, 2012
Loading