Andrew Gozillon [Thu, 27 Apr 2023 13:18:57 +0000 (08:18 -0500)]
[MLIR][OpenMP] Add check for appropriate module operation during convertFlagsAttr
Checks if the operation the attirbute resides on is an ModuleOp otherwise it fails.
Nico Weber [Thu, 27 Apr 2023 14:12:39 +0000 (10:12 -0400)]
[clang] Try to fix check-clang after
f539b6ffc251
Christian Ulmann [Thu, 27 Apr 2023 14:06:26 +0000 (14:06 +0000)]
[PGO] Move CFGMST.h into the include directory
This commit moves the CFGMST.h file into the include directory. The
implemented algorithm is can be helpful for downstream projects that
want to use the PGO data in a non-standard way.
Reviewed By: gysit
Differential Revision: https://reviews.llvm.org/D149336
Nikita Popov [Thu, 27 Apr 2023 14:08:34 +0000 (16:08 +0200)]
[Polly] Update polly test after SCEV changes
Make the phi non-trivial, so SCEV can't see through it.
skc7 [Tue, 3 Jan 2023 12:01:58 +0000 (17:31 +0530)]
[AMDGPU] Legalize soffset of buffer instructions. Use Waterfall loop logic.
Legalize soffset of buffer instructions using waterfall loop.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D141030
Zequan Wu [Thu, 27 Apr 2023 14:01:56 +0000 (10:01 -0400)]
Revert "[COFF] Add MC support for emitting IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY symbols"
This reverts commit
10c17c97ebaf81ac26f6830e51a7a57ddcf63cd2. It causes undefined symbol error on chromium windows build. A small repro was uploaded to the code review.
Akash Banerjee [Thu, 27 Apr 2023 13:47:42 +0000 (14:47 +0100)]
[MLIR][OpenMP][NFC] Minor code cleanup
Cleanup how the IsBegin argument is passed and removed unnecessary variable.
Jingu Kang [Thu, 27 Apr 2023 13:31:40 +0000 (14:31 +0100)]
[AArch64] Precommit tests for VECTOR_SHUFFLE
ManuelJBrito [Wed, 26 Apr 2023 13:19:12 +0000 (14:19 +0100)]
[IR] Change shufflevector undef mask to poison
With this patch an undefined mask in a shufflevector will be printed as poison.
This change is done to support the new shufflevector semantics
for undefined mask elements.
Differential Revision: https://reviews.llvm.org/D149210
Zhongyunde [Thu, 27 Apr 2023 13:32:28 +0000 (21:32 +0800)]
[InstCombine] Add frozen for the condition value of SelectInst
If the condition value of SelectInst may be a poison or undef value,
infer constant range at SelectInst use is incorrect, similar to D143883.
Fixes https://github.com/llvm/llvm-project/issues/62401
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149339
Erich Keane [Thu, 27 Apr 2023 13:31:46 +0000 (06:31 -0700)]
[NFC] Add tests from my fix for GH62362.
This ended up being fixed separately by @rsmith in
1e43349e3 in a
better/correct way. This patch adds the tests from the original, as
though they are reasonably covered in his patch, explicit versions seem
to have value here.
Additionally, this adds a release note for
1e43349e3.
Nikita Popov [Thu, 27 Apr 2023 10:57:28 +0000 (12:57 +0200)]
[SCEV] Drop LCSSA check in createNodeFromSelectLikePHI()
SCEV expressions no longer try to preserve LCSSA form. SCEV
construction will try to look through LCSSA phi nodes. As such,
we also no longer need to limit this special-case fold.
Nikita Popov [Thu, 27 Apr 2023 13:05:03 +0000 (15:05 +0200)]
[SCEV] Try simplifying phi before createNodeFromSelectLikePHI()
Sometimes a phi can both be trivial and match the
createNodeFromSelectLikePHI() fold. In that case it is generally
more profitable to look through the phi node.
Haojian Wu [Thu, 27 Apr 2023 12:57:40 +0000 (14:57 +0200)]
[clangd] Fix the include-cleaner-batch-fix.test failure on some
platforms
It seems that on some platforms, the spelling include doesn't work. Make
the test less strict on it.
OCHyams [Thu, 27 Apr 2023 12:44:12 +0000 (13:44 +0100)]
[DebugInfo][InstCombine] Fix missing source and variable locations after foldOpIntoPhi
Reviewed By: fdeazeve
Differential Revision: https://reviews.llvm.org/D149335
Ilya Leoshkevich [Thu, 27 Apr 2023 11:44:41 +0000 (13:44 +0200)]
[KMSAN] Enable on SystemZ
Enable -fsanitize=kernel-memory support in Clang.
The x86_64 ABI requires that shadow_origin_ptr_t must be returned via a
register pair, and the s390x ABI requires that it must be returned via
memory pointed to by a hidden parameter. Normally Clang takes care of
the ABI, but the sanitizers run long after it, so unfortunately they
have to duplicate the ABI logic.
Therefore add a special case for SystemZ and manually emit the
s390x-ABI-compliant calling sequences. Since it's only 2 architectures,
do not create a VarArgHelper-like abstraction layer.
The kernel functions are compiled with the "packed-stack" and
"use-soft-float" attributes. For the "packed-stack" functions, it's not
correct for copyRegSaveArea() to copy 160 bytes of shadow and origins,
since the save area is dynamically sized. Things are greatly simplified
by the fact that the vararg "use-soft-float" functions use precisely
56 bytes in order to save the argument registers to where va_arg() can
find them.
Make copyRegSaveArea() copy only 56 bytes in the "use-soft-float" case.
The "packed-stack" && !"use-soft-float" case has no practical uses at
the moment, so leave it for the future.
Add tests.
Reviewed By: eugenis
Differential Revision: https://reviews.llvm.org/D148596
Nikita Popov [Thu, 27 Apr 2023 10:57:28 +0000 (12:57 +0200)]
[SCEV] Regenerate test checks (NFC)
Nikita Popov [Thu, 27 Apr 2023 10:50:22 +0000 (12:50 +0200)]
[SCEV] Remove LCSSA special case in getSCEVAtScope() (NFCI)
We no longer try to preserve LCSSA form in SCEV representation:
Nowadays, we look through LCSSA PHI nodes directly during SCEV
construction. As such, this separate special case in
getSCEVAtScope() is no longer needed.
Jie Fu [Thu, 27 Apr 2023 10:45:14 +0000 (18:45 +0800)]
[mlir][test] Remove unused lambda capture 'this' in UtilsTest.cpp (NFC)
/data/llvm-project/mlir/unittests/Analysis/Presburger/UtilsTest.cpp:39:17: error: lambda capture 'this' is not used [-Werror,-Wunused-lambda-capture]
auto merge = [this](unsigned i, unsigned j) -> bool { return true; };
^~~~
/data/llvm-project/mlir/unittests/Analysis/Presburger/UtilsTest.cpp:52:17: error: lambda capture 'this' is not used [-Werror,-Wunused-lambda-capture]
auto merge = [this](unsigned i, unsigned j) -> bool { return true; };
^~~~
2 errors generated.
Timm Bäder [Tue, 25 Apr 2023 13:46:20 +0000 (15:46 +0200)]
[clang][Interp] Emit diagnostic when comparing function pointers
Function pointers can be compared for (in)equality but, but LE, GE, LT,
and GT opcodes should emit an error and abort.
Differential Revision: https://reviews.llvm.org/D149154
Haojian Wu [Tue, 25 Apr 2023 19:59:11 +0000 (21:59 +0200)]
[clangd] Add batch fixes for include-cleaner diagnostics
For each unused-include/missing-include diagnostic, we provide fix-all
alternative to them.
This patch also adds LSP ChangeAnnotation support.
Differential Revision: https://reviews.llvm.org/D147684
Jay Foad [Thu, 27 Apr 2023 08:33:24 +0000 (09:33 +0100)]
[DAG] Do not call computeKnownBits from isKnownToBeAPowerOfTwo
The only way known bits could help identify a known power of two is if
it knows exactly which power of two it is, i.e. if it is a known
constant. But in that case the value should have been simplified to a
constant already. So save some compile time by not calling
computeKnownBits.
Differential Revision: https://reviews.llvm.org/D149325
Timm Bäder [Sat, 22 Apr 2023 12:09:14 +0000 (14:09 +0200)]
[clang][Interp] Check Neg ops for errors
This should fail when negating __INT_MIN__.
Differential Revision: https://reviews.llvm.org/D148987
Mikhail Goncharov [Thu, 27 Apr 2023 10:02:53 +0000 (12:02 +0200)]
[bazel][mlir] fix build for transform utils
Alexis Engelke [Fri, 14 Apr 2023 12:35:49 +0000 (14:35 +0200)]
[AArch64][FastISel] Handle call with multiple return regs
The code closely follows the X86 back-end. Applications that make heavy
use of {i64, i64} returns to use two registers strongly benefit from the
reduced number of SelectionDAG fallbacks.
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D148346
Jie Fu [Thu, 27 Apr 2023 09:52:57 +0000 (17:52 +0800)]
[X86] Fix -Wstring-conversion in X86InstrInfo.cpp (NFC)
/Users/jiefu/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9794:12: error: implicit conversion turns string literal into bool: 'const char[25]' to 'bool' [-Werror,-Wstring-conversion]
assert("It should not reach here");
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode13.1/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk/usr/include/assert.h:99:25: note: expanded from macro 'assert'
(__builtin_expect(!(e), 0) ? __assert_rtn(__func__, __ASSERT_FILE_NAME, __LINE__, #e) : (void)0)
~ ^
1 error generated.
Mariya Podchishchaeva [Thu, 27 Apr 2023 09:24:31 +0000 (05:24 -0400)]
[clang] Do not crash on undefined template partial specialization
Before checking that template partial specialization is "reachable",
ensure it exists.
Fixes https://github.com/llvm/llvm-project/issues/61356
Reviewed By: shafik, erichkeane
Differential Revision: https://reviews.llvm.org/D148330
Nikita Popov [Thu, 27 Apr 2023 09:25:40 +0000 (11:25 +0200)]
[SCEV] Check correct binary operator for nowrap flags
We should be checking the current BO here, not the nested one. If
the current BO has nowrap flags (and is UB on poison), then we'll
fetch both operand SCEVs of that BO. We'll check the nested BO
on the next iteration of the do/while loop.
Nikita Popov [Thu, 27 Apr 2023 09:04:55 +0000 (11:04 +0200)]
[SCEV] Check MatchBinaryOp opcode instead of original opcode
These are not necessarily the same (e.g. or can become add) and
this is what we're switching over in the first place.
Jie Fu [Thu, 27 Apr 2023 09:08:24 +0000 (17:08 +0800)]
[X86] Fix -Wsometimes-uninitialized in X86InstrInfo.cpp (NFC)
/data/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9793:3: error: variable 'MaddOpc' is used uninitialized whenever switch default is taken [-Werror,-Wsometimes-uninitialized]
default:
^~~~~~~
/data/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9854:25: note: uninitialized use occurs here
Madd->setDesc(TII.get(MaddOpc));
^~~~~~~
/data/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9791:19: note: initialize the variable 'MaddOpc' to silence this warning
unsigned MaddOpc;
^
= 0
/data/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9793:3: error: variable 'AddOpc' is used uninitialized whenever switch default is taken [-Werror,-Wsometimes-uninitialized]
default:
^~~~~~~
/data/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9862:46: note: uninitialized use occurs here
BuildMI(*MF, MIMetadata(Root), TII.get(AddOpc), DstReg)
^~~~~~
/data/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9790:18: note: initialize the variable 'AddOpc' to silence this warning
unsigned AddOpc;
^
= 0
2 errors generated.
Mikhail Goncharov [Thu, 27 Apr 2023 08:43:13 +0000 (10:43 +0200)]
[bazel][mlir] update build for mem2reg
f88f8fd0bca34dc8e5571cb828b1a159a50fd504
Differential Revision: https://reviews.llvm.org/D149326
Nikita Popov [Thu, 27 Apr 2023 08:49:34 +0000 (10:49 +0200)]
[SCEV] Fix getOperandsToCreate() for and/or
We can create expressions either for constant operand or i1
and/or. The implementation was inverting the latter check.
gilsaia [Thu, 27 Apr 2023 08:36:29 +0000 (14:06 +0530)]
[MLIR][presburger] normalize divisionrepr
Added a simple normalize function to divisionrepr and added a simple unittest.
Added a normalizediv call to divisionrepr's removeDuplicateDivs function, which now eliminates divs that are consistent after gcd's normalize
Reviewed By: Groverkss
Differential Revision: https://reviews.llvm.org/D147381
Luo, Yuanke [Fri, 21 Apr 2023 11:28:58 +0000 (19:28 +0800)]
[X86] Machine combine vnni instruction.
"vpmaddwd + vpaddd" can be combined to vpdpwssd and the latency is
reduced after combination. However when vpdpwssd is in a critical path
the combination get less ILP. It happens when vpdpwssd is in a loop, the
vpmaddwd can be executed in parallel in multi-iterations while vpdpwssd
has data dependency for each iterations. If vpaddd is in a critical path
while vpmaddwd is not, it is profitable to split vpdpwssd into "vpmaddwd
+ vpaddd".
This patch is based on the machine combiner framework to acheive decision
on "vpmaddwd + vpaddd" combination. The typical example code is as
below.
```
__m256i foo(int cnt, __m256i c, __m256i b, __m256i *p) {
for (int i = 0; i < cnt; ++i) {
__m256i a = p[i];
__m256i m = _mm256_madd_epi16 (b, a);
c = _mm256_add_epi32(m, c);
}
return c;
}
```
Differential Revision: https://reviews.llvm.org/D148980
Jay Foad [Mon, 17 Apr 2023 10:06:06 +0000 (11:06 +0100)]
[BranchFolder] Skip redundant IMPLICIT_DEFs of subregs
Differential Revision: https://reviews.llvm.org/D148509
Jay Foad [Mon, 17 Apr 2023 10:05:14 +0000 (11:05 +0100)]
[BranchFolder] Precommit AMDGPU test case for D148509
Alvin Wong [Mon, 24 Apr 2023 13:52:18 +0000 (21:52 +0800)]
[lit] Set __COMPAT_LAYER=RunAsInvoker when running tests on Windows
Windows heuristics try to detect old installer programs and run them as
elevated. These heuristics include checking for certain substrings in
file names, e.g. "patch", "update", "setup". When lit tries to run
affected executables, it produces "[WinError 740] The requested
operation requires elevation" instead. Several tests have been affected
by this issue (see https://reviews.llvm.org/D137772,
https://reviews.llvm.org/D148988, https://reviews.llvm.org/D149004).
We should set this environment variable to disable this heuristic once
and for all, instead of setting it in inidividual test suites. There
should be no lit tests that legitimately want to run as elevated.
Differential Revision: https://reviews.llvm.org/D149064
Lorenzo Chelini [Wed, 26 Apr 2023 09:08:31 +0000 (11:08 +0200)]
[MLIR][Linalg] Change destination logic in `bubbleUpPackOpThroughGenericOp`.
In `bubbleUpPackOpThroughGenericOp`, we replaced the init operands with
a new `tensor.empty` if the operation was a pure element-wise op. This
behaviour is not wrong but not ideal because we "break" the original
use-def-chain of the output operand by materializing a new
`tensor.empty`. We should use `tensor.empty` as a destination *only* if the
initial init operand was already a `tensor.empty`, as we do in
`PushDownUnpack`.
Reviewed By: hanchung
Differential Revision: https://reviews.llvm.org/D149250
Nicolai Hähnle [Wed, 26 Apr 2023 13:18:51 +0000 (15:18 +0200)]
AMDGPU: Fix an assertion in SIOptimizeVGPRLiveRange
As the comment notes, the shader results in an INSERT_SUBREG with
"undef" (dead) operand in the Endif block. The same can happen with
REG_SEQUENCE. The register is considered dead from a liveness
analysis perspective. The correct thing to do seems to be nothing:
we keep the undef use of the register, the register allocator should
still be able to take the liveness into account correctly.
Differential Revision: https://reviews.llvm.org/D149161
Kito Cheng [Thu, 27 Apr 2023 06:35:15 +0000 (14:35 +0800)]
[RISCV][Driver] Allow the use of CPUs with a different XLEN than the triple.
Our downstream toolchain release got some issue is we set the default
triple by creating symbolic link of clang like `riscv64-unknown-elf-clang`,
and has lots of multi-lib config including rv32's config.
However when we trying to set arch by a 32 bit CPU like generic-rv32
but got error message below:
error: unsupported argument 'generic-rv32' to option '-mcpu='
`generic-rv32` is listed in the output of `-mcpu=help`, that
might be confusing for user since help message say supported.
So let clang driver also consider -mcpu option during computing
the target triple to archvie that.
Reviewed By: asb, craig.topper
Differential Revision: https://reviews.llvm.org/D148124
Vitaly Buka [Wed, 26 Apr 2023 23:26:48 +0000 (16:26 -0700)]
[HWASAN] Use InTaggableRegion in basic tagging functions
For primary use-case when !HWASAN_ALIASING_MODE the function is constant
true and should be eliminated by optimizations.
In case HWASAN_ALIASING_MODE all new calls to the functions were missing
in the first place. We just not use this mode for anything but tests, so
we didn't noticed.
Addressing @thurston comment on D149293
Reviewed By: thurston
Differential Revision: https://reviews.llvm.org/D149305
Vitaly Buka [Wed, 26 Apr 2023 02:36:26 +0000 (19:36 -0700)]
[HWASAN] Untag pointer with TagMaskByte instead 0xFF
This applies only X86_64 where mask is 0x3F.
Reviewed By: kstoimenov
Differential Revision: https://reviews.llvm.org/D149227
Yi Kong [Fri, 31 Mar 2023 09:08:16 +0000 (17:08 +0800)]
[BOLT] Parallelize legacy profile merging
Merging profiles is quite expensive, but easily paralleizable.
8359 profiles on n2d-standard-128:
single-thread: 808s
multi-thread: 200s (~75% speed up)
Differential Revision: https://reviews.llvm.org/D149014
Vitaly Buka [Wed, 26 Apr 2023 02:32:25 +0000 (19:32 -0700)]
[HWASAN] Fix X86 ClInstrumentWithCalls
It was always ON for X86.
Vitaly Buka [Wed, 26 Apr 2023 02:29:05 +0000 (19:29 -0700)]
[NFC][hwasan] Precommit X86 inline tests
-hwasan-instrument-with-calls is broken on X86.
Kazu Hirata [Thu, 27 Apr 2023 06:29:03 +0000 (23:29 -0700)]
[clang] Modernize DelayedDiagnostics (NFC)
Kazu Hirata [Thu, 27 Apr 2023 06:29:02 +0000 (23:29 -0700)]
[mlir] Replace None with std::nullopt in comments (NFC)
This is part of an effort to migrate from llvm::Optional to
std::optional:
https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716
Chuanqi Xu [Thu, 27 Apr 2023 06:19:32 +0000 (14:19 +0800)]
[C++20] [Modules] Avoid crash if the inconsistency the size of lang options exceeds 1
Close https://github.com/llvm/llvm-project/issues/62359
The root reason for the crash is that we didn't test the case that
the bits number of a language option exceeds 1.
Théo Degioanni [Thu, 27 Apr 2023 06:00:39 +0000 (06:00 +0000)]
[mlir] Add a generic mem2reg implementation.
This patch introduces a generic implementation of mem2reg on
unstructured control-flow, along with a specialization for LLVM IR. This
is achieved by defining three new interfaces, representing 1. allocating
operations, 2. operations doing memory accesses, 3. operations that can
be rewired and/or deleted to stop using a specific use.
The file containing the core implementation of the algorithm
(`Mem2Reg.cpp`) contains a detailed explanation of how the algorithm
works. The contract for this pass is that given a memory slot with a
single non-aliased pointer, the pass will either remove all the uses of
the pointer or not change anything.
To help review this patch, I recommend starting by looking at the
interfaces defined in `Mem2Reg.td`, along with their reference
implementation for LLVM IR defined in `LLVMMem2Reg.cpp`. Then, the core
algorithm is implemented in `Mem2Reg.cpp`.
If this is all good I also have an implementation of the interfaces for
0-dimensional memref promotion that I can upstream afterwards.
Reviewed By: gysit
Differential Revision: https://reviews.llvm.org/D148109
Tobias Gysi [Thu, 27 Apr 2023 05:45:46 +0000 (05:45 +0000)]
[mlir][llvm] Add assertion in LLVM IR import (NFC).
This revision adds an assertion to convertConstantExpr to ensure the
function is not called if the constant has been converted before.
This is a follow up for https://reviews.llvm.org/D149247.
Reviewed By: victor-eds
Differential Revision: https://reviews.llvm.org/D149253
Noah Goldstein [Thu, 27 Apr 2023 03:00:53 +0000 (22:00 -0500)]
[X86] Support `X86ISD::PCMPEQ` and `X86ISD::PCMPGT` in ComputeKnownBits
These functions where missing support but are used enough that it
makes sense to track them.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D148963
Noah Goldstein [Thu, 27 Apr 2023 03:00:32 +0000 (22:00 -0500)]
[ValueTracking] Add logic for `add nuw x,y != 0` -> `x != 0 || y != 0`
Alive2 Link:
https://alive2.llvm.org/ce/z/TKpqxc
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149204
Noah Goldstein [Tue, 25 Apr 2023 18:47:49 +0000 (13:47 -0500)]
[ValueTracking] Add logic for `(sub x, y) != 0` if we know `KnownX != KnownY`
Alive2 Link:
https://alive2.llvm.org/ce/z/TAFcjF
Differential Revision: https://reviews.llvm.org/D149202
Noah Goldstein [Tue, 25 Apr 2023 18:46:41 +0000 (13:46 -0500)]
[ValueTracking] Add some additional tests for `isKnownNonZero`; NFC
Differential Revision: https://reviews.llvm.org/D149201
Serguei Katkov [Wed, 29 Mar 2023 05:37:03 +0000 (12:37 +0700)]
[InstSimplify] Extend handlng of fp min/max.
Add support the cases like
m(m(X,Y),m'(X,Y)) => m(X,Y)
where m is one of maxnum, minnum, maximum, minimum and
m' is m or inverse of m.
alive2 correctness check:
maxnum(maxnum,maxnum) https://alive2.llvm.org/ce/z/kSyAzo
maxnum(maxnum,minnum) https://alive2.llvm.org/ce/z/Vra8j2
minnum(minnum,minnum) https://alive2.llvm.org/ce/z/B6h-hW
minnum(minnum,maxnum) https://alive2.llvm.org/ce/z/rG2u_b
maximum(maximum,maximum) https://alive2.llvm.org/ce/z/N2nevY
maximum(maximum,minimum) https://alive2.llvm.org/ce/z/23RFcP
minimum(minimum,minimum) https://alive2.llvm.org/ce/z/spHZ-U
minimum(minimum,maximum) https://alive2.llvm.org/ce/z/Aa-VE8
Reviewed By: dantrushin, RKSimon
Differential Revision: https://reviews.llvm.org/D147137
Fangrui Song [Thu, 27 Apr 2023 03:43:11 +0000 (20:43 -0700)]
[LTO] Change getThinLTOOutputFile to take StringRef
Yeting Kuo [Mon, 17 Apr 2023 07:26:51 +0000 (15:26 +0800)]
[RISCV] Support vector strict rounding operations.
The patch basically models custom lowering of base rounding operations to expand
rounding by coverting to ingter and coverting back to FP. The other one thing
the patch does is to covert sNan of the source to qNan.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D148519
luxufan [Thu, 27 Apr 2023 02:40:27 +0000 (10:40 +0800)]
[ValueTracking] Guaranteed not to be undef if has dereferenceable attribute
As LangRef says, "dereferenceable<n> implies noundef".
`isGuaranteedNotToBeUndefOrPoison` should return true if the parameter
has dereferenceable attribute.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149035
Vitaly Buka [Wed, 26 Apr 2023 23:20:04 +0000 (16:20 -0700)]
[NFC][HWASAN] Move InTaggableRegion
Prepare to use it in all tag related functions.
Reviewed By: thurston
Differential Revision: https://reviews.llvm.org/D149304
Vitaly Buka [Thu, 27 Apr 2023 02:41:26 +0000 (19:41 -0700)]
Revert "[SPARC][MC] Fix encoding of backwards BPr branches"
Introduces UB, details in D144012.
This reverts commit
92f1156efc5f762ac3a4cc4eebe62742f6d75789.
Vitaly Buka [Wed, 26 Apr 2023 00:48:24 +0000 (17:48 -0700)]
[HWASAN] Support tagged stack pointer
If stack was allocated using regular allocator, it may be tagged
and it will make memToShadow calculate invalid offset.
Also when UAR tag should be the tag of the stack frame pointer.
Reviewed By: eugenis
Differential Revision: https://reviews.llvm.org/D149228
Vitaly Buka [Wed, 26 Apr 2023 07:50:34 +0000 (00:50 -0700)]
[hwasan] Implement __sanitizer_purge_allocator
Reviewed By: kstoimenov
Differential Revision: https://reviews.llvm.org/D149241
Wu, Yingcong [Thu, 27 Apr 2023 01:59:49 +0000 (18:59 -0700)]
[libfuzzer] avoid unneccessary auto-copy
Avoid an unneccessary auto-copy
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D148902
Wu, Yingcong [Thu, 27 Apr 2023 01:56:30 +0000 (18:56 -0700)]
[sanitizer] move a pointer dereference after its null check
The dereference of pointer `ctx` is not protected by its null check, this could be problematic.
Reviewed By: vitalybuka, MaskRay
Differential Revision: https://reviews.llvm.org/D149011
Vitaly Buka [Wed, 26 Apr 2023 06:35:20 +0000 (23:35 -0700)]
[HWASAN] Fix __sanitizer_get_allocated_{begin,size}
HWASAN_ALIASING_MODE needs to untag only
primary allocator pointers.
Reviewed By: kstoimenov, thurston
Differential Revision: https://reviews.llvm.org/D149238
DianQK [Thu, 27 Apr 2023 00:10:15 +0000 (08:10 +0800)]
[GlobalOpt] Don't replace the aliasee if it has other references.
As long as aliasee has `@llvm.used` or `@llvm.compiler.used` references, we cannot do the related replace or delete operations. Even if it is a Local Linkage, we cannot infer if there is no other use for it, such as asm or other future added cases.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D145293
Vitaly Buka [Wed, 26 Apr 2023 21:03:49 +0000 (14:03 -0700)]
[HWASAN] Fix HwasanReallocate in aliasing mode
HWASAN_ALIASING_MODE needs to untag only
primary allocator pointers.
Reviewed By: kstoimenov
Differential Revision: https://reviews.llvm.org/D149293
Haohai Wen [Thu, 27 Apr 2023 01:32:44 +0000 (09:32 +0800)]
Always emit symbol table when dwarf section exists in COFF
This also fixes check prefix NO which is pointless in symtab.test
Reviewed By: mstorsjo
Differential Revision: https://reviews.llvm.org/D149235
H.J. Lu [Wed, 26 Apr 2023 23:34:08 +0000 (16:34 -0700)]
[sanitizer] Correct alignment of x32 __sanitizer_siginfo
Since alignment of x32 siginfo_t is 8 bytes, not 4 bytes, use u64 in
__sanitizer_siginfo_pad to align x32 __sanitizer_siginfo to 8 bytes.
Fixes https://github.com/llvm/llvm-project/issues/62394
Differential Revision: https://reviews.llvm.org/D149309
Raghu Maddhipatla [Thu, 13 Apr 2023 16:33:21 +0000 (11:33 -0500)]
[OpenMP][Flang][Semantics] Add semantics support for USE_DEVICE_PTR clause on OMP TARGET DATA directive.
Initial support for USE_DEVICE_PTR clause on OMP TARGET DATA directive.
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D148254
walter erquinigo [Thu, 27 Apr 2023 00:09:26 +0000 (19:09 -0500)]
[lldb] Create a way to force remove commands
Some LLDB set ups need to hide certain commands for security reasons, so I'm adding a flag that allows removing non-user commands.
Differential Revision: https://reviews.llvm.org/D149312
Gulfem Savrun Yeniceri [Wed, 26 Apr 2023 22:49:09 +0000 (22:49 +0000)]
[clang] Apply -fcoverage-prefix-map reverse order
This patch changes handling multiple -fcoverage-prefix-map options to
match GCC's behavior. GCC applies prefix remappings that are provided
in reverse order (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109591).
Reviewed By: phosek
Differential Revision: https://reviews.llvm.org/D148757
Craig Topper [Thu, 27 Apr 2023 00:11:58 +0000 (17:11 -0700)]
[RISCV] Remove the uret instruction.
This was part of the N extension which did not make it into
version 1.12 of the privilege specification.
Reviewed By: jrtc27
Differential Revision: https://reviews.llvm.org/D149308
Chia-hung Duan [Tue, 25 Apr 2023 07:32:57 +0000 (07:32 +0000)]
[scudo] Fix missing pushing 1 block to BatchClassId
This was happened rarely. The only case is when a thread is teared down
and it only has one block of BatchClass and the freelist of BatchClass
is empty. The impact is leaking 1 block of BatchClass and which is minor.
Differential Revision: https://reviews.llvm.org/D149141
Jorge Gorbe Moya [Thu, 27 Apr 2023 00:01:39 +0000 (17:01 -0700)]
[bazel][NFC] Run buildifier on libc/libc_build_rules.bzl.
Vitaly Buka [Wed, 26 Apr 2023 23:58:37 +0000 (16:58 -0700)]
[NFC][sanitizer] Fix typo
Vitaly Buka [Wed, 26 Apr 2023 23:57:13 +0000 (16:57 -0700)]
[test][HWASAN] XFAIL broken test on aarch64
Richard Smith [Wed, 26 Apr 2023 23:53:34 +0000 (16:53 -0700)]
Pass the found declaration to DiagnoseUseOfDecl.
Don't pass in the resolved declaration, because that might be an
inheriting constructor declaration, which should never be used directly
and for which constraint satisfaction checking doesn't work.
Fixes #62361.
Michael Maitland [Mon, 24 Apr 2023 14:53:56 +0000 (07:53 -0700)]
[llvm-mca][RISCV] Fix checking if data valid in createInstrument
Fixes createInstrument to return instrument when LMUL data is valid, and
return nullptr when LMUL data is not valid for RISCV target.
Differential Revision: https://reviews.llvm.org/D149068
Vitaly Buka [Wed, 26 Apr 2023 23:48:38 +0000 (16:48 -0700)]
[test][HWASAN] Suppress memory leak in getpass
Reported after D149234.
Vitaly Buka [Wed, 26 Apr 2023 23:38:24 +0000 (16:38 -0700)]
Revert "[test][HWASAN] Suppress memory leak in getpass"
Does not fix the leak.
This reverts commit
1533478615e998192e227bded9d0e9029474936b.
Henry Yu [Wed, 26 Apr 2023 23:43:48 +0000 (16:43 -0700)]
[FuzzMutate] Skip EHPad during mutation and avoid replacing callee with pointer when sinking
This patch addresses 2 problems:
- In `ShuffleBlockStrategy`, when `BB` is an EHPad, `BB.getFirstInsertionPt()` will return `BB.end()`, which cannot be dereferenced and will cause crash in following loop.
- In `isCompatibleReplacement`, a call instruction's callee might be replaced by a pointer, causing 2 subproblems:
- we cannot guarantee that the pointer is a function pointer (even if it is, we cannot guarantee it matches the signature).
- after such a replacement, `getCalledFunction` will from then on return `nullptr` (since it's indirect call) which causes Segmentation Fault in the lines below.
This patch fixes the first problem by checking if a block to be mutated is an EHPad in base class `IRMutationStrategy` and skipping mutating it if so.
This patch fixes the second problem by avoiding replacing callee with pointer and adding a null check for indirect calls.
Reviewed By: Peter
Differential Revision: https://reviews.llvm.org/D148853
Matt Arsenault [Sat, 29 Oct 2022 20:01:58 +0000 (13:01 -0700)]
VE: Register null MCTargetStreamer
Matt Arsenault [Sun, 20 Nov 2022 16:33:14 +0000 (08:33 -0800)]
HIP: Directly call fma builtins
Shubham Sandeep Rastogi [Wed, 5 Apr 2023 16:05:06 +0000 (09:05 -0700)]
Emit unwind information in .debug_frame section when .cfi_sections .debug_frame intrinsic is used
The .cfi_sections .debug_frame intrinsic is used to emit .debug_frame
section. This directive tells the assembler to write out a section of
debug frame data. AArch64 is a platform where eh_frame is not needed for
unwind information. Unfortunately, that means that even when the
.cfi_sections .debug_frame intrinsic is used, the compiler skips
emitting the CIE's and FDE's in the debug_frame section. This patch
address that issue by making sure that the emission of CIE's and FDE's
are only skipped if the unwind information does not require a
debug_frame section and is a platform where the eh_frame can be skipped.
Differential Revision: https://reviews.llvm.org/D147980
Shubham Sandeep Rastogi [Thu, 6 Apr 2023 21:30:27 +0000 (14:30 -0700)]
Add tests to verify behavior of .cfi_sections .debug_frame intrinsic.
There was some lacking test coverage for checking when the
.cfi_sections .debug_frame intrinsic is emitted. On x86_64,
with -fno-exceptions there is no .cfi_sections .debug_frame intrinsic
emitted because there is an unwind table attribute.
On AArch64, with -fno-exceptions, there is no unwind table attribute, so
the .cfi_sections .debug_frame intrinsic is emitted correctly.
Alternatively, with -fexceptions, both AArch64 and x86_64 emit an unwind
table and therefore do not emit a .cfi_sections .debug_frame intrinsic
All this work was done in addition to https://reviews.llvm.org/D139663
patch.
Differential Revision: https://reviews.llvm.org/D147747
Vitaly Buka [Wed, 26 Apr 2023 23:11:30 +0000 (16:11 -0700)]
[test][HWASAN] Suppress memory leak in getpass
Reported after D149234.
Vitaly Buka [Wed, 26 Apr 2023 23:10:30 +0000 (16:10 -0700)]
[test][sanitizer] Reformat the test
Siva Chandra Reddy [Wed, 26 Apr 2023 22:11:31 +0000 (22:11 +0000)]
[libc] Add a new target named LibcHermeticTestMain.
The existing LibcTestMain has been renamed to LibcUnitTestMain.
Hermetic tests are linked to LibcHermeticTestMain and unit tests are
linked to LibcUnitTestMain.
Reviewed By: jhuber6
Differential Revision: https://reviews.llvm.org/D149303
Alex Langford [Wed, 26 Apr 2023 22:01:12 +0000 (15:01 -0700)]
[lldb] Change return type of FileSpec::GetFileNameExtension
These don't really need to be in ConstStrings. It's nice that comparing
ConstStrings is fast (just a pointer comparison) but the cost of
creating the ConstString usually already includes the cost of doing a
StringRef comparison anyway, so this is just extra work and extra memory
consumption for basically no benefit.
Differential Revision: https://reviews.llvm.org/D149300
Brad Smith [Wed, 26 Apr 2023 22:53:52 +0000 (18:53 -0400)]
[SPARC][MC] Fix encoding of backwards BPr branches
Make sure that the upper bits of the offset is placed in bits 20-21 of the
instruction word.
This fixes the encoding of backwards (negative offset) BPr branches.
(Previously, the upper two bits of the offset would overwrite parts of the rs1
field, causing it to branch on the wrong register, with the wrong offset)
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D144012
Brad Smith [Wed, 26 Apr 2023 22:50:49 +0000 (18:50 -0400)]
[SPARC] Lower BR_CC to BPr on 64-bit target whenever possible
On 64-bit target, when doing i64 BR_CC where one of the comparison operands is a
constant zero, try to fold the compare and BPcc into a BPr instruction.
For all integers, EQ and NE comparison are available, additionally for signed
integers, GT, GE, LT, and LE is also available.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D142461
Fabian Mora [Wed, 26 Apr 2023 22:52:37 +0000 (17:52 -0500)]
[mlir][GPUDialect] Implement memory attributions for LaunchOp
Currently memory attributions are not supported for gpu::LaunchOp, this patch implements memory attributions for gpu::LaunchOp and modifies the KernelOutlining pass to make the attributions available in GPUFuncOp.
Reviewed By: makslevental
Differential Revision: https://reviews.llvm.org/D147809
max [Wed, 26 Apr 2023 20:27:07 +0000 (15:27 -0500)]
[MLIR][python bindings] Add some AttrBuilder and port _exts to use them.
Differential Revision: https://reviews.llvm.org/D149287
Jason Molenda [Wed, 26 Apr 2023 22:44:39 +0000 (15:44 -0700)]
Fix CI failure - this depended on constants only defined on arm64 macs
Congcong Cai [Mon, 24 Apr 2023 22:30:58 +0000 (00:30 +0200)]
[Sema]Select correct lexical context during template instantiate
This patch wants to fix inline friend decl like
```
template <class F1> int foo(F1 X);
template <int A1> struct A {
template <class F1> friend int foo(F1 X) { return A1; }
};
template struct A<1>;
int a = foo(1.0);
```
Differential Revision: https://reviews.llvm.org/D149009
Vitaly Buka [Sun, 23 Apr 2023 07:03:58 +0000 (00:03 -0700)]
[NFC][HWASAN] Move getUARTag into the Entry
Reviewed By: kstoimenov, eugenis
Differential Revision: https://reviews.llvm.org/D149221
Vitaly Buka [Sun, 23 Apr 2023 06:40:50 +0000 (23:40 -0700)]
[HWASAN] Remove UAR tag branch !ClUARRetagToZero
This is leftover from older version of HWASAN.
The current HWASAN assumes that the new stack
frames are tagged with zeroes, which make getNextTagWithCall
or StackTag ^ TagMaskByte unusable.
Reviewed By: kstoimenov, eugenis
Differential Revision: https://reviews.llvm.org/D149220
Joseph Huber [Wed, 26 Apr 2023 22:07:47 +0000 (17:07 -0500)]
[libc][fix] Also remove the headers for the other flags
Summary:
This patch makes this only apply to the GPU build. This should be
handled more intelligently in the future so it's common between all of t
hem.
Jonas Devlieghere [Wed, 26 Apr 2023 22:00:57 +0000 (15:00 -0700)]
[lldb] `or` -> `||` in SBDefines.h
Address Dave's post-commit review feedback from
https://reviews.llvm.org/D147736#inline-1441914