Sam Elliott [Thu, 1 Aug 2019 12:42:31 +0000 (12:42 +0000)]
[RISCV] Add Custom Parser for Atomic Memory Operands
Summary:
GCC Accepts both (reg) and 0(reg) for atomic instruction memory
operands. These instructions do not allow for an offset in their
encoding, so in the latter case, the 0 is silently dropped.
Due to how we have structured the RISCVAsmParser, the easiest way to add
support for parsing this offset is to add a custom AsmOperand and
parser. This parser drops all the parens, and just keeps the register.
This commit also adds a custom printer for these operands, which matches
the GCC canonical printer, printing both `(a0)` and `0(a0)` as `(a0)`.
Reviewers: asb, lewis-revill
Reviewed By: asb
Subscribers: s.egerton, hiraditya, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, kito-cheng, shiva0217, jrtc27, MaskRay, zzheng, edward-jones, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, jfb, PkmX, jocewei, psnobl, benna, Jim, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D65205
llvm-svn: 367553
Nico Weber [Thu, 1 Aug 2019 12:42:28 +0000 (12:42 +0000)]
Try to heal bots after r367551
llvm-svn: 367552
Nico Weber [Thu, 1 Aug 2019 12:41:23 +0000 (12:41 +0000)]
compiler-rt: Rename .cc file in lib/{dfsan,stats,ubsan_minimal} to .cpp
Like r367463, but for dfsan, stats, ubsan_minimal.
llvm-svn: 367551
Nico Weber [Thu, 1 Aug 2019 12:35:27 +0000 (12:35 +0000)]
compiler-rt: Rename .cc file in lib/xray/tests/unit to .cpp
Like r367463, but for xray/texts/unit.
llvm-svn: 367550
Fangrui Song [Thu, 1 Aug 2019 12:34:43 +0000 (12:34 +0000)]
[lit] Use ld.lld -z separate-code to work around a debug_line parsing bug
The issue was exposed by D64903/r367537.
http://lab.llvm.org:8011/builders/lldb-x64-windows-ninja/builds/7321/
In these tests, .debug_str immediately follows .text.
The last section of last RX PT_LOAD was originally padded with trap
instructions and .debug_str started at a new page (actually
common-page-size). Now, .debug_str immediately follows .test.
Add -z separate-code to use the old layout.
llvm-svn: 367549
Roman Lebedev [Thu, 1 Aug 2019 12:32:08 +0000 (12:32 +0000)]
[IR] Value: add replaceUsesWithIf() utility
Summary:
While there is always a `Value::replaceAllUsesWith()`,
sometimes the replacement needs to be conditional.
I have only cleaned a few cases where `replaceUsesWithIf()`
could be used, to both add test coverage,
and show that it is actually useful.
Reviewers: jdoerfert, spatel, RKSimon, craig.topper
Reviewed By: jdoerfert
Subscribers: dschuff, sbc100, jgravelle-google, hiraditya, aheejin, george.burgess.iv, asbirlea, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D65528
llvm-svn: 367548
Roman Lebedev [Thu, 1 Aug 2019 12:31:35 +0000 (12:31 +0000)]
[IR] SelectInst: add swapValues() utility
Summary:
Sometimes we need to swap true-val and false-val of a `SelectInst`.
Having a function for that is nicer than hand-writing it each time.
Reviewers: spatel, RKSimon, craig.topper, jdoerfert
Reviewed By: jdoerfert
Subscribers: jdoerfert, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D65520
llvm-svn: 367547
Nico Weber [Thu, 1 Aug 2019 12:30:58 +0000 (12:30 +0000)]
compiler-rt: Rename .cc file in lib/xray to .cpp
Like r367463, but for xray.
llvm-svn: 367546
Serge Pavlov [Thu, 1 Aug 2019 11:46:28 +0000 (11:46 +0000)]
[Parser] Change parameter type from int to enum
Some parser functions accept argument of type unsigned while it is
actually of type DeclSpec::TST. No functional changes.
Differential Revision: https://reviews.llvm.org/D65406
llvm-svn: 367545
David Green [Thu, 1 Aug 2019 11:22:03 +0000 (11:22 +0000)]
[ARM] Fix for MVE VREV64
The VREV64 instruction is apparently unpredictable if Qd == Qm, due to the
cross-beat nature of the instruction. This adds an earlyclobber to Qd, which
seems to be the same way we deal with this on other instructions like the
write-back on loads and stores.
Differential Revision: https://reviews.llvm.org/D65502
llvm-svn: 367544
Simon Pilgrim [Thu, 1 Aug 2019 11:12:10 +0000 (11:12 +0000)]
[ARM] Regenerate BSWAP16 tests
llvm-svn: 367543
Raphael Isemann [Thu, 1 Aug 2019 11:05:47 +0000 (11:05 +0000)]
[lldb][NFC] Make ClangDiagnostic::m_fixit_vec private
llvm-svn: 367542
Ilya Biryukov [Thu, 1 Aug 2019 11:05:06 +0000 (11:05 +0000)]
[clangd] Add missing braces to completion tests. NFC
llvm-svn: 367541
Sander de Smalen [Thu, 1 Aug 2019 10:53:45 +0000 (10:53 +0000)]
[AArch64] Do not allocate unnecessary emergency slot.
Fix an issue where the compiler still allocates an emergency spill slot even
though it already decided to spill an extra callee-save register to use
as a scratch register.
Reviewers: gberry, thegameg, mstorsjo, t.p.northover
Reviewed By: thegameg
Differential Revision: https://reviews.llvm.org/D65504
llvm-svn: 367540
Stefan Granitz [Thu, 1 Aug 2019 10:33:54 +0000 (10:33 +0000)]
[lldb][docs] Update landing page for monorepo
Summary: Following up from D65330, here's an update for the landing page.
Reviewers: jryans, clayborg, amccarth, labath
Reviewed By: jryans, amccarth, labath
Subscribers: arphaman, lldb-commits, #lldb
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D65437
llvm-svn: 367539
Stefan Granitz [Thu, 1 Aug 2019 10:33:44 +0000 (10:33 +0000)]
[lldb][CMake] Avoid 'Autogenerate scheme' dialogs in Xcode projects
Summary:
Supported in CMake 3.9 and higher: https://cmake.org/cmake/help/v3.9/variable/CMAKE_XCODE_GENERATE_SCHEME.html
Older versions will just report it as unused in the end of the configuration process.
Reviewers: jingham, JDevlieghere
Reviewed By: JDevlieghere
Subscribers: mgorny, lldb-commits, #lldb
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D65509
llvm-svn: 367538
Fangrui Song [Thu, 1 Aug 2019 09:58:25 +0000 (09:58 +0000)]
[ELF] Add -z separate-code and pad the last page of last PF_X PT_LOAD with traps only if -z separate-code is specified
This patch
1) adds -z separate-code and -z noseparate-code (default).
2) changes the condition that the last page of last PF_X PT_LOAD is
padded with trap instructions.
Current condition (after D33630): if there is no `SECTIONS` commands.
After this change: if -z separate-code is specified.
-z separate-code was introduced to ld.bfd in 2018, to place the text
segment in its own pages. There is no overlap in pages between an
executable segment and a non-executable segment:
1) RX cannot load initial contents from R or RW(or non-SHF_ALLOC).
2) R and RW(or non-SHF_ALLOC) cannot load initial contents from RX.
lld's current status:
- Between R and RX: in `Writer<ELFT>::fixSectionAlignments()`, the start of a
segment is always aligned to maxPageSize, so the initial contents loaded by R
and RX do not overlap. I plan to allow overlaps in D64906 if -z noseparate-code
is in effect.
- Between RX and RW(or non-SHF_ALLOC if RW doesn't exist):
we currently unconditionally pad the last page to commonPageSize
(defaults to 4096 on all targets we support).
This patch will make it effective only if -z separate-code is specified.
-z separate-code is a dubious feature that intends to reduce the number
of ROP gadgets (which is actually ineffective because attackers can find
plenty of gadgets in the text segment, no need to find gadgets in
non-code regions).
With the overlapping PT_LOAD technique D64906, -z noseparate-code
removes two more alignments at segment boundaries than -z separate-code.
This saves at most defaultCommonPageSize*2 bytes, which are significant
on targets with large defaultCommonPageSize (AArch64/MIPS/PPC: 65536).
Issues/feedback on alignment at segment boundaries to help understand
the implication:
* binutils PR24490 (the situation on ld.bfd is worse because they have
two R-- on both sides of R-E so more alignments.)
* In binutils, the 2018-02-27 commit "ld: Add --enable-separate-code" made -z separate-code the default on Linux.
https://github.com/richfelker/musl-cross-make/commit/
d969dea983a2cc54a1e0308a0cdeb6c3307e4bfa
In musl-cross-make, binutils is configured with --disable-separate-code
to address size regressions caused by -z separate-code. (lld actually has the same
issue, which I plan to fix in a future patch. The ld.bfd x86 status is
worse because they default to max-page-size=0x200000).
* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=237676 people want
smaller code size. This patch will remove one alignment boundary.
* Stef O'Rear: I'm opposed to any kind of page alignment at the
text/rodata line (having a partial page of text aliased as rodata and
vice versa has no demonstrable harm, and I actually care about small
systems).
So, make -z noseparate-code the default.
Reviewed By: ruiu
Differential Revision: https://reviews.llvm.org/D64903
llvm-svn: 367537
Igor Kudrin [Thu, 1 Aug 2019 09:58:03 +0000 (09:58 +0000)]
[ELF] With --vs-diagnostics, print a separate message for each location of a duplicate symbol.
We extract and print the source location in the message header so that
Visual Studio is able to parse it and jump there. As duplicate symbols
are defined in several locations, it is more convenient to have separate
error messages, which allows a user to easily access all the locations.
Differential Revision: https://reviews.llvm.org/D65213
llvm-svn: 367536
Petar Avramovic [Thu, 1 Aug 2019 09:40:13 +0000 (09:40 +0000)]
[MIPS GlobalISel] Fold load/store + G_GEP + G_CONSTANT
Fold load/store + G_GEP + G_CONSTANT when
immediate in G_CONSTANT fits into 16 bit signed integer.
Differential Revision: https://reviews.llvm.org/D65507
llvm-svn: 367535
Fangrui Song [Thu, 1 Aug 2019 09:25:34 +0000 (09:25 +0000)]
[ELF][X86] Improve tests
* Add --no-show-raw-insn to llvm-objdump -d tests
* When linking an executable with %t.so, the path %t.so will be recorded
in the DT_NEEDED entry if %t.so doesn't have DT_SONAME. .dynstr will
have varying lengths on different systems. Add -soname so that the
string in .dynstr is of fixed length to make tests more robust.
* Rename i386-tls-initial-exec-local.s to i386-tls-ie-local.s
* Refactor tls-initial-exec-local.s to x86-64-tls-ie-local.s
llvm-svn: 367533
Guillaume Chatelet [Thu, 1 Aug 2019 09:20:00 +0000 (09:20 +0000)]
[LLVM][Alignment] Fix AlignmentTest on platform where size_t != uint64_t
Reviewers: yroux
Subscribers: llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D65563
llvm-svn: 367532
Ilya Biryukov [Thu, 1 Aug 2019 09:10:37 +0000 (09:10 +0000)]
[Preprocessor] Always discard body of #define if we failed to parse it
Summary:
Preivously we would only discard it if we failed to parse parameter lists.
If we do not consume the body, parser sees tokens inside directive. In
turn, this leads to spurious diagnostics and a crash in TokenBuffer, see
the added tests.
Reviewers: sammccall
Reviewed By: sammccall
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D65517
llvm-svn: 367530
Johan Vikstrom [Thu, 1 Aug 2019 09:08:41 +0000 (09:08 +0000)]
[clangd] Fix buildbot failure from ambigous ArrayRef ctor
llvm-svn: 367529
Sam Parker [Thu, 1 Aug 2019 08:17:51 +0000 (08:17 +0000)]
[NFC][ARM][ParallelDSP] Getters and renaming
Add a couple of getters for Reduction and do some renaming of
variables around CreateSMLAD for clarity.
llvm-svn: 367522
Johan Vikstrom [Thu, 1 Aug 2019 08:08:44 +0000 (08:08 +0000)]
[clangd] Duplicate lines of semantic highlightings sent removed.
Summary: Added a class for diffing highlightings and removing duplicate lines. Integrated into the highlighting generation flow. Only works correctly if all tokens are on a single line. Also returns empty lines if the IDE should remove previous highlightings on a line.
Reviewers: hokein, sammccall, ilya-biryukov
Subscribers: MaskRay, jkorous, mgrang, arphaman, kadircet, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D64475
llvm-svn: 367521
Hans Wennborg [Thu, 1 Aug 2019 08:01:09 +0000 (08:01 +0000)]
Delay emitting dllexport explicitly defaulted members until the class is fully parsed (PR40006)
This is similar to r245139, but that only addressed dllexported classes.
It was still possible to run into the same problem with dllexported
members in an otherwise normal class (see bug). This uses the same
strategy to fix: delay defining the method until the whole class has
been parsed.
(The easiest way to see the ordering problem is in
Parser::ParseCXXMemberSpecification(): it calls
ParseLexedMemberInitializers() *after* ActOnFinishCXXMemberDecls(),
which was trying to define the dllexport method. Now we delay it to
ActOnFinishCXXNonNestedClass() which is called after both of those.)
Differential revision: https://reviews.llvm.org/D65511
llvm-svn: 367520
David Zarzycki [Thu, 1 Aug 2019 06:41:40 +0000 (06:41 +0000)]
[Testing] Fix tests that break with read-only checkouts
Found with `mount --bind -o ro ...` on Linux.
llvm-svn: 367519
Craig Topper [Thu, 1 Aug 2019 06:06:21 +0000 (06:06 +0000)]
[SelectionDAG] Use APInt::isSubsetOf/intersects to simplify some code.
Also use KnownBits::isNegative/isNonNegative to further simplify.
llvm-svn: 367518
Tom Stellard [Thu, 1 Aug 2019 05:39:17 +0000 (05:39 +0000)]
AMDGPU/SILoadStoreOptimizer: Make some functions const
Reviewers: arsenm, pendingchaos, rampitec
Reviewed By: rampitec
Subscribers: kzhuravl, jvesely, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D65316
llvm-svn: 367517
Zi Xuan Wu [Thu, 1 Aug 2019 05:26:02 +0000 (05:26 +0000)]
recommit:[PowerPC] Eliminate loads/swap feeding swap/store for vector type by using big-endian load/store
In PowerPC, there is instruction to load vector in big endian element order when it's in little endian target.
So we can combine vector load + reverse into big endian load to eliminate the swap instruction.
Also combine vector reverse + store into big endian store.
Differential Revision: https://reviews.llvm.org/D65063
llvm-svn: 367516
Igor Kudrin [Thu, 1 Aug 2019 05:23:45 +0000 (05:23 +0000)]
[ELF] Fix finding locations in messages for undefined hidden symbols.
Previously, when `--vs-diagnostics` was used, the linker printed
something like
hidden(undef.s): error: undefined hidden symbol: foo
>>> referenced by undef.s:15
Differential Revision: https://reviews.llvm.org/D65499
llvm-svn: 367515
Fangrui Song [Thu, 1 Aug 2019 04:03:06 +0000 (04:03 +0000)]
AMDGPU/GlobalISel: fix inst-select-load-local.mir in -DLLVM_ENABLE_ASSERTIONS=off builds after r367498
llvm-svn: 367514
Matt Arsenault [Thu, 1 Aug 2019 03:57:42 +0000 (03:57 +0000)]
AMDGPU/GlobalISel: Fix flat load/store of pointer types
llvm-svn: 367513
Matt Arsenault [Thu, 1 Aug 2019 03:52:40 +0000 (03:52 +0000)]
AMDGPU/GlobalISel: Remove manual store select code
This regresses the weird types that are newly treated as legal load
types, but fixes incorrectly using flat instrucions on SI.
llvm-svn: 367512
Matt Arsenault [Thu, 1 Aug 2019 03:41:41 +0000 (03:41 +0000)]
AMDGPU/GlobalISel: Select local atomic cmpxchg
llvm-svn: 367511
JF Bastien [Thu, 1 Aug 2019 03:40:59 +0000 (03:40 +0000)]
Revert "[NFC] Remove obsolete LLVM_GNUC_PREREQ"
The bots are sad, looks like GCC doesn't always have __has_builtin. I'll need to
modify the logic a bit.
llvm-svn: 367510
Matt Arsenault [Thu, 1 Aug 2019 03:33:15 +0000 (03:33 +0000)]
AMDGPU/GlobalISel: Handle G_ATOMICRMW_FADD
llvm-svn: 367509
JF Bastien [Thu, 1 Aug 2019 03:30:45 +0000 (03:30 +0000)]
[NFC] Remove obsolete LLVM_GNUC_PREREQ
The current minimum GCC version is 4.8 (soon to be 5.1), we there don't need to check for older versions. While I'm around Compiler.h, also update some of the doxygen comment.
llvm-svn: 367508
Matt Arsenault [Thu, 1 Aug 2019 03:29:01 +0000 (03:29 +0000)]
AMDGPU/GlobalISel: Allow selection of DS atomicrmw
llvm-svn: 367507
Matt Arsenault [Thu, 1 Aug 2019 03:25:52 +0000 (03:25 +0000)]
AMDGPU: Start redefining atomic PatFrags
Start migrating to a form that will be compatible with the global isel
emitter. Also should fix some overly lax checks on the memory type,
which allowed mis-selecting some illegal atomics.
llvm-svn: 367506
Matt Arsenault [Thu, 1 Aug 2019 03:22:40 +0000 (03:22 +0000)]
AMDGPU: Correct FP atomic patterns
These need to use an fadd, not an add. Also make the noret part clear
in the name.
llvm-svn: 367505
Matt Arsenault [Thu, 1 Aug 2019 03:09:15 +0000 (03:09 +0000)]
AMDGPU/GlobalISel: Select simple local stores
llvm-svn: 367504
Matt Arsenault [Thu, 1 Aug 2019 01:44:22 +0000 (01:44 +0000)]
GlobalISel: moreElementsVector for G_LOAD/G_STORE
AMDGPU change and test is a placeholder until a future patch with
complete handling.
llvm-svn: 367503
Ziang Wan [Thu, 1 Aug 2019 01:39:21 +0000 (01:39 +0000)]
[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss
Fix one test case for it to be system-independent.
llvm-svn: 367502
Peter Collingbourne [Thu, 1 Aug 2019 01:38:53 +0000 (01:38 +0000)]
Create unique, but identically-named ELF sections for explicitly-sectioned functions and globals when using -function-sections and -data-sections.
This allows functions and globals to to be reordered later in the linking phase
(using the -symbol-ordering-file) even though reordering will be limited to
the scope of the explicit section.
Patch by Rahman Lavaee!
Differential Revision: https://reviews.llvm.org/D65478
llvm-svn: 367501
Matt Arsenault [Thu, 1 Aug 2019 01:25:27 +0000 (01:25 +0000)]
Reapply "AMDGPU: Split block for si_end_cf"
This reverts commit r359363, reapplying r357634
llvm-svn: 367500
Philip Reames [Thu, 1 Aug 2019 01:16:08 +0000 (01:16 +0000)]
Fix a release-only build warning triggered by rL367485
llvm-svn: 367499
Matt Arsenault [Thu, 1 Aug 2019 00:53:38 +0000 (00:53 +0000)]
AMDGPU/GlobalISel: Select local loads
llvm-svn: 367498
Ziang Wan [Thu, 1 Aug 2019 00:16:43 +0000 (00:16 +0000)]
[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss
Issue an warning when the code tries to do an implicit int -> float
conversion, where the float type ha a narrower significant than the
float type.
The new warning is controlled by flag -Wimplicit-int-float-conversion,
under -Wimplicit-float-conversion and -Wconversion. It is also silenced
when c++11 narrowing warning is issued.
Differential Revision: https://reviews.llvm.org/D64666
llvm-svn: 367497
Amy Huang [Wed, 31 Jul 2019 23:59:31 +0000 (23:59 +0000)]
Revert "[MS] Emit S_HEAPALLOCSITE debug info in Selection DAG" and
and partial fix.
Causes windows buildbot errors.
This reverts commit
6e65c34523963094acd0d6c94a5f5c64b32fe6aa and
53da7ca94343166ac68aef81db0398932fc258bb.
llvm-svn: 367496
Richard Smith [Wed, 31 Jul 2019 23:37:24 +0000 (23:37 +0000)]
Fix build when both gtest death tests and LLVM_NODISCARD are available.
llvm-svn: 367495
Jonas Devlieghere [Wed, 31 Jul 2019 23:34:45 +0000 (23:34 +0000)]
[Reproducers] Force replay in synchronous mode.
Replaying a reproducer in asynchronous mode never makes sense. This
patch disables asynchronous mode during replay.
Differential revision: https://reviews.llvm.org/D65547
llvm-svn: 367494
Nico Weber [Wed, 31 Jul 2019 23:34:07 +0000 (23:34 +0000)]
compiler-rt: Try to appease lint script.
A bot complains:
/b/sanitizer-x86_64-linux-autoconf/build/llvm/projects/compiler-rt/lib/sanitizer_common/tests/malloc_stress_transfer_test.cpp:2: Streams are highly discouraged. [readability/streams] [3]
/b/sanitizer-x86_64-linux-autoconf/build/llvm/projects/compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cpp:11: Streams are highly discouraged. [readability/streams] [3]
lib/CMakeFiles/SanitizerLintCheck.dir/build.make:57: recipe for target 'lib/CMakeFiles/SanitizerLintCheck' failed
I do not know why this apparently wasn't a problem when the files
had extension .cc.
llvm-svn: 367493
Eli Friedman [Wed, 31 Jul 2019 23:19:21 +0000 (23:19 +0000)]
[ARM] Lower "(x<<c) > 0x80000000U" to "lsls" on Thumb1.
This is extremely specific, but saves three instructions when it's
legal. I don't think the code can be usefully generalized.
Differential Revision: https://reviews.llvm.org/D65351
llvm-svn: 367492
Eli Friedman [Wed, 31 Jul 2019 23:17:34 +0000 (23:17 +0000)]
[ARM] Transform compare of masked value to shift on Thumb1.
Thumb1 has very limited immediate modes, so turning an "and" into a
shift can save multiple instructions.
It's possible to simplify the generated code for test2 and test3 in
cmp-and-fold.ll a little more, but I'll implement that as a followup.
Differential Revision: https://reviews.llvm.org/D65175
llvm-svn: 367491
JF Bastien [Wed, 31 Jul 2019 23:09:18 +0000 (23:09 +0000)]
[ConstExprPreter] Overflow-detecting methods use GCC or clang builtins
Differential Revision: https://reviews.llvm.org/D65536
llvm-svn: 367490
Craig Topper [Wed, 31 Jul 2019 22:58:15 +0000 (22:58 +0000)]
[ScalarizeMaskedMemIntrin] Bitcast the mask to the scalar domain and use scalar bit tests for the branches.
X86 at least is able to use movmsk or kmov to move the mask to the scalar
domain. Then we can just use test instructions to test individual bits.
This is more efficient than extracting each mask element
individually.
I special cased v1i1 to use the previous behavior. This avoids
poor type legalization of bitcast of v1i1 to i1.
I've skipped expandload/compressstore as I think we need to
handle constant masks for those better first.
Many tests end up with duplicate test instructions due to tail
duplication in the branch folding pass. But the same thing
happens when constructing similar code in C. So its not unique
to the scalarization.
Not sure if this lowering code will also be good for other targets,
but we're only testing X86 today.
Differential Revision: https://reviews.llvm.org/D65319
llvm-svn: 367489
Craig Topper [Wed, 31 Jul 2019 22:43:08 +0000 (22:43 +0000)]
[X86] Add DAG combine to fold any_extend_vector_inreg+truncstore to an extractelement+store
We have custom code that ignores the normal promoting type legalization on less than 128-bit vector types like v4i8 to emit pavgb, paddusb, psubusb since we don't have the equivalent instruction on a larger element type like v4i32. If this operation appears before a store, we can be left with an any_extend_vector_inreg followed by a truncstore after type legalization. When truncstore isn't legal, this will normally be decomposed into shuffles and a non-truncating store. This will then combine away the any_extend_vector_inreg and shuffle leaving just the store. On avx512, truncstore is legal so we don't decompose it and we had no combines to fix it.
This patch adds a new DAG combine to detect this case and emit either an extract_store for 64-bit stoers or a extractelement+store for 32 and 16 bit stores. This makes the avx512 codegen match the avx2 codegen for these situations. I'm restricting to only when -x86-experimental-vector-widening-legalization is false. When we're widening we're not likely to create this any_extend_inreg+truncstore combination. This means we should be able to remove this code when we flip the default. I would like to flip the default soon, but I need to investigate some performance regressions its causing in our branch that I wasn't seeing on trunk.
Differential Revision: https://reviews.llvm.org/D65538
llvm-svn: 367488
Philip Reames [Wed, 31 Jul 2019 22:14:26 +0000 (22:14 +0000)]
Attempt to unbreak sphinx build bot by inserting a link.
llvm-svn: 367487
Michael Berg [Wed, 31 Jul 2019 21:57:28 +0000 (21:57 +0000)]
Migrate some more fadd and fsub cases away from UnsafeFPMath control to utilize NoSignedZerosFPMath options control
Summary: Honoring no signed zeroes is also available as a user control through clang separately regardless of fastmath or UnsafeFPMath context, DAG guards should reflect this context.
Reviewers: spatel, arsenm, hfinkel, wristow, craig.topper
Reviewed By: spatel
Subscribers: rampitec, foad, nhaehnle, wuzish, nemanjai, jvesely, wdng, javed.absar, MaskRay, jsji
Differential Revision: https://reviews.llvm.org/D65170
llvm-svn: 367486
Philip Reames [Wed, 31 Jul 2019 21:15:21 +0000 (21:15 +0000)]
[IndVars, RLEV] Support rewriting exit values in loops without known exits (prep work)
This is a prepatory patch for future work on support exit value rewriting in loops with a mixture of computable and non-computable exit counts. The intention is to be "mostly NFC" - i.e. not enable any interesting new transforms - but in practice, there are some small output changes.
The test differences are caused by cases wherewhere getSCEVAtScope can simplify a single entry phi without needing any knowledge of the loop.
llvm-svn: 367485
JF Bastien [Wed, 31 Jul 2019 21:09:53 +0000 (21:09 +0000)]
[NFC] allow creating error strings from a Twine
It's useful when no format needs to happen, only the Twine needs to be put together.
llvm-svn: 367484
Amy Huang [Wed, 31 Jul 2019 21:03:38 +0000 (21:03 +0000)]
Fix to r367374 "[MS] Emit S_HEAPALLOCSITE debug info in Selection DAG"
after windows buildbot failure.
Added a check that the MachineInstr exists and is a call before trying
to add symbols around it.
llvm-svn: 367483
Eric Christopher [Wed, 31 Jul 2019 21:02:03 +0000 (21:02 +0000)]
Fix unused variable warning for non-assert builds.
llvm-svn: 367482
Jonas Devlieghere [Wed, 31 Jul 2019 20:47:44 +0000 (20:47 +0000)]
[GDBRemote] Reflow comments and improve docs.
Improved the GDB client base documentation while I was reading through
it. Looks like it got messed up during the automatic comment reflow a
while ago.
llvm-svn: 367481
Alex Langford [Wed, 31 Jul 2019 20:47:38 +0000 (20:47 +0000)]
[API] Remove use of ClangASTContext from SBTarget
Summary:
The methods to find types in a Target aren't clang specific and are
pretty generalizable to type systems. Additionally, to support some of
the use cases in SBTarget, I've added a "GetScratchTypeSystems" method
to Target to support getting all type systems for a target we are
debugging.
Differential Revision: https://reviews.llvm.org/D64964
llvm-svn: 367480
Michael J. Spencer [Wed, 31 Jul 2019 20:42:28 +0000 (20:42 +0000)]
[clang][ARM] Fix msvc arm{64} builtins to use int on LP64 systems.
The `InterlockedX_{acq,nf,rel}` functions deal with 32 bits which is long on
MSVC, but int on most other systems.
This also checks that `ReadStatusRegister` and `WriteStatusRegister` have
the correct type on aarch64-darwin.
Differential Revision: https://reviews.llvm.org/D64164
llvm-svn: 367479
Puyan Lotfi [Wed, 31 Jul 2019 20:40:08 +0000 (20:40 +0000)]
[NFC][clang] Refactor getCompilationPhases()+Types.def step 3.
Second landing attempt: Changed TY_ObjCXXHeader to TY_PP_ObjCXXHeader to fix
-xobjective-c++-header. This time I verified against
preprocessor output.
Dropping the 'u' entry and the entire Flags table from Types.def.
Now it'll be a bit easier to tablegenify this.
Differential Revision: https://reviews.llvm.org/D65308
llvm-svn: 367478
Mark Lacey [Wed, 31 Jul 2019 20:34:05 +0000 (20:34 +0000)]
[GISel] Address review feedback on passing MD_callees to lowerCall.
Preserve the nullptr default for KnownCallees that appears in
the base class.
llvm-svn: 367477
Mark Lacey [Wed, 31 Jul 2019 20:34:02 +0000 (20:34 +0000)]
[GISel] Pass MD_callees metadata down in call lowering.
Summary:
This will make it possible to improve IPRA by taking into account
register usage in indirect calls.
NFC yet; this is just laying the groundwork to start building
up patches to take advantage of the information for improved register
allocation.
Reviewers: aditya_nandakumar, volkan, qcolombet, arsenm, rovka, aemerson, paquette
Subscribers: sdardis, wdng, javed.absar, hiraditya, jrtc27, atanasyan, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D65488
llvm-svn: 367476
Peter Collingbourne [Wed, 31 Jul 2019 20:14:19 +0000 (20:14 +0000)]
AArch64: Add a tagged-globals backend feature.
This feature instructs the backend to allow locally defined global variable
addresses to contain a pointer tag in bits 56-63 that will be ignored by
the hardware (i.e. TBI), but may be used by an instrumentation pass such
as HWASAN. It works by adding a MOVK instruction to the regular ADRP/ADD
sequence that sets bits 48-63 to the corresponding bits of the global, with
the linker bounds check disabled on the ADRP instruction to prevent the tag
from causing a link failure.
This implementation of the feature omits the MOVK when loading from or storing
to a global, which is sufficient for TBI. If the same approach is extended
to MTE, assuming that 0 is not configured as a catch-all tag, we will most
likely also need the MOVK in this case in order to avoid a tag mismatch.
Differential Revision: https://reviews.llvm.org/D65364
llvm-svn: 367475
Peter Collingbourne [Wed, 31 Jul 2019 20:14:09 +0000 (20:14 +0000)]
SelectionDAG, MI, AArch64: Widen target flags fields/arguments from unsigned char to unsigned.
This makes the field wider than MachineOperand::SubReg_TargetFlags so that
we don't end up silently truncating any higher bits. We should still catch
any bits truncated from the MachineOperand field as a consequence of the
assertion in MachineOperand::setTargetFlags().
Differential Revision: https://reviews.llvm.org/D65465
llvm-svn: 367474
Nico Weber [Wed, 31 Jul 2019 20:12:19 +0000 (20:12 +0000)]
Attempt to heal bots after r367467
llvm-svn: 367473
Wei Mi [Wed, 31 Jul 2019 19:59:24 +0000 (19:59 +0000)]
[DAGCombine] Limit the number of times for the same store and root nodes
to bail out in store merging dependence check.
We run into a case where dependence check in store merging bail out many times
for the same store and root nodes in a huge basicblock. That increases compile
time by almost 100x. The patch add a map to track how many times the bailing
out happen for the same store and root, and if it is over a limit, stop
considering the store with the same root as a merging candidate.
Differential Revision: https://reviews.llvm.org/D65174
llvm-svn: 367472
Nico Weber [Wed, 31 Jul 2019 19:41:02 +0000 (19:41 +0000)]
compiler-rt: Rename .cc file in lib/sanitizer_common/symbolizer to .cpp
llvm-svn: 367471
JF Bastien [Wed, 31 Jul 2019 19:40:07 +0000 (19:40 +0000)]
[Support] Added overflow checking add, sub and mul.
Added AddOverflow, SubOverflow and MulOverflow to compute truncated results and return a flag indicating whether overflow occured.
Differential Revision: https://reviews.llvm.org/D65494
llvm-svn: 367470
Nico Weber [Wed, 31 Jul 2019 19:31:36 +0000 (19:31 +0000)]
Attempt to heal tsan bot after r367463
llvm-svn: 367469
Eric Fiselier [Wed, 31 Jul 2019 19:14:16 +0000 (19:14 +0000)]
[pstl] Fully qualify pstl names.
Previously the code used "using namespace __pstl;" at block
scope to introduce these names. This could cause conflicts with
names defined by the standard library. So we should fully qualify
them instead.
llvm-svn: 367468
Nico Weber [Wed, 31 Jul 2019 19:11:14 +0000 (19:11 +0000)]
compiler-rt: Rename .cc file in lib/sanitizer_common/tests to .cpp
See https://reviews.llvm.org/D58620 for discussion, and for the commands
I ran. In addition I also ran
for f in $(svn diff | diffstat | grep .cc | cut -f 2 -d ' '); do rg $(basename $f) . ; done
and manually updated references to renamed files found by that.
llvm-svn: 367467
Craig Topper [Wed, 31 Jul 2019 19:05:11 +0000 (19:05 +0000)]
[X86] Add test cases to show premature decomposition of vector multiplies into shift+add/sub for types that aren't legal and need to be split. NFC
llvm-svn: 367466
Craig Topper [Wed, 31 Jul 2019 19:05:03 +0000 (19:05 +0000)]
[X86] Add AVX512DQ command lines to vector-mul.ll to show that we use vpmullq instead of shift+add/sub for some cases. NFC
llvm-svn: 367465
Nico Weber [Wed, 31 Jul 2019 18:56:49 +0000 (18:56 +0000)]
gn build: Merge r367463
llvm-svn: 367464
Nico Weber [Wed, 31 Jul 2019 18:51:27 +0000 (18:51 +0000)]
compiler-rt: Rename .cc file in lib/sanitizer_common to .cpp
See https://reviews.llvm.org/D58620 for discussion, and for the commands
I ran. In addition I also ran
for f in $(svn diff | diffstat | grep .cc | cut -f 2 -d ' '); do rg $f . ; done
and manually updated (many) references to renamed files found by that.
llvm-svn: 367463
Nico Weber [Wed, 31 Jul 2019 18:43:27 +0000 (18:43 +0000)]
Attempt to heal bots after r367456
llvm-svn: 367462
Alina Sbirlea [Wed, 31 Jul 2019 18:22:22 +0000 (18:22 +0000)]
[SCCP] Update condition to avoid overflow.
Summary:
Update condition to remove addition that may cause an overflow.
Resolves PR42814.
Reviewers: sanjoy, RKSimon
Subscribers: jlebar, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D65417
llvm-svn: 367461
Nico Weber [Wed, 31 Jul 2019 18:21:08 +0000 (18:21 +0000)]
compiler-rt: Rename .cc file in lib/profile to .cpp
See https://reviews.llvm.org/D58620 for discussion.
Note how the comment in the file already said ".cpp" :)
llvm-svn: 367460
Jonas Devlieghere [Wed, 31 Jul 2019 18:09:26 +0000 (18:09 +0000)]
[CommandCompletions] Remove commented out code.
We use version control here.
llvm-svn: 367459
Lang Hames [Wed, 31 Jul 2019 18:07:37 +0000 (18:07 +0000)]
[docs] Add references to unreferenced footnotes.
Thanks to Stefan Granitz for catching the issue.
llvm-svn: 367458
Nico Weber [Wed, 31 Jul 2019 18:04:03 +0000 (18:04 +0000)]
gn build: Merge r367456
llvm-svn: 367457
Nico Weber [Wed, 31 Jul 2019 18:01:55 +0000 (18:01 +0000)]
compiler-rt: Rename .cc files in lib/interception to .cpp.
See https://reviews.llvm.org/D58620 for discussion, and for the commands
I ran. In addition I also ran
for f in $(svn diff | diffstat | grep .cc | cut -f 2 -d ' '); do rg $f . ; done
and manually updated references to renamed files found by that.
llvm-svn: 367456
Jonas Devlieghere [Wed, 31 Jul 2019 17:58:00 +0000 (17:58 +0000)]
Fix completion for functions in anonymous namespaces
I was going through some of the old bugs and came across PR21069 which I
was able to reproduce. The issue is that we match the regex `^foo`
against the `DW_AT_name` in the DWARF, which for our anonymous function
is indeed `foo`. However, when we get the function name from the symbol
context, the result is `(anonymous namespace)::foo()`. This throws off
completions, which assumes that it's appending to whatever is already
present on the input, resulting in a bogus
`b fooonymous\ namespace)::foo()`.
Bug report: https://llvm.org/PR21069
Differential revision: https://reviews.llvm.org/D65498
llvm-svn: 367455
Nico Weber [Wed, 31 Jul 2019 17:56:45 +0000 (17:56 +0000)]
gn build: Merge r367452 and add standalone sources
llvm-svn: 367454
Sam McCall [Wed, 31 Jul 2019 17:52:40 +0000 (17:52 +0000)]
[clangd] Ignore semicolons, whitespace, and comments in SelectionTree.
Summary:
Whitespace and comments are a clear bugfix: selecting some
comments/space near a statement doesn't mean you're selecting the
surrounding block.
Semicolons are less obvious, but for similar reasons: these tokens
aren't actually claimed by any AST node (usually), so an AST-based model
like SelectionTree shouldn't take them into account.
Callers may still sometimes care about semis of course:
- when the selection is an expr with a non-expr parent, selection of
the semicolon indicates intent to select the statement.
- when a statement with a trailing semi is selected, we need to know
its range to ensure it can be removed.
SelectionTree may or may not play a role here, but these are separate questions
from its core function of describing which AST nodes were selected.
The mechanism here is the TokenBuffer from syntax-trees. We use it in a
fairly low-level way (just to get boundaries of raw spelled tokens). The
actual mapping of AST nodes to coordinates continues to use the (fairly
mature) SourceLocation based logic. TokenBuffer/Syntax trees
don't currently offer an alternative to getFileRange(), I think.
Reviewers: SureYeaah, kadircet
Subscribers: MaskRay, jkorous, arphaman, cfe-commits, ilya-biryukov
Tags: #clang
Differential Revision: https://reviews.llvm.org/D65486
llvm-svn: 367453
Nico Weber [Wed, 31 Jul 2019 17:51:05 +0000 (17:51 +0000)]
compiler-rt: Rename .cc files in lib/ubsan to .cpp.
See https://reviews.llvm.org/D58620 for discussion, and for the commands
I ran. In addition I also ran
for f in $(svn diff | diffstat | grep .cc | cut -f 2 -d ' '); do rg $f . ; done
and manually updated references to renamed files found by that.
llvm-svn: 367452
Alina Sbirlea [Wed, 31 Jul 2019 17:41:04 +0000 (17:41 +0000)]
[MemorySSA] Add additional verification for phis.
Summary:
Verify that the incoming defs into phis are the last defs from the
respective incoming blocks.
When moving blocks, insertDef must RenameUses. Adding this verification
makes GVNHoist tests fail that uncovered this issue.
Reviewers: george.burgess.iv
Subscribers: jlebar, Prazek, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D63147
llvm-svn: 367451
Nico Weber [Wed, 31 Jul 2019 17:15:32 +0000 (17:15 +0000)]
gn build: Add build files for compiler-rt/lib/profile
Differential Revision: https://reviews.llvm.org/D65518
llvm-svn: 367450
Nico Weber [Wed, 31 Jul 2019 17:12:33 +0000 (17:12 +0000)]
gn build: Make builtin library build on macOS
For now, it only builds the x86_64 slice.
Differential Revision: https://reviews.llvm.org/D65513
llvm-svn: 367449
Nico Weber [Wed, 31 Jul 2019 17:08:34 +0000 (17:08 +0000)]
gn build: Fix redundant object files in builtin lib.
compiler-rt's builtin library has generic implementations of many
functions, and then per-arch optimized implementations of some.
In the CMake build, both filter_builtin_sources() and an explicit loop
at the end of the build file (see D37166) filter out the generic
versions if a per-arch file is present.
The GN build wasn't doing this filtering. Just do the filtering manually
and explicitly, instead of being clever.
While here, also remove files from the mingw/arm build that are
redundantly listed after D39938 / r318139 (both from the CMake and the
GN build).
While here, also fix a target_os -> target_cpu typo.
Differential Revision: https://reviews.llvm.org/D65512
llvm-svn: 367448
Sanjay Patel [Wed, 31 Jul 2019 16:53:22 +0000 (16:53 +0000)]
[InstCombine] canonicalize fneg before fmul/fdiv
Reverse the canonicalization of fneg relative to fmul/fdiv. That makes it
easier to implement the transforms (and possibly other fneg transforms) in
1 place because we can always start the pattern match from fneg (either the
legacy binop or the new unop).
There's a secondary practical benefit seen in PR21914 and PR42681:
https://bugs.llvm.org/show_bug.cgi?id=21914
https://bugs.llvm.org/show_bug.cgi?id=42681
...hoisting fneg rather than sinking seems to play nicer with LICM in IR
(although this change may expose analysis holes in the other direction).
1. The instcombine test changes show the expected neutral IR diffs from
reversing the order.
2. The reassociation tests show that we were missing an optimization
opportunity to fold away fneg-of-fneg. My reading of IEEE-754 says
that all of these transforms are allowed (regardless of binop/unop
fneg version) because:
"For all other operations [besides copy/abs/negate/copysign], this
standard does not specify the sign bit of a NaN result."
In all of these transforms, we always have some other binop
(fadd/fsub/fmul/fdiv), so we are free to flip the sign bit of a
potential intermediate NaN operand.
(If that interpretation is wrong, then we must already have a bug in
the existing transforms?)
3. The clang tests shouldn't exist as-is, but that's effectively a
revert of rL367149 (the test broke with an extension of the
pre-existing fneg canonicalization in rL367146).
Differential Revision: https://reviews.llvm.org/D65399
llvm-svn: 367447
Djordje Todorovic [Wed, 31 Jul 2019 16:51:28 +0000 (16:51 +0000)]
Reland "[DwarfDebug] Dump call site debug info"
The build failure found after the rL365467 has been
resolved.
Differential Revision: https://reviews.llvm.org/D60716
llvm-svn: 367446