Skip to content
  1. Nov 13, 2013
    • 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
    • Nadav Rotem's avatar
      Update the docs to match the function name. · ea186b95
      Nadav Rotem authored
      llvm-svn: 194537
      ea186b95
    • Aaron Ballman's avatar
      Replacing HUGE_VALF with llvm::huge_valf in order to work around a warning triggered in MSVC 12. · 04999041
      Aaron Ballman authored
      Patch reviewed by Reid Kleckner and Jim Grosbach.
      
      llvm-svn: 194533
      04999041
    • Rafael Espindola's avatar
      Remove always true flag. · 6cd1b9ae
      Rafael Espindola authored
      llvm-svn: 194530
      6cd1b9ae
  2. Nov 12, 2013
Loading