Skip to content
  1. Apr 25, 2014
  2. Apr 22, 2014
    • Chandler Carruth's avatar
      [Modules] Make Support/Debug.h modular. This requires it to not change · e96dd897
      Chandler Carruth authored
      behavior based on other files defining DEBUG_TYPE, which means it cannot
      define DEBUG_TYPE at all. This is actually better IMO as it forces folks
      to define relevant DEBUG_TYPEs for their files. However, it requires all
      files that currently use DEBUG(...) to define a DEBUG_TYPE if they don't
      already. I've updated all such files in LLVM and will do the same for
      other upstream projects.
      
      This still leaves one important change in how LLVM uses the DEBUG_TYPE
      macro going forward: we need to only define the macro *after* header
      files have been #include-ed. Previously, this wasn't possible because
      Debug.h required the macro to be pre-defined. This commit removes that.
      By defining DEBUG_TYPE after the includes two things are fixed:
      
      - Header files that need to provide a DEBUG_TYPE for some inline code
        can do so by defining the macro before their inline code and undef-ing
        it afterward so the macro does not escape.
      
      - We no longer have rampant ODR violations due to including headers with
        different DEBUG_TYPE definitions. This may be mostly an academic
        violation today, but with modules these types of violations are easy
        to check for and potentially very relevant.
      
      Where necessary to suppor headers with DEBUG_TYPE, I have moved the
      definitions below the includes in this commit. I plan to move the rest
      of the DEBUG_TYPE macros in LLVM in subsequent commits; this one is big
      enough.
      
      The comments in Debug.h, which were hilariously out of date already,
      have been updated to reflect the recommended practice going forward.
      
      llvm-svn: 206822
      e96dd897
  3. Mar 09, 2014
    • Chandler Carruth's avatar
      [C++11] Add range based accessors for the Use-Def chain of a Value. · cdf47884
      Chandler Carruth authored
      This requires a number of steps.
      1) Move value_use_iterator into the Value class as an implementation
         detail
      2) Change it to actually be a *Use* iterator rather than a *User*
         iterator.
      3) Add an adaptor which is a User iterator that always looks through the
         Use to the User.
      4) Wrap these in Value::use_iterator and Value::user_iterator typedefs.
      5) Add the range adaptors as Value::uses() and Value::users().
      6) Update *all* of the callers to correctly distinguish between whether
         they wanted a use_iterator (and to explicitly dig out the User when
         needed), or a user_iterator which makes the Use itself totally
         opaque.
      
      Because #6 requires churning essentially everything that walked the
      Use-Def chains, I went ahead and added all of the range adaptors and
      switched them to range-based loops where appropriate. Also because the
      renaming requires at least churning every line of code, it didn't make
      any sense to split these up into multiple commits -- all of which would
      touch all of the same lies of code.
      
      The result is still not quite optimal. The Value::use_iterator is a nice
      regular iterator, but Value::user_iterator is an iterator over User*s
      rather than over the User objects themselves. As a consequence, it fits
      a bit awkwardly into the range-based world and it has the weird
      extra-dereferencing 'operator->' that so many of our iterators have.
      I think this could be fixed by providing something which transforms
      a range of T&s into a range of T*s, but that *can* be separated into
      another patch, and it isn't yet 100% clear whether this is the right
      move.
      
      However, this change gets us most of the benefit and cleans up
      a substantial amount of code around Use and User. =]
      
      llvm-svn: 203364
      cdf47884
  4. Mar 02, 2014
  5. Jan 13, 2014
    • Chandler Carruth's avatar
      [cleanup] Move the Dominators.h and Verifier.h headers into the IR · 5ad5f15c
      Chandler Carruth authored
      directory. These passes are already defined in the IR library, and it
      doesn't make any sense to have the headers in Analysis.
      
      Long term, I think there is going to be a much better way to divide
      these matters. The dominators code should be fully separated into the
      abstract graph algorithm and have that put in Support where it becomes
      obvious that evn Clang's CFGBlock's can use it. Then the verifier can
      manually construct dominance information from the Support-driven
      interface while the Analysis library can provide a pass which both
      caches, reconstructs, and supports a nice update API.
      
      But those are very long term, and so I don't want to leave the really
      confusing structure until that day arrives.
      
      llvm-svn: 199082
      5ad5f15c
  6. Jan 07, 2014
  7. Sep 09, 2013
    • Bob Wilson's avatar
      Revert patches to add case-range support for PR1255. · e407736a
      Bob Wilson authored
      The work on this project was left in an unfinished and inconsistent state.
      Hopefully someone will eventually get a chance to implement this feature, but
      in the meantime, it is better to put things back the way the were.  I have
      left support in the bitcode reader to handle the case-range bitcode format,
      so that we do not lose bitcode compatibility with the llvm 3.3 release.
      
      This reverts the following commits: 155464, 156374, 156377, 156613, 156704,
      156757, 156804 156808, 156985, 157046, 157112, 157183, 157315, 157384, 157575,
      157576, 157586, 157612, 157810, 157814, 157815, 157880, 157881, 157882, 157884,
      157887, 157901, 158979, 157987, 157989, 158986, 158997, 159076, 159101, 159100,
      159200, 159201, 159207, 159527, 159532, 159540, 159583, 159618, 159658, 159659,
      159660, 159661, 159703, 159704, 160076, 167356, 172025, 186736
      
      llvm-svn: 190328
      e407736a
  8. Jul 04, 2013
  9. Feb 09, 2013
  10. Jan 02, 2013
    • Chandler Carruth's avatar
      Move all of the header files which are involved in modelling the LLVM IR · 9fb823bb
      Chandler Carruth authored
      into their new header subdirectory: include/llvm/IR. This matches the
      directory structure of lib, and begins to correct a long standing point
      of file layout clutter in LLVM.
      
      There are still more header files to move here, but I wanted to handle
      them in separate commits to make tracking what files make sense at each
      layer easier.
      
      The only really questionable files here are the target intrinsic
      tablegen files. But that's a battle I'd rather not fight today.
      
      I've updated both CMake and Makefile build systems (I think, and my
      tests think, but I may have missed something).
      
      I've also re-sorted the includes throughout the project. I'll be
      committing updates to Clang, DragonEgg, and Polly momentarily.
      
      llvm-svn: 171366
      9fb823bb
  11. Dec 03, 2012
    • Chandler Carruth's avatar
      Use the new script to sort the includes of every file under lib. · ed0881b2
      Chandler Carruth authored
      Sooooo many of these had incorrect or strange main module includes.
      I have manually inspected all of these, and fixed the main module
      include to be the nearest plausible thing I could find. If you own or
      care about any of these source files, I encourage you to take some time
      and check that these edits were sensible. I can't have broken anything
      (I strictly added headers, and reordered them, never removed), but they
      may not be the headers you'd really like to identify as containing the
      API being implemented.
      
      Many forward declarations and missing includes were added to a header
      files to allow them to parse cleanly when included first. The main
      module rule does in fact have its merits. =]
      
      llvm-svn: 169131
      ed0881b2
  12. Oct 10, 2012
  13. Jun 22, 2012
    • Stepan Dyatkovskiy's avatar
      Fixed r158979. · a6c8cc30
      Stepan Dyatkovskiy authored
      Original message:
      Performance optimizations:
      - SwitchInst: case values stored separately from Operands List. It allows to make faster access to individual case value numbers or ranges.
      - Optimized IntItem, added APInt value caching.
      - Optimized IntegersSubsetGeneric: added optimizations for cases when subset is single number or when subset consists from single numbers only.
      
      llvm-svn: 158997
      a6c8cc30
  14. May 04, 2012
    • Chandler Carruth's avatar
      Teach the code extractor how to extract a sequence of blocks from · 6781821c
      Chandler Carruth authored
      RegionInfo's RegionNode. This mirrors the logic for automating the
      extraction from a Loop.
      
      llvm-svn: 156208
      6781821c
    • Chandler Carruth's avatar
      Factor the computation of input and output sets into a public interface · 14316fcf
      Chandler Carruth authored
      of the CodeExtractor utility. This allows speculatively computing input
      and output sets to measure the likely size impact of the code
      extraction.
      
      These sets cannot be reused sadly -- we mutate the function prior to
      forming the final sets used by the actual extraction.
      
      The interface has been revamped slightly to make it easier to use
      correctly by making the interface const and sinking the computation of
      the number of exit blocks into the full extraction function and away
      from the rest of this logic which just computed two output parameters.
      
      llvm-svn: 156168
      14316fcf
    • Chandler Carruth's avatar
      Rather than trying to gracefully handle input sequences with repeated · 44e13911
      Chandler Carruth authored
      blocks, assert that this doesn't happen. We don't want to bother trying
      to support this call pattern as it isn't necessary.
      
      llvm-svn: 156167
      44e13911
    • Chandler Carruth's avatar
      Fix a goof with my previous commit by completely returning when we · 0a570552
      Chandler Carruth authored
      detect an in-eligible block rather than just breaking out of the loop.
      
      llvm-svn: 156166
      0a570552
    • Chandler Carruth's avatar
      Hoist a safety assert from the extraction method into the construction · 2f5d0191
      Chandler Carruth authored
      of the extractor itself.
      
      llvm-svn: 156164
      2f5d0191
    • Chandler Carruth's avatar
      Move the CodeExtractor utility to a dedicated header file / source file, · 0fde0015
      Chandler Carruth authored
      and expose it as a utility class rather than as free function wrappers.
      
      The simple free-function interface works well for the bugpoint-specific
      pass's uses of code extraction, but in an upcoming patch for more
      advanced code extraction, they simply don't expose a rich enough
      interface. I need to expose various stages of the process of doing the
      code extraction and query information to decide whether or not to
      actually complete the extraction or give up.
      
      Rather than build up a new predicate model and pass that into these
      functions, just take the class that was actually implementing the
      functions and lift it up into a proper interface that can be used to
      perform code extraction. The interface is cleaned up and re-documented
      to work better in a header. It also is now setup to accept the blocks to
      be extracted in the constructor rather than in a method.
      
      In passing this essentially reverts my previous commit here exposing
      a block-level query for eligibility of extraction. That is no longer
      necessary with the more rich interface as clients can query the
      extraction object for eligibility directly. This will reduce the number
      of walks of the input basic block sequence by quite a bit which is
      useful if this enters the normal optimization pipeline.
      
      llvm-svn: 156163
      0fde0015
    • Chandler Carruth's avatar
      Factor the logic for testing whether a basic block is viable for code · a46e6242
      Chandler Carruth authored
      extraction into a public interface. Also clean it up and apply it more
      consistently such that we check for landing pads *anywhere* in the
      extracted code, not just in single-block extraction.
      
      This will be used to guide decisions in passes that are planning to
      eventually perform a round of code extraction.
      
      llvm-svn: 156114
      a46e6242
  15. Mar 08, 2012
    • Stepan Dyatkovskiy's avatar
      Taken into account Duncan's comments for r149481 dated by 2nd Feb 2012: · 5b648afb
      Stepan Dyatkovskiy authored
      http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20120130/136146.html
      
      Implemented CaseIterator and it solves almost all described issues: we don't need to mix operand/case/successor indexing anymore. Base iterator class is implemented as a template since it may be initialized either from "const SwitchInst*" or from "SwitchInst*".
      
      ConstCaseIt is just a read-only iterator.
      CaseIt is read-write iterator; it allows to change case successor and case value.
      
      Usage of iterator allows totally remove resolveXXXX methods. All indexing convertions done automatically inside the iterator's getters.
      
      Main way of iterator usage looks like this:
      SwitchInst *SI = ... // intialize it somehow
      
      for (SwitchInst::CaseIt i = SI->caseBegin(), e = SI->caseEnd(); i != e; ++i) {
        BasicBlock *BB = i.getCaseSuccessor();
        ConstantInt *V = i.getCaseValue();
        // Do something.
      }
      
      If you want to convert case number to TerminatorInst successor index, just use getSuccessorIndex iterator's method.
      If you want initialize iterator from TerminatorInst successor index, use CaseIt::fromSuccessorIndex(...) method.
      
      There are also related changes in llvm-clients: klee and clang.
      
      llvm-svn: 152297
      5b648afb
  16. Feb 01, 2012
    • Stepan Dyatkovskiy's avatar
      SwitchInst refactoring. · 513aaa56
      Stepan Dyatkovskiy authored
      The purpose of refactoring is to hide operand roles from SwitchInst user (programmer). If you want to play with operands directly, probably you will need lower level methods than SwitchInst ones (TerminatorInst or may be User). After this patch we can reorganize SwitchInst operands and successors as we want.
      
      What was done:
      
      1. Changed semantics of index inside the getCaseValue method:
      getCaseValue(0) means "get first case", not a condition. Use getCondition() if you want to resolve the condition. I propose don't mix SwitchInst case indexing with low level indexing (TI successors indexing, User's operands indexing), since it may be dangerous.
      2. By the same reason findCaseValue(ConstantInt*) returns actual number of case value. 0 means first case, not default. If there is no case with given value, ErrorIndex will returned.
      3. Added getCaseSuccessor method. I propose to avoid usage of TerminatorInst::getSuccessor if you want to resolve case successor BB. Use getCaseSuccessor instead, since internal SwitchInst organization of operands/successors is hidden and may be changed in any moment.
      4. Added resolveSuccessorIndex and resolveCaseIndex. The main purpose of these methods is to see how case successors are really mapped in TerminatorInst.
      4.1 "resolveSuccessorIndex" was created if you need to level down from SwitchInst to TerminatorInst. It returns TerminatorInst's successor index for given case successor.
      4.2 "resolveCaseIndex" converts low level successors index to case index that curresponds to the given successor.
      
      Note: There are also related compatability fix patches for dragonegg, klee, llvm-gcc-4.0, llvm-gcc-4.2, safecode, clang.
      llvm-svn: 149481
      513aaa56
  17. Sep 20, 2011
  18. Jul 25, 2011
  19. Jul 18, 2011
  20. Jul 15, 2011
  21. Jul 12, 2011
    • Jay Foad's avatar
      Second attempt at de-constifying LLVM Types in FunctionType::get(), · b804a2b7
      Jay Foad authored
      StructType::get() and TargetData::getIntPtrType().
      
      llvm-svn: 134982
      b804a2b7
    • Bill Wendling's avatar
      Revert r134893 and r134888 (and related patches in other trees). It was causing · a78cd228
      Bill Wendling authored
      an assert on Darwin llvm-gcc builds.
      
      Assertion failed: (castIsValid(op, S, Ty) && "Invalid cast!"), function Create, file /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.llvm-gcc-i386-darwin9-RA/llvm.src/lib/VMCore/Instructions.cpp, li\
      ne 2067.
      etc.
      
      http://smooshlab.apple.com:8013/builders/llvm-gcc-i386-darwin9-RA/builds/2354
      
      --- Reverse-merging r134893 into '.':
      U    include/llvm/Target/TargetData.h
      U    include/llvm/DerivedTypes.h
      U    tools/bugpoint/ExtractFunction.cpp
      U    unittests/Support/TypeBuilderTest.cpp
      U    lib/Target/ARM/ARMGlobalMerge.cpp
      U    lib/Target/TargetData.cpp
      U    lib/VMCore/Constants.cpp
      U    lib/VMCore/Type.cpp
      U    lib/VMCore/Core.cpp
      U    lib/Transforms/Utils/CodeExtractor.cpp
      U    lib/Transforms/Instrumentation/ProfilingUtils.cpp
      U    lib/Transforms/IPO/DeadArgumentElimination.cpp
      U    lib/CodeGen/SjLjEHPrepare.cpp
      --- Reverse-merging r134888 into '.':
      G    include/llvm/DerivedTypes.h
      U    include/llvm/Support/TypeBuilder.h
      U    include/llvm/Intrinsics.h
      U    unittests/Analysis/ScalarEvolutionTest.cpp
      U    unittests/ExecutionEngine/JIT/JITTest.cpp
      U    unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp
      U    unittests/VMCore/PassManagerTest.cpp
      G    unittests/Support/TypeBuilderTest.cpp
      U    lib/Target/MBlaze/MBlazeIntrinsicInfo.cpp
      U    lib/Target/Blackfin/BlackfinIntrinsicInfo.cpp
      U    lib/VMCore/IRBuilder.cpp
      G    lib/VMCore/Type.cpp
      U    lib/VMCore/Function.cpp
      G    lib/VMCore/Core.cpp
      U    lib/VMCore/Module.cpp
      U    lib/AsmParser/LLParser.cpp
      U    lib/Transforms/Utils/CloneFunction.cpp
      G    lib/Transforms/Utils/CodeExtractor.cpp
      U    lib/Transforms/Utils/InlineFunction.cpp
      U    lib/Transforms/Instrumentation/GCOVProfiling.cpp
      U    lib/Transforms/Scalar/ObjCARC.cpp
      U    lib/Transforms/Scalar/SimplifyLibCalls.cpp
      U    lib/Transforms/Scalar/MemCpyOptimizer.cpp
      G    lib/Transforms/IPO/DeadArgumentElimination.cpp
      U    lib/Transforms/IPO/ArgumentPromotion.cpp
      U    lib/Transforms/InstCombine/InstCombineCompares.cpp
      U    lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
      U    lib/Transforms/InstCombine/InstCombineCalls.cpp
      U    lib/CodeGen/DwarfEHPrepare.cpp
      U    lib/CodeGen/IntrinsicLowering.cpp
      U    lib/Bitcode/Reader/BitcodeReader.cpp
      
      llvm-svn: 134949
      a78cd228
  22. Jul 11, 2011
  23. Apr 15, 2011
  24. Mar 30, 2011
  25. Sep 11, 2010
  26. Apr 08, 2010
  27. Jan 10, 2010
Loading