1. Mar 22, 2023
  2. Mar 21, 2023
    • Luke Lau's avatar
      [RISCV][NFC] Add test case for SLP reduction vectorization failure · e69f8bac
      Luke Lau authored
      Horizontal reductions still occur on RISC-V, despite the maximum SLP VF
      reported back by TTI being 1, to disable SLP.
      This can cause the cost model to think it can vectorize a gather into
      smaller, widened loads, when it will actually fail to do so.
      This should ultimately be fixed whenever SLP is re-enabled for RISC-V at
      some point.
      
      Reviewed By: reames
      
      Differential Revision: https://reviews.llvm.org/D146529
      e69f8bac
    • Erich Keane's avatar
      Fix switch warning from 514e4359 · 67852bff
      Erich Keane authored
      67852bff
    • Adam Paszke's avatar
      Support retrieving the splat value from DenseElementsAttrs in Python · 91259963
      Adam Paszke authored
      This is especially convenient when trying to resize the splat.
      
      Reviewed By: jpienaar
      
      Differential Revision: https://reviews.llvm.org/D146510
      91259963
    • Carl Ritson's avatar
      [SystemZ] Fix modelling of composed subreg indices. · e7c1b4b6
      Carl Ritson authored
      A rare case where coalescing resulted in a hh32 (high32 of high64 of vector
      register) subreg usage caused getSubReg() to fail as the vector reg does not
      have that subreg in its subregs list, but rather h32 which was expected to
      also act as hh32. See link below for the discussion when solving this.
      
      Patch By: critson
      
      Reviewed By: uweigand
      
      Fixes: https://github.com/llvm/llvm-project/issues/61390
      e7c1b4b6
    • Erich Keane's avatar
      01d05bd4
    • David Spickett's avatar
      [lldb] Fix a 32 bit warning in ScriptedProcessInterface · e73dd625
      David Spickett authored
      ../llvm-project/lldb/include/lldb/Interpreter/ScriptedProcessInterface.h:61:12:
      warning: implicit conversion from 'unsigned long long' to 'size_t' (aka 'unsigned int')
      changes value from 18446744073709551615 to 4294967295 [-Wconstant-conversion]
      ../llvm-project/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp:275:39:
      warning: result of comparison of constant 18446744073709551615 with expression
      of type 'size_t' (aka 'unsigned int') is always false [-Wtautological-constant-out-of-range-compare]
      
      This happens because size_t on 32 bit is 32 bit, but LLDB_INVALID_OFFSET is
      UINT64_MAX. Return lldb::offset_t instead, which is 64 bit everywhere.
      
      DoWriteMemory still returns size_t but this is because every other
      Process derived thing does that. As long as the failure check works I think
      it should be fine.
      
      Reviewed By: mib
      
      Differential Revision: https://reviews.llvm.org/D146124
      e73dd625
    • Max Kazantsev's avatar
      Revert "[GuardWidening] Improve analysis of potential widening into hotter block" · 68685a7f
      Max Kazantsev authored
      This reverts commit 8d2885c2.
      
      I accidentally introduced an infinite loop in this patch, will return when this is fixed.
      68685a7f
    • Philip Reames's avatar
      [LSR] Fix "new use of poison" problem in lsr-term-fold · 53e9a5dd
      Philip Reames authored
      This models the approach used in LFTR. The short summary is that we need to prove the IV is not dead first, and then we have to either prove the poison flag is valid after the new user or delete it.
      
      There are two key differences between this and LFTR.
      
      First, I allow a non-concrete start to the IV. The goal of LFTR is to canonicalize and IVs with constant starts are canonical, so the very restrictive definition there is mostly okay. Here on the other hand, we're explicitly moving *away* from the canonical form, and thus need to handle non-constant starts.
      
      Second, LFTR bails out instead of removing inbounds on a GEP. This is a pragmatic tradeoff since inbounds is hard to infer and assists aliasing. This pass runs very late, and I think the tradeoff runs the other way.
      
      A different approach we could take for the post-inc check would be to perform a pre-inc check instead of a post-inc check. We would still have to check the pre-inc IV, but that would avoid the need to drop inbounds. Doing the pre-inc check would basically trade killing a whole IV for an extra register move in the loop. I'm open to suggestions on the right approach here.
      
      Note that this analysis is quite expensive compile time wise. I have made no effort to optimize (yet).
      
      Differential Revision: https://reviews.llvm.org/D146464
      53e9a5dd
    • Nikita Popov's avatar
      [ModuleUtils] Handle globals_ctors/dtors with non-literal type (PR56809) · b4307437
      Nikita Popov authored
      If the global already exists, use its existing type, so we don't
      try to mix literal and non-literal structs among the elements.
      
      Fixes https://github.com/llvm/llvm-project/issues/56809.
      b4307437
    • Erich Keane's avatar
      inline stmt attribute diagnosing in templates · 514e4359
      Erich Keane authored
      D146089's author discovered that our diagnostics for always/no inline
      would null-dereference when used in a template. He fixed that by
      skipping in the dependent case.
      
      This patch makes sure we diagnose these after a template instantiation.
      It also adds infrastructure for other statement attributes to add
      checking/transformation.
      
      Differential Revision: https://reviews.llvm.org/D146323
      514e4359