| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
Split into smaller functions and prepare for handling
non-entry functions.
llvm-svn: 299998
|
| |
|
|
|
|
|
| |
This was producing an illegal reg_sequence defining
a physical register with virtual register inputs.
llvm-svn: 299997
|
| |
|
|
| |
llvm-svn: 299996
|
| |
|
|
|
|
|
| |
Internal linkage preserves names like "__asan_global_foo" which may
account to 2% of unstripped binary size.
llvm-svn: 299995
|
| |
|
|
| |
llvm-svn: 299994
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Fold:
shuffle (splat-shuffle), undef, M --> splat-shuffle
Reviewers: spatel, RKSimon, craig.topper
Reviewed By: RKSimon
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D31527
llvm-svn: 299990
|
| |
|
|
|
|
|
|
|
| |
Check if the scale operand is identical (doesn't have to be 1) and
do not check the chaain operand.
Differential revision: https://reviews.llvm.org/D31833
llvm-svn: 299986
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In the vectorization of first order recurrence, we vectorize such
that the last element in the vector will be the one extracted to pass into the
scalar remainder loop. However, this is not true when there is a phi (other
than the primary induction variable) is used outside the loop.
In such a case, we need the value from the second last iteration (i.e.
the phi value), not the last iteration (which would be the phi update).
I've added a test case for this. Also see PR32396.
A follow up patch would generate the correct code gen for such cases,
and turn this vectorization on.
Differential Revision: https://reviews.llvm.org/D31910
Reviewers: mssimpso
llvm-svn: 299985
|
| |
|
|
|
|
|
|
| |
Analysis, it has Analysis passes, and once NewGVN is made an Analysis,
this removes the cross dependency from Analysis to Transform/Utils.
NFC.
llvm-svn: 299980
|
| |
|
|
|
|
|
|
|
|
|
|
| |
If you run llc -stop-after=codegenprepare and feed the resulting MIR
to llc -start-after=codegenprepare, you'll have an empty machine
function since we haven't run any isel yet. Of course, this only works
if the MIRParser believes you that this is okay.
This is essentially a revert of r241862 with a fix for the problem it
was papering over.
llvm-svn: 299975
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This patch assumes that the dependents to be scanned for the ExitSU are its
predecessors; otherwise, the successors of the instr are scanned.
Furthermore, sometimes the ExitSU was being fused twice, since it may be
fused once when scanning the successors from the beginning of the BB and
then again when scanning the predecessors of ExitSU. Thus, when scanning
the successors of an instr, skip the ExitSU.
llvm-svn: 299974
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D31911
llvm-svn: 299973
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Before this patch, pass AddDiscriminators always avoided to assign
discriminators to intrinsic calls. This was done mainly for two reasons:
1) We wanted to minimize the number of based discriminators used.
2) We wanted to avoid non-deterministic discriminator assignment for
different debug levels.
Unfortunately, that approach was problematic for MemIntrinsic calls.
MemIntrinsic calls can be split by SROA into loads and stores, and each new
load/store instruction would obtain the debug location from the original
intrinsic call.
If we don't assign a discriminator to MemIntrinsic calls, then we cannot
correctly set the discriminator for the newly created loads and stores.
This may have a negative impact on the basic block weight computation
performed by the SampleLoader.
This patch fixes the issue by letting MemIntrinsic calls have a discriminator.
Differential Revision: https://reviews.llvm.org/D31900
llvm-svn: 299972
|
| |
|
|
| |
llvm-svn: 299970
|
| |
|
|
|
|
|
|
| |
Fixes PR32576.
Patch by Jakub Zawadzki.
llvm-svn: 299968
|
| |
|
|
|
|
| |
This removes a TODO in getIdentityValue and may allow some transforms to occur earlier. But I was unable to find any transforms we didn't already handle.
llvm-svn: 299966
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D31589
llvm-svn: 299964
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This lets PDB readers lookup type record data by type index in O(log n)
time. It also enables makes `cvdump -t` work on PDBs produced by LLD.
cvdump will not dump a PDB that doesn't have an index-to-offset table.
The table is sorted by type index, and has an entry every 8KB. Looking
up a type record by index is a binary search of this table, followed by
a scan of at most 8KB.
Reviewers: ruiu, zturner, inglorion
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D31636
llvm-svn: 299958
|
| |
|
|
|
|
| |
This is a candidate culprit for multiple bot fails, so reverting pending investigation.
llvm-svn: 299955
|
| |
|
|
|
|
|
|
|
|
|
| |
templates.
From a user prospective, it forces the use of an annoying nullptr to mark the end of the vararg, and there's not type checking on the arguments.
The variadic template is an obvious solution to both issues.
Differential Revision: https://reviews.llvm.org/D31070
llvm-svn: 299949
|
| |
|
|
|
|
| |
files. NFC.
llvm-svn: 299947
|
| |
|
|
|
|
|
|
| |
https://reviews.llvm.org/D31875
Patch by Leslie Zhai!
llvm-svn: 299946
|
| |
|
|
|
|
|
|
|
| |
Refactor the USAT, SSAT, USAT16 and SSAT16 instruction descriptions
for Thumb2.
Differential Revision: https://reviews.llvm.org/D31933
llvm-svn: 299945
|
| |
|
|
|
|
| |
Turn GVNHoist back on by default now that PR32153 has been fixed.
llvm-svn: 299944
|
| |
|
|
| |
llvm-svn: 299939
|
| |
|
|
| |
llvm-svn: 299938
|
| |
|
|
| |
llvm-svn: 299937
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
In rL299692 I improved strip-dead-debug-info's ability to drop CUs that are not
referenced from the current module. However, in doing so I neglected to realize
that some SPs could be referenced entirely from inlined functions. It appears
I was not the only one to make this mistake, because DebugInfoFinder, doesn't
find those SPs either. Fix this in DebugInfoFinder and then use that to make
sure not to drop those CUs in strip-dead-debug-info.
Reviewers: aprantl
Reviewed By: aprantl
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D31904
llvm-svn: 299936
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D31899
llvm-svn: 299932
|
| |
|
|
|
|
|
|
|
| |
Use the same handling in the generic legalizer code as for the other
libcalls (G_FREM, G_FPOW).
Enable it on ARM for float and double so we can test it.
llvm-svn: 299931
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary: Legalize only if the type is marked as Legal or Custom. If not, return Unsupported as LegalizerHelper is not able to handle non-power-of-2 types right now.
Reviewers: qcolombet, aditya_nandakumar, dsanders, t.p.northover, kristof.beyls, javed.absar, ab
Reviewed By: kristof.beyls, ab
Subscribers: dberris, rovka, igorb, llvm-commits
Differential Revision: https://reviews.llvm.org/D31711
llvm-svn: 299929
|
| |
|
|
|
|
|
| |
This reverts commit r299925 because it broke the buildbots. See e.g.
http://lab.llvm.org:8011/builders/clang-cmake-armv7-a15/builds/6008
llvm-svn: 299928
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A fix for the bug reported in PR30911.
The issue arises when multiple CALLSEQ_BEGIN nodes are unscheduled as
the last node to be unscheduled will gain access to the CallResource
register. But when a node is being picked, only CALLSEQ_END nodes are
checked against the CallResource and have their chains evaluated.
This then means that other CALLSEQ_BEGIN nodes can be scheduled
before the existing call sequence has been finalised. This patch adds
a check against the FrameSetup nodes in DelayForLiveRegs to prevent
this from happening.
Differential Revision: https://reviews.llvm.org/D31536
llvm-svn: 299926
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Module::getOrInsertFunction is using C-style vararg instead of
variadic templates.
From a user prospective, it forces the use of an annoying nullptr
to mark the end of the vararg, and there's not type checking on the
arguments. The variadic template is an obvious solution to both
issues.
llvm-svn: 299925
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Summary: Fix coverity cid 1374240
Reviewers: dberlin
Reviewed By: dberlin
Differential Revision: https://reviews.llvm.org/D31928
llvm-svn: 299924
|
| |
|
|
| |
llvm-svn: 299918
|
| |
|
|
|
|
| |
if all the elements are Undef or ConstantInt.
llvm-svn: 299917
|
| |
|
|
| |
llvm-svn: 299915
|
| |
|
|
|
|
|
|
|
|
|
| |
When allowed, we can hoist a division out of a loop in favor of a
multiplication by the reciprocal. Fixes PR32157.
Patch by vit9696!
Differential Revision: https://reviews.llvm.org/D30819
llvm-svn: 299911
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Check the legality of ISD::[US]MULO to see whether
Intrinsic::[us]mul_with_overflow will legalize into a function call (and, thus,
will use the CTR register). Fixes PR32485.
Patch by Tim Neumann!
Differential Revision: https://reviews.llvm.org/D31790
llvm-svn: 299910
|
| |
|
|
| |
llvm-svn: 299906
|
| |
|
|
|
|
|
|
|
|
| |
have >1 value."
It's not ready yet this was an accidental commit :(
This reverts r299903
llvm-svn: 299904
|
| |
|
|
|
|
|
|
| |
value.
Fixes PR 32607.
llvm-svn: 299903
|
| |
|
|
|
|
|
|
|
|
|
| |
The getter was equivalent to AttributeList::getAttributes(unsigned),
which seems like a better way to express getting the AttributeSet for a
given index. This static helper was only used in one place anyway.
The constructor doesn't benefit from inlining and doesn't need to be in
a header.
llvm-svn: 299900
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This re-lands r299875.
I introduced a bug in Clang code responsible for replacing K&R, no
prototype declarations with a real function definition with a prototype.
The bug was here:
// Collect any return attributes from the call.
- if (oldAttrs.hasAttributes(llvm::AttributeList::ReturnIndex))
- newAttrs.push_back(llvm::AttributeList::get(newFn->getContext(),
- oldAttrs.getRetAttributes()));
+ newAttrs.push_back(oldAttrs.getRetAttributes());
Previously getRetAttributes() carried AttributeList::ReturnIndex in its
AttributeList. Now that we return the AttributeSetNode* directly, it no
longer carries that index, and we call this overload with a single node:
AttributeList::get(LLVMContext&, ArrayRef<AttributeSetNode*>)
That aborted with an assertion on x86_32 targets. I added an explicit
triple to the test and added CHECKs to help find issues like this in the
future sooner.
llvm-svn: 299899
|
| |
|
|
|
|
|
| |
This Placates GCC7 with -Werror. Also, clang-format the assertions
while I'm here.
llvm-svn: 299895
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D31818
llvm-svn: 299893
|
| |
|
|
|
|
|
|
|
|
| |
The math works out where it can actually be counter-productive. The probability
calculations correctly handle the case where the alternative is 0 probability,
rely on those calculations.
Includes a test case that demonstrates the problem.
llvm-svn: 299892
|
| |
|
|
|
|
|
| |
Qin may be large, and Succ may be more frequent than BB. Take these both into
account when deciding if tail-duplication is profitable.
llvm-svn: 299891
|
| |
|
|
|
|
|
|
| |
Merging identical blocks when it doesn't reduce fallthrough. It is common for
the blocks created from critical edge splitting to be identical. We would like
to merge these blocks whenever doing so would not reduce fallthrough.
llvm-svn: 299890
|