SuccessChanges

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

Summary

  1. Remove superfluous whitespace around if(). NFC. (details)
  2. [SLP] Add AArch64 tests with vectorizable compare/select patterns. (details)
  3. Correct LIT test failure detected on buildbot after mibintc committed rG2e204e23911b: [clang] Enable support for #pragma STDC FENV_ACCESS D87528 (details)
  4. [InstSimplify] add tests for logic-of-cmps with not op; NFC (details)
  5. [InstSimplify] peek through 'not' operand in logic-of-icmps fold (details)
  6. [IndVars] Regenerate test checks (NFC) (details)
  7. [SCEV] Strength nowrap flags after constant folding (details)
  8. [SCEV] Separate out constant folding in mul expr creation (details)
  9. [SCEV] Always constant fold mul expression operands (details)
  10. Thread safety analysis: Consider global variables in scope (details)
  11. Thread safety analysis: Nullability improvements in TIL, NFCI (details)
  12. [SCEV] Strenthen nowrap flags after constant folding for mul exprs (details)
  13. [CostModel] fix operand/type accounting for fadd/fmul reductions (details)
  14. [CostModel] remove cost-kind predicate for some vector reduction costs (details)
  15. [X86] Use TargetConstant instead of Constant for operands to X86vaarg64. (details)
  16. [X86] Use TargetConstant for immediates for VASTART_SAVE_XMM_REGS. (details)
  17. [X86] VEX/EVEX prefix doesn't work for inline assembly. (details)
Commit d64ea0f18994e06c4428548c4093b3ce7a35cb98 by llvm-dev
Remove superfluous whitespace around if(). NFC.
The file was modifiedllvm/lib/ExecutionEngine/Orc/IndirectionUtils.cpp
Commit 968aa6b917f7ffb3bda059c53f9e836934a9d16e by flo
[SLP] Add AArch64 tests with vectorizable compare/select patterns.

This patch adds an additional set of tests that can be vectorized
efficiently on AArch64, using CMxx & BFI.
The file was addedllvm/test/Transforms/SLPVectorizer/AArch64/vectorizable-selects-uniform-cmps.ll
Commit 576d436c828f84f18277e4675e6e5337d2b77fde by melanie.blower
Correct LIT test failure detected on buildbot after mibintc committed rG2e204e23911b: [clang] Enable support for #pragma STDC FENV_ACCESS D87528
The file was modifiedclang/test/Parser/pragma-fenv_access.c
Commit 7de2add8296fb26fd49106173c9f140ebd0abedc by spatel
[InstSimplify] add tests for logic-of-cmps with not op; NFC

One variant of this is shown in:
https://llvm.org/PR47858
The file was modifiedllvm/test/Transforms/InstSimplify/and-or-icmp-min-max.ll
Commit e77ba263fe0eaa41a973583fc82089721c881593 by spatel
[InstSimplify] peek through 'not' operand in logic-of-icmps fold

This extends D78430 to solve cases like:
https://llvm.org/PR47858

There are still missed opportunities shown in the tests,
and as noted in the earlier patches, we have related
functionality in InstCombine, so we may want to extend
other folds in a similar way.

A semi-random sampling of test diff proofs in this patch:
https://rise4fun.com/Alive/sS4C
The file was modifiedllvm/lib/Analysis/InstructionSimplify.cpp
The file was modifiedllvm/test/Transforms/InstSimplify/and-or-icmp-min-max.ll
Commit c5718253c9383bc02b384109743de30792c2b122 by nikita.ppv
[IndVars] Regenerate test checks (NFC)

Also run the test case through -instnamer.
The file was modifiedllvm/test/Transforms/IndVarSimplify/X86/pr35406.ll
Commit 0dda6333175c1749f12be660456ecedade3bcf21 by nikita.ppv
[SCEV] Strength nowrap flags after constant folding

We should first try to constant fold the add expression and only
strengthen nowrap flags afterwards. This allows us to determine
stronger flags if e.g. only two operands are left after constant
folding (and thus "guaranteed no wrap region" code applies) or the
resulting operands are non-negative and thus nsw->nuw strengthening
applies.
The file was modifiedllvm/test/Transforms/IndVarSimplify/X86/pr35406.ll
The file was modifiedllvm/test/Transforms/LoopVectorize/X86/load-deref-pred.ll
The file was modifiedllvm/test/Transforms/LoopReroll/nonconst_lb.ll
The file was modifiedllvm/lib/Analysis/ScalarEvolution.cpp
The file was modifiedllvm/test/Analysis/ScalarEvolution/trip-count15.ll
The file was modifiedllvm/test/Analysis/ScalarEvolution/trip-count9.ll
The file was modifiedllvm/test/Transforms/IndVarSimplify/X86/eliminate-trunc.ll
The file was modifiedllvm/test/Transforms/IndVarSimplify/eliminate-comparison.ll
The file was modifiedllvm/test/Analysis/ScalarEvolution/ptrtoint-constantexpr-loop.ll
Commit 22a5cde541c3306e53279fd02c6d60ae6178ef10 by nikita.ppv
[SCEV] Separate out constant folding in mul expr creation

Separate out the code handling constant folding into a separate
block, that is independent of other folds that need a constant
first operand. Also make some minor adjustments to make the
constant folding look nearly identical to the same code in
getAddExpr().

The only reason this change is not strictly NFC is that the
C1*(C2+V) fold is moved below the constant folding, which means
that it now also applies to C1*C2*(C3+V), as it should.
The file was modifiedllvm/lib/Analysis/ScalarEvolution.cpp
Commit 1ff313f0989009f8a080418e93fe510ec66e8999 by nikita.ppv
[SCEV] Always constant fold mul expression operands

Establish parity with the handling of add expressions, by always
constant folding mul expression operands before checking the depth
limit (this is a non-recursive simplification). The code was already
unconditionally constant folding the case where all operands were
constants, but was not folding multiple constant operands together
if there were also non-constant operands.

This requires picking out a different demonstration for depth-based
folding differences in the limit-depth.ll test.
The file was modifiedllvm/test/Analysis/ScalarEvolution/limit-depth.ll
The file was modifiedllvm/lib/Analysis/ScalarEvolution.cpp
Commit 5250a03a9959c2701a8338fe1a1ffa8bd93d6173 by aaronpuchert
Thread safety analysis: Consider global variables in scope

Instead of just mutex members we also consider mutex globals.
Unsurprisingly they are always in scope. Now the paper [1] says that

> The scope of a class member is assumed to be its enclosing class,
> while the scope of a global variable is the translation unit in
> which it is defined.

But I don't think we should limit this to TUs where a definition is
available - a declaration is enough to acquire the mutex, and if a mutex
is really limited in scope to a translation unit, it should probably be
only declared there.

The previous attempt in 9dcc82f34ea was causing false positives because
I wrongly assumed that LiteralPtrs were always globals, which they are
not. This should be fixed now.

[1] https://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/42958.pdf

Fixes PR46354.

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D84604
The file was modifiedclang/test/SemaCXX/warn-thread-safety-analysis.cpp
The file was modifiedclang/test/SemaCXX/warn-thread-safety-negative.cpp
The file was modifiedclang/lib/Analysis/ThreadSafety.cpp
Commit b296c64e64a0bc600538c8bc67d4ccc2564e3c72 by aaronpuchert
Thread safety analysis: Nullability improvements in TIL, NFCI

The constructor of Project asserts that the contained ValueDecl is not
null, use that in the ThreadSafetyAnalyzer. In the case of LiteralPtr
it's the other way around.

Also dyn_cast<> is sufficient if we know something isn't null.
The file was modifiedclang/lib/Analysis/ThreadSafety.cpp
The file was modifiedclang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h
The file was modifiedclang/lib/Analysis/ThreadSafetyCommon.cpp
Commit ebeef022aa6d244c3b151b247399e97e31d392ff by nikita.ppv
[SCEV] Strenthen nowrap flags after constant folding for mul exprs

Same change as 0dda6333175c1749f12be660456ecedade3bcf21, but for
mul expressions. We want to first fold any constant operans and
then strengthen the nowrap flags, as we can compute more precise
flags at that point.
The file was modifiedllvm/test/Transforms/IndVarSimplify/ARM/code-size.ll
The file was modifiedllvm/test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll
The file was modifiedllvm/lib/Analysis/ScalarEvolution.cpp
The file was modifiedllvm/test/Analysis/ScalarEvolution/zext-divrem.ll
The file was modifiedllvm/test/Analysis/IVUsers/quadradic-exit-value.ll
The file was modifiedllvm/test/Transforms/IndVarSimplify/replace-loop-exit-folds.ll
Commit 74ffc823ed2128dfce40181a13e3b2076a61126f by spatel
[CostModel] fix operand/type accounting for fadd/fmul reductions

I'm not sure if/how this ever worked, but it must not be tested
currently because the basic tests added here were crashing as
noted in the post-review comments for 1c83716 (which reverted
another cost-model fix in 22d10b8ab44f).
The file was addedllvm/test/Analysis/CostModel/X86/reduce-fmul.ll
The file was addedllvm/test/Analysis/CostModel/X86/reduce-fadd.ll
The file was modifiedllvm/include/llvm/CodeGen/BasicTTIImpl.h
Commit f2c25c70791de95d2466e09b5b58fc37f6ccd7a4 by spatel
[CostModel] remove cost-kind predicate for some vector reduction costs

This is a modified 2nd try of 22d10b8ab44f
(reverted by 1c8371692d because it managed
to expose an existing crashing bug that should be fixed by
74ffc823 ).

Original commit message:

This is similar in spirit to 01ea93d85d6e (memcpy) except that
here the underlying caller assumptions were created for vectorizer
use (throughput) rather than other passes.

That meant targets could have an enormous throughput cost with no
corresponding size, latency, or blended cost increase.
The ARM costs show a small difference between throughput and
size because there's an underlying difference in cmp/sel
costs that is also predicated on cost-kind.

Paraphrasing from the previous commits:
This may not make sense for some callers, but at least now the
costs will be consistently wrong instead of mysteriously wrong.

Targets should provide better overrides if the current modeling
is not accurate.
The file was modifiedllvm/test/Analysis/CostModel/ARM/intrinsic-cost-kinds.ll
The file was modifiedllvm/include/llvm/CodeGen/BasicTTIImpl.h
The file was modifiedllvm/test/Analysis/CostModel/ARM/reduce-add.ll
The file was modifiedllvm/test/Analysis/CostModel/X86/intrinsic-cost-kinds.ll
Commit 2ed16aa66f706ea565d1238e4fa6f7ae97c7d948 by craig.topper
[X86] Use TargetConstant instead of Constant for operands to X86vaarg64.
The file was modifiedllvm/lib/Target/X86/X86InstrCompiler.td
The file was modifiedllvm/lib/Target/X86/X86ISelLowering.cpp
Commit 63ba82ed00ffe3e5d5f4ce907c4523d8d980fc8a by craig.topper
[X86] Use TargetConstant for immediates for VASTART_SAVE_XMM_REGS.
The file was modifiedllvm/lib/Target/X86/X86ISelLowering.cpp
The file was modifiedllvm/lib/Target/X86/X86InstrCompiler.td
Commit 180548c5c7848f82ceac5d6a3528a8cb14c20fed by chen3.liu
[X86] VEX/EVEX prefix doesn't work for inline assembly.

For now, we lost the encoding information if we using inline assembly.
The encoding for the inline assembly will keep default even if we add
the vex/evex prefix.

Differential Revision: https://reviews.llvm.org/D90009
The file was addedclang/test/CodeGen/X86/att-inline-asm-prefix.c
The file was modifiedllvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
The file was modifiedllvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.cpp
The file was modifiedllvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h