David Stuttard [Fri, 7 May 2021 10:43:29 +0000 (11:43 +0100)]
[AMDGPU] Fix codegen of image intrinsics for g16 and a16
For gfx10 gradient (g16) and address (a16) can be independent. Previous
implementation assumed that a16 implied g16.
There are some other changes that fix the verification (as well as asm/disasm)
that are required for the included test to pass - the XFAIL will be removed in
those changes.
This also includes required fixes for GlobalISel
Differential Revision: https://reviews.llvm.org/D102066
Change-Id: I7d171cc90994de05f41669b66a6d0ffa2ed05d09
David Stuttard [Fri, 30 Apr 2021 10:37:41 +0000 (11:37 +0100)]
[AMDGPU][AsmParser/Disassembler] Correct A16 and G16 handling
A16 support for image instructions assembly/disassembly (gfx10) was missing
Also refactor MIMG op addr size calcs to common function
We'd got 3 places where the same operation was being done.
One test is now marked XFAIL until a related codegen patch is in place
Differential Revision: https://reviews.llvm.org/D102231
Change-Id: I7e86e730ef8c71901457855cba570581f4f576bb
David Spickett [Tue, 11 May 2021 14:33:53 +0000 (14:33 +0000)]
[llvm][AsmPrinter] Restore source location to register clobber warning
Since
5de2d189e6ad466a1f0616195e8c524a4eb3cbc0 this particular warning
hasn't had the location of the source file containing the inline
assembly.
Fix this by reporting via LLVMContext. Which means that we no longer
have the "instantiated into assembly here" lines but they were going to
point to the start of the inline asm string anyway.
This message is already tested via IR in llvm. However we won't have
the required location info there so I've added a C file test in clang
to cover it.
(though strictly, this is testing llvm code)
Reviewed By: ychen
Differential Revision: https://reviews.llvm.org/D102244
Alexey Bader [Fri, 14 May 2021 05:18:49 +0000 (08:18 +0300)]
New tag for ittapi - fix an error related to cross-compiling ITTAPI in LLVM with mingw
Fix was implemented in the ittap repo to solve an error about cross-compiling ITTAPI in LLVM with mingw.
The problem occurred in the cross-compilation environment for Julia's dependencies.
The corresponding issue item in ittapi repo: https://github.com/intel/ittapi/issues/19
A new tag was created in ittapi repo for that fix.
This patch contains changes to update the ittapi tag in LLVM.
Reviewed By: bader
Differential Revision: https://reviews.llvm.org/D102471
dfukalov [Fri, 9 Apr 2021 10:37:13 +0000 (13:37 +0300)]
[GVN] Clobber partially aliased loads.
Use offsets stored in `AliasResult` implemented in D98718.
Updated with fix of issue reported in https://reviews.llvm.org/D95543#2745161
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D95543
David Green [Fri, 14 May 2021 08:16:51 +0000 (09:16 +0100)]
[DSE] Move isOverwrite into DSEState. NFC
This moves the isOverwrite function into the DSEState so that it can
share the analyses and members from the state.
A few extra loop tests were also added to test stores in and around
multi block loops for D100464.
Lang Hames [Fri, 14 May 2021 05:47:35 +0000 (22:47 -0700)]
[ORC] Add JITLink dependence for ObjectLinkingLayerTest.
This aims to fix the failure at
https://lab.llvm.org/buildbot/#/builders/61/builds/9590.
LLVM GN Syncbot [Fri, 14 May 2021 04:56:03 +0000 (04:56 +0000)]
[gn build] Port
0fda4c4745b8
Lang Hames [Fri, 14 May 2021 04:35:34 +0000 (21:35 -0700)]
[ORC] Add support for adding LinkGraphs directly to ObjectLinkingLayer.
This is separate from (but builds on) the support added in
ec6b71df70a for
emitting LinkGraphs in the context of an active materialization. This commit
makes LinkGraphs a first-class data structure with features equivalent to
object files within ObjectLinkingLayer.
Lang Hames [Fri, 14 May 2021 01:59:26 +0000 (18:59 -0700)]
[JITLink] Fix missing 'static' keyword in unit test.
Fangrui Song [Fri, 14 May 2021 04:26:31 +0000 (21:26 -0700)]
[sanitizer] Simplify __sanitizer::BufferedStackTrace::UnwindImpl implementations
Intended to be NFC. D102046 relies on the refactoring for stack boundaries.
Carl Ritson [Fri, 14 May 2021 03:29:54 +0000 (12:29 +0900)]
[AMDGPU] Do not clause NSA instructions
To ensure correct behaviour NSA instructions should not be claused.
Reviewed By: foad
Differential Revision: https://reviews.llvm.org/D102211
Reid Kleckner [Fri, 14 May 2021 03:26:50 +0000 (20:26 -0700)]
Use enum comparison instead of generated switch/case, NFC
Clang's coverage data for auto-generated switch cases is really, really
large. Before this change, when I enable code coverage, SemaDeclAttr.obj
is 4.0GB. Naturally, this fails to link.
Replacing the RISCV builtin id check with a comparison reduces object
file size from 4.0GB to 330MB. Replacing the AArch64 SVE range check
reduces the size again down to 17MB, which is reasonable.
I think the RISCV switch is larger in coverage data because it uses more
levels of macro expansion, while the SVE intrinsics only use one. In any
case, please try to avoid switches with 1000+ cases, they usually don't
optimize well.
Reid Kleckner [Fri, 14 May 2021 02:32:49 +0000 (19:32 -0700)]
[COFF] Remove a truncation assertion from setRVA
LLD already produces a nice error message when sections exceed 4GB, and
this setRVA assertion causes LLD to crash instead of diagnosing the
error properly.
No test because we don't want slow tests that create 4GB files.
Matthias Springer [Fri, 14 May 2021 01:45:13 +0000 (10:45 +0900)]
[mlir] VectorToSCF cleanup
Group functions/structs in namespaces for better code readability.
Depends On D102123
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D102124
Rahul Joshi [Fri, 14 May 2021 01:33:02 +0000 (18:33 -0700)]
[MLIR] Fix build failures due to unused variables in non-debug builds.
Differential Revision: https://reviews.llvm.org/D102458
Lang Hames [Fri, 14 May 2021 01:22:33 +0000 (18:22 -0700)]
[ORC] Remove the OrcExecutionTest class. It is no longer used.
Lang Hames [Fri, 14 May 2021 01:11:33 +0000 (18:11 -0700)]
[ORC] Remove unused RTDyldObjectLinkingLayerExecutionTest class from unit test.
Lang Hames [Fri, 14 May 2021 00:32:36 +0000 (17:32 -0700)]
[ORC] Remove some stale unit test utils.
This code was used to test ORCv1, which has been removed. It is not useful for
testing ORCv2.
Matthias Springer [Fri, 14 May 2021 00:56:28 +0000 (09:56 +0900)]
[mlir] VectorToSCF target rank is a pass option
Make "target rank" a pass option of VectorToSCF.
Depends On D102101
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D102123
Chen Zheng [Tue, 11 May 2021 01:31:27 +0000 (21:31 -0400)]
[Debug-Info] change Tag type to dwarf::Tag for createAndAddDIE; NFC
Reviewed By: dblaikie
Differential Revision: https://reviews.llvm.org/D102207
Peter Collingbourne [Thu, 13 May 2021 20:55:16 +0000 (13:55 -0700)]
scudo: Fix MTE error reporting for zero-sized allocations.
With zero-sized allocations we don't actually end up storing the
address tag to the memory tag space, so store it in the first byte of
the chunk instead so that we can find it later in getInlineErrorInfo().
Differential Revision: https://reviews.llvm.org/D102442
Peter Collingbourne [Wed, 12 May 2021 23:49:19 +0000 (16:49 -0700)]
scudo: Check for UAF in ring buffer before OOB in more distant blocks.
It's more likely that we have a UAF than an OOB in blocks that are
more than 1 block away from the fault address, so the UAF should
appear first in the error report.
Differential Revision: https://reviews.llvm.org/D102379
Arthur Eubanks [Fri, 14 May 2021 01:12:55 +0000 (18:12 -0700)]
[test] Fix new-pm-lto-defaults.ll to work on all platforms
https://lab.llvm.org/buildbot/#/builders/119/builds/3775/steps/8/logs/FAIL__LLVM__new-pm-lto-defaults_ll
Followup to D102345.
H.J. Lu [Fri, 14 May 2021 01:07:11 +0000 (18:07 -0700)]
[sanitizer] Use size_t on g_tls_size to fix build on x32
On x32 size_t == unsigned int, not unsigned long int:
../../../../../src-master/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp: In function ??void __sanitizer::InitTlsSize()??:
../../../../../src-master/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp:209:55: error: invalid conversion from ??__sanitizer::uptr*?? {aka ??long unsigned int*??} to ??size_t*?? {aka ??unsigned int*??} [-fpermissive]
209 | ((void (*)(size_t *, size_t *))get_tls_static_info)(&g_tls_size, &tls_align);
| ^~~~~~~~~~~
| |
| __sanitizer::uptr* {aka long unsigned int*}
by using size_t on g_tls_size. This is to fix:
https://bugs.llvm.org/show_bug.cgi?id=50332
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D102446
Chen Zheng [Mon, 10 May 2021 02:57:36 +0000 (22:57 -0400)]
[Debug-Info] make DIE attributes generation under strict DWARF control
Reviewed By: dblaikie
Differential Revision: https://reviews.llvm.org/D101024
Amara Emerson [Thu, 13 May 2021 18:42:17 +0000 (11:42 -0700)]
[AArch64][GlobalISel] Fix a crash during unsuccessful G_CTPOP <2 x s64> legalization.
The legalization rule for scalar-same-as doesn't handle vectors. Until we
implement custom legalization for this, at least fall back properly.
Valentin Clement [Fri, 14 May 2021 00:27:37 +0000 (20:27 -0400)]
[mlir][openacc][NFC] add anonymous namespace around LegalizeDataOpForLLVMTranslation class
Add missing anonymous namespace around LegalizeDataOpForLLVMTranslation class .
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D102380
Reid Kleckner [Thu, 13 May 2021 23:03:01 +0000 (16:03 -0700)]
[gn] Don't pass -fprofile-instr-generate to linker on Windows
Avoids a warning from the linker. The user still has to put the resource
directory on the linker search path, and I can't find a clean way to do
that automatically in gn.
Matt Arsenault [Thu, 13 May 2021 23:00:13 +0000 (19:00 -0400)]
AMDGPU/GlobalISel: Don't hardcode stack alignment in assert message
Matt Arsenault [Tue, 12 Jan 2021 22:56:57 +0000 (17:56 -0500)]
AMDGPU/GlobalISel: Implement tail calls
Or at least the sibling call cases which the DAG already handles.
Nicolas Vasilache [Thu, 13 May 2021 20:57:57 +0000 (20:57 +0000)]
[mlir][Linalg] Add support for vector.transfer ops to comprehensive bufferization (2/n).
Differential revision: https://reviews.llvm.org/D102395
Nicolas Vasilache [Thu, 13 May 2021 20:42:24 +0000 (20:42 +0000)]
[mlir][Linalg] Add ComprehensiveBufferize for functions(step 1/n)
This is the first step towards upstreaming comprehensive bufferization following the
discourse post: https://llvm.discourse.group/t/rfc-linalg-on-tensors-update-and-comprehensive-bufferization-rfc/3373/6.
This first commit introduces a basic pass for bufferizing within function boundaries,
assuming that the inplaceable function boundaries have been marked as such.
Differential revision: https://reviews.llvm.org/D101693
Weston Carvalho [Mon, 10 May 2021 17:50:55 +0000 (10:50 -0700)]
Widen `name` stencil to support `TypeLoc` nodes.
Differential Revision: https://reviews.llvm.org/D102185
Arthur Eubanks [Sun, 2 May 2021 02:04:42 +0000 (19:04 -0700)]
[IR] Introduce the opaque pointer type
The opaque pointer type is essentially just a normal pointer type with a
null pointee type.
This also adds support for the opaque pointer type to the bitcode
reader/writer, as well as to textual IR.
To avoid confusion with existing pointer types, we disallow creating a
pointer to an opaque pointer.
Opaque pointer types should not be widely used at this point since many
parts of LLVM still do not support them. The next steps are to add some
very simple use cases of opaque pointers to make sure they work, then
start pretending that all pointers are opaque pointers and see what
breaks.
https://lists.llvm.org/pipermail/llvm-dev/2021-May/150359.html
Reviewed By: dblaikie, dexonsmith, pcc
Differential Revision: https://reviews.llvm.org/D101704
Michael Kruse [Thu, 13 May 2021 22:12:23 +0000 (17:12 -0500)]
[Clang][OpenMP] Allow unified_shared_memory for Pascal-generation GPUs.
The Pascal architecture supports the page migration engine required for
unified_shared_memory, as indicated by NVIDIA:
* https://developer.nvidia.com/blog/unified-memory-cuda-beginners/
* https://developer.nvidia.com/blog/beyond-gpu-memory-limits-unified-memory-pascal/
* https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#um-requirements
The limitation was introduced in D54493 which justified the cut-off by
the requirement for unified addressing. However, Unified Virtual
Addressing (UVA) is already available with sm20 (Fermi, Kepler,
Maxwell):
* https://docs.nvidia.com/cuda/gpudirect-rdma/index.html#basics-of-uva-cuda-memory-management
Unified shared memory might even be possible with these, but with
migration of entire allocations on kernel startup.
Reviewed By: JonChesterfield
Differential Revision: https://reviews.llvm.org/D101595
cynecx [Thu, 13 May 2021 20:45:53 +0000 (21:45 +0100)]
Don't run MachineVerifier on sjlj-unwind-inline-asm test because of known issue (PR39439)
Fixes buildbot failure (https://lab.llvm.org/buildbot/#/builders/16/builds/10825).
Reviewed By: Amanieu
Differential Revision: https://reviews.llvm.org/D102433
Arthur Eubanks [Wed, 12 May 2021 00:02:12 +0000 (17:02 -0700)]
[docs] Add page on opaque pointer types
Reviewed By: dblaikie, dexonsmith
Differential Revision: https://reviews.llvm.org/D102292
Lang Hames [Thu, 13 May 2021 21:33:33 +0000 (14:33 -0700)]
[clang-repl] Temporarily disable the execute.cpp test on ppc64.
This test is failing on some builders (see [1]) with the following error:
error: Added modules have incompatible data layouts:
e-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512 (module) vs
E-m:a-i64:64-n32:64-S128-v256:256:256-v512:512:512 (jit)
The JIT layout is correct, but some IR module added to the JIT is using a
little-endian layout instead.
This commit disables the test on ppc64 until we can investigate further and
fix the bug.
[1] https://lab.llvm.org/staging/#/builders/126/builds/371
Nikita Popov [Thu, 13 May 2021 21:03:46 +0000 (23:03 +0200)]
[CaptureTracking] Use isIdentifiedFunctionLocal() (NFC)
These conditions together exactly match isIdentifiedFunctionLocal(),
and this is also what we logically want to check for here.
Nikita Popov [Thu, 13 May 2021 20:59:19 +0000 (22:59 +0200)]
[AA] Use isIdentifiedFunctionLocal() (NFC)
This condition is equivalent to isIdentifiedFunctionLocal(),
and this is also what we semantically want to check here.
Roman Lebedev [Thu, 13 May 2021 20:55:51 +0000 (23:55 +0300)]
Revert "[X86][CostModel] X86TTIImpl::getMemoryOpCost(): rewrite vector handling again"
As reported in post-commit feedback, this has issues with e.g. <16 x i1>:
https://llvm.godbolt.org/z/jxPvdGEW4
This reverts commit
c02476f3158f2908ef0a6f628210b5380bd33695.
Roman Lebedev [Thu, 13 May 2021 20:55:28 +0000 (23:55 +0300)]
Revert "[X86] X86TTIImpl::getInterleavedMemoryOpCostAVX2(): use getMemoryOpCost()"
Depends on a commit that is about to be reverted.
This reverts commit
69ed93a4355123a45c1d7216aea7cd53d07a361b.
Roman Lebedev [Thu, 13 May 2021 20:54:11 +0000 (23:54 +0300)]
[X86] AMD Zen 3: same-reg SSE XMM XORPS is a 1-cycle(!) dep-breaking one-idiom
While both the SOG and Agner insist that it is zero-cycle,
i can not confirm that claim. While it clearly breaks the dependency,
i can not come up with a snippet, or measurement approach,
to end up with IPC bigger than 4, which, to me, means that it actually
consumes execution resource of an FP unit for a cycle.
Roman Lebedev [Thu, 13 May 2021 20:48:49 +0000 (23:48 +0300)]
[NFC][X86][MCA] AMD Zen 3: add same-reg SSE XMM XORPS test
Rob Suderman [Mon, 3 May 2021 20:56:00 +0000 (13:56 -0700)]
[mlir][tosa] Add lowering to tosa.abs for integer cases
Integer case requires decomposing to simple LLVM operatons.
Differential Revision: https://reviews.llvm.org/D101809
Siva Chandra Reddy [Thu, 13 May 2021 20:48:45 +0000 (20:48 +0000)]
[libc] Enable fmaf and fma on x86_64.
They require clang-11 or above for building and hence had to be disabled
as the bots did not have clang-11 or higher. Bots have now been upgraded
so we can enable these functions now.
Fangrui Song [Thu, 13 May 2021 20:44:57 +0000 (13:44 -0700)]
[CMake][ELF] Link libLLVM.so and libclang-cpp.so with -Bsymbolic-functions
llvm-dev message: https://lists.llvm.org/pipermail/llvm-dev/2021-May/150465.html
In an ELF shared object, a default visibility defined symbol is preemptible by
default. This creates some missed optimization opportunities.
-Bsymbolic-functions is more aggressive than our current -fvisibility-inlines-hidden
(present since 2012) as it applies to all function definitions. It can
* avoid PLT for cross-TU function calls && reduce dynamic symbol lookup
* reduce dynamic symbol lookup for taking function addresses and optimize out GOT/TOC on x86-64/ppc64
In a -DLLVM_TARGETS_TO_BUILD=X86 build, the number of JUMP_SLOT decreases from 12716 to 1628, and the number of GLOB_DAT decreases from 1918 to 1313
The built clang with `-DLLVM_LINK_LLVM_DYLIB=on -DCLANG_LINK_CLANG_DYLIB=on` is significantly faster.
See the Linux kernel build result https://bugs.archlinux.org/task/70697
Note: the performance of -fno-semantic-interposition -Bsymbolic-functions
libLLVM.so and libclang-cpp.so is close to a PIE binary linking against
`libLLVM*.a` and `libclang*.a`. When the host compiler is Clang,
-Bsymbolic-functions is the major contributor. On x86-64 (with GOTPCRELX) and
ppc64 ELFv2, the GOT/TOC relocations can be optimized.
Some implication:
Interposing a subset of functions is no longer supported.
(This is fragile on ELF and unsupported on Mach-O at all. For Mach-O we don't
use `ld -interpose` or `-flat_namespace`)
Compiling a program which takes the address of any LLVM function with
`{gcc,clang} -fno-pic` and expects the address to equal to the address taken
from libLLVM.so or libclang-cpp.so is unsupported. I am fairly confident that
llvm-project shouldn't have different behaviors depending on such pointer
equality (as we've been using -fvisibility-inlines-hidden which applies to
inline functions for a long time), but if we accidentally do, users should be
aware that they should not make assumption on pointer equality in `-fno-pic`
mode.
See more on https://maskray.me/blog/2021-05-09-fno-semantic-interposition
Reviewed By: phosek
Differential Revision: https://reviews.llvm.org/D102090
Joseph Huber [Thu, 13 May 2021 19:54:22 +0000 (15:54 -0400)]
[OpenMP] Prevent Attributor from deleting functions in OpenMPOptCGSCC pass
Summary:
This patch prevents the Attributor instances made in the CGSCC pass from
deleting functions. This prevents the attributor from changing the call
graph while OpenMPOpt is working with it.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D102363
natashaknk [Thu, 13 May 2021 20:15:57 +0000 (13:15 -0700)]
[mlir][tosa] Add tosa.div integer lowering to linalg.generic.
Lowering div elementwise op to the linalg dialect. Since tosa only supports integer division, that is the only version that is currently implemented.
Reviewed By: rsuderman
Differential Revision: https://reviews.llvm.org/D102430
Sean Silva [Wed, 12 May 2021 21:59:12 +0000 (14:59 -0700)]
[mlir][NFC] Add helper for common pattern of replaceAllUsesExcept
This covers the extremely common case of replacing all uses of a Value
with a new op that is itself a user of the original Value.
This should also be a little bit more efficient than the
`SmallPtrSet<Operation *, 1>{op}` idiom that was being used before.
Differential Revision: https://reviews.llvm.org/D102373
Martin Storsjö [Tue, 11 May 2021 06:19:52 +0000 (09:19 +0300)]
[llvm-nm] Support the -V option, print that the tool is compatible with GNU nm
This unlocks some codepaths in libtool.
Differential Revision: https://reviews.llvm.org/D102321
Siva Chandra Reddy [Thu, 13 May 2021 19:22:11 +0000 (19:22 +0000)]
[libc][NFC] Instead of erroring, skip math targets with missing implementations.
Fixes Aarch64 bot.
Siva Chandra Reddy [Wed, 12 May 2021 23:05:13 +0000 (23:05 +0000)]
[libc] Add x86_64 implementations of double precision cos, sin and tan.
The implementations use the x86_64 FPU instructions. These instructions
are extremely slow compared to a polynomial based software
implementation. Also, their accuracy falls drastically once the input
goes beyond 2PI. To improve both the speed and accuracy, we will be
taking the following approach going forward:
1. As a follow up to this CL, we will implement a range reduction algorithm
which will expand the accuracy to the entire double precision range.
2. After that, we will replace the HW instructions with a polynomial
implementation to improve the run time.
After step 2, the implementations will be accurate, performant and target
architecture independent.
Reviewed By: lntue
Differential Revision: https://reviews.llvm.org/D102384
Arnamoy Bhattacharyya [Thu, 13 May 2021 18:56:07 +0000 (14:56 -0400)]
[flang][OpenMP] Add semantic check for close nesting of `master` regions
This patch implements the following semantic check:
```
A master region may not be closely nested inside a work-sharing, loop, atomic, task, or taskloop region.
```
Adds a test case and also modifies a couple of existing test cases to include the check.
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D100228
Aaron En Ye Shi [Mon, 10 May 2021 18:20:42 +0000 (18:20 +0000)]
[HIP] Clean up llvm intrinsics using __asm
Instead of using inline asm, use clang builtins
for llvm intrinsics.
Differential Revision: https://reviews.llvm.org/D102427
peter klausler [Wed, 12 May 2021 19:03:21 +0000 (12:03 -0700)]
[flang] Support legacy extension OPEN(ACCESS='APPEND')
It should of course be POSITION='APPEND' but Sun Fortran
supported it on ACCESS=.
Differential Revision: https://reviews.llvm.org/D102350
zoecarver [Thu, 13 May 2021 18:48:43 +0000 (11:48 -0700)]
[libcxx][docs] Add two locks: transform_view and take_view.
Assign myself both of these views.
zoecarver [Thu, 13 May 2021 18:45:22 +0000 (11:45 -0700)]
[libcxx][docs] Update the One Ranges PRoposal Status with open revisions.
1. Moves the names into the names column.
2. Changes the names to reflect who's actually working on what.
3. Adds open revisions.
Aakanksha Patil [Thu, 13 May 2021 18:21:40 +0000 (14:21 -0400)]
[AMDGPU] Add gfx1034 target
Differential Revision: https://reviews.llvm.org/D102306
Artem Dergachev [Tue, 11 May 2021 23:44:49 +0000 (16:44 -0700)]
[clang-tidy] bugprone-infinite-loop: React to ObjC ivars and messages.
If the loop condition is a value of an instance variable, a property value,
or a message result value, it's a good indication that the loop is not infinite
and we have a really hard time proving the opposite so suppress the warning.
Differential Revision: https://reviews.llvm.org/D102294
Artem Dergachev [Tue, 11 May 2021 03:09:32 +0000 (20:09 -0700)]
[clang-tidy] bugprone-infinite-loop: forFunction() -> forCallable().
Take advantage of the new ASTMatcher added in D102213 to fix massive false negatives of the infinite loop checker on Objective-C.
Differential Revision: https://reviews.llvm.org/D102214
Artem Dergachev [Wed, 12 May 2021 03:22:58 +0000 (20:22 -0700)]
[ASTMatchers] Add forCallable(), a generalization of forFunction().
The new matcher additionally covers blocks and Objective-C methods.
This matcher actually makes sure that the statement truly belongs
to that declaration's body. forFunction() incorrectly reported that
a statement in a nested block belonged to the surrounding function.
forFunction() is now deprecated due to the above footgun, in favor of
forCallable(functionDecl()) when only functions need to be considered.
Differential Revision: https://reviews.llvm.org/D102213
Artem Dergachev [Wed, 12 May 2021 03:21:26 +0000 (20:21 -0700)]
[ASTMatchers] NFC: Fix formatting around forFunction().
Differential Revision: https://reviews.llvm.org/D102303
Roman Lebedev [Thu, 13 May 2021 18:22:38 +0000 (21:22 +0300)]
[NFC] Delete two newly-added test cases
Failing on bots in unobvious ways.
peter klausler [Wed, 12 May 2021 19:10:28 +0000 (12:10 -0700)]
[flang] (NFC) Expose internal idiom as utility API
Add overloads to AsGenericExpr() in Evaluate/tools.h to take care
of wrapping an untyped DataRef or bare Symbol in a typed Designator
wrapped up in a generic Expr<SomeType>. Use the new overloads to
replace a few instances of code that was calling TypedWrapper<>()
with a dynamic type.
This new tool will be useful in lowering to drive some code that
works with typed expressions (viz., list-directed I/O list items)
when starting with only a bare Symbol (viz., NAMELIST).
Differential Revision: https://reviews.llvm.org/D102352
Roman Lebedev [Thu, 13 May 2021 18:16:44 +0000 (21:16 +0300)]
[NFC] Try to fix CodeGenCXX/thunk-wrong-return-type.cpp test
cynecx [Thu, 13 May 2021 18:05:11 +0000 (19:05 +0100)]
Support unwinding from inline assembly
I've taken the following steps to add unwinding support from inline assembly:
1) Add a new `unwind` "attribute" (like `sideeffect`) to the asm syntax:
```
invoke void asm sideeffect unwind "call thrower", "~{dirflag},~{fpsr},~{flags}"()
to label %exit unwind label %uexit
```
2.) Add Bitcode writing/reading support + LLVM-IR parsing.
3.) Emit EHLabels around inline assembly lowering (SelectionDAGBuilder + GlobalISel) when `InlineAsm::canThrow` is enabled.
4.) Tweak InstCombineCalls/InlineFunction pass to not mark inline assembly "calls" as nounwind.
5.) Add clang support by introducing a new clobber: "unwind", which lower to the `canThrow` being enabled.
6.) Don't allow unwinding callbr.
Reviewed By: Amanieu
Differential Revision: https://reviews.llvm.org/D95745
Roman Lebedev [Thu, 13 May 2021 18:09:45 +0000 (21:09 +0300)]
[NFC] Try to fix CodeGenCXX/thunk-wrong-this.cpp test
Stefan Pintilie [Thu, 13 May 2021 14:58:59 +0000 (09:58 -0500)]
[PowerPC] Add ROP Protection to prologue and epilogue
Added hashst to the prologue and hashchk to the epilogue.
The hash for the prologue and epilogue must always be stored as the first
element in the local variable space on the stack.
Reviewed By: nemanjai, #powerpc
Differential Revision: https://reviews.llvm.org/D99377
peter klausler [Wed, 12 May 2021 19:07:51 +0000 (12:07 -0700)]
[flang] Implement DOT_PRODUCT in the runtime
API, implementation, and basic tests for the transformational
reduction intrinsic function DOT_PRODUCT in the runtime support
library.
Differential Revision: https://reviews.llvm.org/D102351
Duncan P. N. Exon Smith [Fri, 30 Apr 2021 22:23:47 +0000 (15:23 -0700)]
Modules: Simplify how DisableGeneratingGlobalModuleIndex is set, likely NFC
DisableGeneratingGlobalModuleIndex was being set by
CompilerInstance::findOrCompileModuleAndReadAST most of (but not all of)
the times it returned `nullptr` as a "normal" failure. Pull that up to
the caller, CompilerInstance::loadModule, to simplify the code. This
resolves a number of FIXMEs added during the refactoring in
5cca622310c10fdf6f921b6cce26f91d9f14c762.
The extra cases where this is set are all some version of a fatal error,
and the only client of the field, shouldBuildGlobalModuleIndex, seems
to be unreachable in that case. Even if there is some corner case where
this has an effect, it seems like the right/consistent behaviour.
Differential Revision: https://reviews.llvm.org/D101672
Roman Lebedev [Thu, 13 May 2021 15:20:37 +0000 (18:20 +0300)]
Return "[CGCall] Annotate `this` argument with alignment"
The original change was reverted because it was discovered
that clang mishandles thunks, and they receive wrong
attributes for their this/return types - the ones for the function
they will call, not the ones they have.
While i have tried to fix this in https://reviews.llvm.org/D100388
that patch has been up and stuck for a month now,
with little signs of progress.
So while it will be good to solve this for real,
for now we can simply avoid introducing the bug,
by not annotating this/return for thunks.
This reverts commit
6270b3a1eafaba4279e021418c5a2c5a35abc002,
relanding
0aa0458f1429372038ca6a4edc7e94c96cd9a753.
Roman Lebedev [Thu, 13 May 2021 11:48:26 +0000 (14:48 +0300)]
[Clang][Codegen] Do not annotate thunk's this/return types with align/deref/nonnull attrs
As it was discovered in post-commit feedback
for
0aa0458f1429372038ca6a4edc7e94c96cd9a753,
we handle thunks incorrectly, and end up annotating
their this/return with attributes that are valid
for their callees, not for thunks themselves.
While it would be good to fix this properly,
and keep annotating them on thunks,
i've tried doing that in https://reviews.llvm.org/D100388
with little success, and the patch is stuck for a month now.
So for now, as a stopgap measure, subj.
Roman Lebedev [Thu, 13 May 2021 11:46:41 +0000 (14:46 +0300)]
[NFC][Clang][Codegen] Add tests with wrong attributes on this/return of thunks
From https://reviews.llvm.org/D100388
David Green [Thu, 13 May 2021 17:31:01 +0000 (18:31 +0100)]
[ARM] Constrain CMPZ shift combine to a single use
We currently prefer t2CMPrs over t2CMPri when the node contains a shift.
This can introduce more nodes if the shift has multiple uses though, as
value from the shift will be needed anyway, and in the case of a t2CMPri
compared with zero will more readily be removed entirely.
Differential Revision: https://reviews.llvm.org/D101688
Jonas Devlieghere [Thu, 13 May 2021 17:12:00 +0000 (10:12 -0700)]
[lldb] Fixup indirect symbols as they are signed.
This fixes a bunch of test failures in Apple Silicon (arm64e).
Jonas Devlieghere [Thu, 13 May 2021 16:41:09 +0000 (09:41 -0700)]
[lldb] Fixup more code addresses
The Swift async task pointers are signed on arm64e and we need to fixup
the addresses in the CFA and DWARF expressions.
Duncan P. N. Exon Smith [Fri, 30 Apr 2021 22:09:09 +0000 (15:09 -0700)]
Modules: Rename ModuleBuildFailed => DisableGeneratingGlobalModuleIndex, NFC
Rename CompilerInstance's ModuleBuildFailed field to
DisableGeneratingGlobalModuleIndex, which more precisely describes its
role. Otherwise, it's hard to suss out how it's different from
ModuleLoader::HadFatalFailure, and what sort of code simplifications are
safe.
Differential Revision: https://reviews.llvm.org/D101670
Weiwei Li [Thu, 13 May 2021 17:06:53 +0000 (13:06 -0400)]
[mlir][spirv] Define spv.ImageQuerySize operation
Support OpImageQuerySize in spirv dialect
co-authored-by: Alan Liu <alanliu.yf@gmail.com>
Reviewed By: antiagainst
Differential Revision: https://reviews.llvm.org/D102029
Valeriy Savchenko [Tue, 11 May 2021 14:30:02 +0000 (17:30 +0300)]
[analyzer][solver] Prevent use of a null state
rdar://
77686137
Differential Revision: https://reviews.llvm.org/D102240
zoecarver [Thu, 13 May 2021 17:09:15 +0000 (10:09 -0700)]
[pstl] Use logical operator for loop condition in tests
Fix a probable typo in two PSTL tests that causes warnings with GCC.
Patch by Jonathan Wakely (jwakely).
Reviewed By: zoecarver
Differential Revision: https://reviews.llvm.org/D102327
Duncan P. N. Exon Smith [Fri, 30 Apr 2021 21:14:03 +0000 (14:14 -0700)]
Modules: Remove ModuleLoader::OtherUncachedFailure, NFC
5cca622310c10fdf6f921b6cce26f91d9f14c762 refactored
CompilerInstance::loadModule, splitting out
findOrCompileModuleAndReadAST, but was careful to avoid making any
functional changes. It added ModuleLoader::OtherUncachedFailure to
facilitate this and left behind FIXMEs asking why certain failures
weren't cached.
After a closer look, I think we can just remove this and simplify the
code. This changes the behaviour of the following (simplified) code from
CompilerInstance::loadModule, causing a failure to be cached more often:
```
if (auto MaybeModule = MM.getCachedModuleLoad(*Path[0].first))
return *MaybeModule;
if (ModuleName == getLangOpts().CurrentModule)
return MM.cacheModuleLoad(PP.lookupModule(...));
ModuleLoadResult Result = findOrCompileModuleAndReadAST(...);
if (Result.isNormal()) // This will be 'true' more often.
return MM.cacheModuleLoad(..., Module);
return Result;
```
`MM` here is a ModuleMap owned by the Preprocessor. Here are the cases
where `findOrCompileModuleAndReadAST` starts returning a "normal" failed
result:
- Emitted `diag::err_module_not_found`, where there's no module map
found.
- Emitted `diag::err_module_build_disabled`, where implicitly building
modules is disabled.
- Emitted `diag::err_module_cycle`, which detects module cycles in the
implicit modules build system.
- Emitted `diag::err_module_not_built`, which avoids building a module
in this CompilerInstance if another one tried and failed already.
- `compileModuleAndReadAST()` was called and failed to build.
The four errors are all fatal, and last item also reports a fatal error,
so it this extra caching has no functionality change... but even if it
did, it seems fine to cache these failed results within a ModuleMap
instance (note that each CompilerInstance has its own Preprocessor and
ModuleMap).
Differential Revision: https://reviews.llvm.org/D101667
zoecarver [Tue, 11 May 2021 18:14:26 +0000 (11:14 -0700)]
[libcxx][ranges] Fix `ranges::empty` when begin, end, and empty members are provided.
Before this commit, we'd get a compilation error because the operator() overload was ambiguous.
Differential Revision: https://reviews.llvm.org/D102263
Lei Huang [Mon, 10 May 2021 20:20:16 +0000 (15:20 -0500)]
[PowerPC] Add clang option -m[no-]prefixed
Add user-facing front end option to turn off power10 prefixed instructions.
Reviewed By: nemanjai
Differential Revision: https://reviews.llvm.org/D102191
Jon Chesterfield [Thu, 13 May 2021 16:31:57 +0000 (17:31 +0100)]
[libomptarget][amdgpu] Fix truncation error for partial wavefront
[libomptarget][amdgpu] Fix truncation error for partial wavefront
The partial barrier implementation involves one wavefront resetting and N-1
waiting. This change future proofs against launching with a number of threads
that is not a multiple of the wavefront size.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D102407
Jon Chesterfield [Thu, 13 May 2021 16:31:35 +0000 (17:31 +0100)]
[libomptarget][amdgpu] Convert an assert to print and offload_fail
[libomptarget][amdgpu] Convert an assert to print and offload_fail
The kernel launched is supposed to be present in the binary, but a not yet
diagnosed bug means it is missing for some of the qmcpack test cases. Changing
from assert to print and offload_fail should help diagnose that and similar bugs.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D102378
Jacques Pienaar [Thu, 13 May 2021 16:13:47 +0000 (09:13 -0700)]
[mlir] Add python test for shape dialect
Add basic test for shape.const_shape op as start.
Differential Revision: https://reviews.llvm.org/D102341
Joe Ellis [Thu, 13 May 2021 15:50:06 +0000 (15:50 +0000)]
[InstSimplify] Remove redundant {insert,extract}_vector intrinsic chains
This commit removes some redundant {insert,extract}_vector intrinsic
chains by implementing the following patterns as instsimplifies:
(insert_vector _, (extract_vector X, 0), 0) -> X
(extract_vector (insert_vector _, X, 0), 0) -> X
Reviewed By: peterwaller-arm
Differential Revision: https://reviews.llvm.org/D101986
Michael Kruse [Thu, 13 May 2021 16:04:59 +0000 (11:04 -0500)]
[OpenMP] Test unified shared memory tests only on systems that support it.
Add a `REQUIRES: unified_shared_memory` option to tests that use `#pragma omp requires unified_shared_memory`.
For CUDA, the feature tag is derived from LIBOMPTARGET_DEP_CUDA_ARCH which itself is derived using [[ https://cmake.org/cmake/help/latest/module/FindCUDA.html#commands | cuda_select_nvcc_arch_flags ]]. The latter determines which compute capability the GPU in the system supports. To ensure that this is the CUDA arch being used, we could also set the `-Xopenmp-target -march=` flag.
In the absence of an NVIDIA GPU, LIBOMPTARGET_DEP_CUDA_ARCH will be 35. That is, in that case we are assuming unified_shared_memory is not available. CUDA plugin testing could be disabled entirely in this case, but this currently depends on `LIBOMPTARGET_CAN_LINK_LIBCUDA OR LIBOMPTARGET_FORCE_DLOPEN_LIBCUDA`, not on whether the hardware is actually available.
For all other targets, nothing changes and we are assuming unified shared memory is available. This might need refinement if not the case.
This tries to fix the [[ http://meinersbur.de:8011/#/builders/143 | OpenMP Offloading Buildbot ]] that, although brand-new, only has a Pascal-generation (sm_61) GPU installed. Hence, tests that require unified shared memory are currently failing. I wish I had known in advance.
Reviewed By: protze.joachim, tianshilei1992
Differential Revision: https://reviews.llvm.org/D101498
Stanislav Mekhanoshin [Wed, 12 May 2021 18:35:12 +0000 (11:35 -0700)]
[AMDGPU] Only allow global fp atomics with unsafe option
Previously we were allowing to use FP atomics without
-amdgpu-unsafe-fp-atomics option if a scope is less then
system. This is not safe just as well if we have UC memory.
This change only allows global and flat FP atomics with
the unsafe option. Consequentially that makes a check for
denorm mode redundant since we skip it with the unsafe
option and do not have a way to produce these instructions
without it anyway.
Differential Revision: https://reviews.llvm.org/D102347
Aaron En Ye Shi [Wed, 12 May 2021 19:53:47 +0000 (19:53 +0000)]
[HIP] Add __builtin_amdgcn_groupstaticsize
Differential Revision: https://reviews.llvm.org/D102403
Zarko Todorovski [Thu, 13 May 2021 14:44:40 +0000 (10:44 -0400)]
Parse vector bool when stdbool.h and altivec.h are included
Currently when including stdbool.h and altivec.h declaration of `vector bool` leads to
errors due to `bool` being expanded to '_Bool`. This patch allows the parser
to recognize `_Bool`.
Reviewed By: hubert.reinterpretcast, Everybody0523
Differential Revision: https://reviews.llvm.org/D102064
Bradley Smith [Tue, 4 May 2021 10:18:34 +0000 (11:18 +0100)]
[AArch64][SVE] Fix missed immediate selection due to mishandling of signedness
The complex selection pattern for add/sub shifted immediates is
incorrect in it's handling of incoming constant values, in that it
does not properly anticipate the values to be signed extended to
32-bits.
Co-authored-by: Graham Hunter <graham.hunter@arm.com>
Differential Revision: https://reviews.llvm.org/D101833
Tobias Gysi [Thu, 13 May 2021 14:24:33 +0000 (14:24 +0000)]
[mlir][linalg] Remove IndexedGenericOp support from FusionOnTensors...
after introducing the IndexedGenericOp to GenericOp canonicalization (https://reviews.llvm.org/D101612).
Differential Revision: https://reviews.llvm.org/D102163
Matthias Springer [Thu, 13 May 2021 04:55:47 +0000 (13:55 +0900)]
[mlir] Replace vector-to-scf with progressive-vector-to-scf
Depends On D102388
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D102101
Tobias Gysi [Thu, 13 May 2021 13:14:47 +0000 (13:14 +0000)]
[mlir][linalg] Remove IndexedGenericOp support from DropUnitDims...
after introducing the IndexedGenericOp to GenericOp canonicalization (https://reviews.llvm.org/D101612).
Differential Revision: https://reviews.llvm.org/D102235
Paul C. Anagnostopoulos [Tue, 11 May 2021 16:50:09 +0000 (12:50 -0400)]
[TableGen] Make the NUL character invalid in .td files
Now uses tr instead of sed.
Differential Revision: https://reviews.llvm.org/D102254
Juneyoung Lee [Sat, 28 Nov 2020 19:26:44 +0000 (04:26 +0900)]
Reapply [ConstantFold] Fold more operations to poison
This was reverted to mitigate mitigate miscompiles caused by
the logical and/or to bitwise and/or fold. Reapply it now that
the underlying issue has been fixed by D101191.
-----
This patch folds more operations to poison.
Alive2 proof: https://alive2.llvm.org/ce/z/mxcb9G (it does not contain tests about div/rem because they fold to poison when raising UB)
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D92270
Matthias Springer [Thu, 13 May 2021 07:50:15 +0000 (16:50 +0900)]
[mlir] Migrate vector-to-loops.mlir to ProgressiveVectorToSCF
Create a copy of vector-to-loops.mlir and adapt the test for
ProgressiveVectorToSCF. Fix a small bug in getExtractOp() triggered by
this test.
Differential Revision: https://reviews.llvm.org/D102388