Tim Northover [Fri, 8 Aug 2014 12:08:51 +0000 (12:08 +0000)]
llvm-objdump: add missing % in format specifier.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215198
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 8 Aug 2014 12:00:09 +0000 (12:00 +0000)]
llvm-objdump: use portable format specifiers for info.
ARM bots (& others, I think, now that I look) were failing because we
were using incorrect printf-style format specifiers. They were wrong
on almost any platform, actually, just mostly harmlessly so.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215196
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Fri, 8 Aug 2014 10:01:29 +0000 (10:01 +0000)]
[mips] Initial implementation of -mabicalls/-mno-abicalls.
This patch implements the main rules for -mno-abicalls such as reserving $gp,
and emitting the correct .option directive.
Patch by Matheus Almeida and Toma Tabacu
Differential Revision: http://reviews.llvm.org/D4231
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215194
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 8 Aug 2014 08:27:44 +0000 (08:27 +0000)]
AArch64: stop trying to take control of all UnknownArch triples.
This short-circuited our error reporting for incorrectly specified
target triples (you'd get AArch64 code instead).
Should fix PR20567.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215191
91177308-0d34-0410-b5e6-
96231b3b80d8
Patrik Hagglund [Fri, 8 Aug 2014 08:21:19 +0000 (08:21 +0000)]
[pr19635] Revert most of r170537, and add new testcase.
Patch provided by Andrey Kuharev.
Sorry, r170537 was obviously wrong.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215190
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Fri, 8 Aug 2014 05:50:43 +0000 (05:50 +0000)]
GlobalOpt: Optimize in the face of insertvalue/extractvalue
GlobalOpt didn't know how to simulate InsertValueInst or
ExtractValueInst. Optimizing these is pretty straightforward.
N.B. This came up when looking at clang's IRGen for MS ABI member
pointers; they are represented as aggregates.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215184
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Fri, 8 Aug 2014 02:24:05 +0000 (02:24 +0000)]
Fix llvm/test/DebugInfo/X86/recursive_inlining.ll to use %llc_dwarf.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215181
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Fri, 8 Aug 2014 02:04:18 +0000 (02:04 +0000)]
AArch64InstrInfo.cpp: Fix \param(s). [-Wdocumentation]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215180
91177308-0d34-0410-b5e6-
96231b3b80d8
Anton Yartsev [Fri, 8 Aug 2014 00:29:54 +0000 (00:29 +0000)]
[tablegen] - Eliminate memory leaks in TGParser.cpp
Ugly solution indicating that a refactoring is necessary to get the ownership under control.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215176
91177308-0d34-0410-b5e6-
96231b3b80d8
Adam Nemet [Thu, 7 Aug 2014 23:53:38 +0000 (23:53 +0000)]
[AVX512] Add zero-masking variant to AVX512_masking multiclass
This completes one item from the todo-list of r215125 "Generate masking
instruction variants with tablegen".
The AddedComplexity is needed just like for the k variant.
Added a codegen test based on valignq.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215173
91177308-0d34-0410-b5e6-
96231b3b80d8
Gerolf Hoflehner [Thu, 7 Aug 2014 23:19:55 +0000 (23:19 +0000)]
Fix for multi-line comment warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215169
91177308-0d34-0410-b5e6-
96231b3b80d8
Adam Nemet [Thu, 7 Aug 2014 23:18:18 +0000 (23:18 +0000)]
[AVX512] Add codegen test for the masking variant of valign
The AddedComplexity is needed just like in avx512_perm_3src. There may be a
bug in the complexity computation...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215168
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Thu, 7 Aug 2014 23:08:24 +0000 (23:08 +0000)]
[stack protector] Look through bitcasts to get global variable
__stack_chk_guard.
Handle the case where the pointer operand of the load instruction that loads the
stack guard is not a global variable but instead a bitcast.
%StackGuard = load i8** bitcast (i64** @__stack_chk_guard to i8**)
call void @llvm.stackprotector(i8* %StackGuard, i8** %StackGuardSlot)
Original test case provided by Ana Pazos.
This fixes PR20558.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215167
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 7 Aug 2014 23:04:07 +0000 (23:04 +0000)]
Make these regexes stricter by disallowing any additional characters in the output.
Thanks to dblaikie for pointing this out!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215166
91177308-0d34-0410-b5e6-
96231b3b80d8
Arnold Schwaighofer [Thu, 7 Aug 2014 22:47:27 +0000 (22:47 +0000)]
SLPVectorizer: Use the type of the value loaded/stored to get the ABI alignment
We were using the pointer type which is incorrect.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215162
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 7 Aug 2014 22:44:34 +0000 (22:44 +0000)]
Add a separate testcase for a DWARF expression describing a value in a
subregister.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215161
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 7 Aug 2014 22:44:24 +0000 (22:44 +0000)]
Reflow this comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215160
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Thu, 7 Aug 2014 22:22:49 +0000 (22:22 +0000)]
DebugInfo: Fix overwriting/loss of inlined arguments to recursively inlined functions.
Due to an unnecessary special case, inlined arguments that happened to
be from the same function as they were inlined into were misclassified
as non-inline arguments and would overwrite the non-inlined arguments.
Assert that we never overwrite a function's arguments, and stop
misclassifying inlined arguments as non-inline arguments to fix this
issue.
Excuse the rather crappy test case - handcrafted IR might do better, or
someone who understands better how to tickle the inliner to create a
recursive inlining situation like this (though it may also be necessary
to tickle the variable in a particular way to cause it to be recorded in
the MMI side table and go down this particular path for location
information).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215157
91177308-0d34-0410-b5e6-
96231b3b80d8
Reed Kotler [Thu, 7 Aug 2014 22:09:01 +0000 (22:09 +0000)]
fix materialization of one bit constants and global values which are accessed through
a base GOT entry.
Summary:
get tip of tree mips fast-isel to pass test-suite
Two bugs were fixed:
1) one bit booleans were treated as 1 bit signed integers and so the literal '1' could become sign extended.
2) mips uses got for pic but in certain cases, as with string constants for example, many items can be referenced from the same got entry and this case was not handled properly.
Test Plan: test-suite
Reviewers: dsanders
Reviewed By: dsanders
Subscribers: mcrosier
Differential Revision: http://reviews.llvm.org/D4801
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215155
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Thu, 7 Aug 2014 22:02:54 +0000 (22:02 +0000)]
Temporarily Revert "Nuke the old JIT." as it's not quite ready to
be deleted. This will be reapplied as soon as possible and before
the 3.6 branch date at any rate.
Approved by Jim Grosbach, Lang Hames, Rafael Espindola.
This reverts commits r215111, 215115, 215116, 215117, 215136.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215154
91177308-0d34-0410-b5e6-
96231b3b80d8
Gerolf Hoflehner [Thu, 7 Aug 2014 21:49:44 +0000 (21:49 +0000)]
Debugging Utility - optional ability for dumping critical path length
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215153
91177308-0d34-0410-b5e6-
96231b3b80d8
Gerolf Hoflehner [Thu, 7 Aug 2014 21:40:58 +0000 (21:40 +0000)]
MachineCombiner Pass for selecting faster instruction sequence on AArch64
Re-commit of r214832,r21469 with a work-around that
avoids the previous problem with gcc build compilers
The work-around is to use SmallVector instead of ArrayRef
of basic blocks in preservesResourceLen()/MachineCombiner.cpp
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215151
91177308-0d34-0410-b5e6-
96231b3b80d8
Kevin Enderby [Thu, 7 Aug 2014 21:30:25 +0000 (21:30 +0000)]
Add two missing ARM cpusubtypes to the switch statement in
MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType) .
Upcoming changes will cause existing test cases to use this but
I wanted to check in this obvious change separately.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215150
91177308-0d34-0410-b5e6-
96231b3b80d8
Owen Anderson [Thu, 7 Aug 2014 21:07:35 +0000 (21:07 +0000)]
Fix a case in SROA where lifetime intrinsics could inhibit alloca promotion. In
this case, the code path dealing with vector promotion was missing the explicit
checks for lifetime intrinsics that were present on the corresponding integer
promotion path.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215148
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Thu, 7 Aug 2014 20:41:57 +0000 (20:41 +0000)]
[MCJIT] Replace a c-style cast with reinterpret_cast + static_cast.
C-style casts (and reinterpret_casts) result in implementation defined
values when a pointer is cast to a larger integer type. On some platforms
this was leading to bogus address computations in RuntimeDyldMachOAArch64.
This should fix http://llvm.org/PR20501.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215143
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Smith [Thu, 7 Aug 2014 20:41:17 +0000 (20:41 +0000)]
Remove Support/IncludeFile.h and its only user. This is actively harmful, since
it breaks the modules builds (where CallGraph.h can be quite reasonably
transitively included by an unimported portion of a module, and CallGraph.cpp
not linked in), and appears to have been entirely redundant since PR780 was
fixed back in 2008.
If this breaks anything, please revert; I have only tested this with a single
configuration, and it's possible that this is still somehow fixing something
(though I doubt it, since no other similar file uses this mechanism any more).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215142
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Thu, 7 Aug 2014 20:33:06 +0000 (20:33 +0000)]
Fix test failure on ARM.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215140
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Smith [Thu, 7 Aug 2014 20:27:08 +0000 (20:27 +0000)]
[modules] Update module map workaround to cope with the problematic file having
been relocated.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215139
91177308-0d34-0410-b5e6-
96231b3b80d8
Frederic Riss [Thu, 7 Aug 2014 20:04:00 +0000 (20:04 +0000)]
test commit: remove trailing whitespace.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215138
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Thu, 7 Aug 2014 19:35:22 +0000 (19:35 +0000)]
Remove a few XFAILs.
These tests now pass with MCJIT.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215136
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Thu, 7 Aug 2014 19:30:13 +0000 (19:30 +0000)]
[Branch probability] Recompute branch weights of tail-merged basic blocks.
BranchFolderPass was not correctly setting the basic block branch weights when
tail-merging created or merged blocks. This patch recomutes the weights of
tail-merged blocks using the following formula:
branch_weight(merged block to successor j) =
sum(block_frequency(bb) * branch_probability(bb -> j))
bb is a block that is in the set of merged blocks.
<rdar://problem/
16256423>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215135
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Thu, 7 Aug 2014 18:52:39 +0000 (18:52 +0000)]
Add the majority of the remaining SPE instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215131
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Bogner [Thu, 7 Aug 2014 18:40:37 +0000 (18:40 +0000)]
FileCheck: Add a flag to allow checking empty input
Currently FileCheck errors out on empty input. This is usually the
right thing to do, but makes testing things like "this command does
not emit some error message" hard to test. This usually leads to
people using "command 2>&1 | count 0" instead, and then the bots that
use guard malloc fail a few hours later.
By adding a flag to FileCheck that allows empty inputs, we can make
tests that consist entirely of "CHECK-NOT" lines feasible.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215127
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Thu, 7 Aug 2014 18:05:32 +0000 (18:05 +0000)]
Indent
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215126
91177308-0d34-0410-b5e6-
96231b3b80d8
Adam Nemet [Thu, 7 Aug 2014 17:53:55 +0000 (17:53 +0000)]
[AVX512] Generate masking instruction variants with tablegen
After adding the masking variants to several instructions, I have decided to
experiment with generating these from the non-masking/unconditional
variant. This will hopefully reduce the amount repetition that we currently
have in order to define an instruction with all its variants (for a reg/mem
instruction this would be 6 instruction defs and 2 Pat<> for the intrinsic).
The patch is the first cut that is currently only applied to valignd/q to make
the patch small.
A few notes on the approach:
* In order to stitch together the dag for both the conditional and the
unconditional patterns I pass the RHS of the set rather than the full
pattern (set dest, RHS).
* Rather than subclassing each instruction base class (e.g. AVX512AIi8),
with a masking variant which wouldn't scale, I derived the masking
instructions from a new base class AVX512 (this is just I<> with
Requires<HasAVX512>). The instructions derive from this now, plus a new set
of classes that add the format bits and everything else that instruction
base class provided (i.e. AVX512AIi8 vs. AVX512AIi8Base).
I hope we can go incrementally from here. I expect that:
* We will need different variants of the masking class. One example is
instructions requiring three vector sources. In this case we tie one of the
source operands to dest rather than a new implicit source operand ($src0)
* Add the zero-masking variant
* Add more AVX512*Base classes as new uses are added
I've looked at X86.td.expanded before and after to make sure that nothing got
lost for valignd/q.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215125
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Thu, 7 Aug 2014 17:17:19 +0000 (17:17 +0000)]
llvm/test/tools/llvm-objdump: Reorganize target-dependent some tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215122
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Thu, 7 Aug 2014 14:48:13 +0000 (14:48 +0000)]
Fix the ocaml bindings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215117
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Thu, 7 Aug 2014 14:38:49 +0000 (14:38 +0000)]
fix configure+make build
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215116
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Thu, 7 Aug 2014 14:25:55 +0000 (14:25 +0000)]
Remove empty directories.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215115
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Thu, 7 Aug 2014 14:21:18 +0000 (14:21 +0000)]
Nuke the old JIT.
I am sure we will be finding bits and pieces of dead code for years to
come, but this is a good start.
Thanks to Lang Hames for making MCJIT a good replacement!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215111
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Thu, 7 Aug 2014 13:35:34 +0000 (13:35 +0000)]
Add mfasr and mtasr
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215110
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Thu, 7 Aug 2014 13:16:58 +0000 (13:16 +0000)]
Add mfrtcu and mfrtcl instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215109
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Thu, 7 Aug 2014 13:06:23 +0000 (13:06 +0000)]
Support mttbl and mttbu mnemonic
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215108
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Thu, 7 Aug 2014 12:39:59 +0000 (12:39 +0000)]
Add RFID instruction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215105
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Thu, 7 Aug 2014 12:35:16 +0000 (12:35 +0000)]
Fix Itineray class of rfi
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215104
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Thu, 7 Aug 2014 12:31:28 +0000 (12:31 +0000)]
Spell e500 feature in lower case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215103
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Thu, 7 Aug 2014 12:18:21 +0000 (12:18 +0000)]
Add first bunch of SPE instructions. As they overlap with Altivec, mark
them as parser-only until the disassembler is extended to handle
predicates properly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215102
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexander Kornienko [Thu, 7 Aug 2014 12:09:34 +0000 (12:09 +0000)]
Insert parens to avoid a warning:
suggest parentheses around arithmetic in operand of '^' [-Wparentheses]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215101
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Thu, 7 Aug 2014 12:07:33 +0000 (12:07 +0000)]
Silencing an MSVC C4334 warning ('<<' : result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)). No functional changes intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215100
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Thu, 7 Aug 2014 12:03:36 +0000 (12:03 +0000)]
[mips] Add assembler support for .set msa/nomsa directive.
Summary:
These directives are used to toggle whether the assembler accepts MSA-specific instructions or not.
Patch by Matheus Almeida and Toma Tabacu.
Reviewers: dsanders
Reviewed By: dsanders
Differential Revision: http://reviews.llvm.org/D4783
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215099
91177308-0d34-0410-b5e6-
96231b3b80d8
Pavel Chupin [Thu, 7 Aug 2014 11:09:59 +0000 (11:09 +0000)]
Fix lld-x86_64-win7 Build #11969
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215097
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 7 Aug 2014 10:37:35 +0000 (10:37 +0000)]
[x86] Fix another miscompile found through fuzz testing the new vector
shuffle lowering.
This is closely related to the previous one. Here we failed to use the
source offset when swapping in the other case -- where we end up
swapping the *final* shuffle. The cause of this bug is a bit different:
I simply wasn't thinking about the fact that this mask is actually
a slice of a wide mask and thus has numbers that need SourceOffset
applied. Simple fix. Would be even more simple with an algorithm-y thing
to use here, but correctness first. =]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215095
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 7 Aug 2014 10:14:27 +0000 (10:14 +0000)]
[x86] Fix another miscompile in the new vector shuffle lowering found
via the fuzz tester.
Here I missed an offset when round-tripping a value through a shuffle
mask. I got it right 2 lines below. See a problem? I do. ;] I'll
probably be adding a little "swap" algorithm which accepts a range and
two values and swaps those values where they occur in the range. Don't
really have a name for it, let me know if you do.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215094
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 7 Aug 2014 09:45:02 +0000 (09:45 +0000)]
[x86] Fix another miscompile in the new vector shuffle lowering found
through the new fuzzer.
This one is great: bad operator precedence led the modulus to happen at
the wrong point. All the asserts didn't fire because there were usually
the right values past the end of the 4 element region we were looking
at. Probably could have gotten a crash here with ASan + fuzzing, but the
correctness tests pinpointed this really nicely.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215092
91177308-0d34-0410-b5e6-
96231b3b80d8
Pavel Chupin [Thu, 7 Aug 2014 09:41:19 +0000 (09:41 +0000)]
[x32] Use ebp/esp as frame and stack pointer
Summary:
Since pointers are 32-bit on x32 we can use ebp and esp as frame and stack
pointer. Some operations like PUSH/POP and CFI_INSTRUCTION still
require 64-bit register, so using 64-bit MachineFramePtr where required.
X86_64 NaCl uses 64-bit frame/stack pointers, however it's been found that
both isTarget64BitLP64 and isTarget64BitILP32 are true for NaCl. Addressing
this issue here as well by making isTarget64BitLP64 false.
Also mark hasReservedSpillSlot unreachable on X86. See inlined comments.
Test Plan: Add one new simple test and upgrade 2 existing with x32 target case.
Reviewers: nadav, dschuff
Subscribers: llvm-commits, zinovy.nis
Differential Revision: http://reviews.llvm.org/D4617
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215091
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 7 Aug 2014 08:11:31 +0000 (08:11 +0000)]
[x86] Fix a miscompile in the new shuffle lowering found through the new
fuzz testing.
The function which tested for adjacency did what it said on the tin, but
when I called it, I wanted it to do something more thorough: I wanted to
know if the *pairs* of shuffle elements were adjacent and started at
0 mod 2. In one place I had the decency to try to test for this, but in
the other it was completely skipped, miscompiling this test case. Fix
this by making the helper actually do what I wanted it to do everywhere
I called it (and removing the now redundant code in one place).
I *really* dislike the name "canWidenShuffleElements" for this
predicate. If anyone can come up with a better name, please let me know.
The other name I thought about was "canWidenShuffleMask" but is it
really widening the mask to reduce the number of lanes shuffled? I don't
know. Naming things is hard.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215089
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Thu, 7 Aug 2014 05:47:13 +0000 (05:47 +0000)]
Update Tablegen documents given that binary literals are now sized
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215088
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Thu, 7 Aug 2014 05:47:10 +0000 (05:47 +0000)]
Update BitRecTy::convertValue to allow if expressions with bit values on both sides of the if
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215087
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Thu, 7 Aug 2014 05:47:07 +0000 (05:47 +0000)]
Change the { } expression in tablegen to accept sized binary literals which are not just 0 and 1.
It also allows nested { } expressions, as now that they are sized, we can merge pull bits from the nested value.
In the current behaviour, everything in { } must have been convertible to a single bit.
However, now that binary literals are sized, its useful to be able to initialize a range of bits.
So, for example, its now possible to do
bits<8> x = { 0, 1, { 0b1001 }, 0, 0b0 }
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215086
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Thu, 7 Aug 2014 05:47:04 +0000 (05:47 +0000)]
Change BitsInit to inherit from TypedInit.
This is useful in a later patch where binary literals such as 0b000 will become BitsInit values instead of IntInit values.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215085
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Thu, 7 Aug 2014 05:47:00 +0000 (05:47 +0000)]
Change TableGen so that binary literals such as 0b001 are now sized.
Instead of these becoming an integer literal internally, they now become bits<n> values.
Prior to this change, 0b001 was 1 bit long. This is confusing as clearly the user gave 3 bits.
This new type holds both the literal value and the size, and so can ensure sizes match on initializers.
For example, this used to be legal
bits<1> x = 0b00;
but now it must be written as
bits<2> x = 0b00;
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215084
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Thu, 7 Aug 2014 05:46:57 +0000 (05:46 +0000)]
TableGen: Change { } to only accept bits<n> entries when n == 1.
Prior to this change, it was legal to do something like
bits<2> opc = { 0, 1 };
bits<2> opc2 = { 1, 0 };
bits<2> a = { opc, opc2 };
This involved silently dropping bits from opc and opc2 which is very hard to debug.
Now the above test would be an error. Having tested with an assert, none of LLVM/clang was relying on this behaviour.
Thanks to Adam Nemet for the above test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215083
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Thu, 7 Aug 2014 05:46:54 +0000 (05:46 +0000)]
Fix a whole bunch of binary literals which were the wrong size. All were being silently zero extended to the correct width.
The commit after this changes { } and 0bxx literals to be of type bits<n> and not int. This means we need to write exactly the right number of bits, and not rely on the values being silently zero extended for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215082
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 7 Aug 2014 04:49:54 +0000 (04:49 +0000)]
Add an option to the shuffle fuzzer that lets you fuzz exclusively
within a single bit-width of vectors. This is particularly useful for
when you know you have bugs in a certain area and want to find simpler
test cases than those produced by an open-ended fuzzing that ends up
legalizing the vector in addition to shuffling it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215056
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Wendling [Thu, 7 Aug 2014 04:21:45 +0000 (04:21 +0000)]
Use the minor number for the revision numbers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215055
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 7 Aug 2014 04:13:51 +0000 (04:13 +0000)]
Add a vector shuffle fuzzer.
This is a python script which for a given seed generates a random
sequence of random shuffles of a random vector width. It embeds this
into a function and emits a main function which calls the test routine
and checks that the results (where defined) match the obvious results.
I'll be using this to drive out miscompiles from the new vector shuffle
logic now that it is clean of any crashes I can find with llvm-stress.
Note, my python skills are very poor. Sorry if this is terrible code,
and feel free to tell me how I should write this or just patch it as
necessary.
The tests generated try to be very portable and use boring C routines.
It technically will mis-declare the C routines and pass 32-bit integers
to parametrs that expect 64-bit integers. If someone wants to fix this
and has less terrible ideas of how to do it, I'm all ears. Fortunately,
this "just works" for x86. =]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215054
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Bogner [Thu, 7 Aug 2014 03:47:28 +0000 (03:47 +0000)]
DebugInfo: Make a test more portable
mach-o doesn't like sections without segments, and elf is perfectly
happy with commas in section names, so use a Darwin-like section name.
Suggestion by Eric Christopher.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215052
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Thu, 7 Aug 2014 02:59:41 +0000 (02:59 +0000)]
MC: split Win64EHUnwindEmitter into a shared streamer
This changes Win64EHEmitter into a utility WinEH UnwindEmitter that can be
shared across multiple architectures and a target specific bit which is
overridden (Win64::UnwindEmitter). This enables sharing the section selection
code across X86 and the intended use in ARM for emitting unwind information for
Windows on ARM.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215050
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Thu, 7 Aug 2014 00:20:44 +0000 (00:20 +0000)]
[X86][SchedModel] Fixed missing/wrong scheduling model found by code inspection.
Source: Agner Fog's Instruction tables.
Related to <rdar://problem/
15607571>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215045
91177308-0d34-0410-b5e6-
96231b3b80d8
Kevin Enderby [Wed, 6 Aug 2014 23:24:41 +0000 (23:24 +0000)]
Add the -mcpu= option to llvm-objdump for use with the disassemblers.
Also make the disassembler created with the Mach-O parser (the -m option)
pick up the Target specific attributes specified with -mattr option.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215032
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Wed, 6 Aug 2014 23:21:13 +0000 (23:21 +0000)]
MC X86: Accept ".att_syntax prefix" and diagnose noprefix
Fixes PR18916. I don't think we need to implement support for either
hybrid syntax. Nobody should write Intel assembly with '%' prefixes on
their registers or AT&T assembly without them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215031
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 6 Aug 2014 22:30:12 +0000 (22:30 +0000)]
Revert "Reapply "DebugInfo: Ensure that all debug location scope chains from instructions within a function, lead to the function itself.""
This reverts commit r214761.
Revert while Reid investigates & provides a reproduction for an
assertion failure for this on Windows.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214999
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 6 Aug 2014 21:08:38 +0000 (21:08 +0000)]
fix typo
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214995
91177308-0d34-0410-b5e6-
96231b3b80d8
Yaron Keren [Wed, 6 Aug 2014 20:59:09 +0000 (20:59 +0000)]
getNewMemBuffer memsets the buffer to zeros,
the caller don't have to initialize it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214994
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 6 Aug 2014 20:45:30 +0000 (20:45 +0000)]
Fix a test that has no checks.
X86 doesn't have fneg, so check for xor.
Differential Revision: http://reviews.llvm.org/D4812
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214992
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Wed, 6 Aug 2014 20:27:55 +0000 (20:27 +0000)]
R600: Cleanup fadd and fsub tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214991
91177308-0d34-0410-b5e6-
96231b3b80d8
Rui Ueyama [Wed, 6 Aug 2014 19:30:38 +0000 (19:30 +0000)]
Revert "r214897 - Remove dead zero store to calloc initialized memory"
It broke msan.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214989
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Wed, 6 Aug 2014 18:45:26 +0000 (18:45 +0000)]
Remove the target machine from CCState. Previously it was only used
to get the subtarget and that's accessible from the MachineFunction
now. This helps clear the way for smaller changes where we getting
a subtarget will require passing in a MachineFunction/Function as
well.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214988
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Wed, 6 Aug 2014 18:41:24 +0000 (18:41 +0000)]
Improve performance of calculateDbgValueHistory.
In r210492 the logic of calculateDbgValueHistory was changed to end
register variable live ranges at the end of MBB conditionally on
the fact that the register was or not clobbered by the function body.
This requires an initial scan of all the operands of the function
to collect all clobbered registers. In a second pass over all
instructions, we compare this set with the set of clobbered
registers for the current MachineInstruction. This modification
incurred a compilation time regression on some benchmarks: the
debug info emission phase takes ~10% more time.
While a small performance hit is unavoidable due to the initial
scan requirement, we can improve the situation by avoiding to
create too many temporary sets and just use lambdas to work directly
on the result of the initial scan.
Fixes <rdar://problem/
17884104>
Patch by Frederic Riss!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214987
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Wed, 6 Aug 2014 18:41:19 +0000 (18:41 +0000)]
Cleanup collectChangingRegs
The handling of the epilogue is best expressed as an early exit and
there is no reason to look for register defs in DbgValue MIs.
Patch by Frederic Riss!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214986
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 6 Aug 2014 18:24:19 +0000 (18:24 +0000)]
DebugInfo: Fix ranges+gmlt test case to actually exercise the gmlt situation.
Originally this test case tested the specified behavior (that -gmlt
would not produce DW_AT_ranges and that when no CU DW_AT_ranges were
produced, no debug_ranges section (not even an empty list) would be
produced) but then the ranges emission code was improved not to create
ranges of a single element (instead favoring high_pc/low_pc) and so this
test case no longer exercised the -gmlt portion of the behavior.
This caused me some confusion when reading the comments and trying to
update this test case for future changes to -gmlt. I've made this test
resilient to those changes (by using the {{DW_TAG|NULL}} pattern to
block the end of the attribute search at the end of the CU's attribute
list without mandating that it must (or must not) be followed by another
tag (the future changes to -gmlt should produce no subprograms in this
CU))
Fix the test case to have two functions in distinct sections to force
the use of DW_AT_ranges.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214985
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Wed, 6 Aug 2014 18:09:15 +0000 (18:09 +0000)]
Add a triple to this test to get the right IR mangling
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214982
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Wed, 6 Aug 2014 18:09:04 +0000 (18:09 +0000)]
Don't count inreg params when mangling fastcall functions
This is consistent with MSVC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214981
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Wed, 6 Aug 2014 17:57:23 +0000 (17:57 +0000)]
Round up the size of byval arguments to MinAlign
Otherwise we can end up with an argument frame size that is not a
multiple of stack slot size, which is very awkward.
This fixes PR20547, which was a bug in x86_64 Sys V vararg handling.
However, it's much easier to test this with x86 callee-cleanup
functions, which previously ended in "retl $6" instead of "retl $8".
This does affect behavior of all backends, but it presumably fixes the
same bug in all of them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214980
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Wed, 6 Aug 2014 17:36:08 +0000 (17:36 +0000)]
UseListOrder: Use std::vector
I initially used a `SmallVector<>` for `UseListOrder::Shuffle`, which
was a silly choice. When I realized my error I quickly rolled a custom
data structure.
This commit simplifies it to a `std::vector<>`. Now that I've had a
chance to measure performance, this data structure isn't part of a
bottleneck, so the additional complexity is unnecessary.
This is part of PR5680.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214979
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Wed, 6 Aug 2014 16:56:58 +0000 (16:56 +0000)]
[AArch64] Add a few isTarget* API to AArch64 Subtarget.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214977
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Wed, 6 Aug 2014 16:06:41 +0000 (16:06 +0000)]
Add test case omitted in r214974.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214975
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Wed, 6 Aug 2014 16:05:02 +0000 (16:05 +0000)]
[AArch64] Fix OS ABI flag for aarch64-linux-gnu target.
For triple aarch64-linux-gnu we were incorrectly setting IRIX.
For triple aarch64 we are correctly setting SYSV.
Patch by Ana Pazos <apazos@codeaurora.org>.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214974
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 6 Aug 2014 15:58:15 +0000 (15:58 +0000)]
use register iterators that include self to reduce code duplication in CriticalAntiDepBreaker
This patch addresses 2 FIXME comments that I added to CriticalAntiDepBreaker while fixing PR20020.
Initialize an MCSubRegIterator and an MCRegAliasIterator to include the self reg.
Assuming that works as advertised, there should be functional difference with this patch, just less code.
Also, remove the associated asserts - we're setting those values just before, so the asserts don't do anything meaningful.
Differential Revision: http://reviews.llvm.org/D4566
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214973
91177308-0d34-0410-b5e6-
96231b3b80d8
Robert Khasanov [Wed, 6 Aug 2014 15:40:34 +0000 (15:40 +0000)]
[AVX512] Added load/store instructions to Register2Memory opcode tables.
Added lowering tests for load/store.
Reviewed by Elena Demikhovsky <elena.demikhovsky@intel.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214972
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Wed, 6 Aug 2014 13:31:32 +0000 (13:31 +0000)]
[AArch64] Add a testcase for r214957.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214965
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Wed, 6 Aug 2014 12:56:19 +0000 (12:56 +0000)]
Add a new option -run-slp-after-loop-vectorization.
This swaps the order of the loop vectorizer and the SLP/BB vectorizers. It is disabled by default so we can do performance testing - ideally we want to change to having the loop vectorizer running first, and the SLP vectorizer using its leftovers instead of the other way around.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214963
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Wed, 6 Aug 2014 11:13:14 +0000 (11:13 +0000)]
ARM: do not generate BLX instructions on Cortex-M CPUs.
Particularly on MachO, we were generating "blx _dest" instructions on M-class
CPUs, which don't actually exist. They happen to get fixed up by the linker
into valid "bl _dest" instructions (which is why such a massive issue has
remained largely undetected), but we shouldn't rely on that.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214959
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Wed, 6 Aug 2014 11:13:06 +0000 (11:13 +0000)]
ARM-MachO: materialize callee address correctly on v4t.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214958
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Wed, 6 Aug 2014 10:42:18 +0000 (10:42 +0000)]
[AArch64] Conditional selects are expensive on out-of-order cores.
Specifically Cortex-A57. This probably applies to Cyclone too but I haven't enabled it for that as I can't test it.
This gives ~4% improvement on SPEC 174.vpr, and ~1% in 471.omnetpp.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214957
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 6 Aug 2014 10:16:36 +0000 (10:16 +0000)]
[x86] Fix two independent miscompiles in the process of getting the same
test case to actually generate correct code.
The primary miscompile fixed here is that we weren't correctly handling
in-place elements in one half of a single-input v8i16 shuffle when
moving a dword of elements from that half to the other half. Some times,
we would clobber the in-place elements in forming the dword to move
across halves.
The fix to this involves forcibly marking the in-place inputs even when
there is no need to gather them into a dword, and to much more carefully
re-arrange the elements when grouping them into a dword to move across
halves. With these two changes we would generate correct shuffles for
the test case, but found another miscompile. There are also some random
perturbations of the generated shuffle pattern in SSE2. It looks like
a wash; more instructions in some cases fewer in others.
The second miscompile would corrupt the results into nonsense. This is
a buggy pattern in one of the added DAG combines. Mapping elements
through a PSHUFD when pairing redundant half-shuffles is *much* harder
than this code makes it out to be -- it requires reasoning about *all*
of where the input is used in the PSHUFD, not just one part of where it
is used. Plus, we can't combine a half shuffle *into* a PSHUFD but the
code didn't guard against it. I think this was just a bad idea and I've
just removed that aspect of the combine. No tests regress as
a consequence so seems OK.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214954
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 6 Aug 2014 10:16:33 +0000 (10:16 +0000)]
[x86] Switch to a formulation of a for loop that is much more obviously
not corrupting the mask by mutating it more times than intended. No
functionality changed (the results were non-overlapping so the old
version "worked" but was non-obvious).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214953
91177308-0d34-0410-b5e6-
96231b3b80d8
Adam Nemet [Wed, 6 Aug 2014 07:13:12 +0000 (07:13 +0000)]
[X86] Fixes commit r214890 to match the posted patch
This was another fallout from my local rebase where something went wrong :(
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214951
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Wed, 6 Aug 2014 00:44:25 +0000 (00:44 +0000)]
Correct comment
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214945
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Wed, 6 Aug 2014 00:33:40 +0000 (00:33 +0000)]
[dfsan] Try not to create too many additional basic blocks in functions which
already have a large number of blocks. Works around a performance issue with
the greedy register allocator.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214944
91177308-0d34-0410-b5e6-
96231b3b80d8