Changes from Git (git http://labmaster3.local/git/llvm-project.git)


  1. YAML parser robustness improvements (details)
  2. [clang-tidy] Add readability-make-member-function-const (details)
  3. gn build: Merge 24130d661ed (details)
  4. [clang-format] [PR35518] C++17 deduction guides are wrongly formatted (details)
  5. clang-format: Add a fallback style to Emacs mode (details)
  6. [clangd] Implement a function to lex the file to find candidate (details)
  7. [ARM MVE] Remove accidental 64-bit vst2/vld2 intrinsics. (details)
  8. [clang,MveEmitter] Fix sign/zero extension in range limits. (details)
  9. [ARM,MVE] Integer-type nitpicks in MVE intrinsics. (details)
  10. [ARM,MVE] Add intrinsics for gather/scatter load/stores. (details)
  11. [Syntax] Add nodes for most common statements (details)
  12. NeonEmitter: switch to enum for internal Type representation. (details)
  13. [TTI][LV] preferPredicateOverEpilogue (details)
  14. NeonEmitter: remove special 'a' type modifier. (details)
  15. [AMDGPU] Improve code size cost model (part 2) (details)
  16. Silence warning, PyMODINIT_FUNC already contains extern "C" (details)
  17. [libc++][P0202] Marked algorithms copy/copy_n/copy_if/copy_backward (details)
  18. [NFC][LoopUnroll] Update test coverage for peeling w/ inequality (details)
  19. [LoopUnroll] countToEliminateCompares(): fix handling of [in]equality (details)
  20. [APInt] Fix implicit truncation warning in bitsToFloat(). NFCI. (details)
  21. [AArch64] Move the branch relaxation pass after BTI insertion (details)
  22. [X86] LowerAVXExtend - fix dodgy self-comparison assert. (details)
Commit 092452d402d793c731c3861ba920a85c5c4e1fff by hintonda
YAML parser robustness improvements
Summary: This patch fixes a number of bugs found in the YAML parser
through fuzzing. In general, this makes the parser more robust against
malformed inputs.
The fixes are mostly improved null checking and returning errors in more
cases. In some cases, asserts were changed to regular errors, this
provides the same robustness but also protects release builds from the
triggering conditions. This also improves the fuzzability of the YAML
parser since asserts can act as a roadblock to further fuzzing once
they're hit.
Each fix has a corresponding test case:
- TestAnchorMapError - Added proper null pointer handling in
   `Stream::printError` if N is null and `KeyValueNode::getValue` if
   getKey returns null, `Input::createHNodes` `dyn_casts` changed to
   `dyn_cast_or_null` so the null pointer checks are actually able to
- TestFlowSequenceTokenErrors - Added case in
   `Document::parseBlockNode` for FlowMappingEnd, FlowSequenceEnd, or
   FlowEntry tokens outside of mappings or sequences
- TestDirectiveMappingNoValue - Changed assert to regular error
   return in `Scanner::scanValue`
- TestUnescapeInfiniteLoop - Fixed infinite loop in
   `ScalarNode::unescapeDoubleQuoted` by returning an error for
   unrecognized escape codes
- TestScannerUnexpectedCharacter - Changed asserts to regular error
   returns in `Scanner::consume`
- TestUnknownDirective - For both of the inputs the stream doesn't
   fail and correctly returns TK_Error, but there is no valid root
   node for the document. There's no reasonable way to make the
   scanner fail for unknown directives without breaking the YAML spec
   (see spec-07-01.test). I think the assert is unnecessary given
   that an error is still generated for this case.
The `SimpleKeys.clear()` line fixes a bug found by AddressSanitizer
triggered by multiple test cases - when TokenQueue is cleared SimpleKeys
is still holding dangling pointers into it, so SimpleKeys should be
cleared as well.
Patch by Thomas Finch!
Reviewers: chandlerc, Bigcheese, hintonda
Reviewed By: Bigcheese, hintonda
Subscribers: hintonda, kristina, beanz, dexonsmith, hiraditya,
Tags: #llvm
Differential Revision:
The file was modifiedllvm/unittests/Support/YAMLIOTest.cpp
The file was modifiedllvm/lib/Support/YAMLParser.cpp
The file was modifiedllvm/lib/Support/YAMLTraits.cpp
Commit 24130d661ed42c30f009b695d3c9ce57d2208b5e by gehre.matthias
[clang-tidy] Add readability-make-member-function-const
Summary: Finds non-static member functions that can be made ``const``
because the functions don't use ``this`` in a non-const way.
The check conservatively tries to preserve logical costness in favor of
physical costness. See readability-make-member-function-const.rst for
more details.
Reviewers: aaron.ballman, gribozavr, hokein, alexfh
Subscribers: mgorny, xazax.hun, cfe-commits
Tags: #clang
Differential Revision:
The file was addedclang-tools-extra/test/clang-tidy/readability-make-member-function-const.cpp
The file was addedclang-tools-extra/clang-tidy/readability/MakeMemberFunctionConstCheck.cpp
The file was addedclang-tools-extra/docs/clang-tidy/checks/readability-make-member-function-const.rst
The file was modifiedclang-tools-extra/docs/ReleaseNotes.rst
The file was modifiedclang-tools-extra/clang-tidy/readability/CMakeLists.txt
The file was addedclang-tools-extra/clang-tidy/readability/MakeMemberFunctionConstCheck.h
The file was modifiedclang-tools-extra/clang-tidy/readability/ReadabilityTidyModule.cpp
The file was modifiedclang-tools-extra/docs/clang-tidy/checks/list.rst
Commit 1a6903bdfeca5facfc0c595e7cf9a14f0e87fb0e by llvmgnsyncbot
gn build: Merge 24130d661ed
The file was modifiedllvm/utils/gn/secondary/clang-tools-extra/clang-tidy/readability/
Commit 76ec6b1ef69fcbd27cb0d587a5eb2d51a135a6bb by paulhoad
[clang-format] [PR35518] C++17 deduction guides are wrongly formatted
Summary: see
clang-format removes spaces around deduction guides but not trailing
return types, make the consistent
``` template <typename T> S(T)->S<T>; auto f(int, int) -> double;
``` template <typename T> S(T) -> S<T>; auto f(int, int) -> double;
Reviewers: klimek, mitchell-stellar, owenpan, sammccall, lichray,
curdeius, KyrBoh
Reviewed By: curdeius
Subscribers: merge_guards_bot, hans, lichray, cfe-commits
Tags: #clang-format, #clang-tools-extra, #clang
Differential Revision:
The file was modifiedclang/unittests/Format/FormatTest.cpp
The file was modifiedclang/lib/Format/TokenAnnotator.cpp
Commit f349cc37cc485fd5fc7b34cb84053af459337ecc by paulhoad
clang-format: Add a fallback style to Emacs mode
Summary: This allows one to enable `clang-format-buffer` on file save
and avoid reformatting files that are outside of any project with
.clang-format style.
Reviewers: djasper, klimek, sammccall, owenpan, mitchell-stellar,
Reviewed By: MyDeveloperDay
Subscribers: cfe-commits
Patch By: dottedmag
Tags: #clang, #clang-format
Differential Revision:
The file was modifiedclang/tools/clang-format/clang-format.el
Commit 7ea4c6fa5121b2417875dc1b547162e18be7dbe2 by hokein.wu
[clangd] Implement a function to lex the file to find candidate
Summary: This will be used for incoming cross-file rename (to detect
index staleness issue).
Reviewers: ilya-biryukov
Subscribers: MaskRay, jkorous, arphaman, kadircet, usaxena95,
Tags: #clang
Differential Revision:
The file was modifiedclang-tools-extra/clangd/unittests/SourceCodeTests.cpp
The file was modifiedclang-tools-extra/clangd/SourceCode.cpp
The file was modifiedclang-tools-extra/clangd/SourceCode.h
Commit 38f016520f6edbfa7d059b60ac54e80dd955ada5 by simon.tatham
[ARM MVE] Remove accidental 64-bit vst2/vld2 intrinsics.
ACLE defines no such intrinsic as vst2q_u64, and the MVE instruction set
has no corresponding instruction. But I had accidentally added them to
the fledgling <arm_mve.h> anyway, and if you used them, you'd get a
compiler crash.
Reviewers: dmgreen
Subscribers: kristof.beyls, cfe-commits
Tags: #clang
Differential Revision:
The file was modifiedclang/include/clang/Basic/
Commit 26bc7cb05edd6bea4b9a1593baf0fbe9e45f54e4 by simon.tatham
[clang,MveEmitter] Fix sign/zero extension in range limits.
In the code that generates Sema range checks on constant arguments, I
had a piece of code that checks the bounds specified in the Tablegen
intrinsic description against the range of the integer type being
tested. If the bounds are large enough to permit any value of the
integer type, you can omit the compile-time range check. (This case is
expected to come up in some of the bitwise operation intrinsics.)
But somehow I got my signed/unsigned check backwards (asking for the
signed min/max of an unsigned type and vice versa), and also made a sign
extension error in which a signed negative value gets zero-extended. Now
rewritten more sensibly, and it should get its first sensible test from
the next batch of intrinsics I'm planning to add in D69791.
Reviewers: dmgreen
Subscribers: cfe-commits
Tags: #clang
Differential Revision:
The file was modifiedclang/utils/TableGen/MveEmitter.cpp
Commit f0c6890f32c0d5ee7f3973181eb83fcb0a50dc1a by simon.tatham
[ARM,MVE] Integer-type nitpicks in MVE intrinsics.
A few integer types in the ACLE definitions of MVE intrinsics are given
as 'int' or 'unsigned' instead of <stdint.h> fixed-size types like
uint32_t. Usually these are the ones where the size isn't that
important, such as immediate offsets in loads (which have a range
limited by the instruction encoding) or the carry flag in vadcq which
can only be 0 or 1 anyway.
With this change, <arm_mve.h> follows that exact type naming, so that
the function prototypes look identical to the ones in ACLE, instead of
replacing int and unsigned with int32_t and uint32_t.
Reviewers: dmgreen
Subscribers: kristof.beyls, cfe-commits
Tags: #clang
Differential Revision:
The file was modifiedclang/utils/TableGen/MveEmitter.cpp
The file was modifiedclang/include/clang/Basic/
The file was modifiedclang/include/clang/Basic/
Commit 6c3fee47a6492b472be2d48cee0a85773f160df0 by simon.tatham
[ARM,MVE] Add intrinsics for gather/scatter load/stores.
This patch adds two new families of intrinsics, both of which are memory
accesses taking a vector of locations to load from / store to.
The vldrq_gather_base / vstrq_scatter_base intrinsics take a vector of
base addresses, and an immediate offset to be added consistently to each
one. vldrq_gather_offset / vstrq_scatter_offset take a scalar base
address, and a vector of offsets to add to it. The
'shifted_offset' variants also multiply each offset by the element size
type, so that the vector is effectively of array indices.
At the IR level, these operations are represented by a single set of
four IR intrinsics: {gather,scatter} × {base,offset}. The other details
(signed/unsigned, shift, and memory element size as opposed to vector
element size) are all specified by IR intrinsic polymorphism and
immediate operands, because that made the selection job easier than
making a huge family of similarly named intrinsics.
I considered using the standard IR representations such as
llvm.masked.gather, but they're not a good fit. In order to use
llvm.masked.gather to represent a gather_offset load with element size
smaller than a pointer, you'd have to expand the <8 x i16> vector of
offsets into an <8 x i16*> vector of pointers, which would be split up
during legalization, so you'd spend most of your time undoing the mess
it had made. Also, ISel support for llvm.masked.gather would be easy
enough in a trivial way (you can expand it into a gather-base load with
a zero immediate offset), but instruction-selecting lots of fiddly
idioms back into all the _other_ MVE load instructions would be much
more work. So I think dedicated IR intrinsics are the more sensible
approach, at least for the moment.
On the clang tablegen side, I've added two new features to the Tablegen
source accepted by MveEmitter: a 'CopyKind' type node for defining a
type that varies with the parameter type (it lets you ask for an
unsigned integer type of the same width as the parameter), and an
'unsignedflag' value node for passing an immediate IR operand which is 0
for a signed integer type or 1 for an unsigned one. That lets me write
each kind of intrinsic just once and get all its subtypes and immediate
arguments generated automatically.
Also I've tweaked the handling of pointer-typed values in the code
generation part of MveEmitter: they're generated as Address rather than
Value (i.e. including an alignment) so that they can be given to the
ordinary IR load and store operations, but I'd omitted the code to
convert them back to Value when they're going to be used as an argument
to an IR intrinsic.
On the MC side, I've enhanced MVEVectorVTInfo so that it can tell you
not only the full assembly-language suffix for a given vector type
(like 's32' or 'u16') but also the numeric-only one used by store
instructions (just '32' or '16').
Reviewers: dmgreen
Subscribers: kristof.beyls, hiraditya, cfe-commits, llvm-commits
Tags: #clang, #llvm
Differential Revision:
The file was modifiedclang/include/clang/Basic/
The file was addedclang/test/Sema/arm-mve-immediates.c
The file was modifiedllvm/lib/Target/ARM/
The file was addedclang/test/CodeGen/arm-mve-intrinsics/scatter-gather.c
The file was modifiedclang/utils/TableGen/MveEmitter.cpp
The file was modifiedllvm/include/llvm/IR/
The file was addedllvm/test/CodeGen/Thumb2/mve-intrinsics/scatter-gather.ll
The file was modifiedclang/include/clang/Basic/
Commit 58fa50f43701097640a4ee5547aee1e4a4eea454 by ibiryukov
[Syntax] Add nodes for most common statements
Summary: Most of the statements mirror the ones provided by clang AST.
Major differences are:
- expressions are wrapped into 'ExpressionStatement' instead of being
   a subclass of statement,
- semicolons are always consumed by the leaf expressions (return,
   expression satement, etc),
- some clang statements are not handled yet, we wrap those into an
   UnknownStatement class, which is not present in clang.
We also define an 'Expression' and 'UnknownExpression' classes in order
to produce 'ExpressionStatement' where needed. The actual implementation
of expressions is not yet ready, it will follow later.
Reviewers: sammccall
Reviewed By: sammccall
Subscribers: cfe-commits
Tags: #clang
Differential Revision:
The file was modifiedclang/lib/Tooling/Syntax/Nodes.cpp
The file was modifiedclang/include/clang/Tooling/Syntax/Nodes.h
The file was modifiedclang/lib/Tooling/Syntax/BuildTree.cpp
The file was modifiedclang/lib/Tooling/Syntax/Tree.cpp
The file was modifiedclang/unittests/Tooling/Syntax/TreeTest.cpp
Commit 9577ee84e638530be7a310c9d50526a36e3c212e by Tim Northover
NeonEmitter: switch to enum for internal Type representation.
Previously we had a handful of bools (Signed, Floating, ...) that could
easily end up in an inconsistent state. This adds an enum Kind which
holds the mutually exclusive states a type might be in, retaining some
of the bools that modified an underlying type.
The file was modifiedclang/utils/TableGen/NeonEmitter.cpp
Commit 6c2a4f5ff93e16c3b86c18543e02a193ced2d956 by sjoerd.meijer
[TTI][LV] preferPredicateOverEpilogue
We have two ways to steer creating a predicated vector body over
creating a scalar epilogue. To force this, we have 1) a command line
option and 2) a pragma available. This adds a third: a target hook to
TargetTransformInfo that can be queried whether predication is preferred
or not, which allows the vectoriser to make the decision without forcing
While this change behaves as a non-functional change for now, it shows
the required TTI plumbing, usage of this new hook in the vectoriser, and
the beginning of an ARM MVE implementation. I will follow up on this
- a complete MVE implementation, see D69845.
- a patch to disable this, i.e. we should respect
and its corresponding loophint.
Differential Revision:
The file was modifiedllvm/lib/Analysis/TargetTransformInfo.cpp
The file was modifiedllvm/lib/Transforms/Vectorize/LoopVectorize.cpp
The file was addedllvm/test/Transforms/LoopVectorize/ARM/prefer-tail-loop-folding.ll
The file was modifiedllvm/include/llvm/Analysis/TargetTransformInfo.h
The file was modifiedllvm/include/llvm/Analysis/TargetTransformInfoImpl.h
The file was modifiedllvm/test/Transforms/LoopVectorize/ARM/tail-loop-folding.ll
The file was modifiedllvm/lib/Target/ARM/ARMTargetTransformInfo.cpp
The file was modifiedllvm/include/llvm/CodeGen/BasicTTIImpl.h
The file was modifiedllvm/lib/Target/ARM/ARMTargetTransformInfo.h
Commit 59f063b89c518ae81467f6015d1c428c61583f71 by Tim Northover
NeonEmitter: remove special 'a' type modifier.
'a' used to implement a splat in C++ code in NeonEmitter.cpp, but this
can be done directly from .td expansions now (and most ops already did).
So removing it simplifies the overall code.
The file was modifiedclang/utils/TableGen/NeonEmitter.cpp
The file was modifiedclang/include/clang/Basic/
The file was modifiedclang/test/CodeGen/aarch64-neon-2velem.c
The file was modifiedclang/test/CodeGen/arm_neon_intrinsics.c
The file was modifiedclang/include/clang/Basic/
Commit 47a5c36b37f033496de01b48cef0b2f1903c33cc by dfukalov
[AMDGPU] Improve code size cost model (part 2)
Summary: Added estimations for ShuffleVector, some cast and arithmetic
Reviewers: rampitec
Reviewed By: rampitec
Subscribers: arsenm, kzhuravl, jvesely, wdng, nhaehnle, yaxunl,
dstuttard, tpr, t-tye, hiraditya, zzheng, llvm-commits
Tags: #llvm
Differential Revision:
The file was modifiedllvm/test/Analysis/CostModel/AMDGPU/add-sub.ll
The file was modifiedllvm/test/Transforms/LoopUnroll/AMDGPU/unroll-for-private.ll
The file was modifiedllvm/test/Analysis/CostModel/AMDGPU/mul.ll
The file was modifiedllvm/test/Analysis/CostModel/AMDGPU/addrspacecast.ll
The file was modifiedllvm/test/Analysis/CostModel/AMDGPU/fsub.ll
The file was modifiedllvm/test/Analysis/CostModel/AMDGPU/fdiv.ll
The file was modifiedllvm/test/Analysis/CostModel/AMDGPU/fmul.ll
The file was modifiedllvm/test/Analysis/CostModel/AMDGPU/fadd.ll
The file was modifiedllvm/test/Analysis/CostModel/AMDGPU/bit-ops.ll
The file was modifiedllvm/test/Analysis/CostModel/AMDGPU/shufflevector.ll
The file was modifiedllvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
The file was modifiedllvm/test/Analysis/CostModel/AMDGPU/shifts.ll
Commit eb12b3b8a3e5f41a6ab84f94dfc85551f92bc2ea by benny.kra
Silence warning, PyMODINIT_FUNC already contains extern "C"
PythonReadline.h:22:12: warning: duplicate 'extern' declaration
specifier [-Wduplicate-decl-specifier]
The file was modifiedlldb/source/Plugins/ScriptInterpreter/Python/PythonReadline.h
Commit 13c90a57165be999c505cfcfaf38755ed518b103 by Louis Dionne
[libc++][P0202] Marked algorithms copy/copy_n/copy_if/copy_backward
Thanks to Michael Park for the patch.
Differential Revision:
The file was modifiedlibcxx/test/std/algorithms/alg.modifying.operations/alg.copy/copy_n.pass.cpp
The file was modifiedlibcxx/test/std/algorithms/alg.modifying.operations/alg.copy/copy_backward.pass.cpp
The file was modifiedlibcxx/test/support/user_defined_integral.h
The file was modifiedlibcxx/test/std/algorithms/alg.modifying.operations/alg.copy/copy.pass.cpp
The file was modifiedlibcxx/test/support/test_iterators.h
The file was modifiedlibcxx/test/std/algorithms/alg.modifying.operations/alg.copy/copy_if.pass.cpp
The file was modifiedlibcxx/test/support/test_macros.h
The file was modifiedlibcxx/include/iterator
The file was modifiedlibcxx/include/algorithm
Commit 432a12c8037293bd1ff919a82f1d4412772ac534 by lebedev.ri
[NFC][LoopUnroll] Update test coverage for peeling w/ inequality
The file was modifiedllvm/test/Transforms/LoopUnroll/peel-loop-conditions.ll
Commit 4fe94d033120da2000f1f31f0c54f3d95a159a53 by lebedev.ri
[LoopUnroll] countToEliminateCompares(): fix handling of [in]equality
predicates (PR43840)
Summary: I believe this bisects to
(`[LoopUnroll] Only peel if a predicate becomes known in the loop
While that revision did contain tests that showed arguably-subpar
peeling for [in]equality predicates that [not] happen in the middle of
the loop, it also disabled peeling for the *first* loop iteration,
because latch would be canonicalized to [in]equality comparison..
That was intentional as per I'm
not 100% sure that i'm using correct checks here, but this fix appears
to be going in the right direction..
Let me know if i'm missing some checks here..
Fixes [[ | PR43840 ]].
Reviewers: fhahn, mkazantsev, efriedma
Reviewed By: fhahn
Subscribers: xbolva00, hiraditya, zzheng, llvm-commits, fhahn
Tags: #llvm
Differential Revision:
The file was modifiedllvm/test/Transforms/LoopUnroll/peel-loop-conditions.ll
The file was modifiedllvm/lib/Transforms/Utils/LoopUnrollPeel.cpp
Commit 63f08a59c8942e99d71cfef21cfc050b6f3d6d52 by llvm-dev
[APInt] Fix implicit truncation warning in bitsToFloat(). NFCI.
The file was modifiedllvm/include/llvm/ADT/APInt.h
Commit d91ea7fc6fd0cdd530e63c24db1d45253e1fdfdb by momchil.velikov
[AArch64] Move the branch relaxation pass after BTI insertion
Summary: Inserting BTI instructions can push branch destinations out of
The branch relaxation pass itself cannot insert indirect branches since
`TargetInstrInfo::insertIndirecrtBranch` is not implemented for AArch64
(guess +/-128 MB direct branch range is more than enough in practice).
Testing this is a bit tricky.
The original test case we have is 155kloc/6.1M. I've generated a test
case using this program:
int main() {
std::cout << R"src(int test(); void g0(), g1(), g2(), g3(), g4(), e();
void f(int v) {
if ((test() & 2) == 0) {
switch (v) {
case 0:
case 1:
case 2:
case 3:
  const int N = 8176;
  for (int i = 0; i < N; ++i)
   std::cout << "    void h" << i << "();\n";
for (int i = 0; i < N; ++i)
   std::cout << "    h" << i << "();\n";
  std::cout << R"src(
} else {
``` which is still a bit too much to commit as a regression test, IMHO.
Reviewers: t.p.northover, ostannard
Reviewed By: ostannard
Subscribers: kristof.beyls, hiraditya, llvm-commits
Tags: #llvm
Differential Revision:
Change-Id: Ide5c922bcde08ff4cf635da5e52365525a997a0a
The file was modifiedllvm/test/CodeGen/AArch64/O3-pipeline.ll
The file was addedllvm/test/CodeGen/AArch64/bti-branch-relaxation.ll
The file was modifiedllvm/lib/Target/AArch64/AArch64TargetMachine.cpp
The file was modifiedllvm/test/CodeGen/AArch64/O0-pipeline.ll
Commit 37cdac6344fbb51b40152e24470a61e940c76d12 by llvm-dev
[X86] LowerAVXExtend - fix dodgy self-comparison assert.
PVS Studio noticed that we were asserting "VT.getVectorNumElements() ==
VT.getVectorNumElements()" instead of "VT.getVectorNumElements() ==
The file was modifiedllvm/lib/Target/X86/X86ISelLowering.cpp