Skip to content
  1. Dec 16, 2015
    • Benjamin Kramer's avatar
      Generate a clang CompilationDatabase when running CMake · 2c571205
      Benjamin Kramer authored
      This generates a compile_commands.json file, which tells tools like
      YouCompleteMe and clang_complete exactly how to build each source file.
      
      Patch by Justin Lebar!
      
      llvm-svn: 255789
      2c571205
    • Dan Gohman's avatar
      e2831b4e
    • Ulrich Weigand's avatar
      [SystemZ] Sort relocs to avoid code corruption by linker optimization · 88a7a2ea
      Ulrich Weigand authored
      The SystemZ linkers provide an optimization to transform a general-
      or local-dynamic TLS sequence into an initial-exec sequence if possible.
      Do do that, the compiler generates a function call to __tls_get_offset,
      which is a brasl instruction annotated with *two* relocations:
      
      - a R_390_PLT32DBL to install __tls_get_offset as branch target
      - a R_390_TLS_GDCALL / R_390_TLS_LDCALL to inform the linker that
        the TLS optimization should be performed if possible
      
      If the optimization is performed, the brasl is replaced by an ld load
      instruction.
      
      However, *both* relocs are processed independently by the linker.
      Therefore it is crucial that the R_390_PLT32DBL is processed *first*
      (installing the branch target for the brasl) and the R_390_TLS_GDCALL
      is processed *second* (replacing the whole brasl with an ld).
      
      If the relocs are swapped, the linker will first replace the brasl
      with an ld, and *then* install the __tls_get_offset branch target
      offset.  Since ld has a different layout than brasl, this may even
      result in a completely different (or invalid) instruction; in any
      case, the resulting code is corrupted.
      
      Unfortunately, the way the MC common code sorts relocations causes
      these two to *always* end up the wrong way around, resulting in
      wrong code generation by the linker and crashes.
      
      This patch overrides the sortRelocs routine to detect this particular
      pair of relocs and enforce the required order.
      
      llvm-svn: 255787
      88a7a2ea
    • Ulrich Weigand's avatar
      [SystemZ] Fix assertion failure in adjustSubwordCmp · 47f36493
      Ulrich Weigand authored
      When comparing a zero-extended value against a constant small enough to
      be in range of the inner type, it doesn't matter whether a signed or
      unsigned compare operation (for the outer type) is being used.  This is
      why the code in adjustSubwordCmp had this assertion:
      
          assert(C.ICmpType == SystemZICMP::Any &&
                 "Signedness shouldn't matter here.");
      
      assuming the the caller had already detected that fact.  However, it
      turns out that there cases, in particular with always-true or always-
      false conditions that have not been eliminated when compiling at -O0,
      where this is not true.
      
      Instead of failing an assertion if C.ICmpType is not SystemZICMP::Any
      here, we can simply *set* it safely to SystemZICMP::Any, however.
      
      llvm-svn: 255786
      47f36493
    • Tobias Edler von Koch's avatar
      [Hexagon] Make memcpy lowering thread-safe · b51460cf
      Tobias Edler von Koch authored
      This removes an unpleasant hack involving a global variable for special
      lowering of certain memcpy calls. These are now lowered as intended in
      EmitTargetCodeForMemcpy in the same way that other targets do it.
      
      llvm-svn: 255785
      b51460cf
    • Charlie Turner's avatar
      [NFC] Update horizontal reduction test cases. · b69b9285
      Charlie Turner authored
          
      These testcases no longer need to specify -slp-vectorize-hor, since it was
      enabled by default in r252733.
      
      llvm-svn: 255783
      b69b9285
    • Dan Gohman's avatar
      [WebAssembly] Support more kinds of inline asm operands · 30a42bf5
      Dan Gohman authored
      llvm-svn: 255782
      30a42bf5
    • Sumanth Gundapaneni's avatar
      Install runtime dlls in the INSTALL_DIR/bin directory. NFC · 279c73f9
      Sumanth Gundapaneni authored
      One of the earlier patches updated the cmake rule to install the
      runtime dlls in INSTALL_DIR/lib which is not correct. This patch
      updates the rule to install CMake's RUNTIME in bin directory
      Differential Revision: http://reviews.llvm.org/D15505
      
      llvm-svn: 255781
      279c73f9
    • Krzysztof Parzyszek's avatar
      [Packetizer] Add a check whether an instruction should be packetized now · 2005d7dc
      Krzysztof Parzyszek authored
      Add a function VLIWPacketizerList::shouldAddToPacket, which will allow
      specific implementations to decide if it is profitable to add given
      instruction to the current packet.
      
      llvm-svn: 255780
      2005d7dc
    • Teresa Johnson's avatar
      Add RAII wrapper for gold plugin file management · cb15b739
      Teresa Johnson authored
      Suggested in review of r255256.
      
      llvm-svn: 255779
      cb15b739
    • Vaivaswatha Nagaraj's avatar
      Add InaccessibleMemOnly and inaccessibleMemOrArgMemOnly attributes · fb3f4907
      Vaivaswatha Nagaraj authored
      Summary:
      This patch introduces two new function attributes 
      
      InaccessibleMemOnly: This attribute indicates that the function may only access memory that is not accessible by the program/IR being compiled. This is a weaker form of ReadNone.
      inaccessibleMemOrArgMemOnly: This attribute indicates that the function may only access memory that is either not accessible by the program/IR being compiled, or is pointed to by its pointer arguments. This is a weaker form of  ArgMemOnly
      
      Test cases have been updated. This revision uses this (https://github.com/llvm-mirror/llvm/commit/d001932f3a8aa1ebd1555162fdce365f011bc292) as reference.
      
      Reviewers: jmolloy, hfinkel
      
      Subscribers: reames, joker.eph, llvm-commits
      
      Differential Revision: http://reviews.llvm.org/D15499
      
      llvm-svn: 255778
      fb3f4907
    • James Molloy's avatar
      [SimplifyCFG] Don't create unnecessary PHIs · 3d21dcf3
      James Molloy authored
      In conditional store merging, we were creating PHIs when we didn't
      need to. If the value to be predicated isn't defined in the block
      we're predicating, then it doesn't need a PHI at all (because we only
      deal with triangles and diamonds, any value not in the predicated BB
      must dominate the predicated BB).
      
      This fixes a large code size increase in some benchmarks in a popular embedded benchmark suite.
      
      Now with a fix (and fixed tests) for the conformance issue seen in Chromium.
      
      llvm-svn: 255767
      3d21dcf3
    • Oliver Stannard's avatar
      [ARM] Add ARMv8.2-A FP16 vector instructions · 2de8c169
      Oliver Stannard authored
      ARMv8.2-A adds 16-bit floating point versions of all existing SIMD
      floating-point instructions. This is an optional extension, so all of
      these instructions require the FeatureFullFP16 subtarget feature.
      
      Note that VFP without SIMD is not a valid combination for any version of
      ARMv8-A, but I have ensured that these instructions all depend on both
      FeatureNEON and FeatureFullFP16 for consistency.
      
      Differential Revision: http://reviews.llvm.org/D15039
      
      llvm-svn: 255764
      2de8c169
    • Oliver Stannard's avatar
      [ARM] Add ARMv8.2-A FP16 scalar instructions · 48568cbe
      Oliver Stannard authored
      ARMv8.2-A adds 16-bit floating point versions of all existing VFP
      floating-point instructions. This is an optional extension, so all of
      these instructions require the FeatureFullFP16 subtarget feature.
      
      The assembly for these instructions uses S registers (AArch32 does not
      have H registers), but the instructions have ".f16" type specifiers
      rather than ".f32" or ".f64". The top 16 bits of each source register
      are ignored, and the top 16 bits of the destination register are set to
      zero.
      
      These instructions are mostly the same as the 32- and 64-bit versions,
      but they use coprocessor 9 rather than 10 and 11.
      
      Two new instructions, VMOVX and VINS, have been added to allow packing
      and extracting two 16-bit floats stored in the top and bottom halves of
      an S register.
      
      New fixup kinds have been added for the PC-relative load and store
      instructions, but no ELF relocations have been added as they have a
      range of 512 bytes.
      
      Differential Revision: http://reviews.llvm.org/D15038
      
      llvm-svn: 255762
      48568cbe
    • Michael Kuperstein's avatar
      [X86] Improve shift combining · e75e6e2a
      Michael Kuperstein authored
      This folds (ashr (shl a, [56,48,32,24,16]), SarConst)
      into       (shl, (sext (a), [56,48,32,24,16] - SarConst))
      or into    (lshr, (sext (a), SarConst - [56,48,32,24,16]))
      depending on sign of (SarConst - [56,48,32,24,16])
      
      sexts in X86 are MOVs.
      The MOVs have the same code size as above SHIFTs (only SHIFT by 1 has lower code size).
      However the MOVs have 2 advantages to SHIFTs on x86:
      1. MOVs can write to a register that differs from source.
      2. MOVs accept memory operands.
      
      This fixes PR24373.
      
      Patch by: evgeny.v.stupachenko@intel.com
      Differential Revision: http://reviews.llvm.org/D13161
      
      llvm-svn: 255761
      e75e6e2a
    • Keno Fischer's avatar
      [SectionMemoryManager] Make better use of virtual memory · 94f181a4
      Keno Fischer authored
      Summary: On Windows, the allocation granularity can be significantly
      larger than a page (64K), so with many small objects, just clearing
      the FreeMem list rapidly leaks quite a bit of virtual memory space
      (if not rss). Fix that by only removing those parts of the FreeMem
      blocks that overlap pages for which we are applying memory permissions,
      rather than dropping the FreeMem blocks entirely.
      
      Reviewers: lhames
      
      Subscribers: llvm-commits
      
      Differential Revision: http://reviews.llvm.org/D15202
      
      llvm-svn: 255760
      94f181a4
    • Vikram TV's avatar
      Recommit LiveDebugValues pass after fixing a couple of minor issues. · 859ad29b
      Vikram TV authored
      llvm-svn: 255759
      859ad29b
    • Chen Li's avatar
      Remove FileCheck from test case token_landingpad.ll. · e2222fdf
      Chen Li authored
      The test case only needs to make sure it does not crash LLVM.
      
      llvm-svn: 255755
      e2222fdf
    • Cong Hou's avatar
      08ec3d91
    • George Burgess IV's avatar
      Minor cleanup of Attribute code. NFC. · 500d3039
      George Burgess IV authored
      llvm-svn: 255751
      500d3039
    • Chen Li's avatar
    • Chen Li's avatar
      [SelectionDAGBuilder] Adds support for landingpads of token type · 3e8330a1
      Chen Li authored
      Summary: This patch adds a check in visitLandingPad to see if landingpad's result type is token type. If so, do not create DAG nodes for its exception pointer and selector value. This patch enables the back end to handle landingpads of token type.
      
      Reviewers: JosephTremoulet, majnemer, rnk
      
      Subscribers: sanjoy, llvm-commits
      
      Differential Revision: http://reviews.llvm.org/D15405
      
      llvm-svn: 255749
      3e8330a1
    • Peter Collingbourne's avatar
      Fuzzer: Fix library dependencies. · 16c19787
      Peter Collingbourne authored
      Newer versions of libstdc++ (4.9+), as well as libc++, depend directly on
      libpthread from the standard library headers, so libfuzzer needs to declare
      a standard library dependency.
      
      llvm-svn: 255745
      16c19787
    • Philip Reames's avatar
      Speculative fix for windows build · 23319014
      Philip Reames authored
      llvm-svn: 255743
      23319014
    • Philip Reames's avatar
      [EarlyCSE] DSE of stores which write back loaded values · ae1f265b
      Philip Reames authored
      Extend EarlyCSE with an additional style of dead store elimination. If we write back a value just read from that memory location, we can eliminate the store under the assumption that the value hasn't changed.
      
      I'm implementing this mostly because I noticed the omission when looking at the code. It seemed strange to have InstCombine have a peephole which was more powerful than EarlyCSE. :)
      
      Differential Revision: http://reviews.llvm.org/D15397
      
      llvm-svn: 255739
      ae1f265b
    • Philip Reames's avatar
      [IR] Add support for floating pointer atomic loads and stores · 61a24ab6
      Philip Reames authored
      This patch allows atomic loads and stores of floating point to be specified in the IR and adds an adapter to allow them to be lowered via existing backend support for bitcast-to-equivalent-integer idiom.
      
      Previously, the only way to specify a atomic float operation was to bitcast the pointer to a i32, load the value as an i32, then bitcast to a float. At it's most basic, this patch simply moves this expansion step to the point we start lowering to the backend.
      
      This patch does not add canonicalization rules to convert the bitcast idioms to the appropriate atomic loads. I plan to do that in the future, but for now, let's simply add the support. I'd like to get instruction selection working through at least one backend (x86-64) without the bitcast conversion before canonicalizing into this form.
      
      Similarly, I haven't yet added the target hooks to opt out of the lowering step I added to AtomicExpand. I figured it would more sense to add those once at least one backend (x86) was ready to actually opt out.
      
      As you can see from the included tests, the generated code quality is not great. I plan on submitting some patches to fix this, but help from others along that line would be very welcome. I'm not super familiar with the backend and my ramp up time may be material.
      
      Differential Revision: http://reviews.llvm.org/D15471
      
      llvm-svn: 255737
      61a24ab6
    • Mike Aizatsky's avatar
      [sancov] blacklist support. · 2ad650ea
      Mike Aizatsky authored
      Summary:
      Using the blacklist the user can filter own unwanted functions
      from all outputs. By default blacklist contains "fun:__sancov*" line.
      
      Differential Revision: http://reviews.llvm.org/D15364
      
      llvm-svn: 255732
      2ad650ea
    • Justin Bogner's avatar
      Fix typo in r255720 · e0fde5c6
      Justin Bogner authored
      llvm-svn: 255724
      e0fde5c6
    • Wolfgang Pieb's avatar
      Test commit: fixed spelling error in comment. · 60b7ca67
      Wolfgang Pieb authored
      llvm-svn: 255721
      60b7ca67
    • Justin Bogner's avatar
      LPM: Simplify how passes mark loops for deletion. NFC · 6e9810c8
      Justin Bogner authored
      When a pass removes a loop it currently has to reach up into the
      LPPassManager's internals to update the state of the iteration over
      loops. This reverse dependency results in a pretty awkward interplay
      of the LPPassManager and its Passes.
      
      Here, we change this to instead keep track of when a loop has become
      "unlooped" in the Loop objects themselves, then the LPPassManager can
      check this and manipulate its own state directly. This opens the door
      to allow most of the loop passes to work without a backreference to
      the LPPassManager.
      
      I've kept passes calling the LPPassManager::deleteLoopFromQueue API
      now so I could put an assert in to prove that this is NFC, but a later
      pass will update passes just to preserve the LoopInfo directly and
      stop referencing the LPPassManager completely.
      
      llvm-svn: 255720
      6e9810c8
    • Richard Trieu's avatar
      8f3118f4
    • Peter Collingbourne's avatar
      Un-XFAIL JIT EH tests under [am]san. · 87debbbb
      Peter Collingbourne authored
      These tests started passing after libcxxabi's r255559, which fixed a problem
      relating to how libcxxabi links its EH library. The test failures were
      caused by an issue with libc++, not the sanitizers (confirmed by building a
      pre-r255559 revision with libc++/libc++abi and without sanitizers), so they
      should never have been XFAILed under the sanitizers.
      
      llvm-svn: 255708
      87debbbb
    • Reid Kleckner's avatar
      [WinEH] Make llvm.x86.seh.recoverfp work on x64 · 7850c9f5
      Reid Kleckner authored
      It adjusts from RSP-after-prologue to RBP, which is what SEH filters
      need to do before they can use llvm.localrecover.
      
      Fixes SEH filter captures, which were broken in r250088.
      
      Issue reported by Alex Crichton.
      
      llvm-svn: 255707
      7850c9f5
    • Evgeniy Stepanov's avatar
      Suppress unused variable warning in the no-asserts build. · 4059eeca
      Evgeniy Stepanov authored
      llvm-svn: 255706
      4059eeca
    • Richard Trieu's avatar
      fc69e7d6
    • Hans Wennborg's avatar
      Fix "Not having LAHF/SAHF" assert. · 7036e503
      Hans Wennborg authored
      It wants to assert that the subtarget is 64-bit, not the register.
      
      llvm-svn: 255703
      7036e503
    • Tom Stellard's avatar
      AMDGPU/SI: Set the code object work group segment size when targeting HSA · 7750f4ed
      Tom Stellard authored
      Reviewers: arsenm
      
      Subscribers: arsenm, llvm-commits
      
      Differential Revision: http://reviews.llvm.org/D15493
      
      llvm-svn: 255702
      7750f4ed
    • Davide Italiano's avatar
      [llvm-objdump/MachODump] Shrink code a little bit. NFC. · 3eb47e22
      Davide Italiano authored
      llvm-svn: 255701
      3eb47e22
    • Sanjay Patel's avatar
      [x86] inline calls to fmaxf / llvm.maxnum.f32 using maxss (PR24475) · 271efcdf
      Sanjay Patel authored
      This patch improves on the suggested codegen from PR24475:
      https://llvm.org/bugs/show_bug.cgi?id=24475
      
      but only for the fmaxf() case to start, so we can sort out any bugs before
      extending to fmin, f64, and vectors.
      
      The fmax / maxnum definitions provide us flexibility for signed zeros, so the
      only thing we have to worry about in this replacement sequence is NaN handling.
      
      Note 1: It may be better to implement this as lowerFMAXNUM(), but that exposes
      a problem: SelectionDAGBuilder::visitSelect() transforms compare/select
      instructions into FMAXNUM nodes if we declare FMAXNUM legal or custom. Perhaps
      that should be checking for NaN inputs or global unsafe-math before transforming?
      As it stands, that bypasses a big set of optimizations that the x86 backend 
      already has in PerformSELECTCombine().
      
      Note 2: The v2f32 test reveals another bug; the vector is extended to v4f32, so
      we have completely unnecessary operations happening on undef elements of the 
      vector.
      
      Differential Revision: http://reviews.llvm.org/D15294
      
      llvm-svn: 255700
      271efcdf
    • James Y Knight's avatar
      [Sparc] Tweak r255668: Use llvm_unreachable. · 99fcb721
      James Y Knight authored
      llvm-svn: 255698
      99fcb721
Loading