Skip to content
  1. Jan 13, 2015
    • Erik Eckstein's avatar
      Revert "SLPVectorizer: Cache results from memory alias checking." · a168ef75
      Erik Eckstein authored
      The alias cache has a problem of incorrect collisions in case a new instruction is allocated at the same address as a previously deleted instruction.
      
      llvm-svn: 225790
      a168ef75
    • Andrey Churbanov's avatar
      Return the architecture by probing predefined compiler macros · 17cce42f
      Andrey Churbanov authored
      llvm-svn: 225789
      17cce42f
    • Aaron Ballman's avatar
      8bd98977
    • Peter Zotov's avatar
      [OCaml] Allow out-of-tree builds of LLVM bindings. · 343991dd
      Peter Zotov authored
      In order to use this feature, configure LLVM as usual,
      but then build and install it as:
      
         make all install SYSTEM_LLVM_CONFIG=llvm-config
      
      where llvm-config is the llvm-config binary installed on your
      system (possibly llvm-config-VERSION on e.g. Debian).
      
      llvm-svn: 225787
      343991dd
    • Erik Eckstein's avatar
      SLPVectorizer: Cache results from memory alias checking. · 4a445c04
      Erik Eckstein authored
      This speeds up the dependency calculations for blocks with many load/store/call instructions.
      Beside the improved runtime, there is no functional change.
      
      llvm-svn: 225786
      4a445c04
    • Chandler Carruth's avatar
      [PM] In the PassManager template, remove a pointless indirection through · 0550e11f
      Chandler Carruth authored
      a nested class template for the PassModel, and use the T-suffix for the
      two typedefs to match the code in the AnalysisManager.
      
      This is the last of the fairly fundamental code cleanups here. Will be
      focusing on the printing of analyses next to finish that aspect off.
      
      llvm-svn: 225785
      0550e11f
    • Chandler Carruth's avatar
      [PM] Remove the 'AnalysisManagerT' type parameter from numerous layers · 3e498400
      Chandler Carruth authored
      of templates in the new pass manager.
      
      The analysis manager is now itself just a template predicated on the IR
      unit. This makes lots of the templates really trivial and more clear:
      they are all parameterized on a single type, the IR unit's type.
      Everything else is a function of that. To me, this is a really nice
      cleanup of the APIs and removes a layer of 'magic' and 'indirection'
      that really wasn't there and just got in the way of understanding what
      is going on here.
      
      llvm-svn: 225784
      3e498400
    • Chandler Carruth's avatar
      [PM] Refactor the new pass manager to use a single template to implement · 816702ff
      Chandler Carruth authored
      the generic functionality of the pass managers themselves.
      
      In the new infrastructure, the pass "manager" isn't actually interesting
      at all. It just pipelines a single chunk of IR through N passes. We
      don't need to know anything about the IR or the passes to do this really
      and we can replace the 3 implementations of the exact same functionality
      with a single generic PassManager template, complementing the single
      generic AnalysisManager template.
      
      I've left typedefs in place to give convenient names to the various
      obvious instantiations of the template.
      
      With this, I think I've nuked almost all of the redundant logic in the
      managers, and I think the overall design is actually simpler for having
      single templates that clearly indicate there is no special logic here.
      The logging is made somewhat more annoying by this change, but I don't
      think the difference is worth having heavy-weight traits to help log
      things.
      
      llvm-svn: 225783
      816702ff
    • Daniel Sanders's avatar
      [mips] Fix va_arg() for pointer types on big-endian N32. · cdcb580d
      Daniel Sanders authored
      Summary:
      The Mips ABI's treat pointers in the same way as integers. They are
      sign-extended to 32-bit for O32, and 64-bit for N32/N64. This doesn't matter
      for O32 and N64 where pointers are already the correct width but it does matter
      for big-endian N32, where pointers are 32-bit and need promoting.
      
      The caller side is already passing pointers correctly. This patch corrects the
      callee.
      
      Reviewers: vmedic, atanasyan
      
      Reviewed By: atanasyan
      
      Subscribers: cfe-commits
      
      Differential Revision: http://reviews.llvm.org/D6812
      
      llvm-svn: 225782
      cdcb580d
    • David Majnemer's avatar
      Revert "Sema: An extern declaration can't be a redeclaration of a parameter" · cdf8a71d
      David Majnemer authored
      This reverts commit r225780, we can't compile line 181 in
      sanitizer_platform_limits_posix.cc with this commit.
      
      llvm-svn: 225781
      cdf8a71d
    • David Majnemer's avatar
      Sema: An extern declaration can't be a redeclaration of a parameter · c3691827
      David Majnemer authored
      In the following:
      void f(int x) { extern int x; }
      
      The second declaration of 'x' shouldn't be considered a redeclaration of
      the parameter.
      
      llvm-svn: 225780
      c3691827
    • Peter Zotov's avatar
      Update release notes wrt OCaml bindings. · d1136297
      Peter Zotov authored
      llvm-svn: 225779
      d1136297
    • Peter Zotov's avatar
      [OCaml] Use $CAMLORIGIN, an rpath-$ORIGIN-like mechanism in OCaml. · 1f00ac93
      Peter Zotov authored
      As a result, installations of LLVM in non-standard locations
      will not require passing custom -ccopt -L flags when building
      the binary, nor absolute paths would be embedded in the cma/cmxa
      files. Additionally, the executables will not require changes
      to LD_LIBRARY_PATH, although CAML_LD_LIBRARY_PATH still
      has to be set for ocamlc without -custom.
      
      See http://caml.inria.fr/mantis/view.php?id=6642.
      Note that the patch is approved, but not merged yet.
      It will be released in 4.03 and likely 4.02.
      
      llvm-svn: 225778
      1f00ac93
    • Manuel Klimek's avatar
      Update clang-format.el to use xml output and patch in the returned chunks. · 1ba46c66
      Manuel Klimek authored
      This leads to better undo behavior and avoids window content jumping
      around.
      
      Patch by Johann Klähn.
      
      llvm-svn: 225777
      1ba46c66
    • David Majnemer's avatar
      Parse: Switch to using EOF tokens for late parsed attributes · d5946f51
      David Majnemer authored
      The EOF token injection technique is preferable to using
      isBeforeInTranslationUnit to determine whether or not additional cleanup
      is needed.  I don't have an example off-hand that requires it but it is
      nicer nonetheless.
      
      llvm-svn: 225776
      d5946f51
    • NAKAMURA Takumi's avatar
      IR/MetadataTest.cpp: Appease msc17 to avoid initializer list. · 2f8f0547
      NAKAMURA Takumi authored
      llvm-svn: 225775
      2f8f0547
    • David Majnemer's avatar
      Parse: Don't crash when default argument in typedef consists of sole '=' · b3c6d52d
      David Majnemer authored
      We'd crash trying to make the SourceRange for the tokens we'd like to
      highlight.  Don't assume there is more than one token makes up the
      default argument.
      
      llvm-svn: 225774
      b3c6d52d
    • Jason Molenda's avatar
      Enhance the eh_frame unwind instruction augmenter so that · 26cc634d
      Jason Molenda authored
      it will do the right thing on x86 routines with a mid-function
      epilogue sequence (where the unwind rules need to be reinstalled
      after the epilogue has completed).
      <rdar://problem/19417410> 
      
      llvm-svn: 225773
      26cc634d
    • Mehdi Amini's avatar
      Peephole opt needs optimizeSelect() to keep track of newly created MIs · 22e59748
      Mehdi Amini authored
      Peephole optimizer is scanning a basic block forward. At some point it 
      needs to answer the question "given a pointer to an MI in the current 
      BB, is it located before or after the current instruction".
      To perform this, it keeps a set of the MIs already seen during the scan, 
      if a MI is not in the set, it is assumed to be after.
      It means that newly created MIs have to be inserted in the set as well.
      
      This commit passes the set as an argument to the target-dependent 
      optimizeSelect() so that it can properly update the set with the 
      (potentially) newly created MIs.
      
      llvm-svn: 225772
      22e59748
    • Jason Molenda's avatar
      Add an additional check to UnwindAssembly_x86::AugmentUnwindPlanFromCallSite · 91805e6f
      Jason Molenda authored
      which will verify if the eh_frame instructions include details about
      the prologue or not.  Both clang and gcc include prologue instructions
      but there's no requirement for them to do so -- and I'm sure we'll
      have to interoperate with a compiler that doesn't generate prologue
      info at some point.
      
      I don't have any compilers that omit the prologue instructions so the
      testing was of the "makre sure augmented unwind info is still created".
      With an eh_frame without prologue, this code should reject the 
      augmentation scheme altogether and we should fall back to using assembly
      instruction profiling.
      
      llvm-svn: 225771
      91805e6f
    • Jason Molenda's avatar
      Change the x86 assembly instruction unwind parser to · 34549b8f
      Jason Molenda authored
      step through the complete function looking for any epilogue
      instructions.  If we find an epilogue sequence, re-instate
      the correct unwind instructions if there is more code past
      that epilogue -- this will correctly handle an x86 function
      with multiple epilogues in it.
      
      NB there is still a bug with the "eh_frame augmented" 
      UnwindPlans and mid-function epilogues.  Looking at that next.
      
      <rdar://problem/18863406> 
      
      llvm-svn: 225770
      34549b8f
    • Rui Ueyama's avatar
      Remove dead code. · d5bb5c2b
      Rui Ueyama authored
      Now every InputElement has exactly one File in it, so "expand"
      method is now no-op.
      
      llvm-svn: 225769
      d5bb5c2b
    • David Majnemer's avatar
      Parse: Don't crash if missing an initializer expression · 906ed278
      David Majnemer authored
      llvm-svn: 225768
      906ed278
    • Rui Ueyama's avatar
      Remove InputGraph::registerObserver. · 64e3dedf
      Rui Ueyama authored
      PECOFF was the only user of the API, and the reason why we created
      the API is because, although the driver creates a list of input files,
      it has no knowledge on what files are being created. It was because
      everything was hidden behind the InputGraph abstraction.
      
      Now the driver knows what that's doing. We no longer need this
      indirection to get the file list being processed.
      
      llvm-svn: 225767
      64e3dedf
    • Rui Ueyama's avatar
      Remove InputGraph::dump(). · d2838c49
      Rui Ueyama authored
      This is dead code.
      
      llvm-svn: 225766
      d2838c49
    • David Majnemer's avatar
      Parse: use the EOF token method to lex inline method bodies · a7ea1b14
      David Majnemer authored
      Mark the end of the method body with an EOF token, collect it once we
      expect to be done with method body parsing.  No functionality change
      intended.
      
      llvm-svn: 225765
      a7ea1b14
    • Rui Ueyama's avatar
      Convert other drivers to use WrapperNode. · e8ecb2b1
      Rui Ueyama authored
      llvm-svn: 225764
      e8ecb2b1
    • David Majnemer's avatar
      Parse: Further simplify ParseLexedMethodDeclaration · 7cceba5d
      David Majnemer authored
      No functionality change intended, just moving code around to make it
      simpler.
      
      llvm-svn: 225763
      7cceba5d
    • Ramkumar Ramachandra's avatar
      fix {typo, build failure} in r225760 · 181233b2
      Ramkumar Ramachandra authored
      llvm-svn: 225762
      181233b2
    • Nico Weber's avatar
      Mark vtable used on explicit destructor definitions. · 8b51ae93
      Nico Weber authored
      There are two things in a C++ program that need to read the vtable pointer:
      Constructors and destructors.  (A few other operations -- virtual calls,
      dynamic cast, rtti -- read the vtable pointer off a this pointer, but for
      this they don't need the vtable symbol.)  Implicit constructors and destructors
      and explicit constructors already marked the vtable as used, but explicit
      destructors didn't.
      
      Note that the only thing sema's "mark a class's vtable used" does is to mark all 
      final overriders of the class as referenced, it does _not_ cause emission of
      the vtable itself.  This is done on demand by codegen, independent of sema,
      since sema might emit functions that are not referenced.  (The exception are
      vtables that are forced via key functions -- these are forced onto codegen
      by sema.)
      
      This bug went unnoticed for years because it doesn't have observable effects
      (yet -- I want to change this in PR20337, which is why I noticed this).
      
      r213109 made it so that _calls_ to constructors don't mark the vtable used.
      Currently, _calls_ to destructors still mark the vtable used.  If that
      wasn't the case, this program would tickle the problem:
      
        test.h:
          template <typename T>
          struct B {
            int* p;
            virtual ~B() { delete p; }
            virtual void f() {}
          };
      
          struct __attribute__((visibility("default"))) C {
            C();
            B<int> m;
          };
      
        test2.cc:
          #include "test.h"
          int main() {
            C* c = new C;
            delete c;
          }
      
        test3.cc:
          #include "test.h"
          C::C() {}
      
        # This bin/clang++ binary doesn't MarkVTableUsed() for virtual dtor calls:
        $ bin/clang++ -shared test3.cc -std=c++11 -O2  -fvisibility=hidden \
              -fvisibility-inlines-hidden  -o libtest3.dylib
        $ bin/clang++ test2.cc -std=c++11 -O2  -fvisibility=hidden \
              -fvisibility-inlines-hidden  libtest3.dylib 
        Undefined symbols for architecture x86_64:
          "B<int>::f()", referenced from:
              vtable for B<int> in test2-af8f4f.o
        ld: symbol(s) not found for architecture x86_64
      
      What's happening here is that there's a copy of B's vtable hidden in
      libtest3.dylib, because C's constructor caused an implicit instantiation of that
      (and implicit constructors generate vtables).
      test2.cc calls C's destructDr, which destroys the B<int> member,
      which wants to overwrite the vtable back to B (think of B as the base of a class
      hierarchy, and of hierarchical destruction -- maybe we shouldn't do the vtable
      writing in destructors of final classes), but there's nothing in test2.cc that
      marks B's vtable used.  So codegen writes out the vtable, but since it wasn't
      marked used, sema didn't mark all the virtual functions (in particular f())
      as used.
      
      Note that this change makes us reject programs we didn't reject before (see
      the included Sema test case), but both gcc and cl also reject this code, and
      clang used to reject it before r213109.
      
      llvm-svn: 225761
      8b51ae93
    • Ramkumar Ramachandra's avatar
      Standardize {pred,succ,use,user}_empty() · 40c3e03e
      Ramkumar Ramachandra authored
      The functions {pred,succ,use,user}_{begin,end} exist, but many users
      have to check *_begin() with *_end() by hand to determine if the
      BasicBlock or User is empty. Fix this with a standard *_empty(),
      demonstrating a few usecases.
      
      llvm-svn: 225760
      40c3e03e
    • Alexey Bataev's avatar
      [OPENMP] Consider global named register variables as threadprivate by default. · 26a3924a
      Alexey Bataev authored
      Register are thread-local by default, so we have to consider them as threadprivate.
      
      llvm-svn: 225759
      26a3924a
    • Saleem Abdulrasool's avatar
      ARM: prepare prefix parsing for improved AAELF support · faa4f074
      Saleem Abdulrasool authored
      AAELF specifies a number of ELF specific relocation types which have custom
      prefixes for the symbol reference.  Switch the parser to be more table driven
      with an idea of file formats for which they apply.  NFC.
      
      llvm-svn: 225758
      faa4f074
    • Chandler Carruth's avatar
      [PM] Fold all three analysis managers into a single AnalysisManager · 7ad6d620
      Chandler Carruth authored
      template.
      
      This consolidates three copies of nearly the same core logic. It adds
      "complexity" to the ModuleAnalysisManager in that it makes it possible
      to share a ModuleAnalysisManager across multiple modules... But it does
      so by deleting *all of the code*, so I'm OK with that. This will
      naturally make fixing bugs in this code much simpler, etc.
      
      The only down side here is that we have to use 'typename' and 'this->'
      in various places, and the implementation is lifted into the header.
      I'll take that for the code size reduction.
      
      The convenient names are still typedef-ed and used throughout so that
      users can largely ignore this aspect of the implementation.
      
      The follow-up change to this will do the exact same refactoring for the
      PassManagers. =D
      
      It turns out that the interesting different code is almost entirely in
      the adaptors. At the end, that should be essentially all that is left.
      
      llvm-svn: 225757
      7ad6d620
    • Richard Trieu's avatar
      Extend the self move warning to record types. · 36d0b2b4
      Richard Trieu authored
      Move the logic for checking self moves into SemaChecking and add that function
      to Sema since it is now used in multiple places.
      
      llvm-svn: 225756
      36d0b2b4
    • Richard Smith's avatar
      If we don't find a matching ) for a ( in an exception specification, keep the... · b1c217e4
      Richard Smith authored
      If we don't find a matching ) for a ( in an exception specification, keep the tokens around so we can diagnose an error rather than silently discarding them.
      
      llvm-svn: 225755
      b1c217e4
    • Richard Trieu's avatar
      5dc76a5d
    • Sanjay Patel's avatar
      fix typo; NFC · db8e6f47
      Sanjay Patel authored
      llvm-svn: 225753
      db8e6f47
    • Reid Kleckner's avatar
      Rename llvm.recoverframeallocation to llvm.framerecover · 3542ace6
      Reid Kleckner authored
      This name is less descriptive, but it sort of puts things in the
      'llvm.frame...' namespace, relating it to frameallocate and
      frameaddress. It also avoids using "allocate" and "allocation" together.
      
      llvm-svn: 225752
      3542ace6
    • Richard Smith's avatar
      PR22208: On FreeBSD systems, __STDC_MB_MIGHT_NEQ_WC__ is expected to be defined · 00a4a85d
      Richard Smith authored
      even though every basic source character literal has the same numerical value
      as a narrow or wide character literal.
      
      It appears that the FreeBSD folks are trying to use this macro to mean
      something other than what the relevant standards say it means, but their usage
      is conforming, so put up with it.
      
      llvm-svn: 225751
      00a4a85d
Loading