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 05, 2014
  4. Mar 02, 2014
  5. 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
  6. 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
  7. 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
  8. Jul 04, 2012
  9. Jul 03, 2012
  10. Jul 02, 2012
    • Stepan Dyatkovskiy's avatar
      IntRange: · 8b9ecca4
      Stepan Dyatkovskiy authored
        - Changed isSingleNumber method behaviour. Now this flag is calculated on demand.
      IntegersSubsetMapping
        - Optimized diff operation.
        - Replaced type of Items field from std::list with std::map.
        - Added new methods:
          bool isOverlapped(self &RHS)
          void add(self& RHS, SuccessorClass *S)
          void detachCase(self& NewMapping, SuccessorClass *Succ)
          void removeCase(SuccessorClass *Succ)
          SuccessorClass *findSuccessor(const IntTy& Val)
          const IntTy* getCaseSingleNumber(SuccessorClass *Succ)
      IntegersSubsetTest
        - DiffTest: Added checks for successors.
      SimplifyCFG
        Updated SwitchInst usage (now it is case-ragnes compatible) for
          - SimplifyEqualityComparisonWithOnlyPredecessor
          - FoldValueComparisonIntoPredecessors
      
      llvm-svn: 159527
      8b9ecca4
  11. Jun 02, 2012
    • Stepan Dyatkovskiy's avatar
      PR1255: case ranges. · 0e46d8a0
      Stepan Dyatkovskiy authored
      IntRange converted from struct to class. So main change everywhere is replacement of ".Low/High" with ".getLow/getHigh()"
      
      llvm-svn: 157884
      0e46d8a0
  12. May 29, 2012
  13. May 28, 2012
    • Stepan Dyatkovskiy's avatar
      PR1255: Case Ranges · e3e19cbb
      Stepan Dyatkovskiy authored
      Implemented IntItem - the wrapper around APInt. Why not to use APInt item directly right now?
      1. It will very difficult to implement case ranges as series of small patches. We got several large and heavy patches. Each patch will about 90-120 kb. If you replace ConstantInt with APInt in SwitchInst you will need to changes at the same time all Readers,Writers and absolutely all passes that uses SwitchInst.
      2. We can implement APInt pool inside and save memory space. E.g. we use several switches that works with 256 bit items (switch on signatures, or strings). We can avoid value duplicates in this case.
      3. IntItem can be easyly easily replaced with APInt.
      4. Currenly we can interpret IntItem both as ConstantInt and as APInt. It allows to provide SwitchInst methods that works with ConstantInt for non-updated passes.
      
      Why I need it right now? Currently I need to update SimplifyCFG pass (EqualityComparisons). I need to work with APInts directly a lot, so peaces of code
      ConstantInt *V = ...;
      if (V->getValue().ugt(AnotherV->getValue()) {
        ...
      }
      will look awful. Much more better this way:
      IntItem V = ConstantIntVal->getValue();
      if (AnotherV < V) {
      }
      
      Of course any reviews are welcome.
      
      P.S.: I'm also going to rename ConstantRangesSet to IntegersSubset, and CRSBuilder to IntegersSubsetMapping (allows to map individual subsets of integers to the BasicBlocks).
      Since in future these classes will founded on APInt, it will possible to use them in more generic ways.
      
      llvm-svn: 157576
      e3e19cbb
  14. May 24, 2012
    • Stepan Dyatkovskiy's avatar
      PR1255 related changes (case ranges): · 183d18aa
      Stepan Dyatkovskiy authored
      LowerSwitch::Clusterify : main functinality was replaced with CRSBuilder::optimize, so big part of Clusterify's code was reduced.
      test/Transform/LowerSwitch/feature.ll - this test was refactored: grep + count was replaced with FileCheck usage.
      
      llvm-svn: 157384
      183d18aa
  15. Mar 11, 2012
    • Stepan Dyatkovskiy's avatar
      llvm::SwitchInst · 97b02fc1
      Stepan Dyatkovskiy authored
      Renamed methods caseBegin, caseEnd and caseDefault with case_begin, case_end, and case_default.
      Added some notes relative to case iterators.
      
      llvm-svn: 152532
      97b02fc1
  16. 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
  17. 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
  18. Sep 29, 2011
  19. Apr 15, 2011
  20. Oct 23, 2010
  21. Oct 19, 2010
    • Owen Anderson's avatar
      Get rid of static constructors for pass registration. Instead, every pass... · 6c18d1aa
      Owen Anderson authored
      Get rid of static constructors for pass registration.  Instead, every pass exposes an initializeMyPassFunction(), which
      must be called in the pass's constructor.  This function uses static dependency declarations to recursively initialize
      the pass's dependencies.
      
      Clients that only create passes through the createFooPass() APIs will require no changes.  Clients that want to use the
      CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h
      before parsing commandline arguments.
      
      I have tested this with all standard configurations of clang and llvm-gcc on Darwin.  It is possible that there are problems
      with the static dependencies that will only be visible with non-standard options.  If you encounter any crash in pass
      registration/creation, please send the testcase to me directly.
      
      llvm-svn: 116820
      6c18d1aa
  22. Oct 08, 2010
  23. Aug 23, 2010
  24. Aug 18, 2010
  25. Aug 06, 2010
  26. Jan 05, 2010
  27. Dec 03, 2009
  28. Oct 27, 2009
    • Victor Hernandez's avatar
      Remove FreeInst. · de5ad42a
      Victor Hernandez authored
      Remove LowerAllocations pass.
      Update some more passes to treate free calls just like they were treating FreeInst.
      
      llvm-svn: 85176
      de5ad42a
  29. Oct 25, 2009
  30. Aug 26, 2009
  31. Aug 13, 2009
  32. Jul 29, 2009
  33. Jul 28, 2009
Loading