Skip to content
  1. Jul 22, 2015
    • Chandler Carruth's avatar
      [PM/AA] Remove the last of the legacy update API from AliasAnalysis as · a1032a0f
      Chandler Carruth authored
      part of simplifying its interface and usage in preparation for porting
      to work with the new pass manager.
      
      Note that this will likely expose that we have dead arguments, members,
      and maybe even pass requirements for AA. I'll be cleaning those up in
      seperate patches. This just zaps the actual update API.
      
      Differential Revision: http://reviews.llvm.org/D11325
      
      llvm-svn: 242881
      a1032a0f
    • Chandler Carruth's avatar
      [PM/AA] Switch to an early-exit. NFC. This was split out of another · d86a4f5e
      Chandler Carruth authored
      change because the diff is *useless*. I assure you, I just switched to
      early-return in this function.
      
      Cleanup in preparation for my next commit, as requested in code review!
      
      llvm-svn: 242880
      d86a4f5e
    • Chandler Carruth's avatar
      [PM/AA] Put the 'final' keyword in the correct place. And actually · 1ffd12e3
      Chandler Carruth authored
      succeed at compiling my change before committing it too!
      
      llvm-svn: 242879
      1ffd12e3
    • Chandler Carruth's avatar
      [PM/AA] Replace the only use of the AliasAnalysis::deleteValue API (in · da7c1919
      Chandler Carruth authored
      GlobalsModRef) with CallbackVHs that trigger the same behavior.
      
      This is technically more expensive, but in benchmarking some LTO runs,
      it seems unlikely to even be above the noise floor. The only way I was
      able to measure the performance of GMR at all was to run nothing else
      but this one analysis on a linked clang bitcode file. The call graph
      analysis still took 5x more time than GMR, and this change at most made
      GMR 2% slower (this is well within the noise, so its hard for me to be
      sure that this is an actual change). However, in a real LTO run over the
      same bitcode, the GMR run takes so little time that the pass timers
      don't measure it.
      
      With this, I can remove the last update API from the AliasAnalysis
      interface, but I'll actually remove the interface hook point in
      a follow-up commit.
      
      Differential Revision: http://reviews.llvm.org/D11324
      
      llvm-svn: 242878
      da7c1919
    • Elena Demikhovsky's avatar
      AVX-512: Added intrinsics for VCVT* instructions. · a26f10ce
      Elena Demikhovsky authored
      All SKX forms. All VCVT instructions for float/double/int/long types.
      
      Differential Revision: http://reviews.llvm.org/D11343
      
      llvm-svn: 242877
      a26f10ce
    • Chen Li's avatar
      [LoopUnswitch] Code refactoring to separate trivial loop unswitch and... · c0f3a158
      Chen Li authored
      [LoopUnswitch] Code refactoring to separate trivial loop unswitch and non-trivial loop unswitch in processCurrentLoop()
      
      Summary: The current code in LoopUnswtich::processCurrentLoop() mixes trivial loop unswitch and non-trivial loop unswitch together. It goes over all basic blocks in the loop and checks if a condition is trivial or non-trivial unswitch condition. However, trivial unswitch condition can only occur in the loop header basic block (where it controls whether or not the loop does something at all). This refactoring separate trivial loop unswitch and non-trivial loop unswitch. Before going over all basic blocks in the loop, it checks if the loop header contains a trivial unswitch condition. If so, unswitch it. Otherwise, go over all blocks like before but don't check trivial condition any more since they are not possible to be in the other blocks. This code has no functionality change.
      
      Reviewers: meheff, reames, broune
      
      Subscribers: llvm-commits
      
      Differential Revision: http://reviews.llvm.org/D11276
      
      llvm-svn: 242873
      c0f3a158
    • Jingyue Wu's avatar
      [BranchFolding] do not iterate the aliases of virtual registers · 20d73c6c
      Jingyue Wu authored
      Summary:
      MCRegAliasIterator only works for physical registers. So, do not run it
      on virtual registers.
      
      With this issue fixed, we can resurrect the BranchFolding pass in NVPTX
      backend.
      
      Reviewers: jholewinski, bkramer
      
      Subscribers: henryhu, meheff, llvm-commits, jholewinski
      
      Differential Revision: http://reviews.llvm.org/D11174
      
      llvm-svn: 242871
      20d73c6c
    • Chandler Carruth's avatar
      [SROA] Fix a nasty pile of bugs to do with big-endian, different alloca · ccffdaf7
      Chandler Carruth authored
      types and loads, loads or stores widened past the size of an alloca,
      etc.
      
      This started off with a bug report about big-endian behavior with
      bitfields and loads and stores to a { i32, i24 } struct. An initial
      attempt to fix this was sent for review in D10357, but that didn't
      really get to the root of the problem.
      
      The core issue was that canConvertValue and convertValue in SROA were
      handling different bitwidth integers by doing a zext of the integer. It
      wouldn't do a trunc though, only a zext! This would in turn lead SROA to
      form an i24 load from an i24 alloca, zext it to i32, and then use it.
      This would at least produce the wrong value for big-endian systems.
      
      One of my many false starts here was to correct the computation for
      big-endian systems by shifting. But this doesn't actually work because
      the original code has a 64-bit store to the entire 8 bytes, and a 32-bit
      load of the last 4 bytes, and because the alloc size is 8 bytes, we
      can't lose that last (least significant if bigendian) byte! The real
      problem here is that we're forming an i24 load in SROA which is actually
      not sufficiently wide to load all of the necessary bits here. The source
      has an i32 load, and SROA needs to form that as well.
      
      The straightforward way to do this is to disable the zext logic in
      canConvertValue and convertValue, forcing us to actually load all
      32-bits. This seems like a really good change, but it in turn breaks
      several other parts of SROA.
      
      First in the chain of knock-on failures, we had places where we were
      doing integer-widening promotion even though some of the integer loads
      or stores extended *past the end* of the alloca's memory! There was even
      a comment about preventing this, but it only prevented the case where
      the type had a different bit size from its store size. So I added checks
      to handle the cases where we actually have a widened load or store and
      to avoid trying to special integer widening promotion in those cases.
      
      Second, we actually rely on the ability to promote in the face of loads
      past the end of an alloca! This is important so that we can (for
      example) speculate loads around PHI nodes to do more promotion. The bits
      loaded are garbage, but as long as they aren't used and the alignment is
      suitable high (which it wasn't in the test case!) this is "fine". And we
      can't stop promoting here, lots of things stop working well if we do. So
      we need to add specific logic to handle the extension (and truncation)
      case, but *only* where that extension or truncation are over bytes that
      *are outside the alloca's allocated storage* and thus totally bogus to
      load or store.
      
      And of course, once we add back this correct handling of extension or
      truncation, we need to correctly handle bigendian systems to avoid
      re-introducing the exact bug that started us off on this chain of misery
      in the first place, but this time even more subtle as it only happens
      along speculated loads atop a PHI node.
      
      I've ported an existing test for PHI speculation to the big-endian test
      file and checked that we get that part correct, and I've added several
      more interesting big-endian test cases that should help check that we're
      getting this correct.
      
      Fun times.
      
      llvm-svn: 242869
      ccffdaf7
    • Richard Smith's avatar
      SetVector: add reverse_iterator support. · c519c9b8
      Richard Smith authored
      llvm-svn: 242865
      c519c9b8
    • Alexey Samsonov's avatar
      4800c2de
    • Alexey Samsonov's avatar
      [Fuzzer] Clearly separate regular and DFSan tests. NFC. · dc324e16
      Alexey Samsonov authored
      llvm-svn: 242850
      dc324e16
    • Frederic Riss's avatar
      [dsymutil] Implement ODR uniquing for C++ code. · 1c65094d
      Frederic Riss authored
      This optimization allows the DWARF linker to reuse definition of
      types it has emitted in previous CUs rather than reemitting them
      in each CU that references them. The size and link time gains are
      huge. For example when linking the DWARF for a debug build of
      clang, this generates a ~150M dwarf file instead of a ~700M one
      (the numbers date back a bit and must not be totally accurate
      these days).
      
      As with all the other parts of the llvm-dsymutil codebase, the
      goal is to keep bit-for-bit compatibility with dsymutil-classic.
      The code is littered with a lot of FIXMEs that should be
      addressed once we can get rid of the compatibilty goal.
      
      llvm-svn: 242847
      1c65094d
    • Alex Lorenz's avatar
      MIR Serialization: Start serializing the CFI operands with .cfi_def_cfa_offset. · f4baeb51
      Alex Lorenz authored
      This commit begins serialization of the CFI index machine operands by
      serializing one kind of CFI instruction - the .cfi_def_cfa_offset instruction.
      
      Reviewers: Duncan P. N. Exon Smith
      llvm-svn: 242845
      f4baeb51
  2. Jul 21, 2015
Loading