1. Sep 04, 2017
    • Davide Italiano's avatar
      [UUID] Reimplement comparison operators more canonically. NFCI. · d8f06753
      Davide Italiano authored
      llvm-svn: 312457
      d8f06753
    • Tobias Grosser's avatar
      [ForwardOp] Remove read accesses for all instructions that have been moved · d6e0679c
      Tobias Grosser authored
      Before this patch, OpTree did not consider forwarding an operand tree consisting
      of only single LoadInst as useful. The motivation was that, like an access to a
      read-only variable, it would just replace one MemoryAccess by another. However,
      in contrast to read-only accesses, this would replace a scalar access by an
      array access, which is something worth doing.
      
      In addition, leaving scalar MemoryAccess is problematic in that VirtualUse
      prioritizes inter-Stmt use over intra-Stmt. It was possible that the same LLVM
      value has a MemoryAccess for accessing the remote Stmt's LoadInst as well as
      having the same LoadInst in its own instruction list (due to being forwarded
      from another operand tree).
      
      With this patch we ensure that if a LoadInst is forwarded is any operand tree,
      also the operand tree containing just the LoadInst is forwarded as well, which
      effectively removes the scalar MemoryAccess such that only the array access
      remains, not both.
      
      Thanks Michael for the detailed explanation.
      
      Reviewers: Meinersbur, bellu, singam-sanjay, gareevroman
      
      Subscribers: hfinkel, pollydev, llvm-commits
      
      Tags: #polly
      
      Differential Revision: https://reviews.llvm.org/D37424
      
      llvm-svn: 312456
      d6e0679c
    • Tobias Grosser's avatar
      [IslAst] Do not assert in case of empty min/max alias locations · 701d943d
      Tobias Grosser authored
      In certain situations, the context in the isl_ast_build could result for the
      min/max locations of our alias sets to become empty, which would cause an
      internal error in isl, which is then unable to derive a value for these
      expressions. Check these conditions before code generating expressions and
      instead assume that alias check succeeded. This is valid, as the corresponding
      memory accesses will not be executed under any valid context.
      
      This fixed llvm.org/PR34432. Thanks to Qirun Zhang for reporting.
      
      llvm-svn: 312455
      701d943d
    • Davide Italiano's avatar
      [Interpreter] Simplify else after return. NFCI. · 45188dd9
      Davide Italiano authored
      llvm-svn: 312454
      45188dd9
    • Davide Italiano's avatar
      e08ea3a1
    • Tobias Grosser's avatar
      [IslAst] Move buildCondition to isl++ · 6b1e4613
      Tobias Grosser authored
      llvm-svn: 312452
      6b1e4613
    • Tobias Grosser's avatar
      [ScopHelper] Do not crash on unreachable blocks · 99ccf056
      Tobias Grosser authored
      This resolves llvm.org/PR34433. Thanks to Zhendong Su for reporting.
      
      llvm-svn: 312451
      99ccf056
    • Craig Topper's avatar
      [X86] Add patterns to turn an insert into lower subvector of a zero vector... · 8ee36ffb
      Craig Topper authored
      [X86] Add patterns to turn an insert into lower subvector of a zero vector into a move instruction which will implicitly zero the upper elements.
      
      Ideally we'd be able to emit the SUBREG_TO_REG without the explicit register->register move, but we'd need to be sure the producing operation would select something that guaranteed the upper bits were already zeroed.
      
      llvm-svn: 312450
      8ee36ffb
    • Craig Topper's avatar
      [X86] Add VBLENDPS/VPBLENDD to the execution domain fixing tables. · fa82efb5
      Craig Topper authored
      llvm-svn: 312449
      fa82efb5
    • Craig Topper's avatar
      [X86] Canonicalize (concat_vectors X, zero) -> (insert_subvector zero, X, 0). · bb6506d2
      Craig Topper authored
      In a future patch, I plan to teach isel to use a small vector move with implicit zeroing of the upper elements when it sees the (insert_subvector zero, X, 0) pattern.
      
      llvm-svn: 312448
      bb6506d2
    • Hal Finkel's avatar
      [CodeGen] Treat all vector fields as mayalias · c9fac9e1
      Hal Finkel authored
      Because it is common to treat vector types as an array of their elements, or
      even some other type that's not the element type, and thus index into them, we
      can't use struct-path TBAA for these accesses. Even though we already treat all
      vector types as equivalent to 'char', we were using field-offset information
      for them with TBAA, and this renders undefined the intra-value indexing we
      intend to allow. Note that, although 'char' is universally aliasing, with path
      TBAA, we can still differentiate between access to s.a and s.b in
        struct { char a, b; } s;. We can't use this capability as-is for vector types.
      
      Fixes PR33967.
      
      llvm-svn: 312447
      c9fac9e1
    • Michael Kruse's avatar
      [ForwardOpTree] Fix typos. NFC. · 7954a221
      Michael Kruse authored
      llvm-svn: 312446
      7954a221
  2. Sep 03, 2017