Skip to content
  1. Nov 08, 2019
    • Gil Rapaport's avatar
      Revert "[LV] Apply sink-after & interleave-groups as VPlan transformations (NFCI)" · 9f08ce0d
      Gil Rapaport authored
      This reverts commit 11ed1c02 - causes an assert failure.
      9f08ce0d
    • Fangrui Song's avatar
      5b47efa2
    • Nikita Popov's avatar
      Reapply [LVI] Normalize pointer behavior · 885a05f4
      Nikita Popov authored
      Fix cache invalidation by not guarding the dereferenced pointer cache
      erasure by SeenBlocks. SeenBlocks is only populated when actually
      caching a value in the block, which doesn't necessarily have to happen
      just because dereferenced pointers were calculated.
      
      -----
      
      Related to D69686. As noted there, LVI currently behaves differently
      for integer and pointer values: For integers, the block value is always
      valid inside the basic block, while for pointers it is only valid at
      the end of the basic block. I believe the integer behavior is the
      correct one, and CVP relies on it via its getConstantRange() uses.
      
      The reason for the special pointer behavior is that LVI checks whether
      a pointer is dereferenced in a given basic block and marks it as
      non-null in that case. Of course, this information is valid only after
      the dereferencing instruction, or in conservative approximation,
      at the end of the block.
      
      This patch changes the treatment of dereferencability: Instead of
      including it inside the block value, we instead treat it as something
      similar to an assume (it essentially is a non-nullness assume) and
      incorporate this information in intersectAssumeOrGuardBlockValueConstantRange()
      if the context instruction is the terminator of the basic block.
      This happens either when determining an edge-value internally in LVI,
      or when a terminator was explicitly passed to getValueAt(). The latter
      case makes this change not fully NFC, because we can now fold
      terminator icmps based on the dereferencability information in the
      same block. This is the reason why I changed one JumpThreading test
      (it would optimize the condition away without the change).
      
      Of course, we do not want to recompute dereferencability on each
      intersectAssume call, so we need a new cache for this. The
      dereferencability analysis requires walking the entire basic block
      and computing underlying objects of all memory operands. This was
      previously done separately for each queried pointer value. In the
      new implementation (both because this makes the caching simpler,
      and because it is faster), I instead only walk the full BB once and
      cache all the dereferenced pointers. So the traversal is now performed
      only once per BB, instead of once per queried pointer value.
      
      I think the overall model now makes more sense than before, and there
      will be no more pitfalls due to differing integer/pointer behavior.
      
      Differential Revision: https://reviews.llvm.org/D69914
      885a05f4
    • Jan Korous's avatar
      [clang] Add VFS support for sanitizers' blacklists · 590f279c
      Jan Korous authored
      Differential Revision: https://reviews.llvm.org/D69648
      590f279c
    • Tom Stellard's avatar
      [cmake] Remove LLVM_{BUILD,LINK}_LLVM_DYLIB options on Windows · 3ffbf972
      Tom Stellard authored
      Summary: The options aren't supported so they can be removed.
      
      Reviewers: beanz, smeenai, compnerd
      
      Reviewed By: compnerd
      
      Subscribers: mgorny, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D69877
      3ffbf972
    • Melanie Blower's avatar
      Reapply "Fix crash on switch conditions of non-integer types in templates" · 75994846
      Melanie Blower authored
      This patch reapplies commit 76945821. The first version broke
      buildbots due to clang-tidy test fails. The fails are because some
      errors in templates are now diagnosed earlier (does not wait till
      instantiation). I have modified the tests to add checks for these
      diagnostics/prevent these diagnostics. There are no additional code
      changes.
      
      Summary of code changes:
      
      Clang currently crashes for switch statements inside a template when the
      condition is a non-integer field member because contextual implicit
      conversion is skipped when parsing the condition. This conversion is
      however later checked in an assert when the case statement is handled.
      The conversion is skipped when parsing the condition because
      the field member is set as type-dependent based on its containing class.
      This patch sets the type dependency based on the field's type instead.
      
      This patch fixes Bug 40982.
      
      Reviewers: rnk, gribozavr2
      
      Patch by: Elizabeth Andrews (eandrews)
      
      Differential revision: https://reviews.llvm.org/D69950
      75994846
    • evgeny's avatar
      [ThinLTO] Fix bug when importing writeonly variables · 7f92d66f
      evgeny authored
      Patch enables import of write-only variables with non-trivial initializers
      to fix linker errors. Initializers of imported variables are converted to
      'zeroinitializer' to avoid promotion of referenced objects.
      
      Differential revision: https://reviews.llvm.org/D70006
      7f92d66f
    • Tom Stellard's avatar
      [cmake] Remove SVN support from VersionFromVCS.cmake · caad2170
      Tom Stellard authored
      Reviewers: phosek
      
      Subscribers: mgorny, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D69682
      caad2170
    • Lei Huang's avatar
      [PowerPC][compiler-rt][builtins]Fix __fixunstfti builtin on PowerPC · 71f47614
      Lei Huang authored
      __fixunstfti converts a long double (IBM double-double) to an unsigned 128 bit
      integer.  This patch enables it to handle a previously unhandled case in which
      a negative low double may impact the result of the conversion.
      
      Collaborated with @masoud.ataei and @renenkel.
      Patch By: Baptiste Saleil
      
      Differential Revision: https://reviews.llvm.org/D69193
      71f47614
    • Adrian Prantl's avatar
      Properly propagate is_variadic. · 8204d9ff
      Adrian Prantl authored
      This fixes a copy&paste error made when adapting to new clang API
      which was promptly caught by the bots.
      8204d9ff
    • Fangrui Song's avatar
      [ELF] Suggest extern "C" when the definition is mangled while an undefined reference is not · 59d3fbc2
      Fangrui Song authored
      The definition may be mangled while an undefined reference is not.
      This may come up when (1) the reference is from a C file or (2) the definition
      misses an extern "C".
      
      (2) is more common. Suggest an arbitrary mangled name that matches the
      undefined reference, if such a definition exists.
      
        ld.lld: error: undefined symbol: foo
        >>> referenced by a.o:(.text+0x1)
        >>> did you mean to declare foo(int) as extern "C"?
        >>> defined in: a1.o
      
      Reviewed By: dblaikie, ruiu
      
      Differential Revision: https://reviews.llvm.org/D69650
      59d3fbc2
    • Fangrui Song's avatar
      [ELF] Suggest extern "C" when an undefined reference is mangled while the definition is not · 70e62a4f
      Fangrui Song authored
      When missing an extern "C" declaration, an undefined reference may be
      mangled while the definition is not. Suggest the missing
      extern "C" and the base name.
      
      Reviewed By: ruiu
      
      Differential Revision: https://reviews.llvm.org/D69592
      70e62a4f
    • Kazu Hirata's avatar
      [JumpThreading] Fix a comment typo (NFC) · 9aff5e1c
      Kazu Hirata authored
      Reviewers: kazu
      
      Subscribers: hiraditya, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D70013
      9aff5e1c
    • Nick Desaulniers's avatar
      remove redundant LLVM version from version string when setting CLANG_VENDOR · 51adeae1
      Nick Desaulniers authored
      Summary:
      When downstream LLVM distributions (like AOSP) set the CLANG_VENDOR
      cmake variable, the version string printed by the clang driver looks
      like:
      
      $ clang --version
      [CLANG_VENDOR] clang version X.X.X ([CLANG_REPOSITORY_STRING] sha) (based on LLVM X.X.X)
      
      Rather than the more standard:
      $ clang --version
      clang version X.X.X ([CLANG_REPOSITORY_STRING] sha)
      
      Based on feedback the the version string is a little long, the trailing
      "(based on LLVM X.X.X)" is redundant and makes less sense after moving
      LLVM to the monorepo. And it is only added should vendors set the cmake
      variable CLANG_VENDOR. Let's remove it.
      
      Reviewers: jyknight, eli.friedman, rsmith, rjmccall, efriedma
      
      Reviewed By: efriedma
      
      Subscribers: arphaman, efriedma, cfe-commits, srhines
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D69925
      51adeae1
    • Nikita Popov's avatar
      Revert "[LVI] Normalize pointer behavior" · 43ae5f43
      Nikita Popov authored
      This reverts commit 15bc4dc9.
      
      clang-cmake-x86_64-sde-avx512-linux buildbot reported quite a few
      compile-time regressions in test-suite, will investigate.
      43ae5f43
    • Jonas Devlieghere's avatar
      [lldb] Make Asan/SIP workaround work for Python 3 · 4d0e07f7
      Jonas Devlieghere authored
      Make the check generic instead of hard-coding the path to Python 2. This
      also fixes the print-syntax to be compatible with both versions.
      4d0e07f7
    • Jonas Devlieghere's avatar
      [lldb] Prevent Asan/SIP workaround from affecting Python in /usr/local/bin · 6b44a41f
      Jonas Devlieghere authored
      The code that works around SIP was unintentionally being triggered for
      /usr/local/bin/python as well. That caused trouble on GreenDragon where
      we were swapping out a Python 3 executable with the system's Python 2
      executable.
      6b44a41f
    • Adrian Prantl's avatar
    • Adrian Prantl's avatar
    • Nikita Popov's avatar
      [LVI] Normalize pointer behavior · 15bc4dc9
      Nikita Popov authored
      Related to D69686. As noted there, LVI currently behaves differently
      for integer and pointer values: For integers, the block value is always
      valid inside the basic block, while for pointers it is only valid at
      the end of the basic block. I believe the integer behavior is the
      correct one, and CVP relies on it via its getConstantRange() uses.
      
      The reason for the special pointer behavior is that LVI checks whether
      a pointer is dereferenced in a given basic block and marks it as
      non-null in that case. Of course, this information is valid only after
      the dereferencing instruction, or in conservative approximation,
      at the end of the block.
      
      This patch changes the treatment of dereferencability: Instead of
      including it inside the block value, we instead treat it as something
      similar to an assume (it essentially is a non-nullness assume) and
      incorporate this information in intersectAssumeOrGuardBlockValueConstantRange()
      if the context instruction is the terminator of the basic block.
      This happens either when determining an edge-value internally in LVI,
      or when a terminator was explicitly passed to getValueAt(). The latter
      case makes this change not fully NFC, because we can now fold
      terminator icmps based on the dereferencability information in the
      same block. This is the reason why I changed one JumpThreading test
      (it would optimize the condition away without the change).
      
      Of course, we do not want to recompute dereferencability on each
      intersectAssume call, so we need a new cache for this. The
      dereferencability analysis requires walking the entire basic block
      and computing underlying objects of all memory operands. This was
      previously done separately for each queried pointer value. In the
      new implementation (both because this makes the caching simpler,
      and because it is faster), I instead only walk the full BB once and
      cache all the dereferenced pointers. So the traversal is now performed
      only once per BB, instead of once per queried pointer value.
      
      I think the overall model now makes more sense than before, and there
      will be no more pitfalls due to differing integer/pointer behavior.
      
      Differential Revision: https://reviews.llvm.org/D69914
      15bc4dc9
    • Simon Pilgrim's avatar
    • Simon Pilgrim's avatar
    • Simon Pilgrim's avatar
    • Simon Pilgrim's avatar
      CrashRecoveryContextCleanup - fix uninitialized variable warnings. NFCI. · 24d507f4
      Simon Pilgrim authored
      Remove default values from constructor.
      24d507f4
    • Adrian Prantl's avatar
      Redeclare Objective-C property accessors inside the ObjCImplDecl in which they are synthesized. · 2073dd2d
      Adrian Prantl authored
      This patch is motivated by (and factored out from)
      https://reviews.llvm.org/D66121 which is a debug info bugfix. Starting
      with DWARF 5 all Objective-C methods are nested inside their
      containing type, and that patch implements this for synthesized
      Objective-C properties.
      
      1. SemaObjCProperty populates a list of synthesized accessors that may
         need to inserted into an ObjCImplDecl.
      
      2. SemaDeclObjC::ActOnEnd inserts forward-declarations for all
         accessors for which no override was provided into their
         ObjCImplDecl. This patch does *not* synthesize AST function
         *bodies*. Moving that code from the static analyzer into Sema may
         be a good idea though.
      
      3. Places that expect all methods to have bodies have been updated.
      
      I did not update the static analyzer's inliner for synthesized
      properties to point back to the property declaration (see
      test/Analysis/Inputs/expected-plists/nullability-notes.m.plist), which
      I believed to be more bug than a feature.
      
      Differential Revision: https://reviews.llvm.org/D68108
      
      rdar://problem/53782400
      2073dd2d
    • Philip Reames's avatar
      [LICM] Support hosting of dynamic allocas out of loops · 8d22100f
      Philip Reames authored
      This patch implements a correct, but not terribly useful, transform. In particular, if we have a dynamic alloca in a loop which is guaranteed to execute, and provably not captured, we hoist the alloca out of the loop. The capture tracking is needed so that we can prove that each previous stack region dies before the next one is allocated. The transform decreases the amount of stack allocation needed by a linear factor (e.g. the iteration count of the loop).
      
      Now, I really hope no one is actually using dynamic allocas. As such, why this patch?
      
      Well, the actual problem I'm hoping to make progress on is allocation hoisting. There's a large draft patch out for review (https://reviews.llvm.org/D60056), and this patch was the smallest chunk of testable functionality I could come up with which takes a step vaguely in that direction.
      
      Once this is in, it makes motivating the changes to capture tracking mentioned in TODOs testable. After that, I hope to extend this to trivial malloc free regions (i.e. free dominating all loop exits) and allocation functions for GCed languages.
      
      Differential Revision: https://reviews.llvm.org/D69227
      8d22100f
    • Philip Reames's avatar
      [LICM] Hoisting of widenable conditions out of loops · 787dba7a
      Philip Reames authored
      The change itself is straight forward and obvious, but ... there's an existing test checking for exactly the opposite. Both I and Artur think this is simply conservatism in the initial implementation.  If anyone bisects a problem to this, a counter example will be very interesting.
      
      Differential Revision: https://reviews.llvm.org/D69907
      787dba7a
    • Tim Renouf's avatar
      [CostModel] Fixed isExtractSubvectorMask for undef index off end · 0703db39
      Tim Renouf authored
      ShuffleVectorInst::isExtractSubvectorMask, introduced in
        [CostModel] Add SK_ExtractSubvector handling to getInstructionThroughput (PR39368)
      
      erroneously thought that
      %340 = shufflevector <4 x float> %339, <4 x float> undef, <3 x i32> <i32 2, i32 3, i32 undef>
      
      is a subvector extract, even though it goes off the end of the parent
      vector with the undef index. That then caused an assert in
      BasicTTIImplBase::getExtractSubvectorOverhead.
      
      This commit fixes that, by not considering the above a subvector
      extract.
      
      Differential Revision: https://reviews.llvm.org/D70005
      
      Change-Id: I87b8b00b24bef19ffc9a1b82ef4eca3b8a246eaf
      0703db39
    • Yi-Hong Lyu's avatar
      [PowerPC] Remove redundant CRSET/CRUNSET in custom lowering of known CR bit spills · a3db9c08
      Yi-Hong Lyu authored
      We lower known CR bit spills (CRSET/CRUNSET) to load and spill the known value
      but forgot to remove the redundant spills.
      
      e.g., This sequence was used to spill a CRUNSET:
          crclr   4*cr5+lt
          mfocrf  r3,4
          rlwinm  r3,r3,20,0,0
          stw     r3,132(r1)
      
      Custom lowering of known CR bit spills lower it to:
          crxor 4*cr5+lt, 4*cr5+lt, 4*cr5+lt
          li  r3,0
          stw r3,132(r1)
      
      crxor is redundant if there is no use of 4*cr5+lt so we should remove it
      
      Differential revision: https://reviews.llvm.org/D67722
      a3db9c08
    • Simon Pilgrim's avatar
      raw_ostream - fix static analyzer warnings. NFCI. · 9ee76ab3
      Simon Pilgrim authored
       - uninitialized variables
       - make BufferKind a scoped enum class
      9ee76ab3
    • Simon Pilgrim's avatar
    • Jan Vesely's avatar
      libclc: Drop the old python based build system · d6e0e6d2
      Jan Vesely authored
      Reviewer: tstellar
      Differential Revision: https://reviews.llvm.org/D69966
      d6e0e6d2
    • Jan Vesely's avatar
      libclc: Drop travis · 00eca0bf
      Jan Vesely authored
      It only works for standalone repos.
      
      Reviewer: tstellar
      Differential Revision: https://reviews.llvm.org/D69965
      00eca0bf
    • Raphael Isemann's avatar
      [lldb] Skip parts of TestCallOverriddenMethod.py on Linux · cdc38c93
      Raphael Isemann authored
      The function call and the constructor call fail now several Linux
      bots (Swift CI, my own bot and Stella's Debian system), so let's disable
      the relevant test parts until we can figure out why it is failing.
      cdc38c93
    • Roman Lebedev's avatar
      7dddfa2a
    • Roman Lebedev's avatar
      [ConstantRange] Add umul_sat()/smul_sat() methods · 5a9fd76d
      Roman Lebedev authored
      Summary:
      To be used in `ConstantRange::mulWithNoOverflow()`,
      may in future be useful for when saturating shift/mul ops are added.
      
      These are precise as far as i can tell.
      
      I initially though i will need `APInt::[us]mul_sat()` for these,
      but it turned out much simpler to do what `ConstantRange::multiply()`
      does - perform multiplication in twice the bitwidth, and then truncate.
      Though here we want saturating signed truncation.
      
      Reviewers: nikic, reames, spatel
      
      Reviewed By: nikic
      
      Subscribers: hiraditya, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D69994
      5a9fd76d
    • Roman Lebedev's avatar
      [APInt] Add saturating truncation methods · 9ca363d8
      Roman Lebedev authored
      Summary:
      The signed one is needed for implementation of `ConstantRange::smul_sat()`,
      unsigned is for completeness only.
      
      Reviewers: nikic, RKSimon, spatel
      
      Reviewed By: nikic
      
      Subscribers: hiraditya, dexonsmith, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D69993
      9ca363d8
    • Kristof Beyls's avatar
    • Simon Pilgrim's avatar
      OutputStream - fix static analyzer warnings. NFCI. · 43eeaa14
      Simon Pilgrim authored
       - uninitialized variables
       - make getBufferCapacity() const
      43eeaa14
    • Simon Pilgrim's avatar
Loading