Commit
d64ea0f18994e06c4428548c4093b3ce7a35cb98
by llvm-devRemove superfluous whitespace around if(). NFC.
|
 | llvm/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.
|
 | llvm/test/Transforms/SLPVectorizer/AArch64/vectorizable-selects-uniform-cmps.ll |
Commit
576d436c828f84f18277e4675e6e5337d2b77fde
by melanie.blowerCorrect LIT test failure detected on buildbot after mibintc committed rG2e204e23911b: [clang] Enable support for #pragma STDC FENV_ACCESS D87528
|
 | clang/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
|
 | llvm/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
|
 | llvm/lib/Analysis/InstructionSimplify.cpp |
 | llvm/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.
|
 | llvm/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.
|
 | llvm/test/Transforms/IndVarSimplify/X86/pr35406.ll |
 | llvm/test/Transforms/LoopVectorize/X86/load-deref-pred.ll |
 | llvm/test/Transforms/LoopReroll/nonconst_lb.ll |
 | llvm/lib/Analysis/ScalarEvolution.cpp |
 | llvm/test/Analysis/ScalarEvolution/trip-count15.ll |
 | llvm/test/Analysis/ScalarEvolution/trip-count9.ll |
 | llvm/test/Transforms/IndVarSimplify/X86/eliminate-trunc.ll |
 | llvm/test/Transforms/IndVarSimplify/eliminate-comparison.ll |
 | llvm/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.
|
 | llvm/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.
|
 | llvm/test/Analysis/ScalarEvolution/limit-depth.ll |
 | llvm/lib/Analysis/ScalarEvolution.cpp |
Commit
5250a03a9959c2701a8338fe1a1ffa8bd93d6173
by aaronpuchertThread 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
|
 | clang/test/SemaCXX/warn-thread-safety-analysis.cpp |
 | clang/test/SemaCXX/warn-thread-safety-negative.cpp |
 | clang/lib/Analysis/ThreadSafety.cpp |
Commit
b296c64e64a0bc600538c8bc67d4ccc2564e3c72
by aaronpuchertThread 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.
|
 | clang/lib/Analysis/ThreadSafety.cpp |
 | clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h |
 | clang/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.
|
 | llvm/test/Transforms/IndVarSimplify/ARM/code-size.ll |
 | llvm/test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll |
 | llvm/lib/Analysis/ScalarEvolution.cpp |
 | llvm/test/Analysis/ScalarEvolution/zext-divrem.ll |
 | llvm/test/Analysis/IVUsers/quadradic-exit-value.ll |
 | llvm/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).
|
 | llvm/test/Analysis/CostModel/X86/reduce-fmul.ll |
 | llvm/test/Analysis/CostModel/X86/reduce-fadd.ll |
 | llvm/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.
|
 | llvm/test/Analysis/CostModel/ARM/intrinsic-cost-kinds.ll |
 | llvm/include/llvm/CodeGen/BasicTTIImpl.h |
 | llvm/test/Analysis/CostModel/ARM/reduce-add.ll |
 | llvm/test/Analysis/CostModel/X86/intrinsic-cost-kinds.ll |
Commit
2ed16aa66f706ea565d1238e4fa6f7ae97c7d948
by craig.topper[X86] Use TargetConstant instead of Constant for operands to X86vaarg64.
|
 | llvm/lib/Target/X86/X86InstrCompiler.td |
 | llvm/lib/Target/X86/X86ISelLowering.cpp |
Commit
63ba82ed00ffe3e5d5f4ce907c4523d8d980fc8a
by craig.topper[X86] Use TargetConstant for immediates for VASTART_SAVE_XMM_REGS.
|
 | llvm/lib/Target/X86/X86ISelLowering.cpp |
 | llvm/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
|
 | clang/test/CodeGen/X86/att-inline-asm-prefix.c |
 | llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp |
 | llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.cpp |
 | llvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h |