Steve King [Tue, 27 Oct 2015 00:14:06 +0000 (00:14 +0000)]
Fix llc crash processing S/UREM for -Oz builds caused by rL250825.
When taking the remainder of a value divided by a constant, visitREM()
attempts to convert the REM to a longer but faster sequence of instructions.
This conversion calls combine() on a speculative DIV instruction. Commit
rL250825 may cause this combine() to return a DIVREM, corrupting nearby nodes.
Flow eventually hits unreachable().
This patch adds a test case and a check to prevent visitREM() from trying
to convert the REM instruction in cases where a DIVREM is possible.
See http://reviews.llvm.org/D14035
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251373
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 26 Oct 2015 23:52:42 +0000 (23:52 +0000)]
add FP logic test cases to show current codegen (PR22428)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251370
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Mon, 26 Oct 2015 23:50:00 +0000 (23:50 +0000)]
[mips][ias] Fold needsExpansion() and expandInstruction() together. NFC.
Summary:
Previously we maintained two separate switch statements that had to be kept in
sync. This patch merges them into a single switch.
Reviewers: vkalintiris
Subscribers: llvm-commits, dsanders
Differential Revision: http://reviews.llvm.org/D14012
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251369
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 26 Oct 2015 23:33:13 +0000 (23:33 +0000)]
Switch ownership of miscellaneous ARM target to myself.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251367
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Mon, 26 Oct 2015 22:54:53 +0000 (22:54 +0000)]
[x86] Make the vselect-minmax test 2x to 3x faster by deleting all the
instructions that aren't relevant for instruction selection of vector
min and max.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251366
91177308-0d34-0410-b5e6-
96231b3b80d8
Oleksiy Vyalov [Mon, 26 Oct 2015 22:37:36 +0000 (22:37 +0000)]
Use Twin instead of std::to_string.
http://reviews.llvm.org/D14095
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251365
91177308-0d34-0410-b5e6-
96231b3b80d8
Ivan Krasin [Mon, 26 Oct 2015 22:35:40 +0000 (22:35 +0000)]
Fix indents. It's a follow up to r251353.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251364
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Samsonov [Mon, 26 Oct 2015 22:34:56 +0000 (22:34 +0000)]
[LLVMSymbolize] Don't use LLVMSymbolizer::Options in ModuleInfo. NFC.
LLVMSymbolizer::Options is mostly used in LLVMSymbolizer class anyway.
Let's keep their usage restricted to that class, especially given that
it's worth to move ModuleInfo to a different header, independent from
the symbolizer class.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251363
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 26 Oct 2015 21:54:14 +0000 (21:54 +0000)]
reorganize logic; NFCI (retry r251349)
This is a preliminary step before adding another optimization
to PerformBITCASTCombine().
..and I really hope it's NFC this time!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251357
91177308-0d34-0410-b5e6-
96231b3b80d8
Ivan Krasin [Mon, 26 Oct 2015 21:36:35 +0000 (21:36 +0000)]
Move imported entities into DwarfCompilationUnit to speed up LTO linking.
Summary:
In particular, this CL speeds up the official Chrome linking with LTO by
1.8x.
See more details in https://crbug.com/542426
Reviewers: dblaikie
Subscribers: jevinskie
Differential Revision: http://reviews.llvm.org/D13918
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251353
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 26 Oct 2015 21:32:53 +0000 (21:32 +0000)]
ARM: make sure VFP loads and stores are properly aligned.
Both VLDRS and VLDRD fault if the memory is not 4 byte aligned, which wasn't
really being checked before, leading to faults at runtime.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251352
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 26 Oct 2015 21:28:02 +0000 (21:28 +0000)]
revert r251349; it included code for a functional change
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251350
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 26 Oct 2015 21:24:09 +0000 (21:24 +0000)]
reorganize logic; NFCI
This is a preliminary step before adding another optimization
to PerformBITCASTCombine().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251349
91177308-0d34-0410-b5e6-
96231b3b80d8
Keno Fischer [Mon, 26 Oct 2015 21:22:58 +0000 (21:22 +0000)]
Initialize BasicAAWrapperPass in it's constructor
Summary: This idiom is used elsewhere in LLVM, but was overlooked here.
Reviewers: chandlerc
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D13628
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251348
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Samsonov [Mon, 26 Oct 2015 21:20:37 +0000 (21:20 +0000)]
Fix build failure on GCC 4.7 (old libstdc++ doesn't have std::map::emplace).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251347
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Mon, 26 Oct 2015 21:10:36 +0000 (21:10 +0000)]
Remove use of std::map<>::emplace which is not supported on some older versions of libstdc++
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251346
91177308-0d34-0410-b5e6-
96231b3b80d8
Diego Novillo [Mon, 26 Oct 2015 20:50:26 +0000 (20:50 +0000)]
Remove unused local variable. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251344
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Mon, 26 Oct 2015 20:49:49 +0000 (20:49 +0000)]
Fix tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251343
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Mon, 26 Oct 2015 20:46:44 +0000 (20:46 +0000)]
ARM/ELF: Restore original (pre-r251322) logic for deciding whether to use GOT.
Unbreaks linking with gold, which cannot resolve direct relocations referring
to global symbols.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251342
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Samsonov [Mon, 26 Oct 2015 20:12:29 +0000 (20:12 +0000)]
[LLVMSymbolize] Use symbol table only if function linkage name was requested.
Now it's enough to just specify -functions=short without additionally
providing -use-symbol-table=false.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251339
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Samsonov [Mon, 26 Oct 2015 20:12:27 +0000 (20:12 +0000)]
Fix build error by fully qualifying llvm::make_unique.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251338
91177308-0d34-0410-b5e6-
96231b3b80d8
Rui Ueyama [Mon, 26 Oct 2015 19:58:29 +0000 (19:58 +0000)]
Optimize StringTableBuilder.
This is a patch to improve StringTableBuilder's performance. That class'
finalize function is very hot particularly in LLD because the function
does tail-merge strings in string tables or SHF_MERGE sections.
Generic std::sort-style sorter is not efficient for sorting strings.
The function implemented in this patch seems to be more efficient.
Here's a benchmark of LLD to link Clang with or without this patch.
The numbers are medians of 50 runs.
-O0
real 0m0.455s
real 0m0.430s (5.5% faster)
-O3
real 0m0.487s
real 0m0.452s (7.2% faster)
Since that is a benchmark of the whole linker, the speedup of
StringTableBuilder itself is much more than that.
http://reviews.llvm.org/D14053
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251337
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Samsonov [Mon, 26 Oct 2015 19:41:23 +0000 (19:41 +0000)]
[LLVMSymbolize] Use std::unique_ptr more extensively to clarify ownership.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251336
91177308-0d34-0410-b5e6-
96231b3b80d8
Igor Laevsky [Mon, 26 Oct 2015 19:06:01 +0000 (19:06 +0000)]
[RS4GC] Strip noalias attribute after statepoint rewrite
We should remove noalias along with dereference and dereference_or_null attributes
because statepoint could potentially touch the entire heap including noalias objects.
Differential Revision: http://reviews.llvm.org/D14032
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251333
91177308-0d34-0410-b5e6-
96231b3b80d8
Diego Novillo [Mon, 26 Oct 2015 18:52:53 +0000 (18:52 +0000)]
SamplePGO - Add optimization reports.
This adds a couple of optimization remarks to the SamplePGO
transformation. When it decides to inline a hot function (to mimic the
inline stack and repeat useful inline decisions in the original build).
It will also report branch destinations. For instance, given the code
fragment:
6 if (i < 1000)
7 sum -= i;
8 else
9 sum += -i * rand();
If the 'else' branch is taken most of the time, building this code with
-Rpass=sample-profile will produce:
a.cc:9:14: remark: most popular destination for conditional branches at small.cc:6:9 [-Rpass=sample-profile]
sum += -i * rand();
^
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251330
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Mon, 26 Oct 2015 18:41:13 +0000 (18:41 +0000)]
Remove assert(false) in favor of asserting the if conditional it is contained within.
Also adjust the code to avoid 3 redundant map lookups.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251327
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Mon, 26 Oct 2015 18:40:56 +0000 (18:40 +0000)]
Move the canonical header to the top of its matching cpp file as per coding convention
This ensures that the header will be verified to be standalone (and
avoid mistakes like the one fixed in r251178)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251326
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Mon, 26 Oct 2015 18:37:00 +0000 (18:37 +0000)]
Add an (optional) identification block in the bitcode
Processing bitcode from a different LLVM version can lead to
unexpected behavior. The LLVM project guarantees autoupdating
bitcode from a previous minor revision for the same major, but
can't make any promise when reading bitcode generated from a
either a non-released LLVM, a vendor toolchain, or a "future"
LLVM release. This patch aims at being more user-friendly and
allows a bitcode produce to emit an optional block at the
beginning of the bitcode that will contains an opaque string
intended to describe the bitcode producer information. The
bitcode reader will dump this information alongside any error it
reports.
The optional block also includes an "epoch" number, monotonically
increasing when incompatible changes are made to the bitcode. The
reader will reject bitcode whose epoch is different from the one
expected.
Differential Revision: http://reviews.llvm.org/D13666
From: Mehdi Amini <mehdi.amini@apple.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251325
91177308-0d34-0410-b5e6-
96231b3b80d8
Evgeniy Stepanov [Mon, 26 Oct 2015 18:28:25 +0000 (18:28 +0000)]
[safestack] Fast access to the unsafe stack pointer on AArch64/Android.
Android libc provides a fixed TLS slot for the unsafe stack pointer,
and this change implements direct access to that slot on AArch64 via
__builtin_thread_pointer() + offset.
This change also moves more code into TargetLowering and its
target-specific subclasses to get rid of target-specific codegen
in SafeStackPass.
This change does not touch the ARM backend because ARM lowers
builting_thread_pointer as aeabi_read_tp, which is not available
on Android.
The previous iteration of this change was reverted in r250461. This
version leaves the generic, compiler-rt based implementation in
SafeStack.cpp instead of moving it to TargetLoweringBase in order to
allow testing without a TargetMachine.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251324
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Mon, 26 Oct 2015 18:23:21 +0000 (18:23 +0000)]
BitstreamWriter: Fix integer overflow.
We were previously overflowing a 32-bit multiply operation when emitting large
(>512MB) bitcode files, resulting in corrupted bitcode. Fix by extending
one of the operands to 64 bits.
There are a few other 32-bit integer types in this code that seem like they
also ought to be extended to 64 bits; this will be done separately.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251323
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Mon, 26 Oct 2015 18:23:16 +0000 (18:23 +0000)]
ARM/ELF: Better codegen for global variable addresses.
In PIC mode we were previously computing global variable addresses (or GOT
entry addresses) by adding the PC, the PC-relative GOT displacement and
the GOT-relative symbol/GOT entry displacement. Because the latter two
displacements are fixed, we ended up performing one more addition than
necessary.
This change causes us to compute addresses using a single PC-relative
displacement, resulting in a shorter code sequence. This reduces code size
by about 4% in a recent build of Chromium for Android.
As a result of this change we no longer need to compute the GOT base address
in the ARM backend, which allows us to remove the Global Base Reg pass and
SDAG lowering for the GOT.
We also now no longer use the GOT when addressing a symbol which is known
to be defined in the same linkage unit. Specifically, the symbol must have
either hidden visibility or a strong definition in the current module in
order to not use the the GOT.
This is a change from the previous behaviour where we would use the GOT to
address externally visible symbols defined in the same module. I think the
only cases where this could matter are cases involving symbol interposition,
but we don't really support that well anyway.
Differential Revision: http://reviews.llvm.org/D13650
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251322
91177308-0d34-0410-b5e6-
96231b3b80d8
Diego Novillo [Mon, 26 Oct 2015 18:14:44 +0000 (18:14 +0000)]
Cleanup test case debug info. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251320
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Samsonov [Mon, 26 Oct 2015 18:06:40 +0000 (18:06 +0000)]
Refactor: Simplify boolean conditional return statements in lib/Transforms/Instrumentation
Summary: Use clang-tidy to simplify boolean conditional return statements.
Differential Revision: http://reviews.llvm.org/D9996
Patch by Richard (legalize@xmission.com)!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251318
91177308-0d34-0410-b5e6-
96231b3b80d8
Cong Hou [Mon, 26 Oct 2015 18:00:17 +0000 (18:00 +0000)]
Check the case that the numerator and denominator are both zeros when getting edge probabilities in BPI and return 100% in this case.
This issue is triggered in PGO mode when bootstrapping LLVM. It seems that it is not guaranteed that edge weights are always greater than zero which are read from profile data.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251317
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Samsonov [Mon, 26 Oct 2015 17:56:12 +0000 (17:56 +0000)]
Move parts of llvm-symbolizer tool into LLVMSymbolize library.
Summary: See http://lists.llvm.org/pipermail/llvm-dev/2015-October/091624.html
Reviewers: echristo
Subscribers: llvm-commits, aizatsky
Differential Revision: http://reviews.llvm.org/D13998
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251316
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Mon, 26 Oct 2015 15:03:49 +0000 (15:03 +0000)]
[SystemZ] LTGFR use regclass should be GR32, not GR64.
Discovered by testing int-cmp-44.ll with -verify-machineinstrs (added to
test run).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251299
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Mon, 26 Oct 2015 15:03:41 +0000 (15:03 +0000)]
[SystemZ] Also clear kill flag for index reg in splitMove().
Discovered by running fp-move-05.ll with -verify-machineinstrs (added
to test case run).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251298
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Mon, 26 Oct 2015 15:03:32 +0000 (15:03 +0000)]
[SystemZ] Don't forget the CC def op on LTEBRCompare pseudos
Discovered by running fp-cmp-02.ll with -verify-machineinstrs (now added
to test run).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251297
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Mon, 26 Oct 2015 15:03:07 +0000 (15:03 +0000)]
[SystemZ] Tie operands in SystemZShorteInst if MI becomes 2-address.
Discovered by testing fp-add-02.ll with -verify-machineinstrs.
Test case updated to always run with -verify-machineinstrs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251296
91177308-0d34-0410-b5e6-
96231b3b80d8
Vasileios Kalintiris [Mon, 26 Oct 2015 14:24:30 +0000 (14:24 +0000)]
[mips] Check for the correct error message in tests for interrupt attributes.
Instead of XFAIL-ing the tests with the wrong usage of the "interrupt"
attribute, we should check that we emit the correct error messages to
the user.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251295
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Mon, 26 Oct 2015 14:10:46 +0000 (14:10 +0000)]
[ValueTracking] Extend r251146 to catch a fairly common case
Even though we may not know the value of the shifter operand, it's possible we know the shifter operand is non-zero. This can allow us to infer more known bits - for example:
%1 = load %p !range {1, 5}
%2 = shl %q, %1
We don't know %1, but we do know that it is nonzero so %2[0] is known zero, and importantly %2 is known non-zero.
Calling isKnownNonZero is nontrivially expensive so use an Optional to run it lazily and cache its result.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251294
91177308-0d34-0410-b5e6-
96231b3b80d8
Silviu Baranga [Mon, 26 Oct 2015 13:50:06 +0000 (13:50 +0000)]
[SCEV] Fix issues found during the review of r251283. NFC.
Summary:
Replace (const SCEVAddRecExpr *) with cast<SCEVAddRecExpr>.
Rename SCEVApplyRewriter to SCEVLoopAddRecRewriter (which is a more
appropriate name) since the description is "takes a scalar evolution
expression and applies the Map (Loop -> SCEV) to all AddRecExprs."
Subscribers: llvm-commits, sanjoy
Differential Revision: http://reviews.llvm.org/D14065
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251292
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Mon, 26 Oct 2015 13:42:41 +0000 (13:42 +0000)]
Loop Vectorizer - skipping "bitcast" before GEP
Vectorization of memory instruction (Load/Store) is possible when the pointer is coming from GEP. The GEP analysis allows to estimate the profit.
In some cases we have a "bitcast" between GEP and memory instruction.
I added code that skips the "bitcast".
http://reviews.llvm.org/D13886
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251291
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 26 Oct 2015 13:40:03 +0000 (13:40 +0000)]
Tests: be slightly more specific to avoid conflict with path.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251290
91177308-0d34-0410-b5e6-
96231b3b80d8
Igor Breger [Mon, 26 Oct 2015 13:31:41 +0000 (13:31 +0000)]
fix test errors (on windows) for commit r251287
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251288
91177308-0d34-0410-b5e6-
96231b3b80d8
Igor Breger [Mon, 26 Oct 2015 13:01:02 +0000 (13:01 +0000)]
AVX512: Enabled VPBROADCASTB lowering for v64i8 vectors.
Differential Revision: http://reviews.llvm.org/D13896
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251287
91177308-0d34-0410-b5e6-
96231b3b80d8
Vasileios Kalintiris [Mon, 26 Oct 2015 12:38:43 +0000 (12:38 +0000)]
[mips] Interrupt attribute support for mips32r2+.
Summary:
This patch adds support for using the "interrupt" attribute on Mips
for interrupt handling functions. At this time only mips32r2+ with the
o32 ABI with the static relocation model is supported. Unsupported
configurations will be rejected
Patch by Simon Dardis (+ clang-format & some trivial changes to follow the
LLVM coding standards by me).
Reviewers: mpf, dsanders
Subscribers: dsanders, vkalintiris, llvm-commits
Differential Revision: http://reviews.llvm.org/D10768
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251286
91177308-0d34-0410-b5e6-
96231b3b80d8
Igor Breger [Mon, 26 Oct 2015 12:26:34 +0000 (12:26 +0000)]
AVX-512: Use correct extract vector length.
Bug https://llvm.org/bugs/show_bug.cgi?id=25318
Differential Revision: http://reviews.llvm.org/D14062
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251285
91177308-0d34-0410-b5e6-
96231b3b80d8
Silviu Baranga [Mon, 26 Oct 2015 11:18:31 +0000 (11:18 +0000)]
[SCEV] Factor out common visiting patterns for SCEV rewriters. NFC.
Summary:
Add a SCEVRewriteVisitor class which contains the common
visiting patterns used when rewriting SCEVs.
SCEVParameterRewriter and SCEVApplyRewriter now inherit
from SCEVRewriteVisitor (and are therefore much simpler).
Reviewers: anemet, mzolotukhin, sanjoy
Subscribers: rengolin, llvm-commits, sanjoy
Differential Revision: http://reviews.llvm.org/D13242
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251283
91177308-0d34-0410-b5e6-
96231b3b80d8
Silviu Baranga [Mon, 26 Oct 2015 10:25:05 +0000 (10:25 +0000)]
[InstCombine] Teach instcombine not to create extra PHI nodes when folding GEPs
Summary:
InstCombine tries to transform GEP(PHI(GEP1, GEP2, ..)) into GEP(GEP(PHI(...))
when possible. However, this may leave the old PHI node around. Even if we
do end up folding the GEPs, having an extra PHI node might not be beneficial.
This change makes the transformation more conservative. We now only do this if
the PHI has only one use, and can therefore be removed after the transformation.
Reviewers: jmolloy, majnemer
Subscribers: mcrosier, mssimpso, llvm-commits
Differential Revision: http://reviews.llvm.org/D13887
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251281
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Mon, 26 Oct 2015 10:04:52 +0000 (10:04 +0000)]
[ARM] Handle the inline asm constraint type 'o'
This means "memory with offset" and requires very little plumbing to get working. This fixes PR25317.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251280
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 26 Oct 2015 09:55:45 +0000 (09:55 +0000)]
Drop code after unreachable. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251278
91177308-0d34-0410-b5e6-
96231b3b80d8
Igor Breger [Mon, 26 Oct 2015 08:37:12 +0000 (08:37 +0000)]
AVX512: Add AVX-512 not materializable instructions.
Otherwise value can be reused , despite its value could be changed - produces incorrect assembler.
https://llvm.org/bugs/show_bug.cgi?id=25270
Differential Revision: http://reviews.llvm.org/D14057
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251275
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Mon, 26 Oct 2015 06:40:28 +0000 (06:40 +0000)]
[Orc] Add license header to OrcTargetSupport.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251274
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Mon, 26 Oct 2015 06:37:04 +0000 (06:37 +0000)]
[Orc] In the CompileOnDemand layer, wrap module ownership in order to preserve
the module pointer type passed in by the user.
The previous ownership scheme, where the user pointer was always moved into a
std::shared_ptr, breaks if the user passes in a raw pointer.
Discovered while working on the Orc C API, which should be landing shortly.
I expect to include a test-case with that.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251273
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Mon, 26 Oct 2015 03:34:29 +0000 (03:34 +0000)]
Update test to take into account for r251271.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251272
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Mon, 26 Oct 2015 03:15:34 +0000 (03:15 +0000)]
[MC] Add support for GNU as-compatible binary operator precedence
GNU as and Darwin give the various binary operators different
precedence. LLVM's MC supported the Darwin semantics but not the GNU
semantics.
This fixes PR25311.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251271
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Mon, 26 Oct 2015 02:45:50 +0000 (02:45 +0000)]
[MC] Don't crash when .word is given bogus values
We didn't validate that the .word directive was given a sane value,
leading to crashes when we attempt to write out the object file.
Instead, perform some validation and issue a diagnostic pointing at the
start of the diagnostic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251270
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Sun, 25 Oct 2015 22:55:59 +0000 (22:55 +0000)]
RegionInfo: Correctly expand regions
Instead of playing around with dominance to verify if the possible expansion of
a scop region is indeed a single entry single exit region, we now distinguish
two cases. In case we only append a basic block, all edges entering this basic
block need to have come from within the region that is expanded. In case we join
two regions, the source basic blocks of the edges that end at the entry node of
the region that is appended most be part of either the original region or the
region that is appended.
This change will be tested through Polly.
This fixes llvm.org/PR25242
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251267
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sun, 25 Oct 2015 22:28:27 +0000 (22:28 +0000)]
Convert assert(false) into llvm_unreachable where it makes sense.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251266
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 25 Oct 2015 21:47:09 +0000 (21:47 +0000)]
[X86][AVX] Regenerate tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251263
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sun, 25 Oct 2015 20:39:35 +0000 (20:39 +0000)]
docs: document `x` mangling in LangRef
Windows has two different mangling specifiers. `x` is used on x86 for the `_`
UserLabelPrefix. Others use `w` for the no UserLabelPrefix.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251260
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Sun, 25 Oct 2015 20:00:49 +0000 (20:00 +0000)]
[ScalarEvolution] Throw away dead code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251256
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Sun, 25 Oct 2015 19:55:24 +0000 (19:55 +0000)]
[ScalarEvolution] Get rid of NDEBUG in header (correctly this time).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251255
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Sun, 25 Oct 2015 19:27:17 +0000 (19:27 +0000)]
[LCSSA] Unbreak build, don't reuse L; NFC
The build broke in r251248.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251251
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Sun, 25 Oct 2015 19:13:36 +0000 (19:13 +0000)]
[ScalarEvolution] Get rid of NDEBUG in header.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251249
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Sun, 25 Oct 2015 19:08:32 +0000 (19:08 +0000)]
[LCSSA] Use range for loops; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251248
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 25 Oct 2015 17:40:54 +0000 (17:40 +0000)]
[X86][SSE4A] Fix for EXTRQI shuffle lowering.
Incorrect range test - found during fuzz testing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251245
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 25 Oct 2015 15:39:22 +0000 (15:39 +0000)]
[X86][SSE] Refreshed tests (missing AVX512 patterns)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251238
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Sun, 25 Oct 2015 15:37:55 +0000 (15:37 +0000)]
Scalarizer for masked.gather and masked.scatter intrinsics.
When the target does not support these intrinsics they should be converted to a chain of scalar load or store operations.
If the mask is not constant, the scalarizer will build a chain of conditional basic blocks.
I added isLegalMaskedGather() isLegalMaskedScatter() APIs.
Differential Revision: http://reviews.llvm.org/D13722
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251237
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 25 Oct 2015 15:32:04 +0000 (15:32 +0000)]
[X86][SSE] Added tests for shuffling through bitcasts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251236
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 25 Oct 2015 12:15:00 +0000 (12:15 +0000)]
[X86][SSE] vector sext/zext tests - remove unnecessary mcpu arguments
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251233
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 25 Oct 2015 12:07:45 +0000 (12:07 +0000)]
[X86][SSE] shift/rotate tests - remove unnecessary mcpu arguments and regenerate/cleanup
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251232
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 25 Oct 2015 11:55:10 +0000 (11:55 +0000)]
[X86] PMOV*X* tests - remove unnecessary mcpu arguments and regenerate
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251230
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 25 Oct 2015 11:42:46 +0000 (11:42 +0000)]
[X86] Stack folding tests - just use mtriple - no need for mcpu in these tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251229
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Sun, 25 Oct 2015 08:14:05 +0000 (08:14 +0000)]
[X86] Use correct calling convention for MCU psABI libcalls
When using the MCU psABI, compiler-generated library calls should pass
some parameters in-register. However, since inreg marking for x86 is currently
done by the front end, it will not be applied to backend-generated calls.
This is a workaround for PR3997, which describes a similar issue for -mregparm.
Differential Revision: http://reviews.llvm.org/D13977
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251223
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Sun, 25 Oct 2015 08:07:37 +0000 (08:07 +0000)]
[X86] Add support for elfiamcu triple
This adds support for the i?86-*-elfiamcu triple, which indicates the IAMCU psABI is used.
Differential Revision: http://reviews.llvm.org/D13977
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251222
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 25 Oct 2015 03:15:29 +0000 (03:15 +0000)]
Remove two unnecessary conversions from MVT to EVT. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251219
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 25 Oct 2015 00:27:14 +0000 (00:27 +0000)]
Use MVT::SimpleValueType instead of MVT in template parameter. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251217
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sat, 24 Oct 2015 23:23:25 +0000 (23:23 +0000)]
Simplify boolean conditional return statements in tools/llvm-symbolizer.
Patch by Richard.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251216
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sat, 24 Oct 2015 23:19:10 +0000 (23:19 +0000)]
Simplify boolean expressions in tools/llvm-objdump.
Patch by Richard.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251215
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sat, 24 Oct 2015 23:11:13 +0000 (23:11 +0000)]
Refactor: Simplify boolean conditional return statements in lib/CodeGen.
Patch by Richard.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251213
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sat, 24 Oct 2015 22:45:04 +0000 (22:45 +0000)]
[X86][SSE] Use lowerVectorShuffleWithUNPCK instead of custom matches.
Most 128-bit and 256-bit shuffles were manually matching UNPCK patterns - use lowerVectorShuffleWithUNPCK to be more thorough.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251211
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Sat, 24 Oct 2015 22:15:32 +0000 (22:15 +0000)]
[Support] Add comment to explain why we can't drop NDEBUG.
Discussed with: Benjamin Kramer.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251210
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Sat, 24 Oct 2015 22:09:54 +0000 (22:09 +0000)]
[CodeGen] Get rid of NDEBUG to ensure structure stability.
I think it's fine to keep this fields around in terms of overhead,
I wasn't able to measure any substantial regression while running the
test suite, but, in case this causes some regression I'm ready to revert
and work on an alternative solution.
This was tested building with clang/gcc both in Debug and Release mode
and passes the test-suite.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251209
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sat, 24 Oct 2015 20:48:08 +0000 (20:48 +0000)]
[X86][SSE] lowerVectorShuffleWithUNPCK - use equivalent shuffle mask test.
Use isShuffleEquivalent to match UNPCK shuffles - better support for build vector inputs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251207
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Zolotukhin [Sat, 24 Oct 2015 20:16:42 +0000 (20:16 +0000)]
Refactor: Simplify boolean conditional return statements in lib/Transforms/Vectorize (NFC).
Summary: Use clang-tidy to simplify boolean conditional return statements
Differential Revision: http://reviews.llvm.org/D10003
Patch by Richard<legalize@xmission.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251206
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sat, 24 Oct 2015 20:15:43 +0000 (20:15 +0000)]
Removed old FIXME - we do generate movddup for SSE3 and higher
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251205
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sat, 24 Oct 2015 20:06:18 +0000 (20:06 +0000)]
[DAGCombiner] Tidy up ConstantFP commutation. NFCI
Move ConstantFP canonicalization of commutative instructions to start of 2-op node creation (matches integer) - simplifies constant folding code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251203
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sat, 24 Oct 2015 19:30:37 +0000 (19:30 +0000)]
Use all_of to simplify control flow. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251202
91177308-0d34-0410-b5e6-
96231b3b80d8
Yaron Keren [Sat, 24 Oct 2015 19:27:28 +0000 (19:27 +0000)]
Add libuuid to required system libraries list for mingw.
This list is produced by llvm-config --system-libs to be used
by external programs using the llvm libraries, such as creduce.
In r250501 llvm/Support/Windows/Path.inc started to use the constant
FOLDERID_Profile from libuuid.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251201
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sat, 24 Oct 2015 19:03:15 +0000 (19:03 +0000)]
Use find_if to simplify control flow. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251200
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sat, 24 Oct 2015 18:44:52 +0000 (18:44 +0000)]
[DAGCombiner] Generalize masking of constant rotates.
We don't need a mask of a rotation result to be a constant splat - any constant scalar/vector can be usefully folded.
Followup to D13851.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251197
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 24 Oct 2015 18:40:22 +0000 (18:40 +0000)]
Call the version of ConvertCostTableLookup that takes a statically sized array rather than pointer and size. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251196
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Sat, 24 Oct 2015 16:47:10 +0000 (16:47 +0000)]
X86ISelLowering: Support tail calls to/from callee pop functions
This enables tail calls with thiscall, stdcall, vectorcall and
fastcall functions.
Differential Revision: http://reviews.llvm.org/D13999
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251190
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sat, 24 Oct 2015 13:41:45 +0000 (13:41 +0000)]
Fix unused variable warning. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251189
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sat, 24 Oct 2015 13:17:26 +0000 (13:17 +0000)]
[X86][XOP] Add support for lowering vector rotations
This patch adds support for lowering to the XOP VPROT / VPROTI vector bit rotation instructions.
This has required changes to the DAGCombiner rotation pattern matching to support vector types - so far I've only changed it to support splat vectors, but generalising this further is feasible in the future.
Differential Revision: http://reviews.llvm.org/D13851
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251188
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sat, 24 Oct 2015 12:46:49 +0000 (12:46 +0000)]
[TblGen] ArrayRefize CodeGenSchedule. No functionality change intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251187
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sat, 24 Oct 2015 12:46:45 +0000 (12:46 +0000)]
[TblGen] ArrayRefize TGParser. No functional change intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251186
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sat, 24 Oct 2015 11:38:01 +0000 (11:38 +0000)]
[BasicAliasAnalysis] Simplify expression, no functional change.
(-1) - x + 1 is the same as -x.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251185
91177308-0d34-0410-b5e6-
96231b3b80d8