Skip to content
  1. Jan 07, 2013
    • Eric Christopher's avatar
      Update comment. · 7f5870c9
      Eric Christopher authored
      llvm-svn: 171689
      7f5870c9
    • Chandler Carruth's avatar
      Fix the enumerator names for ShuffleKind to match tho coding standards, · 2109f47d
      Chandler Carruth authored
      and make its comments doxygen comments.
      
      llvm-svn: 171688
      2109f47d
    • Chandler Carruth's avatar
      Make the popcnt support enums and methods have more clear names and · 50a36cd1
      Chandler Carruth authored
      follow the conding conventions regarding enumerating a set of "kinds" of
      things.
      
      llvm-svn: 171687
      50a36cd1
    • Chandler Carruth's avatar
      Move TargetTransformInfo to live under the Analysis library. This no · d3e73556
      Chandler Carruth authored
      longer would violate any dependency layering and it is in fact an
      analysis. =]
      
      llvm-svn: 171686
      d3e73556
    • Sean Silva's avatar
      Simplify TableGen type-compatibility checks. · 93be7d59
      Sean Silva authored
      Patch by Elior Malul!
      
      llvm-svn: 171684
      93be7d59
    • Chandler Carruth's avatar
      Switch TargetTransformInfo from an immutable analysis pass that requires · 664e354d
      Chandler Carruth authored
      a TargetMachine to construct (and thus isn't always available), to an
      analysis group that supports layered implementations much like
      AliasAnalysis does. This is a pretty massive change, with a few parts
      that I was unable to easily separate (sorry), so I'll walk through it.
      
      The first step of this conversion was to make TargetTransformInfo an
      analysis group, and to sink the nonce implementations in
      ScalarTargetTransformInfo and VectorTargetTranformInfo into
      a NoTargetTransformInfo pass. This allows other passes to add a hard
      requirement on TTI, and assume they will always get at least on
      implementation.
      
      The TargetTransformInfo analysis group leverages the delegation chaining
      trick that AliasAnalysis uses, where the base class for the analysis
      group delegates to the previous analysis *pass*, allowing all but tho
      NoFoo analysis passes to only implement the parts of the interfaces they
      support. It also introduces a new trick where each pass in the group
      retains a pointer to the top-most pass that has been initialized. This
      allows passes to implement one API in terms of another API and benefit
      when some other pass above them in the stack has more precise results
      for the second API.
      
      The second step of this conversion is to create a pass that implements
      the TargetTransformInfo analysis using the target-independent
      abstractions in the code generator. This replaces the
      ScalarTargetTransformImpl and VectorTargetTransformImpl classes in
      lib/Target with a single pass in lib/CodeGen called
      BasicTargetTransformInfo. This class actually provides most of the TTI
      functionality, basing it upon the TargetLowering abstraction and other
      information in the target independent code generator.
      
      The third step of the conversion adds support to all TargetMachines to
      register custom analysis passes. This allows building those passes with
      access to TargetLowering or other target-specific classes, and it also
      allows each target to customize the set of analysis passes desired in
      the pass manager. The baseline LLVMTargetMachine implements this
      interface to add the BasicTTI pass to the pass manager, and all of the
      tools that want to support target-aware TTI passes call this routine on
      whatever target machine they end up with to add the appropriate passes.
      
      The fourth step of the conversion created target-specific TTI analysis
      passes for the X86 and ARM backends. These passes contain the custom
      logic that was previously in their extensions of the
      ScalarTargetTransformInfo and VectorTargetTransformInfo interfaces.
      I separated them into their own file, as now all of the interface bits
      are private and they just expose a function to create the pass itself.
      Then I extended these target machines to set up a custom set of analysis
      passes, first adding BasicTTI as a fallback, and then adding their
      customized TTI implementations.
      
      The fourth step required logic that was shared between the target
      independent layer and the specific targets to move to a different
      interface, as they no longer derive from each other. As a consequence,
      a helper functions were added to TargetLowering representing the common
      logic needed both in the target implementation and the codegen
      implementation of the TTI pass. While technically this is the only
      change that could have been committed separately, it would have been
      a nightmare to extract.
      
      The final step of the conversion was just to delete all the old
      boilerplate. This got rid of the ScalarTargetTransformInfo and
      VectorTargetTransformInfo classes, all of the support in all of the
      targets for producing instances of them, and all of the support in the
      tools for manually constructing a pass based around them.
      
      Now that TTI is a relatively normal analysis group, two things become
      straightforward. First, we can sink it into lib/Analysis which is a more
      natural layer for it to live. Second, clients of this interface can
      depend on it *always* being available which will simplify their code and
      behavior. These (and other) simplifications will follow in subsequent
      commits, this one is clearly big enough.
      
      Finally, I'm very aware that much of the comments and documentation
      needs to be updated. As soon as I had this working, and plausibly well
      commented, I wanted to get it committed and in front of the build bots.
      I'll be doing a few passes over documentation later if it sticks.
      
      Commits to update DragonEgg and Clang will be made presently.
      
      llvm-svn: 171681
      664e354d
    • Michael Gottesman's avatar
      [ObjCARC Debug Message] - Added debug message when fuse a retain/autorelease... · add08474
      Michael Gottesman authored
      [ObjCARC Debug Message] - Added debug message when fuse a retain/autorelease pair in ObjCARCContract::ContractAutorelease.
      
      llvm-svn: 171679
      add08474
    • Michael Gottesman's avatar
      [ObjCARC Debug Message] - Added debug message when we zap a matching... · d61a3b27
      Michael Gottesman authored
      [ObjCARC Debug Message] - Added debug message when we zap a matching retain/autorelease pair in ObjCARCOpt::OptimizeReturns.
      
      llvm-svn: 171678
      d61a3b27
    • Michael Gottesman's avatar
      [ObjCARC Debug Message] - Added debug message when we erase ARC calls with... · 5b970e14
      Michael Gottesman authored
      [ObjCARC Debug Message] - Added debug message when we erase ARC calls with null since they are no-ops.
      
      llvm-svn: 171677
      5b970e14
    • Michael Gottesman's avatar
      [ObjCARC Debug Message] - Added debug message when we add a nounwind keyword... · 8800a51a
      Michael Gottesman authored
      [ObjCARC Debug Message] - Added debug message when we add a nounwind keyword to a function which can not throw.
      
      llvm-svn: 171676
      8800a51a
    • Michael Gottesman's avatar
      [ObjCARC Debug Message] - Added debug message when we add a tail keyword to a... · 2d76331f
      Michael Gottesman authored
      [ObjCARC Debug Message] - Added debug message when we add a tail keyword to a function which can never be passed stack args.
      
      llvm-svn: 171675
      2d76331f
  2. Jan 06, 2013
  3. Jan 05, 2013
    • David Blaikie's avatar
      Include access modifiers in subprogram metadata IR comment. · e0575457
      David Blaikie authored
      Based on code review feedback in r171604 from Chandler Carruth &
      Eric Christopher.
      
      llvm-svn: 171636
      e0575457
    • Michael Gottesman's avatar
      Added debug message to ObjCARC when we transform... · def07bba
      Michael Gottesman authored
      Added debug message to ObjCARC when we transform objc_retainAutorelasedReturnValue => objc_retain since the operand to said function is not a return value.
      
      llvm-svn: 171629
      def07bba
    • Michael Gottesman's avatar
      Added debug message for ObjCARC when we zap an... · 5c32ce9d
      Michael Gottesman authored
      Added debug message for ObjCARC when we zap an objc_autoreleaseReturnValue/objc_retainAutoreleasedValue pair.
      
      llvm-svn: 171628
      5c32ce9d
    • Chris Lattner's avatar
      switch from pointer equality comparison to MDNode::getMostGenericTBAA · 473988cf
      Chris Lattner authored
      when merging two TBAA tags, pointed out by Nuno.
      
      llvm-svn: 171627
      473988cf
    • Chandler Carruth's avatar
      Funnel the actual TargetTransformInfo pass from the SelectionDAGISel · 42e9611f
      Chandler Carruth authored
      pass into the SelectionDAG itself rather than snooping on the
      implementation of that pass as exposed by the TargetMachine. This
      removes the last direct client of the ScalarTargetTransformInfo class
      outside of the TTI pass implementation.
      
      llvm-svn: 171625
      42e9611f
    • Benjamin Kramer's avatar
      Attribute: Make hashes match when looking up AttributeImpls. · d60321ba
      Benjamin Kramer authored
      This isn't optimal either but fixes a massive compile time regression from the
      attribute uniquing work.
      
      llvm-svn: 171624
      d60321ba
    • Chandler Carruth's avatar
      Convert the TargetTransformInfo from an immutable pass with dynamic · 539edf4e
      Chandler Carruth authored
      interfaces which could be extracted from it, and must be provided on
      construction, to a chained analysis group.
      
      The end goal here is that TTI works much like AA -- there is a baseline
      "no-op" and target independent pass which is in the group, and each
      target can expose a target-specific pass in the group. These passes will
      naturally chain allowing each target-specific pass to delegate to the
      generic pass as needed.
      
      In particular, this will allow a much simpler interface for passes that
      would like to use TTI -- they can have a hard dependency on TTI and it
      will just be satisfied by the stub implementation when that is all that
      is available.
      
      This patch is a WIP however. In particular, the "stub" pass is actually
      the one and only pass, and everything there is implemented by delegating
      to the target-provided interfaces. As a consequence the tools still have
      to explicitly construct the pass. Switching targets to provide custom
      passes and sinking the stub behavior into the NoTTI pass is the next
      step.
      
      llvm-svn: 171621
      539edf4e
    • Chandler Carruth's avatar
      Switch the loop vectorizer from VTTI to just use TTI directly. · 21b3c586
      Chandler Carruth authored
      llvm-svn: 171620
      21b3c586
    • Chandler Carruth's avatar
      Switch the cost model analysis over to just the TTI interface. · cf569a8c
      Chandler Carruth authored
      llvm-svn: 171619
      cf569a8c
    • Chandler Carruth's avatar
      Switch the BB vectorizer from the VTTI interface to the simple TTI · 7c4f91de
      Chandler Carruth authored
      interface.
      
      llvm-svn: 171618
      7c4f91de
    • Chandler Carruth's avatar
      Switch SimplifyCFG over to the TargetTransformInfo interface rather than · 6db43e6c
      Chandler Carruth authored
      the ScalarTargetTransformInfo interface.
      
      llvm-svn: 171617
      6db43e6c
    • Chandler Carruth's avatar
      Switch LoopIdiomRecognize to directly use the TargetTransformInfo · 6fe147fb
      Chandler Carruth authored
      interface rather than the ScalarTargetTransformInterface.
      
      llvm-svn: 171616
      6fe147fb
    • Chandler Carruth's avatar
      Switch the empty and tombstone key enumerators to not have explicit · 5394e11a
      Chandler Carruth authored
      values -- that's not required to fix the bug that was cropping up, and
      the values selected made the enumeration's underlying type signed and
      introduced some warnings. This fixes the -Werror build.
      
      The underlying issue here was that the DenseMapInfo was casting values
      completely outside the range of the underlying storage of the
      enumeration to the enumeration's type. GCC went and "optimized" that
      into infloops and other misbehavior. By providing designated special
      values for these keys in the dense map, we ensure they are indeed
      representable and that they won't be used for anything else.
      
      It might be better to reuse None for the empty key and have the
      tombstone share the value of the sentinel enumerator, but honestly
      having 2 extra enumerators seemed not to matter and this seems a bit
      simpler. I'll let Bill shuffle this around (or ask me to shuffle it
      around) if he prefers it to look a different way.
      
      I also made the switch a bit more clear (and produce a better assert)
      that the enumerators are *never* going to show up and are errors if they
      do.
      
      llvm-svn: 171614
      5394e11a
    • NAKAMURA Takumi's avatar
      IR/Attributes: Provide EmptyKey and TombstoneKey in part of enum, as... · c91006f7
      NAKAMURA Takumi authored
      IR/Attributes: Provide EmptyKey and TombstoneKey in part of enum, as workaround for gcc-4.4 take #2.
      
      I will investigate, later, what was wrong. I am too tired for now.
      
      llvm-svn: 171611
      c91006f7
    • David Blaikie's avatar
      Emit DW_TAG_formal_parameter for unnamed parameters. · 800a916f
      David Blaikie authored
      This change essentially reverts r87069 which came without a test case. It
      causes no regressions in the GDB 7.5 test suite & fixes 25 xfails (commit
      to the test suite to follow). If anyone can present a test case that
      demonstrates why this check is necessary I'd be happy to account for it in one
      way or another.
      
      llvm-svn: 171609
      800a916f
    • Craig Topper's avatar
      Recommit r171461 which was incorrectly reverted. Mark DIV/IDIV instructions... · 92a70b1e
      Craig Topper authored
      Recommit r171461 which was incorrectly reverted. Mark DIV/IDIV instructions hasSideEffects=1 because they can trap when dividing by 0. This is needed to keep early if conversion from moving them across basic blocks.
      
      llvm-svn: 171608
      92a70b1e
    • Nadav Rotem's avatar
      Revert revision 171524. Original message: · 478b6a47
      Nadav Rotem authored
      URL: http://llvm.org/viewvc/llvm-project?rev=171524&view=rev
      Log:
      The current Intel Atom microarchitecture has a feature whereby when a function
      returns early then it is slightly faster to execute a sequence of NOP
      instructions to wait until the return address is ready,
      as opposed to simply stalling on the ret instruction
      until the return address is ready.
      
      When compiling for X86 Atom only, this patch will run a pass, called
      "X86PadShortFunction" which will add NOP instructions where less than four
      cycles elapse between function entry and return.
      
      It includes tests.
      
      Patch by Andy Zhang.
      
      llvm-svn: 171603
      478b6a47
    • Jakob Stoklund Olesen's avatar
      Don't call destructors on MachineInstr and MachineOperand. · dc5285f1
      Jakob Stoklund Olesen authored
      The series of patches leading up to this one makes llc -O0 run 8% faster.
      
      When deallocating a MachineFunction, there is no need to visit all
      MachineInstr and MachineOperand objects to deallocate them. All their
      memory come from a BumpPtrAllocator that is about to be purged, and they
      have empty destructors anyway.
      
      This only applies when deallocating the MachineFunction.
      DeleteMachineInstr() should still be used to recycle MI memory during
      the codegen passes.
      
      Remove the LeakDetector support for MachineInstr. I've never seen it
      used before, and now it definitely doesn't work. With this patch, leaked
      MachineInstrs would be much less of a problem since all of their memory
      will be reclaimed by ~MachineFunction().
      
      llvm-svn: 171599
      dc5285f1
    • Jakob Stoklund Olesen's avatar
      Use ArrayRecycler for MachineInstr operand lists. · 1bfeecb4
      Jakob Stoklund Olesen authored
      Instead of an std::vector<MachineOperand>, use MachineOperand arrays
      from an ArrayRecycler living in MachineFunction.
      
      This has several advantages:
      
      - MachineInstr now has a trivial destructor, making it possible to
        delete them in batches when destroying MachineFunction. This will be
        enabled in a later patch.
      
      - Bypassing malloc() and free() can be faster, depending on the system
        library.
      
      - MachineInstr objects and their operands are allocated from the same
        BumpPtrAllocator, so they will usually be next to each other in
        memory, providing better locality of reference.
      
      - Reduce MachineInstr footprint. A std::vector is 24 bytes, the new
        operand array representation only uses 8+4+1 bytes in MachineInstr.
      
      - Better control over operand array reallocations. In the old
        representation, the use-def chains would be reordered whenever a
        std::vector reached its capacity. The new implementation never changes
        the use-def chain order.
      
      Note that some decisions in the code generator depend on the use-def
      chain orders, so this patch may cause different assembly to be produced
      in a few cases.
      
      llvm-svn: 171598
      1bfeecb4
    • Jakob Stoklund Olesen's avatar
      Add MachineRegisterInfo::moveOperands(). · fe445cd6
      Jakob Stoklund Olesen authored
      This function works like memmove() for MachineOperands, except it also
      updates any use-def chains containing the moved operands.
      
      The use-def chains are updated without affecting the order of operands
      in the list. That isn't possible when using the
      removeRegOperandFromUseList() and addRegOperandToUseList() functions.
      
      Callers to follow soon.
      
      llvm-svn: 171597
      fe445cd6
    • Chandler Carruth's avatar
      Refactor the ScalarTargetTransformInfo API for querying about the · 4a7c3110
      Chandler Carruth authored
      legality of an address mode to not use a struct of four values and
      instead to accept them as parameters. I'd love to have named parameters
      here as most callers only care about one or two of these, but the
      defaults aren't terribly scary to write out.
      
      That said, there is no real impact of this as the passes aren't yet
      using STTI for this and are still relying upon TargetLowering.
      
      llvm-svn: 171595
      4a7c3110
Loading