| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
| |
NewGVN can be tested passing `-mllvm -enable-newgvn` to clang.
Differential Revision: https://reviews.llvm.org/D28059
llvm-svn: 290548
|
| |
|
|
| |
llvm-svn: 290543
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D28110
llvm-svn: 290542
|
| |
|
|
| |
llvm-svn: 290536
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
rounding intrinsics into normal IR operations if the rounding mode is CUR_DIRECTION.
Summary:
I only do this for unmasked cases for now because isel is failing to fold the mask. I'll try to fix that soon.
I'll do the same thing for packed add/sub/mul/div in a future patch.
Reviewers: delena, RKSimon, zvi, craig.topper
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D27879
llvm-svn: 290535
|
| |
|
|
|
|
|
|
| |
constant. While clang will guarantee this, nothing in the backend will.
A non-constant value will now result in an isel error instead of just asserting or crashing due to a bad cast during lowering.
llvm-svn: 290532
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
intrinsics into shufflevector instructions
Summary:
This patch adds support for converting the masked vpermv intrinsics into shufflevector instructions if the indices are constants.
We also need to wrap a select instruction around the shuffle to take care of the masking part. InstCombine will take care of optimizing the select if the mask is constant so I didn't bother checking for that.
Reviewers: zvi, delena, spatel, RKSimon
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D27825
llvm-svn: 290530
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D26661
llvm-svn: 290527
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D27034
llvm-svn: 290526
|
| |
|
|
|
|
|
|
|
|
|
|
| |
are equivalent (IE store of same value to memory).
Reviewers: davide
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28084
llvm-svn: 290525
|
| |
|
|
|
|
| |
of LLVM
llvm-svn: 290524
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
multiple asynchronous RPC calls.
ParallelCallGroup allows multiple asynchronous calls to be dispatched,
and provides a wait method that blocks until all asynchronous calls have
been executed on the remote and all return value handlers run on the
local machine.
This will allow, for example, the JIT client to issue memory allocation calls
for all sections in parallel, then block until all memory has been allocated
on the remote and the allocated addresses registered with the client, at which
point the JIT client can proceed to applying relocations.
llvm-svn: 290523
|
| |
|
|
| |
llvm-svn: 290517
|
| |
|
|
| |
llvm-svn: 290516
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D27642
llvm-svn: 290514
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
UnresolvedNodes with a set-based solution (NFC)
This makes it explicit what is the exact list to handle, and it
looks much more easy to manipulate and understand that the
previous custom tracking of min/max to express the range where
to look for.
Differential Revision: https://reviews.llvm.org/D28089
llvm-svn: 290507
|
| |
|
|
|
|
| |
We don't expect any forward reference at this point.
llvm-svn: 290506
|
| |
|
|
| |
llvm-svn: 290499
|
| |
|
|
|
|
|
|
| |
common bits.
Avoid extra (recursive) calls to computeKnownBits if we already know that there are no common known bits.
llvm-svn: 290490
|
| |
|
|
|
|
|
|
| |
clear.
Based on post-commit review suggestion from Sean. (Thanks!)
llvm-svn: 290488
|
| |
|
|
| |
llvm-svn: 290468
|
| |
|
|
| |
llvm-svn: 290467
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
whether functions are removed, and fix the new PM's always inliner to
actually pass this test.
Without this, the new PM's always inliner leaves all the functions
kicking around which won't work out very well given the semantics of
always inline.
Doing this really highlights how frustrating the current alwaysinline
semantic contract is though -- why can we put it on *external*
functions, etc?
Also I've added a number of tricky and interesting test cases for
removing functions with the always inliner. There is one remaining case
not handled -- fully removing comdats -- and I've left a FIXME about
this.
llvm-svn: 290457
|
| |
|
|
|
|
|
|
|
| |
Pretty boring and lame as-is but necessary. This is definitely a place
we'll end up with extension hooks longer term. =]
Differential Revision: https://reviews.llvm.org/D28076
llvm-svn: 290449
|
| |
|
|
|
|
| |
TypeUniquing generates invalid debug info.
llvm-svn: 290442
|
| |
|
|
| |
llvm-svn: 290438
|
| |
|
|
| |
llvm-svn: 290437
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D27989
llvm-svn: 290435
|
| |
|
|
| |
llvm-svn: 290433
|
| |
|
|
| |
llvm-svn: 290428
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The pass creates some state which expects to be cleaned up by
a later instance of the same pass. opt-bisect happens to expose
this not ideal design because calling skipLoop() will result in
this state not being cleaned up at times and an assertion firing
in `doFinalization()`. Chandler tells me the new pass manager will
give us options to avoid these design traps, but until it's not ready,
we need a workaround for the current pass infrastructure. Fix provided
by Andy Kaylor, see the review for a complete discussion.
Differential Revision: https://reviews.llvm.org/D25848
llvm-svn: 290427
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
According to the Cortex-A57 doc, FDIV/FSQRT instructions should use F0 unit
(W-unit in AArch64SchedA57.td, the same as cryptography instructions),
not F1 unit (X-unit in td, like ASIMD absolute diff accum SABA/UABA).
This patch changes FDIV/FSQRT scheduling declarations to use A57UnitW
instead of A57UnitX. Also, latencies for those instructions are
corrected.
Patch by Andrew Zhogin.
llvm-svn: 290426
|
| |
|
|
| |
llvm-svn: 290425
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
In mergeSPUpdates, debug values need to be ignored when getting the
previous element, otherwise debug data could have an impact on codegen.
In eliminateCallFramePseudoInstr, debug values after the erased element
could have an impact on codegen and should be skipped.
Closes PR31319 (https://llvm.org/bugs/show_bug.cgi?id=31319)
Reviewers: mkuper, MatzeB, aprantl
Subscribers: gbedwell, llvm-commits
Differential Revision: https://reviews.llvm.org/D27688
llvm-svn: 290423
|
| |
|
|
| |
llvm-svn: 290420
|
| |
|
|
|
|
| |
assertions are enabled (NFC)
llvm-svn: 290416
|
| |
|
|
|
|
|
|
|
| |
its own function (NFC)
This is pure code motion, will just make it more reusable when I'll
attempt to lazy-load Metadats on-demand.
llvm-svn: 290414
|
| |
|
|
|
|
| |
These will be used to guide the binary encoding of these immediates.
llvm-svn: 290412
|
| |
|
|
|
|
|
|
|
|
|
| |
1.Fix pessimized case in FIXME.
2.Add tests for it.
3.The canonicalisation on shifts results in different sequence for
tests of machine-licm.Correct some check lines.
Differential Revision: https://reviews.llvm.org/D27916
llvm-svn: 290410
|
| |
|
|
|
|
| |
This put the Loader back in a consistent state.
llvm-svn: 290409
|
| |
|
|
|
|
| |
while loading Metadata (NFC)
llvm-svn: 290408
|
| |
|
|
| |
llvm-svn: 290407
|
| |
|
|
|
|
|
|
| |
(NFC)
Keeping all the state together will make it easier to handle.
llvm-svn: 290406
|
| |
|
|
|
|
|
|
| |
find.
Notable is the assert in NewGVN which had no effect because of the bug.
llvm-svn: 290400
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch fixes some ASAN unittest failures on FreeBSD. See the
cfe-commits email thread for r290169 for more on those.
According to the LangRef, the allocsize attribute only tells us about
the number of bytes that exist at the memory location pointed to by the
return value of a function. It does not necessarily mean that the
function will only ever allocate. So, we need to be very careful about
treating functions with allocsize as general allocation functions. This
patch makes us fully conservative in this regard, though I suspect that
we have room to be a bit more aggressive if we want.
This has a FIXME that can be fixed by a relatively straightforward
refactor; I just wanted to keep this patch minimal. If this sticks, I'll
come back and fix it in a few days.
llvm-svn: 290397
|
| |
|
|
|
|
| |
Extract out two large lambdas into top level member functions.
llvm-svn: 290395
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This change rewrites a core component in the ImplicitNullChecks pass for
greater simplicity since the original design was over-complicated for no
good reason. Please review this as essentially a new pass. The change
is almost NFC and I've added a test case for a scenario that this new
code handles that wasn't handled earlier.
The implicit null check pass, at its core, is a code hoisting transform.
It differs from "normal" code transforms in that it speculates
potentially faulting instructions (by design), but a lot of the usual
hazard detection logic (register read-after-write etc.) still applies.
We previously detected hazards by keeping track of registers defined and
used by machine instructions over an instruction range, but that was
unwieldy and did not actually confer any performance benefits. The
intent was to have linear time complexity over the number of machine
instructions considered, but it ended up being N^2 is practice.
This new version is more obviously O(N^2) (with N capped to 8 by
default) in hazard detection. It does not attempt to be clever in
tracking register uses or defs (the previous cleverness here was a
source of bugs).
Once this is checked in, I'll extract out the `IsSuitableMemoryOp` and
`CanHoistLoadInst` lambda into member functions (they're too complicated
to be inline lambdas) and do some other related NFC cleanups.
Reviewers: reames, anna, atrick
Subscribers: mcrosier, llvm-commits
Differential Revision: https://reviews.llvm.org/D27592
llvm-svn: 290394
|
| |
|
|
|
|
| |
I missed those in my previous commit (r290378).
llvm-svn: 290387
|
| |
|
|
|
|
|
|
|
|
| |
This patch adds support for YAML<->DWARF for debug_info sections.
This re-lands r290147, reverted in 290148, re-landed in r290204 after fixing the issue that caused bots to fail (thank you UBSan!), and reverted again in r290209 due to failures on big endian systems.
After adding support for preserving endianness, this should be good now.
llvm-svn: 290386
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Use a dummy private function with inline asm calls instead of module
level asm blocks for CFI jumptables.
The main advantage is that now jumptable codegen can be affected by
the function attributes (like target_cpu on ARM). Module level asm
gets the default subtarget based on the target triple, which is often
not good enough.
This change also uses asm constraints/arguments to reference
jumptable targets and aliases directly. We no longer do asm name
mangling in an IR pass.
Differential Revision: https://reviews.llvm.org/D28012
llvm-svn: 290384
|