Krzysztof Parzyszek [Tue, 4 Aug 2020 22:46:38 +0000 (17:46 -0500)]
[RDF] Cache register aliases in PhysicalRegisterInfo
This improves performance of PhysicalRegisterInfo::makeRegRef.
Krzysztof Parzyszek [Tue, 4 Aug 2020 23:03:18 +0000 (18:03 -0500)]
[RDF] Lower the sorting complexity in RDFLiveness::getAllReachingDefs
The sorting is needed, because reaching defs are (logically) ordered,
but are not collected in that order. This change will break up the
single call to std::sort into a series of smaller sorts, each of which
should use a cheaper comparison function than the original.
Adrian Prantl [Mon, 3 Aug 2020 23:15:22 +0000 (16:15 -0700)]
Teach SROA to handle allocas with more than one dbg.declare.
It is technically legal for optimizations to create an alloca that is
used by more than one dbg.declare, if one or both of them are inlined
instances of aliasing variables.
Differential Revision: https://reviews.llvm.org/D85172
Arthur Eubanks [Wed, 29 Jul 2020 20:54:07 +0000 (13:54 -0700)]
[Hexagon] Use InstSimplify instead of ConstantProp
This is the last remaining use of ConstantProp, migrate it to InstSimplify in the goal of removing ConstantProp.
Add -hexagon-instsimplify option to enable skipping of instsimplify in
tests that can't handle the extra optimization.
Differential Revision: https://reviews.llvm.org/D85047
Eli Friedman [Tue, 4 Aug 2020 21:17:30 +0000 (14:17 -0700)]
[SelectionDAG][SVE] Support scalable vectors in getConstantFP()
Differential Revision: https://reviews.llvm.org/D85249
Krzysztof Parzyszek [Tue, 4 Aug 2020 21:13:08 +0000 (16:13 -0500)]
[RDF] Remove uses of RDFRegisters::normalize (deprecate)
This function has been reduced to an identity function for some time.
Jonas Devlieghere [Tue, 4 Aug 2020 21:39:39 +0000 (14:39 -0700)]
[lldb/Test] Add @skipIfRemote decorator to TestProcessList.py
lldb-platform contains a very minimal support for the qfProcessInfo
packet, only allowing the simplest query to get most of the testsuite
running, and returning very little information about the matched
processes.
Matt Arsenault [Mon, 20 Jul 2020 21:10:42 +0000 (17:10 -0400)]
AMDGPU/GlobalISel: Use live in helper function for returnaddress
Mircea Trofin [Tue, 4 Aug 2020 21:32:07 +0000 (14:32 -0700)]
[llvm][NFC] Moved implementation of TrainingLogger outside of its decl
Also renamed a method - printTensor - to print; and added comments.
Matt Arsenault [Mon, 20 Jul 2020 01:26:02 +0000 (21:26 -0400)]
AMDGPU/GlobalISel: Select llvm.returnaddress
Jonas Devlieghere [Tue, 4 Aug 2020 21:00:30 +0000 (14:00 -0700)]
[lldb/Test] Skip tests that try to get the remote environment
We don't support getting the remote environment. The gdb remote protocol
has no packet for that.
Matt Arsenault [Mon, 20 Jul 2020 12:26:33 +0000 (08:26 -0400)]
GlobalISel: Add utilty for getting function argument live ins
Get the argument register and ensure there's a copy to the virtual
register. AMDGPU and AArch64 have similarish code to get the livein
value, and I also want to use this in multiple places.
This is a bit more aggressive about setting the register class than
the original function, but that's probably OK.
I think we're missing a few verifier checks for function live ins. I
noticed AArch64's calling convention code is not actually adding
liveins to functions, only the entry block (which apparently might not
matter that much?). There should probably be a verifier check that
entry block live ins are also live into the function. We also might
need a verifier check that the copy to the livein virtual register is
in the entry block.
Yifan Shen [Tue, 4 Aug 2020 20:31:44 +0000 (13:31 -0700)]
[lldb-vscode ]Add Syntax Highlighting to Disassembly View
When lldb cannot find source file thus IDE renders a disassembly view, add syntax highlighting for constants, registers and final line comments for better debugging experience.
The original plain disassembly view looks like:
{
F12401687}
An ideal view is like the screenshot attached.
{
F12401515}
In this diff, the mimeType is a kind of media type for formatting the content in the response to a source request. Elements in the disassembly view, like constants, registers and final line comments are colored for highlighting.
A built-in support in the VSCode IDE for syntax highlighting will identify the which mimeType to apply and render the disassembly view as expected.
Reviewed By: wallace, clayborg
Differential Revision: https://reviews.llvm.org/D84555
Eli Friedman [Mon, 3 Aug 2020 22:59:14 +0000 (15:59 -0700)]
[AArch64][SVE] Widen narrow sdiv/udiv operations.
The SVE instruction set only supports sdiv/udiv for 32-bit and 64-bit
integers. If we see an 8-bit or 16-bit divide, widen the operands to 32
bits, and narrow the result.
Differential Revision: https://reviews.llvm.org/D85170
AK [Tue, 4 Aug 2020 18:16:56 +0000 (11:16 -0700)]
[HotColdSplit] Add test case for unlikely attribute in outlined function
Differential Revision: https://reviews.llvm.org/D85232
Adrian Pop [Tue, 4 Aug 2020 20:15:17 +0000 (23:15 +0300)]
[OpenMP] support build on msys2/mingw with clang or gcc
RTM Adaptive Locks are supported on msys2/mingw for clang and gcc.
Differential Revision: https://reviews.llvm.org/D81776
Jonas Devlieghere [Tue, 4 Aug 2020 20:07:46 +0000 (13:07 -0700)]
[lldb/Test] Add missing stdio.h includes
Fixes error: implicit declaration of function 'printf' is invalid in C99
[-Werror,-Wimplicit-function-declaration]
Ilya Leoshkevich [Thu, 30 Jul 2020 18:08:40 +0000 (20:08 +0200)]
[libFuzzer] Enable for SystemZ
* Add SystemZ to the list of supported architectures.
* XFAIL a few tests.
Coverage reporting is broken, and is not easy to fix (see comment in
coverage.test). Interaction with sanitizers needs to be investigated
more thoroughly, since they appear to reduce coverage in certain cases.
Ilya Leoshkevich [Thu, 30 Jul 2020 18:08:08 +0000 (20:08 +0200)]
[SanitizerCoverage] Fix types of __stop* and __start* symbols
If a section is supposed to hold elements of type T, then the
corresponding CreateSecStartEnd()'s Ty parameter represents T*.
Forwarding it to GlobalVariable constructor causes the resulting
GlobalVariable's type to be T*, and its SSA value type to be T**, which
is one indirection too many. This issue is mostly masked by pointer
casts, however, the global variable still gets an incorrect alignment,
which causes SystemZ to choose wrong instructions to access the
section.
Ilya Leoshkevich [Thu, 30 Jul 2020 18:07:11 +0000 (20:07 +0200)]
[libFuzzer] Fix endianness issue in ForEachNonZeroByte()
The usage pattern of Bundle variable assumes the machine is little
endian, which is not the case on SystemZ. Fix by converting Bundle to
little-endian when necessary.
Dan Gohman [Wed, 18 Mar 2020 15:07:33 +0000 (08:07 -0700)]
[WebAssembly] Use "signed char" instead of "char" in SIMD intrinsics.
This allows people to use `int8_t` instead of `char`, -funsigned-char,
and generally decouples SIMD from the specialness of `char`.
And it makes intrinsics like `__builtin_wasm_add_saturate_s_i8x16`
and `__builtin_wasm_add_saturate_u_i8x16` use signed and unsigned
element types, respectively.
Differential Revision: https://reviews.llvm.org/D85074
Rahul Joshi [Tue, 4 Aug 2020 18:46:26 +0000 (11:46 -0700)]
[MLIR] Change FunctionType::get() and TupleType::get() to use TypeRange
- Moved TypeRange into its own header/cpp file, and add hashing support.
- Change FunctionType::get() and TupleType::get() to use TypeRange
Differential Revision: https://reviews.llvm.org/D85075
Cameron McInally [Tue, 4 Aug 2020 19:26:23 +0000 (14:26 -0500)]
[FastISel] Don't transform FSUB(-0, X) -> FNEG(X) in FastISel
This corresponds with the SelectionDAGISel change in D84056.
Also, rename some poorly named tests in CodeGen/X86/fast-isel-fneg.ll with NFC.
Differential Revision: https://reviews.llvm.org/D85149
Yonghong Song [Thu, 30 Jul 2020 05:46:07 +0000 (22:46 -0700)]
BPF: support type exist/size and enum exist/value relocations
Four new CO-RE relocations are introduced:
- TYPE_EXISTENCE: whether a typedef/record/enum type exists
- TYPE_SIZE: the size of a typedef/record/enum type
- ENUM_VALUE_EXISTENCE: whether an enum value of an enum type exists
- ENUM_VALUE: the enum value of an enum type
These additional relocations will make CO-RE bpf programs
more adaptive for potential kernel internal data structure
changes.
Differential Revision: https://reviews.llvm.org/D83878
Diego Caballero [Tue, 4 Aug 2020 18:22:19 +0000 (11:22 -0700)]
[MLIR][Affine] Fix createPrivateMemRef in affine fusion
Always define a remapping for the memref replacement (`indexRemap`)
with the proper number of inputs, including all the `outerIVs`, so that
the number of inputs and the operands provided for the map don't mismatch.
Reviewed By: bondhugula, andydavis1
Differential Revision: https://reviews.llvm.org/D85177
Fangrui Song [Tue, 4 Aug 2020 19:22:47 +0000 (12:22 -0700)]
[llvm-symbolizer][test] Fix pdb/pdb.test after D83530
This is a Windows only test which requires HAVE_DIA_SDK, so I failed to notice it.
Matt Arsenault [Wed, 29 Jul 2020 13:48:26 +0000 (09:48 -0400)]
GlobalISel: Handle llvm.localescape
This one is pretty easy and shrinks the list of unhandled
intrinsics. I'm not sure how relevant the insert point is. Using the
insert position of EntryBuilder will place this after
constants. SelectionDAG seems to end up emitting these after argument
copies and before anything else, but I don't think it really
matters. This also ends up emitting these in the opposite order from
SelectionDAG, but I don't think that matters either.
This also needs a fix to stop the later passes dropping this as a dead
instruction. DeadMachineInstructionElim's version of isDead special
cases LOCAL_ESCAPE for some reason, and I'm not sure why it's excluded
from MachineInstr::isLabel (or why isDead doesn't check it).
I also noticed DeadMachineInstructionElim never considers inline asm
as dead, but GlobalISel will drop asm with no constraints.
cgyurgyik [Tue, 4 Aug 2020 18:55:12 +0000 (14:55 -0400)]
[libc] Add implementations for isblank, iscntrl, isgraph, ispunct.
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D85059
Matt Arsenault [Fri, 31 Jul 2020 19:46:10 +0000 (15:46 -0400)]
GlobalISel: Add node mappings for frameindex/blockaddress
Matt Arsenault [Sun, 26 Jul 2020 21:44:28 +0000 (17:44 -0400)]
AMDGPU/GlobalISel: Add baseline tests for andn2/orn2 matching
Louis Dionne [Tue, 4 Aug 2020 19:09:05 +0000 (15:09 -0400)]
[libc++abi] Make sure we use a 32 bit guard on 32 bit Aarch64
aartbik [Fri, 31 Jul 2020 19:47:25 +0000 (12:47 -0700)]
[mlir] [VectorOps] Add expand/compress operations to Vector dialect
Introduces the expand and compress operations to the Vector dialect
(important memory operations for sparse computations), together
with a first reference implementation that lowers to the LLVM IR
dialect to enable running on CPU (and other targets that support
the corresponding LLVM IR intrinsics).
Reviewed By: reidtatge
Differential Revision: https://reviews.llvm.org/D84888
Bardia Mahjour [Tue, 4 Aug 2020 18:47:24 +0000 (14:47 -0400)]
[NFC][LV] Vectorized Loop Skeleton Refactoring
This patch tries to improve readability and maintenance
of createVectorizedLoopSkeleton by reorganizing some lines,
updating some of the comments and breaking it up into
smaller logical units.
Reviewed By: pjeeva01
Differential Revision: https://reviews.llvm.org/D83824
Xavier Denis [Tue, 4 Aug 2020 18:44:47 +0000 (20:44 +0200)]
[InstSimplify] Peephole optimization for icmp (urem X, Y), X
This revision adds the following peephole optimization
and it's negation:
%a = urem i64 %x, %y
%b = icmp ule i64 %a, %x
====>
%b = true
With John Regehr's help this optimization was checked with Alive2
which suggests it should be valid.
This pattern occurs in the bound checks of Rust code, the program
const N: usize = 3;
const T = u8;
pub fn split_mutiple(slice: &[T]) -> (&[T], &[T]) {
let len = slice.len() / N;
slice.split_at(len * N)
}
the method call slice.split_at will check that len * N is within
the bounds of slice, this bounds check is after some transformations
turned into the urem seen above and then LLVM fails to optimize it
any further. Adding this optimization would cause this bounds check
to be fully optimized away.
ref: https://github.com/rust-lang/rust/issues/74938
Differential Revision: https://reviews.llvm.org/D85092
Xavier Denis [Tue, 4 Aug 2020 18:44:47 +0000 (20:44 +0200)]
[InstSimplify] Add tests for icmp with urem divisor (NFC)
Fangrui Song [Tue, 4 Aug 2020 18:01:02 +0000 (11:01 -0700)]
[llvm-symbolizer] Add compatibility aliases for --inlining={true,false}
D83530 removed --inlining={true,false} which were used by old asan_symbolize.py script.
Add compatibility aliases so that old asan_symbolize.py and sanitizer
binaries can work with new llvm-symbolizer.
Reviewed By: thakis
Differential Revision: https://reviews.llvm.org/D85228
Nikita Popov [Tue, 7 Jul 2020 20:50:12 +0000 (22:50 +0200)]
[SCCP] Propagate inequalities
Teach SCCP to create notconstant lattice values from inequality
assumes and nonnull metadata, and update getConstant() to make
use of them. Additionally isOverdefined() needs to be changed to
consider notconstant an overdefined value.
Handling inequality branches is delayed until our branch on undef
story in other passes has been improved.
Differential Revision: https://reviews.llvm.org/D83643
AK [Tue, 4 Aug 2020 17:57:52 +0000 (10:57 -0700)]
Revert "[HotColdSplit] Add test case for unlikely attribute in outlined function"
This reverts commit
aa1f905890fbbfedf396530f1e14409875ece13c.
The flag -codegenprepare maybe causing failures. Reverting this
to investigate the root cause.
Thorsten Schuett [Tue, 4 Aug 2020 18:10:01 +0000 (11:10 -0700)]
[clang] improve diagnostics for misaligned and large atomics
"Listing the alignment and access size (== expected alignment) in the warning
seems like a good idea."
solves PR 46947
struct Foo {
struct Bar {
void * a;
void * b;
};
Bar bar;
};
struct ThirtyTwo {
struct Large {
void * a;
void * b;
void * c;
void * d;
};
Large bar;
};
void braz(Foo *foo, ThirtyTwo *braz) {
Foo::Bar bar;
__atomic_load(&foo->bar, &bar, __ATOMIC_RELAXED);
ThirtyTwo::Large foobar;
__atomic_load(&braz->bar, &foobar, __ATOMIC_RELAXED);
}
repro.cpp:21:3: warning: misaligned atomic operation may incur significant performance penalty; the expected (16 bytes) exceeds the actual alignment (8 bytes) [-Watomic-alignment]
__atomic_load(&foo->bar, &bar, __ATOMIC_RELAXED);
^
repro.cpp:24:3: warning: misaligned atomic operation may incur significant performance penalty; the expected (32 bytes) exceeds the actual alignment (8 bytes) [-Watomic-alignment]
__atomic_load(&braz->bar, &foobar, __ATOMIC_RELAXED);
^
repro.cpp:24:3: warning: large atomic operation may incur significant performance penalty; the access size (32 bytes) exceeds the max lock-free size (16 bytes) [-Watomic-alignment]
3 warnings generated.
Differential Revision: https://reviews.llvm.org/D85102
Jordan Rupprecht [Tue, 4 Aug 2020 18:01:43 +0000 (11:01 -0700)]
[test] Fix another realpath->abspath.
This is a followup to
817b3a6fe3a4452eb61a2503c8beaa7267ca0351: in `builder_base` we should use abspath, not realpath, because the name is significant.
This is used by test cases that use `@skipIf(compiler="clang", compiler_version=['<', <version>])`
Sanjay Patel [Tue, 4 Aug 2020 17:54:15 +0000 (13:54 -0400)]
[InstSimplify] add tests for compare of min/max; NFC
The test are adapted from the existing tests for cmp/select idioms.
George Mitenkov [Tue, 4 Aug 2020 17:30:40 +0000 (20:30 +0300)]
[MLIR][SPIRVToLLVM] Indentation and style fix in tests
Second patch with test fixes. Redundant `%{{.*}} = `
removed, label checks added, tabs converted to spaces and
some namings are changed to match the convention.
Fixed tests:
- constant-op-to-llvm
- func-ops-to-llvm (renamed)
- memory-ops-to-llvm
- misc-ops-to-llvm
- module-ops-to-llvm
- shift-ops-to-llvm (renamed)
- spirv-types-to-llvm-invalid (renamed)
Reviewed By: ftynse, rriddle
Differential Revision: https://reviews.llvm.org/D85206
David Blaikie [Tue, 4 Aug 2020 17:41:27 +0000 (10:41 -0700)]
Fix -Wconstant-conversion warning with explicit cast
Introduced by
fd6584a22043b254a323635c142b28ce80ae5b5b
Following similar use of casts in AsmParser.cpp, for instance - ideally
this type would use unsigned chars as they're more representative of raw
data and don't get confused around implementation defined choices of
char's signedness, but this is what it is & the signed/unsigned
conversions are (so far as I understand) safe/bit preserving in this
usage and what's intended, given the API design here.
Fangrui Song [Tue, 4 Aug 2020 17:24:59 +0000 (10:24 -0700)]
sanitizer_symbolizer_libcdep.cpp: Change --inlining=true to --inlines and --inlining=false to --no-inlines
Nico Weber [Tue, 4 Aug 2020 17:04:53 +0000 (13:04 -0400)]
[gn build] (manually) merge
593e1962
Simon Pilgrim [Tue, 4 Aug 2020 16:24:27 +0000 (17:24 +0100)]
Fix sphinx indentation warnings by adding explicit line breaks to address space hierarchy
Yash Jain [Tue, 4 Aug 2020 14:51:13 +0000 (20:21 +0530)]
[MLIR] Simplify semi-affine expressions
Simplify semi-affine expression for the operations like ceildiv,
floordiv and modulo by any given symbol by checking divisibilty by that
symbol.
Some properties used in simplification are:
1) Commutative property of the floordiv and ceildiv:
((expr1 floordiv expr2) floordiv expr3 ) = ((expr1 floordiv expr3) floordiv expr2)
((expr1 ceildiv expr2) ceildiv expr3 ) = ((expr1 ceildiv expr3) ceildiv expr2)
While simplification if operations are different no simplification is
possible as there is no property that simplify expressions like these:
((expr1 ceildiv expr2) floordiv expr3) or ((expr1 floordiv expr2)
ceildiv expr3).
2) If both expr1 and expr2 are divisible by the expr3 then:
(expr1 % expr2) / expr3 = ((expr1 / expr3) % (expr2 / expr3))
where / is divide symbol.
3) If expr1 is divisible by expr2 then expr1 % expr2 = 0.
Signed-off-by: Yash Jain <yash.jain@polymagelabs.com>
Differential Revision: https://reviews.llvm.org/D84920
Cameron McInally [Tue, 4 Aug 2020 16:32:15 +0000 (11:32 -0500)]
[GlobalISel] Remove redundant FNEG tests.
These tests were made redundant by D85139.
Xing GUO [Tue, 4 Aug 2020 16:09:12 +0000 (00:09 +0800)]
[DWARFYAML] Fix unintialized value Is64BitAddrSize. NFC.
This patch fixes the undefined behavior that reported by ubsan.
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/44524/
Matt Arsenault [Tue, 4 Aug 2020 13:19:43 +0000 (09:19 -0400)]
AMDGPU/GlobalISel: Ensure subreg is valid when selecting G_UNMERGE_VALUES
Fixes verifier error with SGPR unmerges with 96-bit result types.
Cameron McInally [Tue, 4 Aug 2020 16:26:04 +0000 (11:26 -0500)]
[GlobalISel] Don't transform FSUB(-0, X) -> FNEG(X) in GlobalISel.
This patch stops unconditionally transforming FSUB(-0, X) into an FNEG(X) while building the MIR.
This corresponds with the SelectionDAGISel change in D84056.
Differential Revision: https://reviews.llvm.org/D85139
Jonas Devlieghere [Tue, 4 Aug 2020 16:17:56 +0000 (09:17 -0700)]
[lldb/Host] Upstream macOS TCC code
Upstream the code for dealing with TCC introduced in macOS Mojave. This
will make the debuggee instead of the debugger responsible for the
privileges it needs.
Differential revision: https://reviews.llvm.org/D85217
Sanjay Patel [Tue, 4 Aug 2020 15:23:10 +0000 (11:23 -0400)]
[InstSimplify] refactor min/max folds with shared operand; NFC
Florian Hahn [Thu, 5 Mar 2020 09:48:40 +0000 (09:48 +0000)]
[docs] Mention LLVM_ENABLE_MODULES.
Matt Arsenault [Tue, 4 Aug 2020 13:19:30 +0000 (09:19 -0400)]
GlobalISel: Hack a test to avoid a bug introducing a verifier error
There seems to be an unrelated CSEMIRBuilder bug that was causing
expensive checks failures in this case. Hack the test to avoid this
problem for now until that's fixed.
Fangrui Song [Tue, 4 Aug 2020 15:51:24 +0000 (08:51 -0700)]
[llvm-symbolizer] Switch command line parsing from llvm::cl to OptTable
for the advantage outlined by D83639 ([OptTable] Support grouped short options)
Some behavior changes:
* -i={0,false} is removed. Use --no-inlines instead.
* --demangle={0,false} is removed. Use --no-demangle instead
* -untag-addresses={0,false} is removed. Use --no-untag-addresses instead
Added a higher level API OptTable::parseArgs which handles optional
initial options populated from an environment variable, expands response
files recursively, and parses options.
Reviewed By: jhenderson
Differential Revision: https://reviews.llvm.org/D83530
AndreyChurbanov [Tue, 4 Aug 2020 15:48:25 +0000 (18:48 +0300)]
[OpenMP] Don't use MSVC workaround with MinGW
Patch by mati865@gmail.com
Differential Revision: https://reviews.llvm.org/D85210
Yonghong Song [Wed, 29 Jul 2020 23:54:29 +0000 (16:54 -0700)]
[clang][BPF] support type exist/size and enum exist/value relocations
This patch added the following additional compile-once
run-everywhere (CO-RE) relocations:
- existence/size of typedef, struct/union or enum type
- enum value and enum value existence
These additional relocations will make CO-RE bpf programs more
adaptive for potential kernel internal data structure changes.
For existence/size relocations, the following two code patterns
are supported:
1. uint32_t __builtin_preserve_type_info(*(<type> *)0, flag);
2. <type> var;
uint32_t __builtin_preserve_field_info(var, flag);
flag = 0 for existence relocation and flag = 1 for size relocation.
For enum value existence and enum value relocations, the following code
pattern is supported:
uint64_t __builtin_preserve_enum_value(*(<enum_type> *)<enum_value>,
flag);
flag = 0 means existence relocation and flag = 1 for enum value.
relocation. In the above <enum_type> can be an enum type or
a typedef to enum type. The <enum_value> needs to be an enumerator
value from the same enum type. The return type is uint64_t to
permit potential 64bit enumerator values.
Differential Revision: https://reviews.llvm.org/D83242
Nemanja Ivanovic [Tue, 4 Aug 2020 15:37:57 +0000 (10:37 -0500)]
[PowerPC] Don't remove single swap between the load and store
The swap removal pass looks to remove swaps when a loaded value is swapped, some
number of lane-insensitive operations are performed and then the value is
swapped again and stored.
However, in a situation where we load the value, swap it and then store it
without swapping again, the pass erroneously removes the single swap. The
reason is that both checks in the same equivalence class:
- load feeds a swap
- swap feeds a store
pass. However, there is no check that the two swaps are actually a single swap.
This patch just fixes that.
Differential revision: https://reviews.llvm.org/D84785
Simon Pilgrim [Tue, 4 Aug 2020 15:35:40 +0000 (16:35 +0100)]
Separate code-block tag with a newline to fix code snippet html output
Simon Pilgrim [Tue, 4 Aug 2020 15:31:13 +0000 (16:31 +0100)]
Fix sphinx "Title underline too short" warning
Jay Foad [Thu, 16 Jul 2020 12:10:12 +0000 (13:10 +0100)]
[PowerPC] Custom lowering for funnel shifts
The custom lowering saves an instruction over the generic expansion, by
taking advantage of the fact that PowerPC shift instructions are well
defined in the shift-by-bitwidth case.
Differential Revision: https://reviews.llvm.org/D83948
Jordan Rupprecht [Tue, 4 Aug 2020 00:33:37 +0000 (17:33 -0700)]
[test] Use abspath instead of realpath sometimes
In these two cases, use of `os.path.realpath` is problematic:
- The name of the compiler is significant [1] . For testing purposes, we might
provide a compiler called "clang" which is actually a symlink to some build
script (which does some flag processing before invoking the real clang). The
destination the symlink may not be called "clang", but we still want it to be
treated as such.
- When using a build system that puts build artifacts in an arbitrary build
location, and later creates a symlink for it (e.g. creates a
"<lldb root>/lldbsuite/test/dotest.py" symlinks that points to
"/build/artifact/<hash>/dotest.py"), looking at the realpath will not match
the "test" convention required here.
[1] See `Makefile.rules` in the lldb tree, e.g. we use different flags if the compiler is named "clang"
Reviewed By: JDevlieghere
Differential Revision: https://reviews.llvm.org/D85175
Jay Foad [Fri, 24 Jul 2020 10:41:57 +0000 (11:41 +0100)]
[AMDGPU] Use fma for lowering frem
This gives shorter f64 code and perhaps better accuracy.
Differential Revision: https://reviews.llvm.org/D84516
Jay Foad [Fri, 24 Jul 2020 10:41:30 +0000 (11:41 +0100)]
[AMDGPU] Generate frem test checks
Differential Revision: https://reviews.llvm.org/D84515
Simon Pilgrim [Tue, 4 Aug 2020 15:12:50 +0000 (16:12 +0100)]
Fix sphinx indentation warning to stop newline in byref section html output.
Simon Pilgrim [Tue, 4 Aug 2020 14:57:31 +0000 (15:57 +0100)]
[X86] getFauxShuffleMask - drop unnecessary computeKnownBits OR(X,Y) shuffle decoding.
Now that rG47cea9e82dda941e lets us aggressively decode multi-use shuffles for the OR(SHUFFLE(),SHUFFLE()) case we don't need the computeKnownBits variant any more.
Simon Pilgrim [Tue, 4 Aug 2020 14:52:09 +0000 (15:52 +0100)]
Fix sphinx indentation warning.
Don't double indent and make it clear we're referting to the latency mode.
Erich Keane [Tue, 4 Aug 2020 13:28:29 +0000 (06:28 -0700)]
Permit nowthrow and nonnull with multiversioning.
Some shipped versions of stdlib.h use nonnull and nothrow with function
multiversioning. Support these, as they are generally harmless.
Erich Keane [Mon, 3 Aug 2020 17:54:50 +0000 (10:54 -0700)]
Improve diagnostics for disallowed attributes used with multiversioning
Since we permit using SOME attributes (at the moment, just 1) with
multiversioning, we should improve the message as it still implies that
no attributes should be combined with multiversioning.
Eduardo Caldas [Mon, 3 Aug 2020 18:29:12 +0000 (18:29 +0000)]
[SyntaxTree] Fix crash on pointer to member function
Differential Revision: https://reviews.llvm.org/D85146
Nicolas Vasilache [Tue, 4 Aug 2020 13:49:32 +0000 (09:49 -0400)]
[mlir][Vector] Relax condition for `splitFullAndPartialTransferPrecondition`
The `splitFullAndPartialTransferPrecondition` has a restrictive condition to
prevent the pattern to be applied recursively if it is nested under an scf.IfOp.
Relaxing the condition to the immediate parent op must not be an scf.IfOp lets
the pattern be applied more generally while still preventing recursion.
Differential Revision: https://reviews.llvm.org/D85209
Eduardo Caldas [Thu, 23 Jul 2020 09:20:06 +0000 (09:20 +0000)]
[SyntaxTree] Add support for `LiteralExpression`
We use inheritance to model the grammar's disjunction rule:
literal:
integer-literal
character-literal
floating-point-literal
string-literal
boolean-literal
pointer-literal
user-defined-literal
Differential Revision: https://reviews.llvm.org/D85186
Nemanja Ivanovic [Tue, 4 Aug 2020 13:30:51 +0000 (08:30 -0500)]
[Support][PPC] Fix bot failures due to
cd53ded557c3
Commit https://reviews.llvm.org/rGcd53ded557c3 attempts to fix the
computation in computeHostNumPhysicalCores() to respect Affinity.
However, the GLIBC wrapper of the affinity system call fails with
a default size of cpu_set_t on systems that have more than 1024 CPUs.
This just fixes the computation on such large machines.
Haojian Wu [Tue, 4 Aug 2020 13:58:12 +0000 (15:58 +0200)]
[Concepts] Include the found concept decl when dumping the ConceptSpecializationExpr
Differential Revision: https://reviews.llvm.org/D85124
Simon Pilgrim [Tue, 4 Aug 2020 13:51:23 +0000 (14:51 +0100)]
[X86] Remove unused canScaleShuffleElements helper
The only use was removed at rG36750ba5bd0e9e72
Thanks to @nemanjai for the heads up
Simon Pilgrim [Tue, 4 Aug 2020 11:35:46 +0000 (12:35 +0100)]
[X86][AVX] isHorizontalBinOp - relax lane-crossing limits for AVX1-only targets.
Permit lane-crossing post shuffles on AVX1 targets as long as every element comes from the same source lane, which for v8f32/v4f64 cases can be efficiently lowered with the LowerShuffleAsLanePermuteAnd* style methods.
Russell Gallop [Tue, 4 Aug 2020 09:14:31 +0000 (10:14 +0100)]
[lit] Add --time-trace-output to lit
This produces a chrome://tracing compatible trace file in the same way
as -ftime-trace.
This can be useful in optimising test time where one long test is causing
long overall test time on a wide machine.
This also helped in finding tests which have side effects on others
(e.g. https://reviews.llvm.org/D84885).
Differential Revision: https://reviews.llvm.org/D84931
Nicolas Vasilache [Mon, 3 Aug 2020 09:34:07 +0000 (05:34 -0400)]
[mlir][Vector] Add linalg.copy-based pattern for splitting vector.transfer_read into full and partial copies.
This revision adds a transformation and a pattern that rewrites a "maybe masked" `vector.transfer_read %view[...], %pad `into a pattern resembling:
```
%1:3 = scf.if (%inBounds) {
scf.yield %view : memref<A...>, index, index
} else {
%2 = linalg.fill(%extra_alloc, %pad)
%3 = subview %view [...][...][...]
linalg.copy(%3, %alloc)
memref_cast %extra_alloc: memref<B...> to memref<A...>
scf.yield %4 : memref<A...>, index, index
}
%res= vector.transfer_read %1#0[%1#1, %1#2] {masked = [false ... false]}
```
where `extra_alloc` is a top of the function alloca'ed buffer of one vector.
This rewrite makes it possible to realize the "always full tile" abstraction where vector.transfer_read operations are guaranteed to read from a padded full buffer.
The extra work only occurs on the boundary tiles.
Sanjay Patel [Tue, 4 Aug 2020 12:28:44 +0000 (08:28 -0400)]
[InstSimplify] fold nested min/max intrinsics with constant operands
This is based on the existing code for the non-intrinsic idioms
in InstCombine.
The vector constant constraint is non-obvious: undefs should be
ok in the outer call, but they can't propagate safely from the
inner call in all cases. Example:
https://alive2.llvm.org/ce/z/-2bVbM
define <2 x i8> @src(<2 x i8> %x) {
%0:
%m = umin <2 x i8> %x, { 7, undef }
%m2 = umin <2 x i8> { 9, 9 }, %m
ret <2 x i8> %m2
}
=>
define <2 x i8> @tgt(<2 x i8> %x) {
%0:
%m = umin <2 x i8> %x, { 7, undef }
ret <2 x i8> %m
}
Transformation doesn't verify!
ERROR: Value mismatch
Example:
<2 x i8> %x = < undef, undef >
Source:
<2 x i8> %m = < #x00 (0) [based on undef value], #x00 (0) >
<2 x i8> %m2 = < #x00 (0), #x00 (0) >
Target:
<2 x i8> %m = < #x07 (7), #x10 (16) >
Source value: < #x00 (0), #x00 (0) >
Target value: < #x07 (7), #x10 (16) >
Alex Zinenko [Tue, 4 Aug 2020 12:42:17 +0000 (14:42 +0200)]
[mlir] Fix GCC5 compilation problem in MLIR->LLVM type translation
GCC5 seems to dislike generic lambdas calling a method of the class
containing the lambda without explicit `this`.
Alex Zinenko [Tue, 4 Aug 2020 09:37:50 +0000 (11:37 +0200)]
[mlir] switch the modeling of LLVM types to use the new mechanism
A new first-party modeling for LLVM IR types in the LLVM dialect has been
developed in parallel to the existing modeling based on wrapping LLVM `Type *`
instances. It resolves the long-standing problem of modeling identified
structure types, including recursive structures, and enables future removal of
LLVMContext and related locking mechanisms from LLVMDialect.
This commit only switches the modeling by (a) renaming LLVMTypeNew to LLVMType,
(b) removing the old implementaiton of LLVMType, and (c) updating the tests. It
is intentionally minimal. Separate commits will remove the infrastructure built
for the transition and update API uses where appropriate.
Depends On D85020
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D85021
Sanjay Patel [Mon, 3 Aug 2020 20:51:05 +0000 (16:51 -0400)]
[InstSimplify] add tests for min/max with constants; NFC
Sanjay Patel [Mon, 3 Aug 2020 19:31:24 +0000 (15:31 -0400)]
[InstSimplify] reduce code for min/max analysis; NFC
This should probably be moved up to some common area eventually
when there's another user.
Alex Zinenko [Tue, 4 Aug 2020 09:37:31 +0000 (11:37 +0200)]
[mlir] provide same APIs as existing LLVMType in the new LLVM type modeling
These are intended to smoothen the transition and may be removed in the future
in favor of more MLIR-compatible APIs. They intentionally have the same
semantics as the existing functions, which must remain stable until the
transition is complete.
Depends On D85019
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D85020
Alex Zinenko [Tue, 4 Aug 2020 09:37:25 +0000 (11:37 +0200)]
[mlir] translate types between MLIR LLVM dialect and LLVM IR
With new LLVM dialect type modeling, the dialect types no longer wrap LLVM IR
types. Therefore, they need to be translated to and from LLVM IR during export
and import. Introduce the relevant functionality for translating types. It is
currently exercised by an ad-hoc type translation roundtripping test that will
be subsumed by the actual translation test when the type system transition is
complete.
Depends On D84339
Reviewed By: herhut
Differential Revision: https://reviews.llvm.org/D85019
Alexander Belyaev [Tue, 4 Aug 2020 11:34:47 +0000 (13:34 +0200)]
[mlir] Fix adding wrong operand value in `promoteMemRefDescriptors`.
The bug was not noticed because we didn't have a lot of custom type conversions
directly to LLVM dialect.
Differential Revision: https://reviews.llvm.org/D85192
George Mitenkov [Tue, 4 Aug 2020 09:45:18 +0000 (12:45 +0300)]
[MLIR][SPIRVToLLVM] Indentation and style fix in tests
This is a first patch that sweeps over tests to fix
indentation (tabs to spaces). It also adds label checks and
removes redundant matching of `%{{.*}} = `.
The following tests have been fixed:
- arithmetic-ops-to-llvm
- bitwise-ops-to-llvm
- cast-ops-to-llvm
- comparison-ops-to-llvm
- logical-ops-to-llvm (renamed to match the rest)
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D85181
Juneyoung Lee [Tue, 4 Aug 2020 11:27:26 +0000 (20:27 +0900)]
[JumpThreading] Update test freeze.ll; NFC
Sander de Smalen [Tue, 4 Aug 2020 10:10:32 +0000 (11:10 +0100)]
[AArch64][SVE] Add missing unwind info for SVE registers.
This patch adds a CFI entry for each SVE callee saved register
that needs unwind info at an offset from the CFA. The offset is
a DWARF expression because the offset is partly scalable.
The CFI entries only cover a subset of the SVE callee-saves and
only encodes the lower 64-bits, thus implementing the lowest
common denominator ABI. Existing unwinders may support VG but
only restore the lower 64-bits.
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D84044
Sander de Smalen [Tue, 4 Aug 2020 09:58:47 +0000 (10:58 +0100)]
[AArch64][SVE] Fix CFA calculation in presence of SVE objects.
The CFA is calculated as (SP/FP + offset), but when there are
SVE objects on the stack the SP offset is partly scalable and
should instead be expressed as the DWARF expression:
SP + offset + scalable_offset * VG
where VG is the Vector Granule register, containing the
number of 64bits 'granules' in a scalable vector.
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D84043
Xing GUO [Tue, 4 Aug 2020 08:47:38 +0000 (16:47 +0800)]
[YAMLTraits] Fix mapping <none> value that followed by comments.
When mapping an optional value, if the value is <none> and followed
by comments, there will be a parsing error. This patch helps fix this
issue.
e.g.,
When mapping the following YAML,
```
Sections:
- Name: blah
Type: SHT_foo
Flags: [[FLAGS=<none>]] ## some comments.
```
the raw value of `ScalarNode` is "<none> " rather than "<none>". We need
to remove the spaces.
Differential Revision: https://reviews.llvm.org/D85180
Paul Walker [Tue, 4 Aug 2020 10:19:17 +0000 (11:19 +0100)]
[SVE] Replace remaining _MERGE_OP1 nodes with _PRED variants.
This is the final bit of work to relax the register allocation
requirements when code generating normal LLVM IR, which rarely
care about the result of inactive lanes. By using _PRED nodes
we can make better use of SVE's reversed instructions.
Also removes a redundant parameter from the min/max tests.
Differential Revision: https://reviews.llvm.org/D85142
Juneyoung Lee [Tue, 4 Aug 2020 09:26:56 +0000 (18:26 +0900)]
[JumpThreading] Remove cast's constraint
As discussed in D84949, this removes the constraint to cast since it does not
cause compile time degradation.
Reviewed By: lebedev.ri
Differential Revision: https://reviews.llvm.org/D85188
Juneyoung Lee [Tue, 4 Aug 2020 09:15:00 +0000 (18:15 +0900)]
[JumpThreading] Add a test for simplification of cast of any op; NFC
Luboš Luňák [Tue, 4 Aug 2020 09:58:37 +0000 (11:58 +0200)]
[lldb] fix typo
Georgii Rymar [Tue, 4 Aug 2020 09:40:10 +0000 (12:40 +0300)]
[llvm-readobj] - A third attempt to fix BB.
http://lab.llvm.org:8011/builders/clang-cmake-x86_64-avx2-linux/builds/15718/steps/build%20stage%201/logs/stdio:
FAILED: /usr/bin/c++ -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Itools/llvm-readobj -I/home/ssglocal/clang-cmake-x86_64-avx2-linux/clang-cmake-x86_64-avx2-linux/llvm/llvm/tools/llvm-readobj -Iinclude -I/home/ssglocal/clang-cmake-x86_64-avx2-linux/clang-cmake-x86_64-avx2-linux/llvm/llvm/include -march=broadwell -fPIC -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -fdiagnostics-color -ffunction-sections -fdata-sections -O3 -fno-exceptions -fno-rtti -UNDEBUG -std=c++14 -MD -MT tools/llvm-readobj/CMakeFiles/llvm-readobj.dir/ELFDumper.cpp.o -MF tools/llvm-readobj/CMakeFiles/llvm-readobj.dir/ELFDumper.cpp.o.d -o tools/llvm-readobj/CMakeFiles/llvm-readobj.dir/ELFDumper.cpp.o -c /home/ssglocal/clang-cmake-x86_64-avx2-linux/clang-cmake-x86_64-avx2-linux/llvm/llvm/tools/llvm-readobj/ELFDumper.cpp
/home/ssglocal/clang-cmake-x86_64-avx2-linux/clang-cmake-x86_64-avx2-linux/llvm/llvm/tools/llvm-readobj/ELFDumper.cpp: In function ‘llvm::Expected<const llvm::object::Elf_Mips_Options<ELFT>*> readMipsOptions(const uint8_t*, llvm::ArrayRef<unsigned char>&, bool&)’:
/home/ssglocal/clang-cmake-x86_64-avx2-linux/clang-cmake-x86_64-avx2-linux/llvm/llvm/tools/llvm-readobj/ELFDumper.cpp:3374:12: error: parse error in template argument list
if (O->size < ExpectedSize)
Note: I played with godbolt.org and was able to catch the similar "error in template argument list" error when used gcc 4.9.0 with this code.
Fix: try to introduce a variable to store `O->size`, it helped to me in godbolt.
David Green [Tue, 4 Aug 2020 09:43:42 +0000 (10:43 +0100)]
[BasicAA] Enable -basic-aa-recphi by default
This option was added a while back, to help improve AA around pointer
phi loops. It looks for phi(gep(phi, const), x) loops, checking if x can
then prove more precise aliasing info.
Differential Revision: https://reviews.llvm.org/D82998
Meera Nakrani [Tue, 4 Aug 2020 09:38:17 +0000 (09:38 +0000)]
[ARM] Generated SSAT and USAT instructions with shift
Added patterns so that both SSAT and USAT instructions are generated with shifts. Added corresponding regression tests.
Differential Review: https://reviews.llvm.org/D85120
Simon Pilgrim [Tue, 4 Aug 2020 09:32:27 +0000 (10:32 +0100)]
Revert rG66e7dce714fab "Revert "[X86][SSE] Shuffle combine blends to OR(X,Y) if the relevant elements are known zero.""
[X86][SSE] Shuffle combine blends to OR(X,Y) if the relevant elements are known zero (REAPPLIED)
This allows us to remove the (depth violating) code in getFauxShuffleMask where we were combining the OR(SHUFFLE,SHUFFLE) shuffle inputs as well, and not just the OR().
This is a minor step toward being able to shuffle combine from/to SELECT/BLENDV as a faux shuffle.
Reapplied with fixed signed/unsigned comparisons.