Skip to content
  1. Nov 14, 2013
  2. Nov 13, 2013
    • Sebastian Pop's avatar
      add more comments around the delinearization of arrays · 7ee14724
      Sebastian Pop authored
      llvm-svn: 194612
      7ee14724
    • Jakub Staszak's avatar
      Simplify code. No functionality change. · 9dca4b3e
      Jakub Staszak authored
      llvm-svn: 194602
      9dca4b3e
    • Jakub Staszak's avatar
      Use StringRef instead of std::string · 86a7492f
      Jakub Staszak authored
      llvm-svn: 194601
      86a7492f
    • Chad Rosier's avatar
      [AArch64] Add support for legacy AArch32 NEON scalar shift by immediate · d3ae5f89
      Chad Rosier authored
      instructions.  This patch does not include the shift right and accumulate
      instructions.  A number of non-overloaded intrinsics have been remove in favor
      of their overloaded counterparts.
      
      llvm-svn: 194598
      d3ae5f89
    • Weiming Zhao's avatar
      Enable generating legacy IT block for AArch32 · 0da5cc07
      Weiming Zhao authored
      By default, the behavior of IT block generation will be determinated
      dynamically base on the arch (armv8 vs armv7). This patch adds backend
      options: -arm-restrict-it and -arm-no-restrict-it.  The former one
      restricts the generation of IT blocks (the same behavior as thumbv8) for
      both arches. The later one allows the generation of legacy IT block (the
      same behavior as ARMv7 Thumb2) for both arches.
      
      Clang will support -mrestrict-it and -mno-restrict-it, which is
      compatible with GCC.
      
      llvm-svn: 194592
      0da5cc07
    • David Blaikie's avatar
      DIEHash: Move header include to be first in the implementation file to flush... · 9208b5ed
      David Blaikie authored
      DIEHash: Move header include to be first in the implementation file to flush out header inclusion ordering issues
      
      llvm-svn: 194588
      9208b5ed
    • Richard Sandiford's avatar
      [SystemZ] Add the general form of BCR · 09de091c
      Richard Sandiford authored
      At the moment this is just the MC support.
      
      llvm-svn: 194585
      09de091c
    • Benjamin Kramer's avatar
      Move Delinearization pass into an anonymous namespace. · 9e501ec2
      Benjamin Kramer authored
      llvm-svn: 194582
      9e501ec2
    • Benjamin Kramer's avatar
      Make sure LLVMLoadLibraryPermanently gets an extern "C" symbol. · 505d2408
      Benjamin Kramer authored
      Otherwise it's impossible to use it. Also don't include C++ headers in
      a C header.
      
      llvm-svn: 194581
      505d2408
    • Rafael Espindola's avatar
      Remove AllowQuotesInName and friends from MCAsmInfo. · fdc88137
      Rafael Espindola authored
      Accepting quotes is a property of an assembler, not of an object file. For
      example, ELF can support any names for sections and symbols, but the gnu
      assembler only accepts quotes in some contexts and llvm-mc in a few more.
      
      LLVM should not produce different symbols based on a guess about which assembler
      will be reading the code it is printing.
      
      llvm-svn: 194575
      fdc88137
    • Rafael Espindola's avatar
      Don't call doFinalization from verifyFunction. · 156227ac
      Rafael Espindola authored
      verifyFunction needs to call doInitialization to collect metadata and avoid
      crashing when verifying debug info in a function.
      
      But it should not call doFinalization since that is where the verifier will
      check declarations, variables and aliases, which is not desirable when one
      only wants to verify a function.
      
      A possible cleanup would be to split the class into a ModuleVerifier and
      FunctionVerifier.
      
      Issue reported by Ilia Filippov. Patch by Michael Kruse.
      
      llvm-svn: 194574
      156227ac
    • Vladimir Medic's avatar
      Fix bug in .gpword directive parsing. · e10c1125
      Vladimir Medic authored
      llvm-svn: 194570
      e10c1125
    • Zoran Jovanovic's avatar
      Support for microMIPS trap instruction with immediate operands. · ccb70caa
      Zoran Jovanovic authored
      llvm-svn: 194569
      ccb70caa
    • Alexey Samsonov's avatar
    • Diego Novillo's avatar
      SampleProfileLoader pass. Initial setup. · 8d6568b5
      Diego Novillo authored
      This adds a new scalar pass that reads a file with samples generated
      by 'perf' during runtime. The samples read from the profile are
      incorporated and emmited as IR metadata reflecting that profile.
      
      The profile file is assumed to have been generated by an external
      profile source. The profile information is converted into IR metadata,
      which is later used by the analysis routines to estimate block
      frequencies, edge weights and other related data.
      
      External profile information files have no fixed format, each profiler
      is free to define its own. This includes both the on-disk representation
      of the profile and the kind of profile information stored in the file.
      A common kind of profile is based on sampling (e.g., perf), which
      essentially counts how many times each line of the program has been
      executed during the run.
      
      The SampleProfileLoader pass is organized as a scalar transformation.
      On startup, it reads the file given in -sample-profile-file to
      determine what kind of profile it contains.  This file is assumed to
      contain profile information for the whole application. The profile
      data in the file is read and incorporated into the internal state of
      the corresponding profiler.
      
      To facilitate testing, I've organized the profilers to support two file
      formats: text and native. The native format is whatever on-disk
      representation the profiler wants to support, I think this will mostly
      be bitcode files, but it could be anything the profiler wants to
      support. To do this, every profiler must implement the
      SampleProfile::loadNative() function.
      
      The text format is mostly meant for debugging. Records are separated by
      newlines, but each profiler is free to interpret records as it sees fit.
      Profilers must implement the SampleProfile::loadText() function.
      
      Finally, the pass will call SampleProfile::emitAnnotations() for each
      function in the current translation unit. This function needs to
      translate the loaded profile into IR metadata, which the analyzer will
      later be able to use.
      
      This patch implements the first steps towards the above design. I've
      implemented a sample-based flat profiler. The format of the profile is
      fairly simplistic. Each sampled function contains a list of relative
      line locations (from the start of the function) together with a count
      representing how many samples were collected at that line during
      execution. I generate this profile using perf and a separate converter
      tool.
      
      Currently, I have only implemented a text format for these profiles. I
      am interested in initial feedback to the whole approach before I send
      the other parts of the implementation for review.
      
      This patch implements:
      
      - The SampleProfileLoader pass.
      - The base ExternalProfile class with the core interface.
      - A SampleProfile sub-class using the above interface. The profiler
        generates branch weight metadata on every branch instructions that
        matches the profiles.
      - A text loader class to assist the implementation of
        SampleProfile::loadText().
      - Basic unit tests for the pass.
      
      Additionally, the patch uses profile information to compute branch
      weights based on instruction samples.
      
      This patch converts instruction samples into branch weights. It
      does a fairly simplistic conversion:
      
      Given a multi-way branch instruction, it calculates the weight of
      each branch based on the maximum sample count gathered from each
      target basic block.
      
      Note that this assignment of branch weights is somewhat lossy and can be
      misleading. If a basic block has more than one incoming branch, all the
      incoming branches will get the same weight. In reality, it may be that
      only one of them is the most heavily taken branch.
      
      I will adjust this assignment in subsequent patches.
      
      llvm-svn: 194566
      8d6568b5
    • Robert Lytton's avatar
      XCore target: implement exception handling · a83c0482
      Robert Lytton authored
      llvm-svn: 194564
      a83c0482
    • Vladimir Medic's avatar
      This patch fixes a bug in floating point operands parsing, when instruction... · 77ffd7af
      Vladimir Medic authored
      This patch fixes a bug in floating point operands parsing, when instruction alias uses default register operand.
      
      llvm-svn: 194562
      77ffd7af
    • NAKAMURA Takumi's avatar
      Mips16InstrInfo.cpp: Use <cctype> instead of <ctype.h> · 435f62a8
      NAKAMURA Takumi authored
      Also, prune <stdlib.h>, seems stray.
      
      llvm-svn: 194557
      435f62a8
    • Reed Kotler's avatar
      Allow the code which returns the length for inline assembler to know · 5c8ae095
      Reed Kotler authored
      specifically about the .space directive. This allows us to force large
      blocks of code to appear in test cases for things like constant islands
      without having to make giant test cases to force things like long 
      branches to take effect.
      
      llvm-svn: 194555
      5c8ae095
    • Matt Arsenault's avatar
      R600: Fix selection failure on EXTLOAD · 00a0d6f6
      Matt Arsenault authored
      llvm-svn: 194547
      00a0d6f6
    • Juergen Ributzka's avatar
      SelectionDAG: Teach the legalizer to split SETCC if VSELECT needs splitting too. · 34c652d3
      Juergen Ributzka authored
      This patch reapplies r193676 with an additional fix for the Hexagon backend. The
      SystemZ backend has already been fixed by r194148.
      
      The Type Legalizer recognizes that VSELECT needs to be split, because the type
      is to wide for the given target. The same does not always apply to SETCC,
      because less space is required to encode the result of a comparison. As a result
      VSELECT is split and SETCC is unrolled into scalar comparisons.
      
      This commit fixes the issue by checking for VSELECT-SETCC patterns in the DAG
      Combiner. If a matching pattern is found, then the result mask of SETCC is
      promoted to the expected vector mask type for the given target. Now the type
      legalizer will split both VSELECT and SETCC.
      
      This allows the following X86 DAG Combine code to sucessfully detect the MIN/MAX
      pattern. This fixes PR16695, PR17002, and <rdar://problem/14594431>.
      
      Reviewed by Nadav
      
      llvm-svn: 194542
      34c652d3
    • Chandler Carruth's avatar
      Introduce an AnalysisManager which is like a pass manager but with a lot · 74015a70
      Chandler Carruth authored
      more smarts in it. This is where most of the interesting logic that used
      to live in the implicit-scheduling-hackery of the old pass manager will
      live.
      
      Like the previous commits, note that this is a very early prototype!
      I expect substantial changes before this is ready to use.
      
      The core of the design is the following:
      
      - We have an AnalysisManager which can be used across a series of
        passes over a module.
      - The code setting up a pass pipeline registers the analyses available
        with the manager.
      - Individual transform passes can check than an analysis manager
        provides the analyses they require in order to fail-fast.
      - There is *no* implicit registration or scheduling.
      - Analysis passes are different from other passes: they produce an
        analysis result that is cached and made available via the analysis
        manager.
      - Cached results are invalidated automatically by the pass managers.
      - When a transform pass requests an analysis result, either the analysis
        is run to produce the result or a cached result is provided.
      
      There are a few aspects of this design that I *know* will change in
      subsequent commits:
      - Currently there is no "preservation" system, that needs to be added.
      - All of the analysis management should move up to the analysis library.
      - The analysis management needs to support at least SCC passes. Maybe
        loop passes. Living in the analysis library will facilitate this.
      - Need support for analyses which are *both* module and function passes.
      - Need support for pro-actively running module analyses to have cached
        results within a function pass manager.
      - Need a clear design for "immutable" passes.
      - Need support for requesting cached results when available and not
        re-running the pass even if that would be necessary.
      - Need more thorough testing of all of this infrastructure.
      
      There are other aspects that I view as open questions I'm hoping to
      resolve as I iterate a bit on the infrastructure, and especially as
      I start writing actual passes against this.
      - Should we have separate management layers for function, module, and
        SCC analyses? I think "yes", but I'm not yet ready to switch the code.
        Adding SCC support will likely resolve this definitively.
      - How should the 'require' functionality work? Should *that* be the only
        way to request results to ensure that passes always require things?
      - How should preservation work?
      - Probably some other things I'm forgetting. =]
      
      Look forward to more patches in shorter order now that this is in place.
      
      llvm-svn: 194538
      74015a70
Loading