Soumi Manna [Fri, 7 Oct 2022 14:43:19 +0000 (16:43 +0200)]
[analyzer] Fix static code analysis concerns
ProcessMemberDtor(), ProcessDeleteDtor(), and ProcessAutomaticObjDtor():
Fix static analyzer warnings with suspicious dereference of pointer
'Pred' in function call before NULL checks - NFCI
Differential Revision: https://reviews.llvm.org/D135290
Kiran Chandramohan [Fri, 7 Oct 2022 14:40:26 +0000 (14:40 +0000)]
[Flang] Use the ultimate symbol in a DeallocateStmt check
Use the ultimate symbol while calling the `IsAllocatableOrPointer`
function to ensure that the check works as expected for
host-associated symbols.
Fixes #58178
Reviewed By: PeteSteinfeld
Differential Revision: https://reviews.llvm.org/D135443
Yaxun (Sam) Liu [Tue, 6 Sep 2022 23:20:09 +0000 (19:20 -0400)]
[AMDGPU] Disable bool range metadata to workaround backend issue
Currently there is a middle-end or backend issue
https://github.com/llvm/llvm-project/issues/58176
which causes values loaded from bool pointer incorrect when
bool range metadata is emitted. Temporarily
disable bool range metadata until the backend issue
is fixed.
Reviewed by: Artem Belevich
Differential Revision: https://reviews.llvm.org/D135269
Fixes: SWDEV-344137
Chris Bieneman [Fri, 7 Oct 2022 14:43:56 +0000 (09:43 -0500)]
[CMake] Small fix to HLSL header install paths
HLSL headers were being installed in two locations, one correct and one
incorrect, and they were always being installed (even when
CLANG_ENABLE_HLSL=Off). This corrects both issues by ensuring that the
HLSL headers aren't added to the universal header list.
Alex Zinenko [Fri, 7 Oct 2022 14:39:52 +0000 (14:39 +0000)]
[mlir][doc] clarify (ir)recoverable failures in transform dialect
Sylvestre Ledru [Fri, 7 Oct 2022 13:56:21 +0000 (15:56 +0200)]
Fix typos - show in the binary
See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1018770
Nikita Popov [Fri, 7 Oct 2022 13:28:44 +0000 (15:28 +0200)]
[OpenMP] Convert more tests to opaque pointers (NFC)
These were converted using the script at
https://gist.github.com/nikic/
98357b71fd67756b0f064c9517b62a34
followed by a re-run of update_cc_test_checks.py.
Bjorn Pettersson [Fri, 7 Oct 2022 13:08:04 +0000 (15:08 +0200)]
[test][ExpandMemCmp] Convert test cases to opaque pointers. NFC
Conversion performed using the script at:
https://gist.github.com/nikic/
98357b71fd67756b0f064c9517b62a34
Bjorn Pettersson [Tue, 4 Oct 2022 19:31:44 +0000 (21:31 +0200)]
[ValueTracking][SimplifyLibCalls] Fix bug in getConstantDataArrayInfo for wchar_t
When SimplifyLibCalls is dealing with wchar_t (e.g. optimizing wcslen)
it uses ValueTracking helpers with a CharSize/ElementSize that isn't
8, but rather 16 or 32 (to match with the size in bits of a wchar_t).
Problem I've seen is that llvm::getConstantDataArrayInfo is taking
both an "ElementSize" argument (basically indicating size of a
char/element in bits) and an "Offset" which afaict is an offset
in the unit "number of elements". Then it also use
stripAndAccumulateConstantOffsets to get a "StartIdx" which afaict
is calculated in bytes. The returned Slice.Length is based on
arithmetics that add/subtract variables that are having different
units (bytes vs elements). Most notably I think the "StartIdx" must
be scaled using the "ElementSize" to get correct results.
The symptom of the above problem was seen in the wcslen-1.ll test
case which miscompiled.
This patch is supposed to resolve the bug by converting between
bytes and elements when needed.
Differential Revision: https://reviews.llvm.org/D135263
Bjorn Pettersson [Tue, 4 Oct 2022 19:21:14 +0000 (21:21 +0200)]
[SimplifyLibCalls] Pre-commit test case showing bug with wide char support
The ValueTracking support for getting the string length of a wchar_t
string (e.g. using wcslen) seem to be having some bugs.
Problem I've seen is that llvm::getConstantDataArrayInfo is taking
both a "ElementSize" argument (basically indicating size of a
char/element in bits) and an "Offset" which afaict is an offset
in the unit "number of elements". Then it also use
stripAndAccumulateConstantOffsets to get a "StartIdx" which afaict
is calculated in bytes. The returned Slice.Length is based on
arithmetics that add/subtract variables that are having different
units (bytes vs elements). Most notably I think the "StartIdx" must
be scaled using the "ElementSize" to get correct results.
This patch just adds a new test case showing that we get a wrong
result when doing wcslen(x + c). The actual fix to the above problem
will be done in a follow up commit.
Differential Revision: https://reviews.llvm.org/D135262
Dmitry Preobrazhensky [Fri, 7 Oct 2022 13:18:49 +0000 (16:18 +0300)]
[AMDGPU][MC][GFX11] Correct v_fmac_.*_e64_dpp
Differential Revision: https://reviews.llvm.org/D134961
Erich Keane [Fri, 7 Oct 2022 13:12:03 +0000 (06:12 -0700)]
[Concepts] Fix friend duplicate detection when referencing containing Record
As another regression from the Deferred Concepts Instantiation patch, we
weren't properly detecting that a friend referenced its containing
Record when it referred to it without its template parameters. This
patch makes sure that we do.
Dmitry Preobrazhensky [Fri, 7 Oct 2022 13:07:40 +0000 (16:07 +0300)]
[AMDGPU][GFX11][NFC] Refactor VOPD handling in codegen
Differential Revision: https://reviews.llvm.org/D135084
Jan Sjodin [Fri, 7 Oct 2022 13:03:00 +0000 (08:03 -0500)]
[OpenMP][OMPIRBuilder] Remove calls to dump in test
This removes the calls to dump tyupes introduced in commit
4627cef1134f99f3802a5ebfe26188d2c66da22f.
Differential Revision: https://reviews.llvm.org/D134662
Nikita Popov [Fri, 7 Oct 2022 12:56:02 +0000 (14:56 +0200)]
[OpenMP] Convert tests to opaque pointers (NFC)
Conversion performed using the script at:
https://gist.github.com/nikic/
98357b71fd67756b0f064c9517b62a34
These are only tests where no manual fixup was required.
Dmitry Preobrazhensky [Fri, 7 Oct 2022 12:46:55 +0000 (15:46 +0300)]
[AMDGPU][MC][GFX11] Add VOPD VGPR bank access validation
Differential Revision: https://reviews.llvm.org/D134960
Christudasan Devadasan [Tue, 4 Oct 2022 11:00:05 +0000 (16:30 +0530)]
[MachineInstr] Use unsigned int for opcode (NFC)
The opcode field in most places uses unsigned type.
InstrInfoEmitter still uses signed int for the
custom opcodes like CFSetupOpcode.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D135140
Aleksandr Platonov [Fri, 7 Oct 2022 12:38:49 +0000 (20:38 +0800)]
[clang] Make variables of undeduced types to have dependent alignment
Without this patch `VarDecl::hasDependent()` checks only undeduced auto types, so can give false negatives result for other undeduced types.
This lead to crashes in sequence `!VarDecl::hasDepentent()` => `getDeclAlign()`.
It seems this problem appeared since D105380
Reviewed By: mizvekov
Differential Revision: https://reviews.llvm.org/D135362
Hans Wennborg [Fri, 7 Oct 2022 12:23:47 +0000 (14:23 +0200)]
Revert "Thread safety analysis: Support copy-elided production of scoped capabilities through arbitrary calls"
This caused false positives, see comment on the code review.
> When support for copy elision was initially added in
e97654b2f2807, it
> was taking attributes from a constructor call, although that constructor
> call is actually not involved. It seems more natural to use attributes
> on the function returning the scoped capability, which is where it's
> actually coming from. This would also support a number of interesting
> use cases, like producing different scope kinds without the need for tag
> types, or producing scopes from a private mutex.
>
> Changing the behavior was surprisingly difficult: we were not handling
> CXXConstructorExpr calls like regular calls but instead handled them
> through the DeclStmt they're contained in. This was based on the
> assumption that constructors are basically only called in variable
> declarations (not true because of temporaries), and that variable
> declarations necessitate constructors (not true with C++17 anymore).
>
> Untangling this required separating construction from assigning a
> variable name. When a call produces an object, we use a placeholder
> til::LiteralPtr for `this`, and we collect the call expression and
> placeholder in a map. Later when going through a DeclStmt, we look up
> the call expression and set the placeholder to the new VarDecl.
>
> The change has a couple of nice side effects:
> * We don't miss constructor calls not contained in DeclStmts anymore,
> allowing patterns like
> MutexLock{&mu}, requiresMutex();
> The scoped lock temporary will be destructed at the end of the full
> statement, so it protects the following call without the need for a
> scope, but with the ability to unlock in case of an exception.
> * We support lifetime extension of temporaries. While unusual, one can
> now write
> const MutexLock &scope = MutexLock(&mu);
> and have it behave as expected.
> * Destructors used to be handled in a weird way: since there is no
> expression in the AST for implicit destructor calls, we instead
> provided a made-up DeclRefExpr to the variable being destructed, and
> passed that instead of a CallExpr. Then later in translateAttrExpr
> there was special code that knew that destructor expressions worked a
> bit different.
> * We were producing dummy DeclRefExprs in a number of places, this has
> been eliminated. We now use til::SExprs instead.
>
> Technically this could break existing code, but the current handling
> seems unexpected enough to justify this change.
>
> Reviewed By: aaron.ballman
>
> Differential Revision: https://reviews.llvm.org/D129755
This reverts commit
0041a69495f828f6732803cfb0f1e3fddd7fbf2a and the follow-up
warning fix in
83d93d3c11ac9727bf3d4c5c956de44233cc7f87.
Haojian Wu [Fri, 7 Oct 2022 12:04:54 +0000 (14:04 +0200)]
[SourceManager] Fix the incorrect counting stats in getFileIDLoaded.
We were double-counting the number of binary search FileID scans.
Valentin Clement [Fri, 7 Oct 2022 12:22:36 +0000 (14:22 +0200)]
[flang] Allow fir.class in AnyRefOrBox
Some operations are using `AnyRefOrBox` to specify the type of the
operands or attribute. This is the case for the `fir.coordinate_of`
operation. This patch updates the `AnyRefOrBox` to accept `BaseBoxType`
instead of only `BoxType`.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D135442
Nikita Popov [Fri, 7 Oct 2022 12:09:44 +0000 (14:09 +0200)]
[CodeGen] Convert tests to opaque pointers (NFC)
Conversion performed using the script at:
https://gist.github.com/nikic/
98357b71fd67756b0f064c9517b62a34
These are only tests where no manual fixup was required.
Jan Sjodin [Thu, 29 Sep 2022 14:26:25 +0000 (09:26 -0500)]
[OpenMP][OMPIRBuilder] Migrate emitOffloadingArraysArgument from clang
This patch moves the emitOffloadingArraysArgument function and
supporting data structures to OpenMPIRBuilder. This will later be used
in flang as well. The TargetDataInfo class was split up into generic
information and clang-specific data, which remain in clang. Further
migration will be done in in the future.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D134662
Manuel Brito [Fri, 7 Oct 2022 11:48:08 +0000 (12:48 +0100)]
[clang][CodeGen] Use poison instead of undef as placeholder in ARM builtins [NFC]
Differential Revision: https://reviews.llvm.org/D135392
Adrian Kuegel [Fri, 7 Oct 2022 11:49:28 +0000 (13:49 +0200)]
Hans Wennborg [Fri, 7 Oct 2022 11:37:28 +0000 (13:37 +0200)]
Revert "[lld/mac] Port typo correction for undefined symbols from ELF port"
This caused crashes/assert failures for some Chromium developers, see comment
on the code review.
> Ports:
> - core feature: https://reviews.llvm.org/D67039
> - case mismatch: https://reviews.llvm.org/D70506
> - extern "C" suggestions: https://reviews.llvm.org/D69592,
> https://reviews.llvm.org/D69650
>
> Does not port https://reviews.llvm.org/D71735 since I believe that that doesn't
> apply to lld/Mach-O.
>
> Differential Revision: https://reviews.llvm.org/D135038
This reverts commit
8c45e80298f4e3eb6d9cfbafcb099bc087e4668e.
zhongyunde [Fri, 7 Oct 2022 11:31:48 +0000 (19:31 +0800)]
[AArch64] Lower multiplication by a constant int to madd
Lower a = b * C -1 into madd
a) instcombine change b * C -1 --> b * C + (-1)
b) machine-combine change b * C + (-1) --> madd
Assembler will transform the neg immedate of sub to add, see https://gcc.godbolt.org/z/cTcxePPf4
Fixes AArch64 part of https://github.com/llvm/llvm-project/issues/57255.
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D134336
Tobias Gysi [Fri, 7 Oct 2022 11:13:24 +0000 (14:13 +0300)]
[mlir][llvmir] Import intrinsics with attributes from LLVMIR.
The revision adds support to specify custom import functions for
LLVM IR intrinsics with immediate arguments that translate to MLIR
attributes. It takes an approach similar to the MLIR to LLVM translation
that uses a tablegen defined build method. The default implementation
of this newly introduced "mlirBuilder" assumes all intrinsic arguments
translate to operands. Specific intrinsics, such as
llvm.lifetime.start/stop then define a custom builder that converts
their immediate arguments to MLIR attributes.
Depends on D135349
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D135350
Florian Hahn [Fri, 7 Oct 2022 11:27:35 +0000 (12:27 +0100)]
[ConstraintElimination] Convert to unsigned Pred if possible.
Convert SLE/SLT predicates to unsigned equivalents if both operands are
known to be signed-positive.
https://alive2.llvm.org/ce/z/tBeiZr
Matthias Springer [Fri, 7 Oct 2022 10:47:29 +0000 (19:47 +0900)]
[mlir][bufferize][NFC] Address review comments of D135420
These changes should have been landed as part of D135420.
Differential Revision: https://reviews.llvm.org/D135438
Uday Bondhugula [Fri, 7 Oct 2022 08:21:57 +0000 (13:51 +0530)]
[MLIR][Affine] Fix crash in normalizeMemRefType
Fix crash in normalizeMemRefType. Correctly handle scenario and replace
assertion with a failure.
Reviewed By: dcaballe
Differential Revision: https://reviews.llvm.org/D135424
Nikita Popov [Tue, 27 Sep 2022 16:30:32 +0000 (18:30 +0200)]
[LoopPeeling] Support peeling loops with non-latch exits
Loop peeling currently requires that a) the latch is exiting
b) a branch and c) other exits are unreachable/deopt. This patch
removes all of these limitations, and adds the necessary branch
weight updating support. It essentially works the same way as
before with latch -> exiting terminator and
loop trip count -> per exit trip count.
It's worth noting that there are still other limitations in
profitability heuristics: This patch enables peeling of loops to
make conditions invariant (which is pretty much always highly
profitable if possible), while peeling to make loads dereferenceable
still checks that non-latch exits are unreachable and PGO-based
peeling has even more conditions. Those checks could be relaxed
later if we consider those cases profitable.
The motivation for this change is that loops using iterator adaptors
in Rust often optimize very badly, and end up with a loop phi of the
form phi(true, false) in the final result. Peeling eliminates that
phi and conditions based on it, which enables a lot of follow-on
simplification.
Differential Revision: https://reviews.llvm.org/D134803
Hans Wennborg [Sun, 18 Sep 2022 23:05:56 +0000 (01:05 +0200)]
Keep inherited dllimport/export attrs for explicit specialization of class template member functions
Previously we were stripping these normally inherited attributes during
explicit specialization. However for class template member functions
(but not function templates), MSVC keeps the attribute.
This makes Clang match that behavior, and fixes GitHub issue #54717
Differential revision: https://reviews.llvm.org/D135154
Kadir Cetinkaya [Wed, 5 Oct 2022 11:27:53 +0000 (13:27 +0200)]
[clangd][Tweak] Make sure enclosing function doesnt have invalid children
Differential Revision: https://reviews.llvm.org/D135257
Nikita Popov [Fri, 7 Oct 2022 09:32:58 +0000 (11:32 +0200)]
[ValueTracking] Remove unused Offset argument in getConstantStringInfo() (NFC)
David Spickett [Thu, 29 Sep 2022 13:03:43 +0000 (13:03 +0000)]
[LLDB] Add "frame select" as equivalent of GDB's "frame" command
This is useful for answering the question "where am I?" and is surprisingly
difficult to figure out without just doing another step command.
Reviewed By: awarzynski
Differential Revision: https://reviews.llvm.org/D134873
eopXD [Fri, 7 Oct 2022 09:24:56 +0000 (02:24 -0700)]
[LangRef] Fix too short title underline
eopXD [Wed, 5 Oct 2022 01:10:14 +0000 (18:10 -0700)]
[VP][RISCV] Add vp.roundtozero and its RISC-V support
The scalar instruction of this is `llvm.trunc`. However the naming of
ISD::VP_TRUNC is already taken by `trunc` of the LLVM IR. Naming this as
`vp.ftrunc` would likely cause confusion with `vp.fptrunc`. So adding
`vp.roundtozero` that will look similar to `vp.roundeven`.
Reviewed By: frasercrmck
Differential Revision: https://reviews.llvm.org/D135233
David Spickett [Wed, 5 Oct 2022 11:30:05 +0000 (11:30 +0000)]
[LLDB] Fix crash when printing a struct with a static signed char member
As with static bool for whatever reason printing them on their own
worked fine but wasn't handled when you printed the whole type.
I don't see a good way to test this from clang's side so our existing
tests will have to do.
We can now print all of the struct "A", so there's no need for a separate
one for static bool testing. I've not checked the output, just that it
succeeds. This saves us having to handle different min/max between systems.
Depends on D135169
Reviewed By: aeubanks, shafik
Differential Revision: https://reviews.llvm.org/D135170
Dmitry Makogon [Thu, 6 Oct 2022 09:30:48 +0000 (16:30 +0700)]
[LoopPredication] Insert assumes of conditions of predicated guards
As LoopPredication performs non-equivalent transforms removing some
checks from loops, other passes may not be able to perform transforms
they'd be able to do if the checks were left in loops.
This patch makes LoopPredication insert assumes of the replaced
conditions either after a guard call or in the true block of
widenable condition branch.
Differential Revision: https://reviews.llvm.org/D135354
Nikita Popov [Fri, 7 Oct 2022 09:07:17 +0000 (11:07 +0200)]
[llvm-reduce] Fix unused variable warning (NFC)
Vignesh Balasubramanian [Tue, 20 Sep 2022 12:12:26 +0000 (17:42 +0530)]
[OpenMP] [OMPD] Build gdb-plugin code only when python3 development files are available.
gdb-plugin code is a interface between gdb, libompd, gdb and libomp.
Python3 development files are required to build this utility.
This patch will disable the plugin code build when python3 dev files
are not available.
Reviewed By: @mgorny, @aaronpuchert
Differential Revision: https://reviews.llvm.org/D134275
Nikita Popov [Fri, 30 Sep 2022 10:13:40 +0000 (12:13 +0200)]
Reapply [InstCombine] Switch foldOpIntoPhi() to use InstSimplify
Relative to the previous attempt, this adjusts simplification to
use the correct context instruction: We need to use the terminator
of the incoming block, not the original instruction.
-----
foldOpIntoPhi() currently only folds operations into the phi if all
but one operands constant-fold. The two exceptions to this are freeze
and select, where we allow more general simplification.
This patch makes foldOpIntoPhi() generally simplification based and
removes all the instruction-specific logic. We just try to simplify
the instruction for each operand, and for the (potentially) one
non-simplified operand, we move it into the new block with adjusted
operands.
This fixes https://github.com/llvm/llvm-project/issues/57448, which
was my original motivation for the change.
Differential Revision: https://reviews.llvm.org/D134954
David Spickett [Tue, 4 Oct 2022 14:56:12 +0000 (14:56 +0000)]
[LLDB] Fix printing a static bool struct member when using "image lookup -t"
Fixes #58135
Somehow lldb was able to print the member on its own but when we try
to print the whole type found by "image lookup -t" lldb would crash.
This is because we'd encoded the initial value of the member as an integer.
Which isn't the end of the world because bool is integral for C++.
However, clang has a special AST node to handle literal bool and it
expected us to use that instead.
This adds a new codepath to handle static bool which uses cxxBoolLiteralExpr
and we get the member printed as you'd expect.
For testing I added a struct with just the bool because trying to print
all of "A" crashes as well. Presumably because one of the other member's
types isn't handled properly either.
So for now I just added the bool case, we can merge it with A later.
Reviewed By: aeubanks
Differential Revision: https://reviews.llvm.org/D135169
Nikita Popov [Fri, 7 Oct 2022 08:59:22 +0000 (10:59 +0200)]
[InstCombine] Add test for foldOpIntoPhi() context instr (NFC)
Reduced test case for the miscompile reported at
https://reviews.llvm.org/D134954#3840475.
Pierre van Houtryve [Wed, 5 Oct 2022 07:27:24 +0000 (07:27 +0000)]
[GISel] Add Trunc/Lshr/BuildVector Folding
Similar to the current "Trunc/BuildVector" folding - which folds low element extracts of BuildVectors, folds hi element extracts done using bitshifts.
For D134354
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D135148
David Spickett [Fri, 7 Oct 2022 08:42:01 +0000 (08:42 +0000)]
[LLDB] Add missing space in help for frame-format-unique setting
Diana Picus [Fri, 7 Oct 2022 08:35:11 +0000 (10:35 +0200)]
Update RELEASE_TESTERS.TXT
armv7 and AArch64 releases are handled by Linaro.
Pierre van Houtryve [Tue, 4 Oct 2022 11:06:15 +0000 (11:06 +0000)]
[GISel] Handle G_TRUNC in `matchExtractVecEltBuildVec`
Spotted some cases in D134354 where this was an issue.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D135147
Florian Hahn [Fri, 7 Oct 2022 08:31:45 +0000 (09:31 +0100)]
[ConstraintElimination] Add test that crash in earlier var handling.
Add a test that caused a crash in the new variable handling code in
earlier versions.
Uday Bondhugula [Fri, 7 Oct 2022 08:16:13 +0000 (13:46 +0530)]
NFC. Remove unnecessary builder argument in Affine Utils helper
NFC. Remove unnecessary builder argument in an Affine Utils helper
function: normalizeMemRefType. A builder was never needed. While on
this, fix a clang-tidy warning from the same file.
Reviewed By: dcaballe
Differential Revision: https://reviews.llvm.org/D135423
Alex Zinenko [Fri, 7 Oct 2022 08:14:30 +0000 (08:14 +0000)]
[mlir] fix memory effects of transform::PDLMatchOp
The op was declaring the effects associated with payload IR as attached
to its operand since ODS doesn't allow otherwise. Implement the memory
effects query method in C++ instead to make the effect not attached to
the operand.
Nikita Popov [Thu, 6 Oct 2022 10:38:56 +0000 (12:38 +0200)]
[CodeGenCXX] Convert more tests to opaque pointers (NFC)
Conversion was performed using
https://gist.github.com/nikic/
98357b71fd67756b0f064c9517b62a34
plus manual (but uninteresting) fixups.
Markus Böck [Fri, 7 Oct 2022 07:30:45 +0000 (09:30 +0200)]
[mlir][tblgen] Fix crash in `-gen-enum-(decls|defs)` when `EnumAttrInfo` is not defined
This should instead simply produce an empty file instead of crashing and causing a build to fail. This allows one to be more lazy in cmake code and just always generate the files for enum attributes, even if none are ever defined in the dialect.
Differential Revision: https://reviews.llvm.org/D135355
Matthias Springer [Fri, 7 Oct 2022 07:33:33 +0000 (16:33 +0900)]
[mlir][bufferize] Fix repetitive region conflict detection
This fixes a bug where a required buffer copy was not inserted.
Not only written aliases, but also read aliases should be taken into account when computing common enclosing repetitive regions. Furthermore, for writing ops, it does not matter where the destination tensor is defined, but where the op itself is located.
Differential Revision: https://reviews.llvm.org/D135420
Haojian Wu [Sun, 2 Oct 2022 09:54:05 +0000 (11:54 +0200)]
[SourceManager] Improve getFileIDLocal.
Prune the search space -- If we know offset(LastFileIDLookup) < SearchOffset, we
can prune the initial binary-search range from [0, end) to [LastFileIDlookup, end).
It reduces the binary search scan by ~30%.
SemaExpr.cpp: 1393437 -> 1035426
FindTarget.cpp: 1275930 -> 920087
Linux kernel:
getFileIDLocal: 2.45% -> 2.15%
Differential Revision: https://reviews.llvm.org/D135132
Valentin Clement [Fri, 7 Oct 2022 07:24:50 +0000 (09:24 +0200)]
[flang][NFC] Update fir.dispatch format in doc
Haojian Wu [Fri, 30 Sep 2022 08:34:04 +0000 (10:34 +0200)]
[Lex] Simplify and cleanup the updateConsecutiveMacroArgTokens implementation.
The code falls back to the pre-2011 partition-file-id solution (see for
[details](https://reviews.llvm.org/D20401#3823476)).
This patch simplifies/rewrites the code based on the partition-based-on-file-id
idea. The new implementation is optimized by reducing the number of
calling getFileID (~40% drop).
Despite the huge drop of getFileID, this is a marignal improvment on
speed (becase the number of calling non-cached getFileID is roughly
the same). It removes the evaluation-order performance gap between gcc-built-clang
and clang-built-clang.
SemaExpr.cpp:
- before: 315063 SLocEntries, FileID scans: 388230 linear, 1393437 binary. 458893 cache hits, 672299 getFileID calls
- after: 313494 SLocEntries, FileID scans: 397525 linear, 1451890 binary, 176714 cache hits, 397144 getFileID calls
FindTarget.cpp:
- before: 279984 SLocEntries, FileID scans: 361926 linear, 1275930 binary, 436072 cache hits, 632150 getFileID calls
- after: 278426 SLocEntries, FileID scans: 371279 linear, 1333963 binary, 153705 cache hits, 356814 getFileID calls
Differential Revision: https://reviews.llvm.org/D134942
Kazu Hirata [Fri, 7 Oct 2022 06:59:34 +0000 (23:59 -0700)]
[clang] Fix a warning
This patch fixes:
clang/lib/Analysis/ThreadSafety.cpp:1788:12: error: unused variable
'inserted' [-Werror,-Wunused-variable]
Mike Hommey [Fri, 7 Oct 2022 06:34:05 +0000 (08:34 +0200)]
[CodeView] Avoid NULL deref of Scope
Regression from D131400: cross-language LTO causes a crash in the
compiler on the NULL deref of Scope in `isa` call when Rust IR is
involved. Presumably, this might affect other languages too, and
even Rust itself without cross-language LTO when the Rust compiler
switched to LLVM 16.
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D134616
Michał Górny [Thu, 6 Oct 2022 14:41:04 +0000 (16:41 +0200)]
[llvm] [lit] Fix use_lld() to respect llvm_shlib_dir
Fix the use_lld() to use llvm_shlib_dir similarly to how use_clang()
does it. This fixes use_lld() wrongly prepending llvm_libs_dir,
i.e. the directory with system-installed LLVM libraries before
the build directory of standalone build. As a result, the shared
libraries from an earlier version of clang end up being used instead of
the newly built version when running the test suite prior to installing.
To reproduce the problem, build and install LLVM with dylibs first,
e.g.:
cmake ../llvm -G Ninja -DCMAKE_BUILD_TYPE=MinSizeRel \
-DCMAKE_INSTALL_PREFIX="${HOME}"/llvm-test \
-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_INSTALL_UTILS=ON
ninja install
Then build clang against that installation and run tests:
export LD_LIBRARY_PATH=~/llvm-test/lib
export PATh=~/llvm-test/bin:"${PATH}"
cmake ../clang -G Ninja -DCMAKE_BUILD_TYPE=MinSizeRel \
-DCMAKE_INSTALL_PREFIX="${HOME}"/llvm-test \
-DCLANG_LINK_CLANG_DYLIB=ON -DLLVM_BUILD_TESTS=ON \
-DLLVM_EXTERNAL_LIT="${PWD}"/bin/llvm-lit
ninja check-clang
The tests will be run with LD_LIBRARY_PATH of:
/home/${USER}/llvm-test/lib:/home/${USER}/llvm-project/build-clang/lib
As a result, installed libclang-cpp will take precedence over the one
from build dir. With the patch, the correct path is used, i.e.:
/home/${USER}/llvm-project/build-clang/lib:/home/${USER}/llvm-test/lib
Differential Revision: https://reviews.llvm.org/D135368
Dominic Chen [Thu, 29 Sep 2022 21:57:56 +0000 (14:57 -0700)]
[libc] Resolve NaN/implementation-defined behavior of floating-point tests
Differential Revision: https://reviews.llvm.org/D134917
Peter Collingbourne [Fri, 7 Oct 2022 03:55:13 +0000 (20:55 -0700)]
gn build: s/target_os/current_os/g
Peter Collingbourne [Fri, 7 Oct 2022 03:52:22 +0000 (20:52 -0700)]
gn build: Do not build libunwind.so for Android.
Android does not use a shared libunwind.so and its presence in the build
directory can be harmful, for example it can end up being dynamically
linked against while not being present on the device.
Vladimir Vereschaka [Fri, 7 Oct 2022 02:18:10 +0000 (19:18 -0700)]
[CMake] Update cache file for Win to ARM Linux cross toolchain builders. NFC.
Do not specify the execution directory in the remote execution script command line
for the compiler-rt builtin library tests. There is a single execution file tests
within the single directory. No need to pack all of them every time, just run one by one.
Vladimir Vereschaka [Fri, 7 Oct 2022 02:07:33 +0000 (19:07 -0700)]
Update the remote test launch utility (utils/remote-exec.py).
Allowed a single file execution without the execution directory.
Xiang Li [Tue, 4 Oct 2022 20:02:49 +0000 (13:02 -0700)]
[DirectX backend] Add analysis to collect DXILResources
Now only DXILTranslateMetadata uses DXILResources, so DXILResourceWrapper is only used by DXILTranslateMetadata.
Once we add lower for createHandle, DXILResourceWrapper will be used in more passes.
Also we can add resource index allocation in DXILResourceWrapper.
Reviewed By: beanz
Differential Revision: https://reviews.llvm.org/D135190
Slava Zakharin [Wed, 5 Oct 2022 18:17:09 +0000 (11:17 -0700)]
[flang] Represent TARGET for globals with 'target' attribute.
TARGET dummy arguments have fir.target attribute attached to them,
but globals do not have any sign of TARGET. This patch adds
target attribute for globals, which can be queried via
::fir::GlobalOp::getTarget().
Differential Revision: https://reviews.llvm.org/D135313
Matthias Springer [Fri, 7 Oct 2022 01:36:31 +0000 (10:36 +0900)]
[mlir][bufferize] Fix enclosing repetitive region computation
The wrong function overload was called.
Differential Revision: https://reviews.llvm.org/D135342
Joseph Huber [Fri, 7 Oct 2022 01:14:31 +0000 (20:14 -0500)]
[Clang] Fix unknown argument test on Windows
Summary:
This added a check for no unknown argument warnings. This apparently
occurs in the Windows toolchain as it cannot find a toolchain. This
patch fixes it by just ignoring this warning.
Mehdi Amini [Thu, 6 Oct 2022 18:17:40 +0000 (18:17 +0000)]
Apply clang-tidy fixes for performance-move-const-arg in IntegerRelation.cpp (NFC)
Kai Sasaki [Fri, 7 Oct 2022 00:29:36 +0000 (09:29 +0900)]
[mlir] Fix test failure with invalid piping syntax on old bash
Using '|&' syntax for piping both stdout and stderr is not supported by older bash. macOS pre-installs 3.2.57 as of today, and it causes test failure due to unexpected token '&'. We can use '2>&1' instead to make it compatible as much as possible.
```
******************** TEST 'MLIR :: mlir-cpu-runner/invalid.mlir' FAILED ********************
Script:
--
: 'RUN: at line 1'; not mlir-cpu-runner --no-implicit-module llvm-project/mlir/test/mlir-cpu-runner/invalid.mlir |& llvm-project/build/bin/FileCheck llvm-project/mlir/test/mlir-cpu-runner/invalid.mlir
--
Exit Code: 2
Command Output (stderr):
--
mlir-cpu-runner/Output/invalid.mlir.script: line 1: syntax error near unexpected token `&'
/mlir-cpu-runner/Output/invalid.mlir.script: line 1: `set -o pipefail;{ : 'RUN: at line 1'; not mlir-cpu-runner --no-implicit-module llvm-project/mlir/test/mlir-cpu-runner/invalid.mlir |& llvm-project/build/bin/FileCheck llvm-project/mlir/test/mlir-cpu-runner/invalid.mlir; }'
```
Reference: https://stackoverflow.com/questions/
35384999/what-does-mean-in-bash
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D135347
Qiongsi Wu [Thu, 6 Oct 2022 23:56:45 +0000 (19:56 -0400)]
[clang][LTO] Remove the use of `--` for arange option
https://reviews.llvm.org/D134668 removed all `--` (double dashes) when using `plugin-opt` to pass linker options and replaced them with `-`. https://reviews.llvm.org/D133092 was committed later but introduced an instance of `--`. This patch replaces the `--` with `-`.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D135400
Ye Luo [Fri, 7 Oct 2022 00:05:14 +0000 (19:05 -0500)]
[DeviceRTL] Fix a CMake multi-step compilation dependency issue.
caused by
92233159035d1b50face95d886901cf99035bd99
Joseph Huber [Thu, 6 Oct 2022 16:17:39 +0000 (11:17 -0500)]
[OpenMP][AMDGPU] Add 'uniform-work-group' attribute to OpenMP kernels
The `cl-uniform-work-group` attribute asserts that the global work-size
be a multiple of the work-group specified work group size. This should
allow optimizations. It is already present by default in the AMD
compiler and for HIP kernels so it should be safe to allow this for
OpenMP kernels by default.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D135374
Jan Svoboda [Thu, 6 Oct 2022 23:03:48 +0000 (16:03 -0700)]
[clang][modules] Fix handling of `ModuleHeaderRole::ExcludedHeader`
This is a follow-up to D134224. The original patch added new `ExcludedHeader` enumerator to `ModuleMap::ModuleHeaderRole` and started associating headers with the modules they were excluded from. This was necessary to consider their module maps as "affecting" in certain situations and in turn serialize them into the PCM.
The association of the header and module needs to be handled when deserializing the PCM as well, though. This patch fixes a potential assertion failure and a regression. This essentially reverts parts of
feb54b6ded123f8118fdc20620d3f657dfeab485.
Reviewed By: Bigcheese
Differential Revision: https://reviews.llvm.org/D135381
Joseph Huber [Thu, 6 Oct 2022 19:50:45 +0000 (14:50 -0500)]
[Clang] Emit a warning for ambiguous joined '-o' arguments
The offloading toolchain makes heavy use of options beginning with
`--o`. This is problematic when combined with the joined `-o` flag. In
the following situation, the user will not get the expected output and
will not notice as the expected output will still be written.
```
clang++ -x cuda foo.cu -offload-arch=sm_80 -o foo
```
This patch introduces a warning that checks for joined `-o` arguments
that would also be a valid driver argument if an additional `-` were
added. I believe this situation is uncommon enough to warrant a warning,
and can be trivially fixed by the end user by using the more common
separate form instead.
Reviewed By: tra, MaskRay
Differential Revision: https://reviews.llvm.org/D135389
Leonard Chan [Thu, 6 Oct 2022 23:13:42 +0000 (23:13 +0000)]
[llvm] Clear the ForwardRefDSOLocalEquivalentIDs map
I accidentally cleared ForwardRefDSOLocalEquivalentNames twice instead.
Differential Revision: https://reviews.llvm.org/D135315
Craig Topper [Thu, 6 Oct 2022 22:23:12 +0000 (15:23 -0700)]
[RISCV] Use mask agnostic policy for isel patterns where the merge operand is IMPLICIT_DEF.
I tend to think we should ignore the policy bit in vsetvli insertion
if the tied operand is IMPLICIT_DEF. But that raises questions about
what the policy operand on RVV intrinsics means if you also pass
vundefined().
This change at least fixes some cases. I'll post a separate patch
for vsetvli insertion for discussion.
Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D135386
Alina Sbirlea [Tue, 23 Aug 2022 22:39:09 +0000 (15:39 -0700)]
[SmallVector] Reallocate if assigned memory is right after the current vector, created with capacity 0
Potential solution for
https://github.com/llvm/llvm-project/issues/57324.
Differential Revision: https://reviews.llvm.org/D132512
Michael Jones [Thu, 6 Oct 2022 22:34:33 +0000 (15:34 -0700)]
[libc][obvious] move kill into fullbuild only
Signal is currently fullbuild only, so all functions inside it should be
as well.
Differential Revision: https://reviews.llvm.org/D135410
Michael Jones [Thu, 6 Oct 2022 21:59:30 +0000 (14:59 -0700)]
[libc] add kill
Add the kill syscall wrapper and tests.
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D135406
Peter Klausler [Thu, 6 Oct 2022 00:15:50 +0000 (17:15 -0700)]
[flang] Correct epistemological edge cases for IS_CONTIGUOUS folding
Don't return a hard .FALSE. when folding IS_CONTIGUOUS() unless the
subscript triplets are discontiguous and array section is nonempty,
or if the array section is nonempty and there is a vector subscript.
Differential Revision: https://reviews.llvm.org/D135334
Peter Klausler [Wed, 5 Oct 2022 22:40:13 +0000 (15:40 -0700)]
fix
Peter Klausler [Tue, 4 Oct 2022 21:14:05 +0000 (14:14 -0700)]
[flang][runtime] Handle array components in NAMELIST input
A namelist input item that is a derived type component reference
needs additional processing when the base item or the component
is an array. When both have rank > 0, the component reference
must of course be subscripted.
(Fixes https://gitlab-master.nvidia.com/fortran/f18-stage/-/issues/999, NAG test t/tz2.)
Ellis Hoag [Thu, 6 Oct 2022 22:17:30 +0000 (15:17 -0700)]
[llvm-profdata] Add some missing options to docs
I forgot to add documentation for these options when I added them to the `show` command, so add them now.
Reviewed By: phosek
Differential Revision: https://reviews.llvm.org/D135383
Michael Jones [Tue, 27 Sep 2022 22:29:09 +0000 (15:29 -0700)]
[libc] fix futex type
Previously the futex type was defined in terms of unsigned int, now it's
uint32, which is more portable.
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D135408
Philip Reames [Thu, 6 Oct 2022 22:12:37 +0000 (15:12 -0700)]
[RISCV] Use branchless form for selects with -1 in either arm
We can lower these as an or with the negative of the condition value. This appears to result in significantly less branch-y code on multiple common idioms (as seen in tests).
Differential Revision: https://reviews.llvm.org/D135316
Philip Reames [Thu, 6 Oct 2022 22:11:34 +0000 (15:11 -0700)]
[RISCV] Verify that policy operands only exist on instructions with tied passthru operands
This is a non-trivial property relied upon by D135396. I wrote this to convince myself it was true.
Differential Revision: https://reviews.llvm.org/D135403
LLVM GN Syncbot [Thu, 6 Oct 2022 22:03:16 +0000 (22:03 +0000)]
[gn build] Port
96a509bca28b
Xiang Li [Thu, 6 Oct 2022 21:00:25 +0000 (14:00 -0700)]
[HLSL] Remove global ctor/dtor variable for non-lib profile.
After generated call for ctor/dtor for entry, global variable for ctor/dtor are useless.
Remove them for non-lib profiles.
Lib profile still need these in case export function used the global variable which require ctor/dtor.
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D133993
Shubham Sandeep Rastogi [Thu, 6 Oct 2022 21:58:10 +0000 (14:58 -0700)]
Revert "Remove the dependency between lib/DebugInfoDWARF and MC."
This reverts commit
d96ade00c3c96bd451c60e34a17e613cdd5fdc38.
Hui Xie [Mon, 5 Sep 2022 15:45:47 +0000 (16:45 +0100)]
implement `std::views::istream`
implement `std::ranges::basic_istream_view` and `std::views::istream`. Although the view itself is constexpr,
the constructor argument is a base class std::istream where its ctor/dtor are not constexpr. So no tests are performed in
constexpr
Differential Revision: https://reviews.llvm.org/D133317
Peter Klausler [Tue, 4 Oct 2022 21:14:05 +0000 (14:14 -0700)]
[flang][runtime] Handle array components in NAMELIST input
A namelist input item that is a derived type component reference
needs additional processing when the base item or the component
is an array. When both have rank > 0, the component reference
must of course be subscripted.
Differential Revision: https://reviews.llvm.org/D135218
Shubham Sandeep Rastogi [Thu, 6 Oct 2022 19:15:07 +0000 (12:15 -0700)]
Remove the dependency between lib/DebugInfoDWARF and MC.
This patch had to be reverted because on gcc 7.5.0 we see an error converting from std::unique_ptr<MCRegisterInfo> to Expected<std::unique_ptr<MCRegisterInfo>> as the return type for the function createRegInfo. This has now been fixed.
Peter Klausler [Tue, 4 Oct 2022 20:45:11 +0000 (13:45 -0700)]
[flang] Supply missing source location for a message
An error message in semantic analysis of SELECT TYPE type guards
doesn't allow for the possibility of failure from FindSourceLocation(),
and that can happen when the type guard is just an intrinsic type
name like "type is (character)". Deal with it.
Differential Revision: https://reviews.llvm.org/D135217
Jeffrey Byrnes [Thu, 6 Oct 2022 21:29:04 +0000 (14:29 -0700)]
[AMDGPU] Add test coverage to ensure first regallocfast only allocates SGPR
Register allocation is split into two passes, and the expected behavior is that the first pass only should only work on virtual SGPRs. Whereas the second pass works on virtual VGPRs. This adds a test case which breaks if the first pass allocates VGPRs.
Differential Revision: https://reviews.llvm.org/D135331
LLVM GN Syncbot [Thu, 6 Oct 2022 21:24:57 +0000 (21:24 +0000)]
[gn build] Port
2c799b7793cc
Matthew Voss [Thu, 6 Oct 2022 21:20:13 +0000 (14:20 -0700)]
[llvm-reduce] Add pass that reduces DebugInfo metadata
This new pass for llvm-reduce attempts to reduce DebugInfo metadata.
The process used is:
1. Scan every MD node, keeping track of nodes already visited.
2. Look for DebugInfo nodes, then record any operands that are lists.
3. Bisect though all the elements of the collected lists.
Differential Revision: https://reviews.llvm.org/D132077
Aart Bik [Thu, 6 Oct 2022 21:10:36 +0000 (14:10 -0700)]
[mlir][sparse] remove llvm dependence from sparse bazel
Reviewed By: wrengr, Peiming
Differential Revision: https://reviews.llvm.org/D135401