Skip to content
  1. Jan 07, 2013
    • 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
  2. 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
  3. Dec 20, 2012
  4. Dec 09, 2012
  5. Dec 08, 2012
    • Chandler Carruth's avatar
      Revert the patches adding a popcount loop idiom recognition pass. · 91e47532
      Chandler Carruth authored
      There are still bugs in this pass, as well as other issues that are
      being worked on, but the bugs are crashers that occur pretty easily in
      the wild. Test cases have been sent to the original commit's review
      thread.
      
      This reverts the commits:
        r169671: Fix a logic error.
        r169604: Move the popcnt tests to an X86 subdirectory.
        r168931: Initial commit adding the pass.
      
      llvm-svn: 169683
      91e47532
  6. Dec 04, 2012
  7. Nov 29, 2012
    • Shuxin Yang's avatar
      rdar://12100355 (part 1) · abcc3704
      Shuxin Yang authored
      This revision attempts to recognize following population-count pattern:
      
       while(a) { c++; ... ; a &= a - 1; ... },
        where <c> and <a>could be used multiple times in the loop body.
      
       TODO: On X8664 and ARM, __buildin_ctpop() are not expanded to a efficent 
      instruction sequence, which need to be improved in the following commits.
      
      Reviewed by Nadav, really appreciate!
      
      llvm-svn: 168931
      abcc3704
  8. Nov 03, 2012
  9. Oct 28, 2012
  10. Oct 19, 2012
  11. Oct 18, 2012
    • Bob Wilson's avatar
      Temporarily revert the TargetTransform changes. · d6d9ccca
      Bob Wilson authored
      The TargetTransform changes are breaking LTO bootstraps of clang.  I am
      working with Nadav to figure out the problem, but I am reverting it for now
      to get our buildbots working.
      
      This reverts svn commits: 165665 165669 165670 165786 165787 165997
      and I have also reverted clang svn 165741
      
      llvm-svn: 166168
      d6d9ccca
  12. Oct 11, 2012
    • Nadav Rotem's avatar
      · e1032873
      Nadav Rotem authored
      Add a new interface to allow IR-level passes to access codegen-specific information.
      
      llvm-svn: 165665
      e1032873
  13. Oct 08, 2012
  14. Mar 17, 2012
  15. Feb 04, 2012
    • Andrew Trick's avatar
      TargetPassConfig: confine the MC configuration to TargetMachine. · f8ea108c
      Andrew Trick authored
      Passes prior to instructon selection are now split into separate configurable stages.
      Header dependencies are simplified.
      The bulk of this diff is simply removal of the silly DisableVerify flags.
      
      Sorry for the target header churn. Attempting to stabilize them.
      
      llvm-svn: 149754
      f8ea108c
  16. Feb 03, 2012
    • Andrew Trick's avatar
      Added TargetPassConfig. The first little step toward configuring codegen passes. · ccb67365
      Andrew Trick authored
      Allows command line overrides to be centralized in LLVMTargetMachine.cpp.
      LLVMTargetMachine can intercept common passes and give precedence to command line overrides.
      Allows adding "internal" target configuration options without touching TargetOptions.
      Encapsulates the PassManager.
      Provides a good point to initialize all CodeGen passes so that Pass ID's can be used in APIs.
      Allows modifying the target configuration hooks without rebuilding the world.
      
      llvm-svn: 149672
      ccb67365
    • Andrew Trick's avatar
      whitespace · 808a7a6c
      Andrew Trick authored
      llvm-svn: 149671
      808a7a6c
  17. Feb 02, 2012
    • Andrew Trick's avatar
      Instruction scheduling itinerary for Intel Atom. · 8523b16f
      Andrew Trick authored
      Adds an instruction itinerary to all x86 instructions, giving each a default latency of 1, using the InstrItinClass IIC_DEFAULT.
      
      Sets specific latencies for Atom for the instructions in files X86InstrCMovSetCC.td, X86InstrArithmetic.td, X86InstrControl.td, and X86InstrShiftRotate.td. The Atom latencies for the remainder of the x86 instructions will be set in subsequent patches.
      
      Adds a test to verify that the scheduler is working.
      
      Also changes the scheduling preference to "Hybrid" for i386 Atom, while leaving x86_64 as ILP.
      
      Patch by Preston Gurd!
      
      llvm-svn: 149558
      8523b16f
  18. Dec 20, 2011
  19. Dec 02, 2011
    • Nick Lewycky's avatar
      Move global variables in TargetMachine into new TargetOptions class. As an API · 50f02cb2
      Nick Lewycky authored
      change, now you need a TargetOptions object to create a TargetMachine. Clang
      patch to follow.
      
      One small functionality change in PTX. PTX had commented out the machine
      verifier parts in their copy of printAndVerify. That now calls the version in
      LLVMTargetMachine. Users of PTX who need verification disabled should rely on
      not passing the command-line flag to enable it.
      
      llvm-svn: 145714
      50f02cb2
  20. Nov 16, 2011
  21. Jul 20, 2011
  22. Jul 19, 2011
  23. Jun 30, 2011
  24. Jan 10, 2011
  25. Nov 15, 2010
  26. Oct 03, 2010
  27. May 11, 2010
  28. Apr 17, 2010
    • Dan Gohman's avatar
      Use const qualifiers with TargetLowering. This eliminates several · 21cea8ac
      Dan Gohman authored
      const_casts, and it reinforces the design of the Target classes being
      immutable.
      
      SelectionDAGISel::IsLegalToFold is now a static member function, because
      PIC16 uses it in an unconventional way. There is more room for API
      cleanup here.
      
      And PIC16's AsmPrinter no longer uses TargetLowering.
      
      llvm-svn: 101635
      21cea8ac
  29. Mar 25, 2010
    • Jakob Stoklund Olesen's avatar
      Add a late SSEDomainFix pass that twiddles SSE instructions to avoid domain crossings. · 49e121d5
      Jakob Stoklund Olesen authored
      On Nehalem and newer CPUs there is a 2 cycle latency penalty on using a register
      in a different domain than where it was defined. Some instructions have
      equvivalents for different domains, like por/orps/orpd.
      
      The SSEDomainFix pass tries to minimize the number of domain crossings by
      changing between equvivalent opcodes where possible.
      
      This is a work in progress, in particular the pass doesn't do anything yet. SSE
      instructions are tagged with their execution domain in TableGen using the last
      two bits of TSFlags. Note that not all instructions are tagged correctly. Life
      just isn't that simple.
      
      The SSE execution domain issue is very similar to the ARM NEON/VFP pipeline
      issue handled by NEONMoveFixPass. This pass may become target independent to
      handle both.
      
      llvm-svn: 99524
      49e121d5
  30. Mar 24, 2010
  31. Feb 15, 2010
    • Anton Korobeynikov's avatar
      Preliminary patch to improve dwarf EH generation - Hooks to return Personality... · ae4ccc10
      Anton Korobeynikov authored
      Preliminary patch to improve dwarf EH generation - Hooks to return Personality / FDE / LSDA / TType encoding depending on target / options (e.g. code model / relocation model) - MCIzation of Dwarf EH printer to use encoding information - Stub generation for ELF target (needed for indirect references) - Some other small changes here and there
      
      llvm-svn: 96285
      ae4ccc10
  32. Feb 02, 2010
  33. Jan 18, 2010
  34. Jan 16, 2010
    • Bill Wendling's avatar
      Retrying r91337: · bf5cfa1a
      Bill Wendling authored
      The CIE says that the LSDA point in the FDE section is an "sdata4". That's fine,
      but we need it to actually be 4-bytes in the FDE for some platforms. Allow
      individual platforms to decide for themselves.
      
      llvm-svn: 93616
      bf5cfa1a
  35. Dec 21, 2009
  36. Aug 12, 2009
  37. Aug 03, 2009
Loading