Skip to content
  1. May 04, 2012
    • 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
  2. 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
  3. 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
  4. Sep 20, 2011
  5. Jul 25, 2011
  6. Jul 18, 2011
  7. Jul 15, 2011
  8. 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
  9. Jul 11, 2011
  10. Apr 15, 2011
  11. Mar 30, 2011
  12. Sep 11, 2010
  13. Apr 08, 2010
  14. Jan 10, 2010
  15. Jan 09, 2010
  16. Jan 05, 2010
  17. Oct 25, 2009
  18. Aug 25, 2009
  19. Aug 23, 2009
  20. Aug 13, 2009
  21. Aug 06, 2009
  22. Jul 31, 2009
Loading