Jay Foad [Tue, 13 Sep 2022 09:50:22 +0000 (10:50 +0100)]
[AMDGPU] Add GFX11 globalisel test coverage for fptosi/fptoui
Pavel Samolysov [Tue, 13 Sep 2022 08:04:30 +0000 (11:04 +0300)]
[NFC][ScheduleDAGInstrs] Use structure bindings and emplace_back
Some uses of std::make_pair and the std::pair's first/second members
in the ScheduleDAGInstrs.[cpp|h] files were replaced with using of the
vector's emplace_back along with structure bindings from C++17.
Dmitry Preobrazhensky [Tue, 13 Sep 2022 09:41:39 +0000 (12:41 +0300)]
[AMDGPU][MC][GFX11] Add a helper function for identification of VOPD instructions
Differential Revision: https://reviews.llvm.org/D133608
Dmitry Preobrazhensky [Tue, 13 Sep 2022 09:37:30 +0000 (12:37 +0300)]
[AMDGPU][MC] Add detection of mandatory literals in parser
Differential Revision: https://reviews.llvm.org/D133606
Sven van Haastregt [Tue, 13 Sep 2022 09:10:48 +0000 (10:10 +0100)]
[OpenCL] Guard depth image builtins
Ensure any uses of `image2d_depth_t` and `image2d_array_depth_t` are
guarded behind the `cl_khr_depth_images` extension in
`OpenCLBuiltins.td`.
Fix a few missing guards in `opencl-c.h`.
jacquesguan [Wed, 31 Aug 2022 08:58:37 +0000 (16:58 +0800)]
[RISCV][test] Add test for the cost model of vector insert/extract element.
Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D133005
Sylvestre Ledru [Tue, 13 Sep 2022 08:53:59 +0000 (10:53 +0200)]
Revert "[clang, llvm] Add __declspec(safebuffers), support it in CodeView"
Causing:
https://github.com/llvm/llvm-project/issues/57709
This reverts commit
ab56719acd98778fb2e48fa425ac7c8d27bdea86.
Jean Perier [Tue, 13 Sep 2022 08:39:33 +0000 (10:39 +0200)]
[flang][runtime] ensure character compares to blank are unsigned
CompareToBlankPadding was doing signed compare on architecture where
`char` is signed. This caused `'abc'//char(128) > 'abc'` to evaluate
to false at runtime instead of true.
Differential Revision: https://reviews.llvm.org/D133693
Timm Bäder [Sun, 11 Sep 2022 12:39:52 +0000 (14:39 +0200)]
[clang][Interp][NFC] Use constexpr if in OffsetHelper
Add is a template parameter, so we can use constexpr if here.
Timm Bäder [Sat, 10 Sep 2022 10:55:41 +0000 (12:55 +0200)]
[clang][Interp][NFC] InterpFrame::getParam can be const
Make stackRef() const as well and use that.
Timm Bäder [Sat, 10 Sep 2022 10:51:50 +0000 (12:51 +0200)]
[clang][Interp][NFC] InterpFrame::getLocal() can be const
Make localRef() const and use that.
Timm Bäder [Sat, 10 Sep 2022 07:42:02 +0000 (09:42 +0200)]
[clang][Interp][NFC] InterpFrame: localBlock() can be const
Timm Bäder [Tue, 6 Sep 2022 07:31:17 +0000 (09:31 +0200)]
[clang][Interp][NFC] Forward-declare Pointer in PrimType header
No need to include the full Pointer.h here.
Timm Bäder [Wed, 31 Aug 2022 07:24:03 +0000 (09:24 +0200)]
[clang][Interp] Handle DeclRefExpr of reference types
References are implemented through pointers, so we need a second deref
when encountering a DeclRefExpr of a reference type.
Differential Revision: https://reviews.llvm.org/D132997
Haojian Wu [Tue, 13 Sep 2022 08:26:00 +0000 (10:26 +0200)]
Nikita Popov [Mon, 12 Sep 2022 16:29:53 +0000 (18:29 +0200)]
[BasicAA] Delay getAllocTypeSize() call (NFC)
This call is expensive, so don't perform it for zero indices.
Also rename the variable to use Alloc rather than Alloca, this
doesn't have anything to do with allocas in particular.
Florian Hahn [Tue, 13 Sep 2022 08:09:18 +0000 (09:09 +0100)]
[LV] Mark Instr as const in scalarizeInstruction. (NFC).
This is to reduce the diff in follow-up changes.
David Green [Tue, 13 Sep 2022 07:57:15 +0000 (08:57 +0100)]
[TypePromotionPass] Don't treat phi's as ToPromote
This attempts to stop the type promotion pass transforming where it is
not profitable, by not marking PhiNodes as ToPromote and being more
aggressive about pulling extends out of loops.
Differential Revision: https://reviews.llvm.org/D133203
Martin Storsjö [Fri, 26 Aug 2022 13:47:07 +0000 (16:47 +0300)]
[clang] Explicitly set the EmulatedTLS codegen option. NFC.
Set the EmulatedTLS option based on `Triple::hasDefaultEmulatedTLS()`
if the user didn't specify it; set `ExplicitEmulatedTLS` to true
in `llvm::TargetOptions` and set `EmulatedTLS` to Clang's
opinion of what the default or preference is.
This avoids any risk of deviance between the two.
This affects one check of `getCodeGenOpts().EmulatedTLS` in
`shouldAssumeDSOLocal` in CodeGenModule, but as that check only
is done for `TT.isWindowsGNUEnvironment()`, and
`hasDefaultEmulatedTLS()` returns false for such environments
it doesn't make any current testable difference - thus NFC.
Some mingw distributions carry a downstream patch, that enables
emulated TLS by default for mingw targets in `hasDefaultEmulatedTLS()`
- and for such cases, this patch does make a difference and fixes the
detection of emulated TLS, if it is implicitly enabled.
Differential Revision: https://reviews.llvm.org/D132916
Matthias Gehre [Tue, 13 Sep 2022 07:29:24 +0000 (08:29 +0100)]
Move ExpandLargeDivRem to llvm/test/CodeGen/X86 because they need a triple
jacquesguan [Fri, 9 Sep 2022 08:39:08 +0000 (16:39 +0800)]
[mlir][NFC] Fix polynomial Approx test.
This patch refators the polynomial Approx test. Now we pass the constant as function argument to avoid constant folder.
Link: https://github.com/llvm/llvm-project/issues/57613
Reviewed By: Mogball
Differential Revision: https://reviews.llvm.org/D133562
Balazs Benics [Tue, 13 Sep 2022 07:04:27 +0000 (09:04 +0200)]
[analyzer] Dump the environment entry kind as well
By this change the `exploded-graph-rewriter` will display the class kind
of the expression of the environment entry. It makes easier to decide if
the given entry corresponds to the lvalue or to the rvalue of some
expression.
It turns out the rewriter already had support for visualizing it, but
probably was never actually used?
Reviewed By: martong
Differential Revision: https://reviews.llvm.org/D132109
Zi Xuan Wu (Zeson) [Thu, 8 Sep 2022 07:46:30 +0000 (15:46 +0800)]
[CSKY] Fix the Predicates of instruction selection
Some select node Pattern with register cmp instruction should be guarded
by iHas2E3.
Balazs Benics [Tue, 13 Sep 2022 06:58:46 +0000 (08:58 +0200)]
[analyzer] LazyCompoundVals should be always bound as default bindings
`LazyCompoundVals` should only appear as `default` bindings in the
store. This fixes the second case in this patch-stack.
Depends on: D132142
Reviewed By: xazax.hun
Differential Revision: https://reviews.llvm.org/D132143
Balazs Benics [Tue, 13 Sep 2022 06:58:46 +0000 (08:58 +0200)]
[analyzer] Prefer wrapping SymbolicRegions by ElementRegions
It turns out that in certain cases `SymbolRegions` are wrapped by
`ElementRegions`; in others, it's not. This discrepancy can cause the
analyzer not to recognize if the two regions are actually referring to
the same entity, which then can lead to unreachable paths discovered.
Consider this example:
```lang=C++
struct Node { int* ptr; };
void with_structs(Node* n1) {
Node c = *n1; // copy
Node* n2 = &c;
clang_analyzer_dump(*n1); // lazy...
clang_analyzer_dump(*n2); // lazy...
clang_analyzer_dump(n1->ptr); // rval(n1->ptr): reg_$2<int * SymRegion{reg_$0<struct Node * n1>}.ptr>
clang_analyzer_dump(n2->ptr); // rval(n2->ptr): reg_$1<int * Element{SymRegion{reg_$0<struct Node * n1>},0 S64b,struct Node}.ptr>
clang_analyzer_eval(n1->ptr != n2->ptr); // UNKNOWN, bad!
(void)(*n1);
(void)(*n2);
}
```
The copy of `n1` will insert a new binding to the store; but for doing
that it actually must create a `TypedValueRegion` which it could pass to
the `LazyCompoundVal`. Since the memregion in question is a
`SymbolicRegion` - which is untyped, it needs to first wrap it into an
`ElementRegion` basically implementing this untyped -> typed conversion
for the sake of passing it to the `LazyCompoundVal`.
So, this is why we have `Element{SymRegion{.}, 0,struct Node}` for `n1`.
The problem appears if the analyzer evaluates a read from the expression
`n1->ptr`. The same logic won't apply for `SymbolRegionValues`, since
they accept raw `SubRegions`, hence the `SymbolicRegion` won't be
wrapped into an `ElementRegion` in that case.
Later when we arrive at the equality comparison, we cannot prove that
they are equal.
For more details check the corresponding thread on discourse:
https://discourse.llvm.org/t/are-symbolicregions-really-untyped/64406
---
In this patch, I'm eagerly wrapping each `SymbolicRegion` by an
`ElementRegion`; basically canonicalizing to this form.
It seems reasonable to do so since any object can be thought of as a single
array of that object; so this should not make much of a difference.
The tests also underpin this assumption, as only a few were broken by
this change; and actually fixed a FIXME along the way.
About the second example, which does the same copy operation - but on
the heap - it will be fixed by the next patch.
Reviewed By: martong
Differential Revision: https://reviews.llvm.org/D132142
Haojian Wu [Tue, 13 Sep 2022 06:57:43 +0000 (08:57 +0200)]
Fix a -Wswitch warning.
jacquesguan [Sat, 20 Aug 2022 13:33:00 +0000 (21:33 +0800)]
[RISCV] Add cost model for compare and select instructions.
This patch adds cost model for vector compare and select instructions. For vector FP compare instruction, it only add the comparisions supported natively.
Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D132296
Max Kazantsev [Tue, 13 Sep 2022 05:31:07 +0000 (12:31 +0700)]
[SCEVExpander] Recompute poison-generating flags on hoisting. PR57187
Instruction being hoisted could have nuw/nsw flags inferred from the old
context, and we cannot simply move it to the new location keeping them
because we are going to introduce new uses to them that didn't exist before.
Example in https://github.com/llvm/llvm-project/issues/57187 shows how
this can produce branch by poison from initially well-defined program.
This patch forcefully recomputes poison-generating flag in the new context.
Differential Revision: https://reviews.llvm.org/D132022
Reviewed By: fhahn, nikic
Zhang Qing Shan [Sat, 10 Sep 2022 00:05:20 +0000 (08:05 +0800)]
[llvm-dwp] Get the DWO file from relative path if the absolute path is not valid
Extend the llvm-dwp to support searching the DWOs that from relative path for the
case that build from remote building system(different comp_dir).
Reviewd By: dblaikie
Differential Revision: https://reviews.llvm.org/D133480
Chuanqi Xu [Tue, 13 Sep 2022 05:03:34 +0000 (13:03 +0800)]
[C++20] [Modules] Make member functions with a in-class definition in HU implicitly inline
According to [dcl.inline]p7/note4,
> In the global module, a function defined within a class definition is
> implicitly inline.
And the declarations in the header unit are attached to the global
module fragment. So the function defined within a class definition in
header units should be implicitly inline too.
This fixes https://github.com/llvm/llvm-project/issues/57571.
Zhang Qing Shan [Tue, 13 Sep 2022 04:56:23 +0000 (12:56 +0800)]
[llvm-dwp] Report the filename if it cannot be found
For now, we report nothing if the execution/dwo file is missing, which is confusing.
Reviewed By: dblaikie
Differential Revision: https://reviews.llvm.org/D133549
Ting Wang [Tue, 13 Sep 2022 04:47:47 +0000 (00:47 -0400)]
[PowerPC][NFC] Add base test case to show redundant spill of vector registers
Reviewed By: lkail
Differential Revision: https://reviews.llvm.org/D133543
Craig Topper [Tue, 13 Sep 2022 03:27:25 +0000 (20:27 -0700)]
[RISCV] Add test cases with result of fp_to_s/uint_sat sign/zero-extended from i32 to i64. NFC
I believe the result for fp_to_uint_sat is incorrect for this case.
Jordan Rupprecht [Tue, 13 Sep 2022 02:41:06 +0000 (19:41 -0700)]
[test] Increase test assertion for reasonable auxv values.
While auxv keys are usually small, e.g. less than 50, they can sometimes be larger, especially on a downstream kernel where a custom auxv entry is intentionally high to avoid conflicting with the standard lower numbers. This test fails on a system with an auxv value bigger than 1000, but instead of putting this test at that value plus one, it looks like 2023 (i.e. `AT_SUN_CAP_HW2`) is another large one out there. Use 2500 as a limit to still have this be a reasonable "small" check but still allow all known auxv keys.
Semi-related change: this test case prints the auxv dict at the trace level, but only _after_ the assertion fails, making it not print what the offending value is as the test case aborts. Move it earlier so we can see what the "unreasonable" auxv value is.
Yeting Kuo [Mon, 5 Sep 2022 13:57:22 +0000 (21:57 +0800)]
[RISCV] Add assertion of hasVecPolicyOp to catch masked intrinsic without policy operand.
The original code may have incorrect result if there is a masked instruction
without policy operand to make us set its policy to TUMU. The patch adds an
assertion to catch the instruction.
Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D133302
Fangrui Song [Tue, 13 Sep 2022 02:09:08 +0000 (19:09 -0700)]
[ELF] Cache compute_thread_count. NFC
gonglingqin [Tue, 13 Sep 2022 01:38:03 +0000 (09:38 +0800)]
[LoongArch] Add codegen support for ISD::FMA
Differential Revision: https://reviews.llvm.org/D133281
Vincent Lee [Tue, 13 Sep 2022 01:56:44 +0000 (18:56 -0700)]
[llvm-lipo] Fix create-arch-asm test by requiring x86 and aarch64 target
https://reviews.llvm.org/D133729 broke the buildbots because some
don't build with both x86 and aarch64 targets. Adding REQUIRES
to make sure this test only runs when specifying for both arch.
Vincent Lee [Mon, 12 Sep 2022 21:52:08 +0000 (14:52 -0700)]
[llvm-lipo] Support object files with bitcode asm
llvm-lipo crashes when trying to use inputs that contain bitcode asm instructions.
This happens when trying to create universal binaries for LLVM with LTO.
https://reviews.llvm.org/D118575 is a similar change that ran into this same issue, and I'm
mirroring the same change by registering the targets to fix this issue.
Reviewed By: alexander-shaposhnikov, keith
Differential Revision: https://reviews.llvm.org/D133729
Mehdi Amini [Mon, 29 Aug 2022 12:10:15 +0000 (12:10 +0000)]
Apply clang-tidy fixes for llvm-qualified-auto in OpFormatGen.cpp (NFC)
Mehdi Amini [Mon, 29 Aug 2022 12:09:27 +0000 (12:09 +0000)]
Apply clang-tidy fixes for readability-simplify-boolean-expr in OpDefinitionsGen.cpp (NFC)
Nico Weber [Tue, 13 Sep 2022 01:02:02 +0000 (21:02 -0400)]
[gn build] port
a85e4aa37dec
Rob Suderman [Tue, 13 Sep 2022 00:12:33 +0000 (17:12 -0700)]
[mlir][tosa] Added tosa.reverse folder
Fold cases where a tosa.reverse is a splat or reversing a dim
of length-1.
Reviewed By: jpienaar
Differential Revision: https://reviews.llvm.org/D133144
Matt Arsenault [Mon, 12 Sep 2022 23:58:57 +0000 (19:58 -0400)]
DeadMachineInstructionElim: Fix typo
Lang Hames [Tue, 13 Sep 2022 00:06:59 +0000 (17:06 -0700)]
[ORC-RT] Update headers for rename of include/orc in
a85e4aa37de.
The ORC runtime include directory was renamed from 'orc' to 'orc_rt' in
a85e4aa37de. Update includes to match.
Jessica Paquette [Mon, 12 Sep 2022 23:50:15 +0000 (16:50 -0700)]
Attempt to pacify buildbots after
7d80b94ca3
Some compilers (like all the ones I've tried) seem to NVRO the
Expected<std::vector<unique_ptr>> but other ones (like some of the bots) seem
to not want to.
Change the return type to Error and pass in the vector as an output parameter
to try and fix things.
Greg Clayton [Fri, 9 Sep 2022 23:45:33 +0000 (16:45 -0700)]
Fix DW_OP_convert to resolve the CU relative offset correctly.
Debugging some DWARF5 binaries was causing errors to appear when DWARFExpression::Evaluate was called:
error: GetDIE for DIE 0x31 is outside of its CU 0x123450
The issue is in the DWARF expression evaluator. Fixed with this.
Differential Revision: https://reviews.llvm.org/D133623
Adrian Prantl [Mon, 12 Sep 2022 23:51:03 +0000 (16:51 -0700)]
Fix make invocation to pass in the correct source file
Lang Hames [Mon, 12 Sep 2022 16:51:04 +0000 (09:51 -0700)]
[ORC-RT] Drop the 'clang_rt.' prefix from the ORC runtime.
The ORC runtime isn't used by clang -- the prefix was just cargo-culted with
the rest of the XRay config when the ORC runtime was introduced. We now want to
make parts of it available for clients to link directly, so this seems like a
good time to fix the name.
Adrian Prantl [Mon, 12 Sep 2022 23:47:46 +0000 (16:47 -0700)]
Force system C++ stdlib in test that forces system clang.
Unfortunately these options are still not upstream.
Adrian Prantl [Mon, 12 Sep 2022 23:36:46 +0000 (16:36 -0700)]
Fix make invocation to pass in the correct source file
Craig Topper [Mon, 12 Sep 2022 23:36:14 +0000 (16:36 -0700)]
[RISCV] Move some vector test into the rvv test directory. NFC
Aiden Grossman [Mon, 12 Sep 2022 23:21:29 +0000 (23:21 +0000)]
[nfc] Refactor SlotIndex::getInstrDistance to better reflect actual functionality
This patch refactors SlotIndex::getInstrDistance to
SlotIndex::getApproxInstrDistance to better describe the actual
functionality of this function. This patch also adds in some additional
comments better documenting the assumptions that this function makes to
increase clarity.
Based on discussion on the LLVM Discourse:
https://discourse.llvm.org/t/odd-behavior-in-slotindex-getinstrdistance/64934/5
Reviewed By: mtrofin, foad
Differential Revision: https://reviews.llvm.org/D133386
Nico Weber [Mon, 12 Sep 2022 23:19:23 +0000 (19:19 -0400)]
[gn build] port
7d80b94ca3ab (llvm-remarkutil)
Vitaly Buka [Mon, 12 Sep 2022 23:13:31 +0000 (16:13 -0700)]
[test][clangd] Another try to fix bots after
72142fbac4
Amara Emerson [Sun, 11 Sep 2022 15:28:44 +0000 (16:28 +0100)]
[GlobalISel] Fix crash when lowering G_SELECT of pointer vectors.
The bit masking lowering only works for vectors of scalars, so for pointer
element types we need to add some casting.
Differential Revision: https://reviews.llvm.org/D133672
Amara Emerson [Sun, 11 Sep 2022 15:14:58 +0000 (16:14 +0100)]
[GlobalISel][Legalizer] Fix minScalarEltSameAsIf to handle p0 element types.
The mutation the action generates tries to change the input type into the
element type of larger vector type. This doesn't work if the larger element
type is a vector of pointers since it creates an illegal mutation between
scalar and pointer types.
Differential Revision: https://reviews.llvm.org/D133671
Mehdi Amini [Mon, 29 Aug 2022 12:08:00 +0000 (12:08 +0000)]
Apply clang-tidy fixes for readability-simplify-boolean-expr in AttrOrTypeFormatGen.cpp (NFC)
Mehdi Amini [Mon, 29 Aug 2022 11:59:46 +0000 (11:59 +0000)]
Apply clang-tidy fixes for performance-unnecessary-value-param in TestTilingInterface.cpp (NFC)
Fangrui Song [Mon, 12 Sep 2022 22:56:36 +0000 (15:56 -0700)]
[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllimport
Hidden visibility is incompatible with dllexport.
Hidden and protected visibilities are incompatible with dllimport.
(PlayStation uses dllexport protected.)
When an explicit visibility attribute applies on a dllexport/dllimport
declaration, report a Frontend error (Sema does not compute visibility).
Reviewed By: mstorsjo
Differential Revision: https://reviews.llvm.org/D133266
Jessica Paquette [Mon, 12 Sep 2022 22:17:57 +0000 (15:17 -0700)]
Add missing description to llvm-remarkutil doc header
Doc builder caught this:
```
File ".../llvm/src/llvm/docs/conf.py", line 271, in process_rst
name,description = title.split(' - ', 1)
ValueError: not enough values to unpack (expected 2, got 1)
```
Arthur Eubanks [Mon, 12 Sep 2022 21:42:03 +0000 (14:42 -0700)]
[test][SimplifyCFG] Precommit test with hoisting inallocas
Jessica Paquette [Sat, 10 Sep 2022 02:58:02 +0000 (19:58 -0700)]
Add a utility for converting between different types of remarks
This adds llvm-remarkutil. This is intended to be a general tool for doing stuff
with/to remark files.
This patch gives it the following powers:
* `bitstream2yaml` - To convert bitstream remarks to YAML
* `yaml2bitstream` - To convert YAML remarks to bitstream remarks
These are both implemented as subcommands, like
`llvm-remarkutil bitstream2yaml <input_file> -o -`
I ran into an issue where I had some bitstream remarks coming from CI, and I
wanted to be able to do stuff with them (e.g. visualize them). But then I
noticed we didn't have any tooling for doing that, so I decided to write this
thing.
Being able to output YAML as a start seemed like a good idea, since it
would allow people to reuse any tooling they may have written based around YAML
remarks.
Hopefully it can grow into a more featureful remark utility. :)
Currently there are is an outstanding performance issue (see the TODO) with
the bitstream2yaml case. I decided that I'd keep the tool small to start with
and have the yaml2bitstream and bitstream2yaml cases be symmetric.
Also I moved the remarks documentation to its own header because it seems
a little out of place with "basic commands" and "developer tools"; it's
really kind of its own thing.
Differential Revision: https://reviews.llvm.org/D133646
Matt Arsenault [Mon, 12 Sep 2022 19:31:03 +0000 (15:31 -0400)]
LiveRegUnits: Do not use phys_regs_and_masks
Somehow DeadMachineInstructionElim is about 3x slower when using it.
Hopefully this reverses the compile time regression reported for
b5041527c75de2f409aa9e2e6deba12b17834c59.
David Majnemer [Wed, 31 Aug 2022 21:55:12 +0000 (21:55 +0000)]
[clang, llvm] Add __declspec(safebuffers), support it in CodeView
__declspec(safebuffers) is equivalent to
__attribute__((no_stack_protector)). This information is recorded in
CodeView.
While we are here, add support for strict_gs_check.
Aart Bik [Mon, 12 Sep 2022 19:53:07 +0000 (12:53 -0700)]
[mlir][sparse] add memSizes array to sparse storage format
Rationale:
For every dynamic memref (memref<?xtype>), the stored size really
indicates the capacity and the entry in the memSizes indicates
the actual size. This allows us to use memref's as "vectors".
Reviewed By: Peiming
Differential Revision: https://reviews.llvm.org/D133724
Greg Clayton [Tue, 30 Aug 2022 22:46:57 +0000 (15:46 -0700)]
Add the ability to show when variables fails to be available when debug info is valid.
Summary:
Many times when debugging variables might not be available even though a user can successfully set breakpoints and stops somewhere. Letting the user know will help users fix these kinds of issues and have a better debugging experience.
Examples of this include:
- enabling -gline-tables-only and being able to set file and line breakpoints and yet see no variables
- unable to open object file for DWARF in .o file debugging for darwin targets due to modification time mismatch or not being able to locate the N_OSO file.
This patch adds an new API to SBValueList:
lldb::SBError lldb::SBValueList::GetError();
object so that if you request a stack frame's variables using SBValueList SBFrame::GetVariables(...), you can get an error the describes why the variables were not available.
This patch adds the ability to get an error back when requesting variables from a lldb_private::StackFrame when calling GetVariableList.
It also now shows an error in response to "frame variable" if we have debug info and are unable to get varialbes due to an error as mentioned above:
(lldb) frame variable
error: "a.o" object from the "/tmp/libfoo.a" archive: either the .o file doesn't exist in the archive or the modification time (0x63111541) of the .o file doesn't match
Reviewers: labath JDevlieghere aadsm yinghuitan jdoerfert sscalpone
Subscribers:
Differential Revision: https://reviews.llvm.org/D133164
Kazu Hirata [Mon, 12 Sep 2022 20:34:35 +0000 (13:34 -0700)]
[llvm] Use x.empty() instead of llvm::empty(x) (NFC)
I'm planning to deprecate and eventually remove llvm::empty.
I thought about replacing llvm::empty(x) with std::empty(x), but it
turns out that all uses can be converted to x.empty(). That is, no
use requires the ability of std::empty to accept C arrays and
std::initializer_list.
Differential Revision: https://reviews.llvm.org/D133677
YongKang Zhu [Mon, 12 Sep 2022 20:24:47 +0000 (13:24 -0700)]
Bug fix on stable hash calculation for machine operands RegisterMask and RegisterLiveOut
MachineOperand::getRegMask() returns a pointer to register mask. We should hash the raw content of register mask instead of its pointer.
Reviewed By: kyulee
Differential Revision: https://reviews.llvm.org/D133637
Ben Langmuir [Mon, 12 Sep 2022 20:10:22 +0000 (13:10 -0700)]
Revert "[clang][test] Disallow using the default module cache path in lit tests"
This reverts commit
d96f526196ac4cebfdd318473816f6d4b9d76707.
Some systems do not support `env -u`.
Fangrui Song [Mon, 12 Sep 2022 19:56:35 +0000 (12:56 -0700)]
[ELF] Parallelize relocation scanning
* Change `Symbol::flags` to a `std::atomic<uint16_t>`
* Add `llvm::parallel::threadIndex` as a thread-local non-negative integer
* Add `relocsVec` to part.relaDyn and part.relrDyn so that relative relocations can be added without a mutex
* Arbitrarily change -z nocombreloc to move relative relocations to the end. Disable parallelism for deterministic output.
MIPS and PPC64 use global states for relocation scanning. Keep serial scanning.
Speed-up with mimalloc and --threads=8 on an Intel Skylake machine:
* clang (Release): 1.27x as fast
* clang (Debug): 1.06x as fast
* chrome (default): 1.05x as fast
* scylladb (default): 1.04x as fast
Speed-up with glibc malloc and --threads=16 on a ThunderX2 (AArch64):
* clang (Release): 1.31x as fast
* scylladb (default): 1.06x as fast
Reviewed By: andrewng
Differential Revision: https://reviews.llvm.org/D133003
Jez Ng [Mon, 12 Sep 2022 19:51:46 +0000 (15:51 -0400)]
[lld-macho][docs] Cosmetic changes
1. Fixed rST hyperlink syntax
2. Renamed LD64 -> ld64
3. Moved up the `-no_deduplicate` section so it is right under the
section talking about how our default dedup behavior differs; IMO
it makes more sense to read them in that order
4. De-bullet-listed some other sections so we have less whitespace in
the rendered page
5. Since the Mach-O LLD Port page has only one sub-page, don't render an
entire toctree with just one item. Use a "See also" box instead.
6. Wrap lines at 80 chars.
Reviewed By: #lld-macho, thevinster
Differential Revision: https://reviews.llvm.org/D133717
LLVM GN Syncbot [Mon, 12 Sep 2022 19:46:19 +0000 (19:46 +0000)]
[gn build] Port
cf72dddaefe9
Nico Weber [Mon, 12 Sep 2022 19:45:34 +0000 (15:45 -0400)]
[gn build] port
346856dc6c208 (or port
4d50a392401c0 more?)
Felipe de Azevedo Piovezan [Tue, 30 Aug 2022 13:28:14 +0000 (09:28 -0400)]
Reland "[lldb] Use just-built libcxx for tests when available"
This commit improves upon
cc0b5ebf7fc8, which added support for
specifying which libcxx to use when testing LLDB. That patch honored
requests by tests that had `USE_LIBCPP=1` defined in their makefiles.
Now, we also use a non-default libcxx if all conditions below are true:
1. The test is not explicitly requesting the use of libstdcpp
(USE_LIBSTDCPP=1).
2. The test is not explicitly requesting the use of the system's
library (USE_SYSTEM_STDLIB=1).
3. A path to libcxx was either provided by the user through CMake flags
or libcxx was built together with LLDB.
Condition (2) is new and introduced in this patch in order to support
tests that are either:
* Cross-platform (such as API/macosx/macCatalyst and
API/tools/lldb-server). The just-built libcxx is usually not built for
platforms other than the host's.
* Cross-language (such as API/lang/objc/exceptions). In this case, the
Objective C runtime throws an exceptions that always goes through the
system's libcxx, instead of the just built libcxx. Fixing this would
require either changing the install-name of the just built libcxx in Mac
systems, or tuning the DYLD_LIBRARY_PATH variable at runtime.
Some other tests exposes limitations of LLDB when running with a debug
standard library. TestDbgInfoContentForwardLists had an assertion
removed, as it was checking for buggy LLDB behavior (which now
crashes). TestFixIts had a variable renamed, as the old name clashes
with a standard library name when debug info is present. This is a known
issue: https://github.com/llvm/llvm-project/issues/34391.
For `TestSBModule`, the way the "main" module is found was changed to
look for the "a.out" module, instead of relying on the index being 0. In
some systems, the index 0 is dyld when a custom standard library is
used.
Differential Revision: https://reviews.llvm.org/D132940
Sanjay Patel [Mon, 12 Sep 2022 19:00:08 +0000 (15:00 -0400)]
[InstCombine] look through 'not' of ctlz/cttz op with 0-is-undef
https://alive2.llvm.org/ce/z/MNsC1S
This pattern was flagged at:
https://discourse.llvm.org/t/instcombines-select-optimizations-dont-trigger-reliably/64927
Sanjay Patel [Mon, 12 Sep 2022 18:34:57 +0000 (14:34 -0400)]
[InstCombine] add tests for select of ctlz/cttz with 'not' value; NFC
Zequan Wu [Sat, 10 Sep 2022 00:47:25 +0000 (17:47 -0700)]
[LLDB][NativePDB] Add local variables with no location info.
If we don't add local variables with no location info, when trying to print it,
lldb won't find it in the its parent DeclContext, which makes lldb to spend more
time to search all the way up in DeclContext hierarchy until found same name
variable or failed. Dwarf plugin also add local vars even if they don't have
location info.
Differential Revision: https://reviews.llvm.org/D133626
Richard Howell [Fri, 9 Sep 2022 17:49:44 +0000 (10:49 -0700)]
[clang] sort additional module maps when serializing
Sort additional module maps when serializing pcm files. This ensures
the `MODULE_MAP_FILE` record is deterministic across repeated builds.
Reviewed By: benlangmuir
Differential Revision: https://reviews.llvm.org/D133611
Matthias Braun [Tue, 16 Aug 2022 21:11:28 +0000 (14:11 -0700)]
Use update_mir_test_checks for some more tests.
Stella Stamenova [Mon, 12 Sep 2022 18:31:17 +0000 (11:31 -0700)]
Revert "Add the ability to show when variables fails to be available when debug info is valid."
This reverts commit
9af089f5179d52c6561ec27532880edcfb6253af.
This broke the windows lldb bot: https://lab.llvm.org/buildbot/#/builders/83/builds/23528
Laura Chaparro-Gutierrez [Mon, 12 Sep 2022 15:39:57 +0000 (15:39 +0000)]
[lldb] Add SBBreakpointLocation::SetCallback
* Include SetCallback in SBBreakpointLocation, similar as in SBBreakpoint.
* Add test_breakpoint_location_callback test as part of TestMultithreaded.
Reviewed By: werat, JDevlieghere
Differential Revision: https://reviews.llvm.org/D133689
Co-authored-by: Andy Yankovsky <weratt@gmail.com>
Craig Topper [Mon, 12 Sep 2022 17:34:51 +0000 (10:34 -0700)]
[LegalizeTypes] Improve splitting for urem/udiv by constant for some constants.
For remainder:
If (1 << (Bitwidth / 2)) % Divisor == 1, we can add the high and low halves
together and use a (Bitwidth / 2) urem. If (BitWidth /2) is a legal integer
type, this urem will be expand by DAGCombiner using multiply by magic
constant. We do have to take into account that adding high and low
together can produce a carry, making it a (BitWidth / 2)+1 bit number.
So we need to also add back in the carry from the first addition.
For division:
We can use the above trick to compute the remainder, subtract that
remainder from the dividend, then multiply by the multiplicative
inverse of the Divisor modulo (1 << BitWidth).
This is based on the section "Remainder by Summing Digits" in
Hacker's delight.
The remainder trick is similar to a trick you may have learned for
determining if a decimal number is divisible by 3. You can add all the
digits together and see if the sum is divisible by 3. If you're not sure
if the sum is divisible by 3, you can add its digits together. This
can be repeated until you have a single decimal digit. If that digit
is 3, 6, or 9, then the original number is divisible by 3. This works
because 10 % 3 == 1.
gcc already does this same trick. There are additional tricks gcc
does urem as well as srem, udiv, and sdiv that I plan to add in
future patches.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D130862
Corentin Jabot [Mon, 12 Sep 2022 15:32:47 +0000 (17:32 +0200)]
[Clang] NFC: Make UnqualifiedId::Kind private for consistency.
Differential Revision: https://reviews.llvm.org/D133703
Benjamin Kramer [Mon, 12 Sep 2022 10:55:58 +0000 (12:55 +0200)]
[DFSan] Don't crash with the legacy pass manager
TargetLibraryInfo isn't optional, so we have to provide it even with the
lageacy stuff. Ideally we wouldn't need it anymore but there are still
users out there that are stuck on the legacy PM.
Differential Revision: https://reviews.llvm.org/D133685
Aart Bik [Fri, 9 Sep 2022 22:42:46 +0000 (15:42 -0700)]
[mlir][sparse] properly record dimension level type and properties
A next step towards supporting the new dimension level types and
properties. This changes properly records the properties in the
Merger, so that subsequent computations (lattice optimizations)
and code generation (during sparsification) can do the right thing.
https://github.com/llvm/llvm-project/issues/51658
Reviewed By: Peiming
Differential Revision: https://reviews.llvm.org/D133620
A-Wadhwani [Mon, 12 Sep 2022 16:29:34 +0000 (09:29 -0700)]
[SROA] Create additional vector type candidates based on store and load slices
This patch adds additional vector types to be considered when doing
promotion in SROA, based on the types of the store and load slices. This
provides more promotion opportunities, by potentially using an optimal
"intermediate" vector type.
For example, the following code would currently not be promoted to a
vector, since `__m128i` is a `<2 x i64>` vector.
```
__m128i packfoo0(int a, int b, int c, int d) {
int r[4] = {a, b, c, d};
__m128i rm;
std::memcpy(&rm, r, sizeof(rm));
return rm;
}
```
```
packfoo0(int, int, int, int):
mov dword ptr [rsp - 24], edi
mov dword ptr [rsp - 20], esi
mov dword ptr [rsp - 16], edx
mov dword ptr [rsp - 12], ecx
movaps xmm0, xmmword ptr [rsp - 24]
ret
```
By also considering the types of the elements, we could find that the
`<4 x i32>` type would be valid for promotion, hence removing the memory
accesses for this function. In other words, we can explore other new
vector types, with the same size but different element types based on
the load and store instructions from the Slices, which can provide us
more promotion opportunities.
Additionally, the step for removing duplicate elements from the
`CandidateTys` vector was not using an equality comparator, which has
been fixed.
Differential Revision: https://reviews.llvm.org/D132096
Ben Langmuir [Fri, 9 Sep 2022 22:56:08 +0000 (15:56 -0700)]
[clang][test] Disallow using the default module cache path in lit tests
Make the default module cache path invalid when running lit tests so
that tests are forced to provide a cache path. This avoids accidentally
escaping to the system default location, and would have caught the
failure recently found in ClangScanDeps/multiple-commands.c.
Differential Revision: https://reviews.llvm.org/D133622
Benjamin Kramer [Mon, 12 Sep 2022 16:46:35 +0000 (18:46 +0200)]
[mlir][linalg] Explicitly instantiate DownscaleSizeOneWindowed2DConvolution
It's not possible to use a template with no definition from another
translation unit. Fixes the shared library build.
Adrian Prantl [Mon, 12 Sep 2022 16:48:31 +0000 (09:48 -0700)]
Skip crashing test
Craig Topper [Mon, 12 Sep 2022 16:32:15 +0000 (09:32 -0700)]
[RISCV] Rename WriteFALU* and ReadFALU* to WriteFAdd*/ReadFAdd*.
ALU seems a little vague. FAdd felt more precise even though it
also include FSUB instructions.
Reviewed By: monkchiang
Differential Revision: https://reviews.llvm.org/D133632
Felipe de Azevedo Piovezan [Sat, 10 Sep 2022 11:21:27 +0000 (07:21 -0400)]
[lldb] Fix detection of existing libcxx
The CMake variable LLDB_HAS_LIBCXX is passed to
`llvm_canonicalize_cmake_booleans`, which transforms TRUE/FALSE into
'1'/'0'. It also transforms undefined variables to '0'.
In particular, this means that the configuration script for LLDB API's
test always has _some_ value for the `has_libcxx` configuration:
```
config.has_libcxx = '@LLDB_HAS_LIBCXX@'
```
When deciding whether a libcxx exist, the testing scripts would only
check for the existence of `has_libcxx`, but not for its value. In other
words, because `if ('0')` is true in python we always think there is a
libcxx.
This was caught once D132940 was merged and most tests started to use
libcxx by default if `has_libcxx` is true. Prior to that, no failures
were seen because only tests are marked with
`@add_test_categories(["libc++"])` would require a libcxx, and these
would be filtered out on builds without the libcxx target. Furthermore,
the MacOS bots always build libcxx.
We fix this by making `has_libcxx` a boolean (instead of a string) and
by checking its value in the test configuration.
Differential Revision: https://reviews.llvm.org/D133639
Sanjay Patel [Mon, 12 Sep 2022 16:03:21 +0000 (12:03 -0400)]
[Reassociate] prevent partial undef negation replacement
As shown in the examples in issue #57683, we allow matching
vectors with poison (undef) in this transform (and possibly more),
but we can't then use the partially defined value as a replacement
value in other expressions blindly.
This seems to be avoided in simpler examples of reassociation,
and other passes should be able to clean up the redundant op
seen in these tests.
Sanjay Patel [Mon, 12 Sep 2022 15:36:11 +0000 (11:36 -0400)]
[Reassociate] add tests for vector negate with undef elements; NFC
Reduced/expanded from issue #57683.
Craig Topper [Mon, 12 Sep 2022 16:12:56 +0000 (09:12 -0700)]
[RISCV] Custom type legalize i32 loads by sign extending.
The default is to use extload which can become a zextload or
sextload if it is followed by an 'and' or sext_inreg.
Sometimes type legalization will introduce an 'and' from promoting
something like 'srl X, C' and a sext_inreg from from a setcc. The
'and' could be freely folded with the promoted 'srl' by using srliw,
but the sext_inreg can't be folded into a compare. DAG combiner
will see both of these choices and may decide to fold the 'and'
instead of the 'sext_inreg'. This forces the sext_inreg to become
a sext.w.
By picking sextload in the type legalizer we take this choice away.
Looking at spec2006 compiled with Zba and Zbb this appeared to be
net reduction in lines of code in the objdump disassembly output.
This is similar to what we do with i32 add/sub/mul/shl in
type legalization where we always emit a sext_inreg.
Reviewed By: asb
Differential Revision: https://reviews.llvm.org/D130397
Matthias Gehre [Mon, 12 Sep 2022 13:27:04 +0000 (14:27 +0100)]
Move TargetTransformInfo::maxLegalDivRemBitWidth -> TargetLowering::maxSupportedDivRemBitWidth
Also remove new-pass-manager version of ExpandLargeDivRem because there is no way
yet to access TargetLowering in the new pass manager.
Differential Revision: https://reviews.llvm.org/D133691
Jay Foad [Mon, 12 Sep 2022 15:32:25 +0000 (16:32 +0100)]
[GlobalISel] Simplify extended add/sub to add/sub with carry
Simplify extended add/sub (with carry-in and carry-out) to add/sub with
carry (with carry-out only) if carry-in is known to be zero.
Differential Revision: https://reviews.llvm.org/D133702
Kazu Hirata [Mon, 12 Sep 2022 15:52:51 +0000 (08:52 -0700)]
[mlir] Fix deprecation warnings (NFC)
This patch fixes a couple of warnings by switching to has_value/value:
mlir/lib/Dialect/Vector/IR/VectorOps.cpp:529:28: error: 'hasValue'
is deprecated: Use has_value
instead. [-Werror,-Wdeprecated-declarations]
mlir/lib/Dialect/Vector/IR/VectorOps.cpp:533:48: error: 'getValue'
is deprecated: Use value
instead. [-Werror,-Wdeprecated-declarations]
Katherine Rasmussen [Thu, 8 Sep 2022 17:02:43 +0000 (10:02 -0700)]
[flang] Write semantics test for atomic_fetch_and
Write a semantics test for the atomic intrinsic subroutine,
atomic_fetch_and.
Reviewed By: rouson
Differential Revision: https://reviews.llvm.org/D133506
Simon Pilgrim [Mon, 12 Sep 2022 15:34:29 +0000 (16:34 +0100)]
[CostModel][X86] Add CostKinds handling for abs ops
This was achieved with an updated version of the 'cost-tables vs llvm-mca' script D103695