Kevin Enderby [Wed, 31 Jul 2013 21:05:30 +0000 (21:05 +0000)]
Added the B9.3.19 SUBS PC, LR, #imm (Thumb2) system instruction.
While the .td entry is nice and all, it takes a pretty gross hack in
ARMAsmParser::ParseInstruction() because of handling of other "subs"
instructions to get it to match. Ran it by Jim Grosbach and he said it was
about what he expected to make this work given the existing code.
rdar://
14214063
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187530
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Wed, 31 Jul 2013 20:43:27 +0000 (20:43 +0000)]
Revert "R600: Non vector only instruction can be scheduled on trans unit"
This reverts commit
98ce62780ea7185ba710868bf83c8077e8d7f6d6.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187526
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Wed, 31 Jul 2013 20:43:08 +0000 (20:43 +0000)]
Revert "TableGen: Enumerate Schedule Model too."
This reverts commit
2ca1e4a39c7e0d7a00e66ff5437c6d7ace2404a0.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187525
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Wed, 31 Jul 2013 20:43:03 +0000 (20:43 +0000)]
Revert "R600: Use SchedModel enum for is{Trans,Vector}Only functions"
This reverts commit
3f1de26cb5cc0543a6a1d71259a7a39d97139051.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187524
91177308-0d34-0410-b5e6-
96231b3b80d8
Vincent Lejeune [Wed, 31 Jul 2013 19:32:12 +0000 (19:32 +0000)]
R600: Do not mergevector after a vector reg is used
If we merge vector when a vector is used, it will generate an artificial
antidependency that can prevent 2 tex/vtx instructions to use the same
clause and thus generate extra clauses that reduce performance.
There is no test case as such situation is really hard to predict.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187516
91177308-0d34-0410-b5e6-
96231b3b80d8
Vincent Lejeune [Wed, 31 Jul 2013 19:32:07 +0000 (19:32 +0000)]
R600: Avoid more than 4 literals in the same instruction group at scheduling
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187515
91177308-0d34-0410-b5e6-
96231b3b80d8
Vincent Lejeune [Wed, 31 Jul 2013 19:31:56 +0000 (19:31 +0000)]
R600: Non vector only instruction can be scheduled on trans unit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187514
91177308-0d34-0410-b5e6-
96231b3b80d8
Vincent Lejeune [Wed, 31 Jul 2013 19:31:41 +0000 (19:31 +0000)]
R600: Don't mix LDS and non-LDS instructions in the same group
There are a lot of restrictions on instruction groups that contain
LDS instructions, so for now we will be conservative and not packetize
anything else with them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187513
91177308-0d34-0410-b5e6-
96231b3b80d8
Vincent Lejeune [Wed, 31 Jul 2013 19:31:35 +0000 (19:31 +0000)]
R600: Use SchedModel enum for is{Trans,Vector}Only functions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187512
91177308-0d34-0410-b5e6-
96231b3b80d8
Vincent Lejeune [Wed, 31 Jul 2013 19:31:20 +0000 (19:31 +0000)]
TableGen: Enumerate Schedule Model too.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187511
91177308-0d34-0410-b5e6-
96231b3b80d8
Vincent Lejeune [Wed, 31 Jul 2013 19:31:14 +0000 (19:31 +0000)]
R600: Remove predicated_break inst
We were using two instructions for similar purpose : break and
predicated break. Only predicated_break was emitted and it was
lowered at R600ControlFlowFinalizer to JUMP;CF_BREAK;POP.
This commit simplify the situation by making AMDILCFGStructurizer
emit IF_PREDICATE;BREAK;ENDIF; instead of predicated_break (which
is now removed).
There is no functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187510
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Wed, 31 Jul 2013 17:49:08 +0000 (17:49 +0000)]
Reject bitcasts between address spaces with different sizes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187506
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Sandiford [Wed, 31 Jul 2013 12:58:26 +0000 (12:58 +0000)]
[SystemZ] Implement isLegalAddressingMode()
The loop optimizers were assuming that scales > 1 were OK. I think this
is actually a bug in TargetLoweringBase::isLegalAddressingMode(),
since it seems to be trying to reject anything that isn't r+i or r+r,
but it has no default case for scales other than 0, 1 or 2. Implementing
the hook for z means that z can no longer test any change there though.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187497
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Sandiford [Wed, 31 Jul 2013 12:38:08 +0000 (12:38 +0000)]
[SystemZ] Be more careful about inverting CC masks (conditional loads)
Extend r187495 to conditional loads. I split this out because the
easiest way seemed to be to force a particular operand order in
SystemZISelDAGToDAG.cpp.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187496
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Sandiford [Wed, 31 Jul 2013 12:30:20 +0000 (12:30 +0000)]
[SystemZ] Be more careful about inverting CC masks
System z branches have a mask to select which of the 4 CC values should
cause the branch to be taken. We can invert a branch by inverting the mask.
However, not all instructions can produce all 4 CC values, so inverting
the branch like this can lead to some oddities. For example, integer
comparisons only produce a CC of 0 (equal), 1 (less) or 2 (greater).
If an integer EQ is reversed to NE before instruction selection,
the branch will test for 1 or 2. If instead the branch is reversed
after instruction selection (by inverting the mask), it will test for
1, 2 or 3. Both are correct, but the second isn't really canonical.
This patch therefore keeps track of which CC values are possible
and uses this when inverting a mask.
Although this is mostly cosmestic, it fixes undefined behavior
for the CIJNLH in branch-08.ll. Another fix would have been
to mask out bit 0 when generating the fused compare and branch,
but the point of this patch is that we shouldn't need to do that
in the first place.
The patch also makes it easier to reuse CC results from other instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187495
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Sandiford [Wed, 31 Jul 2013 12:11:07 +0000 (12:11 +0000)]
[SystemZ] Move compare-and-branch generation even later
r187116 moved compare-and-branch generation from the instruction-selection
pass to the peephole optimizer (via optimizeCompare). It turns out that even
this is a bit too early. Fused compare-and-branch instructions don't
interact well with predication, where a CC result is needed. They also
make it harder to reuse the CC side-effects of earlier instructions
(not yet implemented, but the subject of a later patch).
Another problem was that the AnalyzeBranch family of routines weren't
handling compares and branches, so we weren't able to reverse the fused
form in cases where we would reverse a separate branch. This could have
been fixed by extending AnalyzeBranch, but given the other problems,
I've instead moved the fusing to the long-branch pass, which is also
responsible for the opposite transformation: splitting out-of-range
compares and branches into separate compares and long branches.
I've added a test for the AnalyzeBranch problem. A test for the
predication problem is included in the next patch, which fixes a bug
in the choice of CC mask.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187494
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Wed, 31 Jul 2013 12:03:08 +0000 (12:03 +0000)]
Fixed assertion in Extract128BitVector()
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187493
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Sandiford [Wed, 31 Jul 2013 11:36:35 +0000 (11:36 +0000)]
[SystemZ] Postpone NI->RISBG conversion to convertToThreeAddress()
r186399 aggressively used the RISBG instruction for immediate ANDs,
both because it can handle some values that AND IMMEDIATE can't,
and because it allows the destination register to be different from
the source. I realized later while implementing the distinct-ops
support that it would be better to leave the choice up to
convertToThreeAddress() instead. The AND IMMEDIATE form is shorter
and is less likely to be cracked.
This is a problem for 32-bit ANDs because we assume that all 32-bit
operations will leave the high word untouched, whereas RISBG used in
this way will either clear the high word or copy it from the source
register. The patch uses the z196 instruction RISBLG for this instead.
This means that z10 will be restricted to NILL, NILH and NILF for
32-bit ANDs, but I think that should be OK for now. Although we're
using z10 as the base architecture, the optimization work is going
to be focused more on z196 and zEC12.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187492
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Wed, 31 Jul 2013 11:35:14 +0000 (11:35 +0000)]
Added INSERT and EXTRACT intructions from AVX-512 ISA.
All insertf*/extractf* functions replaced with insert/extract since we have insertf and inserti forms.
Added lowering for INSERT_VECTOR_ELT / EXTRACT_VECTOR_ELT for 512-bit vectors.
Added lowering for EXTRACT/INSERT subvector for 512-bit vectors.
Added a test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187491
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Sandiford [Wed, 31 Jul 2013 11:17:35 +0000 (11:17 +0000)]
[SystemZ] Add RISBLG and RISBHG instruction definitions
The next patch will make use of RISBLG for codegen.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187490
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Trieu [Wed, 31 Jul 2013 04:07:28 +0000 (04:07 +0000)]
Add parentheses to silence gcc warning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187482
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Trick [Wed, 31 Jul 2013 03:24:31 +0000 (03:24 +0000)]
Fix register pressure tables on ARM.
The heuristic that merges register pressure sets was bogus for ARM's S/D regs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187479
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Trick [Wed, 31 Jul 2013 03:24:28 +0000 (03:24 +0000)]
Add tracing to the tblgen register pressure table generator.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187478
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 31 Jul 2013 03:22:07 +0000 (03:22 +0000)]
Increment arg_count inside the loop in printInline. Patch by Joe Matarazzo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187477
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 31 Jul 2013 02:47:52 +0000 (02:47 +0000)]
Changed register names (and pointer keywords) to be lower case when using Intel X86 assembler syntax.
Patch by Richard Mitton.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187476
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Trick [Wed, 31 Jul 2013 02:43:40 +0000 (02:43 +0000)]
Fix a severe compile time problem when forming large SCEV expressions.
This fix is very lightweight. The same fix already existed for AddRec
but was missing for NAry expressions.
This is obviously an improvement and I'm unsure how to test compile
time problems.
Patch by Xiaoyi Guo!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187475
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 31 Jul 2013 02:00:15 +0000 (02:00 +0000)]
Remove trailing whitespace and some tab characters.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187472
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 31 Jul 2013 01:50:26 +0000 (01:50 +0000)]
Fixed incorrect disassembly for MOV16o16a when using Intel syntax.
Patch by Richard Mitton.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187471
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Wed, 31 Jul 2013 01:26:24 +0000 (01:26 +0000)]
Fix crashing on invalid inline asm with matching constraints.
For a testcase like the following:
typedef unsigned long uint64_t;
typedef struct {
uint64_t lo;
uint64_t hi;
} blob128_t;
void add_128_to_128(const blob128_t *in, blob128_t *res) {
asm ("PAND %1, %0" : "+Q"(*res) : "Q"(*in));
}
where we'll fail to allocate the register for the output constraint,
our matching input constraint will not find a register to match,
and could try to search past the end of the current operands array.
On the idea that we'd like to attempt to keep compilation going
to find more errors in the module, change the error cases when
we're visiting inline asm IR to return immediately and avoid
trying to create a node in the DAG. This leaves us with only
a single error message per inline asm instruction, but allows us
to safely keep going in the general case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187470
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Wed, 31 Jul 2013 00:57:41 +0000 (00:57 +0000)]
[mips] Rename instruction DANDi to ANDi64.
No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187469
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Wed, 31 Jul 2013 00:55:34 +0000 (00:55 +0000)]
[mips] Define instruction itineraries IIArith and IILogic.
No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187468
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Wed, 31 Jul 2013 00:17:33 +0000 (00:17 +0000)]
Fix ptr vector inconsistency in CreatePointerCast
One form would accept a vector of pointers, and the other did not.
Make both accept vectors of pointers, and add an assertion
for the number of elements.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187464
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Wed, 31 Jul 2013 00:10:25 +0000 (00:10 +0000)]
Fix windows' implementation of status when a file doesn't exist.
The unix one was returning no_such_file_or_directory, but the windows one
was return success.
Update the one one caller that was depending on the old behavior.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187463
91177308-0d34-0410-b5e6-
96231b3b80d8
Owen Anderson [Tue, 30 Jul 2013 23:53:17 +0000 (23:53 +0000)]
Preserve fast-math flags when folding (fsub x, (fneg y)) to (fadd x, y).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187462
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Tue, 30 Jul 2013 22:50:44 +0000 (22:50 +0000)]
Reflow this to be easier to read.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187459
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Tue, 30 Jul 2013 22:35:06 +0000 (22:35 +0000)]
Make these just inline, not static inline.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187457
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Tue, 30 Jul 2013 22:34:30 +0000 (22:34 +0000)]
Make sure that -gsplit-dwarf isn't passed to the linker.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187456
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Tue, 30 Jul 2013 22:27:10 +0000 (22:27 +0000)]
Respect address space sizes in isEliminableCastPair.
This avoids constant folding bitcast/ptrtoint/inttoptr combinations
that have illegal bitcasts between differently sized address spaces.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187455
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Tue, 30 Jul 2013 22:02:14 +0000 (22:02 +0000)]
Revert "Remove isCastable since nothing uses it now"
Apparently dragonegg uses it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187454
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Tue, 30 Jul 2013 21:44:10 +0000 (21:44 +0000)]
Add capability for building with -gsplit-dwarf to the cmake build.
In limited testing this seems to work. Caveat emptor.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187452
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Tue, 30 Jul 2013 21:11:17 +0000 (21:11 +0000)]
Remove isCastable since nothing uses it now
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187448
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 30 Jul 2013 21:01:36 +0000 (21:01 +0000)]
isKnownToBeAPowerOfTwo: Strengthen isKnownToBeAPowerOfTwo's analysis on add instructions
Call into ComputeMaskedBits to figure out which bits are set on both add
operands and determine if the value is a power-of-two-or-zero or not.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187445
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Tue, 30 Jul 2013 20:45:05 +0000 (20:45 +0000)]
Change behavior of calling bitcasted alias functions.
It will now only convert the arguments / return value and call
the underlying function if the types are able to be bitcasted.
This avoids using fp<->int conversions that would occur before.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187444
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Tue, 30 Jul 2013 20:42:19 +0000 (20:42 +0000)]
[mips] Delete instruction format for "bal".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187443
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Trick [Tue, 30 Jul 2013 20:34:59 +0000 (20:34 +0000)]
This test may have been sensitive to the ARM ABI...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187442
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 30 Jul 2013 20:25:53 +0000 (20:25 +0000)]
Implement getUniqueID for directories on windows.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187441
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Tue, 30 Jul 2013 20:24:24 +0000 (20:24 +0000)]
[mips] Define "bal" as a pseudo instruction. Also, fix bug in the InstAlias that
turns "bal" into "bgezal".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187440
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 30 Jul 2013 20:02:18 +0000 (20:02 +0000)]
Remove dead code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187439
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Trick [Tue, 30 Jul 2013 19:59:19 +0000 (19:59 +0000)]
Down-scale slot index distance to save bits.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187438
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Trick [Tue, 30 Jul 2013 19:59:15 +0000 (19:59 +0000)]
whitespace
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187437
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Trick [Tue, 30 Jul 2013 19:59:12 +0000 (19:59 +0000)]
MI Sched: Track live-thru registers.
When registers must be live throughout the scheduling region, increase
the limit for the register class. Once we exceed the original limit,
they will be spilled, and there's no point further reducing pressure.
This isn't a perfect heuristics but avoids a situation where the
scheduler could become trapped by trying to achieve the impossible.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187436
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Trick [Tue, 30 Jul 2013 19:59:08 +0000 (19:59 +0000)]
MI Sched fix: assert "Disconnected LRG within the scheduling region."
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187435
91177308-0d34-0410-b5e6-
96231b3b80d8
Venkatraman Govindaraju [Tue, 30 Jul 2013 19:53:10 +0000 (19:53 +0000)]
[Sparc] Rewrite MBB's live-in registers for leaf functions. Also, add
register i7 as a live-in if current function's return address is taken.
This revision fixes PR16269.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187433
91177308-0d34-0410-b5e6-
96231b3b80d8
Rui Ueyama [Tue, 30 Jul 2013 19:03:20 +0000 (19:03 +0000)]
Implement TokenizeWindowsCommandLine.
This is a follow up patch for r187390 to implement the parser for the
Windows-style command line. This should follow the rule as described
at http://msdn.microsoft.com/en-us/library/windows/desktop/17w5ykft(v=vs.85).aspx
Differential Revision: http://llvm-reviews.chandlerc.com/D1235
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187430
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Malea [Tue, 30 Jul 2013 16:16:11 +0000 (16:16 +0000)]
Fix parameter ordering bug in createDebugIRPass()
- Thanks to Ilia Filippov for pointing out the inconsistency!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187424
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Tue, 30 Jul 2013 14:31:03 +0000 (14:31 +0000)]
R600/SI: Expand vector fp <-> int conversions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187421
91177308-0d34-0410-b5e6-
96231b3b80d8
Vladimir Medic [Tue, 30 Jul 2013 10:12:14 +0000 (10:12 +0000)]
This patch implements parsing of mips FCC register operands. The example instructions have been added to test files.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187410
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Wendling [Tue, 30 Jul 2013 08:26:24 +0000 (08:26 +0000)]
Fix underscore to be the proper length.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187406
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Tue, 30 Jul 2013 04:43:08 +0000 (04:43 +0000)]
[ARM] check bitwidth in PerformORCombine
When simplifying a (or (and B A) (and C ~A)) to a (VBSL A B C) ensure that the
bitwidth of the second operands to both ands match before comparing the negation
of the values.
Split the check of the value of the second operands to the ands. Move the cast
and variable declaration slightly higher to make it slightly easier to follow.
Bug-Id: 16700
Signed-off-by: Saleem Abdulrasool <compnerd@compnerd.org>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187404
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 30 Jul 2013 04:06:06 +0000 (04:06 +0000)]
Remove more dead documentation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187403
91177308-0d34-0410-b5e6-
96231b3b80d8
Venkatraman Govindaraju [Tue, 30 Jul 2013 02:26:29 +0000 (02:26 +0000)]
[Sparc] Use call's debugloc for the unimp instruction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187402
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Schmidt [Tue, 30 Jul 2013 00:50:39 +0000 (00:50 +0000)]
[PowerPC] Skeletal FastISel support for 64-bit PowerPC ELF.
This is the first of many upcoming patches for PowerPC fast
instruction selection support. This patch implements the minimum
necessary for a functional (but extremely limited) FastISel pass. It
allows the table-generated portions of the selector to be created and
used, but in most cases selection will fall back to the DAG selector.
None of the block terminator instructions are implemented yet, and
most interesting instructions require some special handling.
Therefore there aren't any new test cases with this patch. There will
be quite a few tests coming with future patches.
This patch adds the make/CMake support for the new code (including
tablegen -gen-fast-isel) and creates the FastISel object for PPC64 ELF
only. It instantiates the necessary virtual functions
(TargetSelectInstruction, TargetMaterializeConstant,
TargetMaterializeAlloca, tryToFoldLoadIntoMI, and FastLowerArguments),
but of these, only TargetMaterializeConstant contains any useful
implementation. This is present since the table-generated code
requires the ability to materialize integer constants for some
instructions.
This patch has been tested by building and running the
projects/test-suite code with -O0. All tests passed with the
exception of a couple of long-running tests that time out using -O0
code generation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187399
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Tue, 30 Jul 2013 00:27:16 +0000 (00:27 +0000)]
[R600] Replicate old DAGCombiner behavior in target specific DAG combine.
build_vector is lowered to REG_SEQUENCE, which is something the register
allocator does a good job at optimizing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187397
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Tue, 30 Jul 2013 00:24:09 +0000 (00:24 +0000)]
[DAGCombiner] insert_vector_elt: Avoid building a vector twice.
This patch prevents the following combine when the input vector is used more
than once.
insert_vector_elt (build_vector elt0, ..., eltN), NewEltIdx, idx
=>
build_vector elt0, ..., NewEltIdx, ..., eltN
The reasons are:
- Building a vector may be expensive, so try to reuse the existing part of a
vector instead of creating a new one (think big vectors).
- elt0 to eltN now have two users instead of one. This may prevent some other
optimizations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187396
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Tue, 30 Jul 2013 00:20:06 +0000 (00:20 +0000)]
Move file to X86 and add a triple to fix darwin bots for now.
The problem is due to the section name being explicitly mentioned in
the IR and differing between the two platforms.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187394
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Mon, 29 Jul 2013 23:53:08 +0000 (23:53 +0000)]
Fix a truly egregious thinko in anonymous namespace check,
update testcase to make sure we generate debug info for walrus
by adding a non-trivial constructor and verify that we don't
emit an ODR signature for the type.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187393
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Mon, 29 Jul 2013 23:53:05 +0000 (23:53 +0000)]
Make sure we don't emit an ODR hash for types with no name and make
sure the comments for each testcase are a bit easier to distinguish.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187392
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Mon, 29 Jul 2013 23:53:01 +0000 (23:53 +0000)]
Clarify comments for types contained in anonymous namespaces and
odr hashes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187391
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Mon, 29 Jul 2013 22:24:32 +0000 (22:24 +0000)]
Elaborate a bit on the type unit and ODR conditional code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187385
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Mon, 29 Jul 2013 21:55:38 +0000 (21:55 +0000)]
Make file_status::getUniqueID const.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187383
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Mon, 29 Jul 2013 21:35:48 +0000 (21:35 +0000)]
Delete documentation for deleted options.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187380
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Mon, 29 Jul 2013 21:26:49 +0000 (21:26 +0000)]
Include st_dev to make the result of getUniqueID actually unique.
This will let us use getUniqueID instead of st_dev directly on clang.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187378
91177308-0d34-0410-b5e6-
96231b3b80d8
Manman Ren [Mon, 29 Jul 2013 20:18:19 +0000 (20:18 +0000)]
Debug Info: enable verifier for testing cases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187375
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Mon, 29 Jul 2013 19:08:34 +0000 (19:08 +0000)]
[mips] Add comment and simplify function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187371
91177308-0d34-0410-b5e6-
96231b3b80d8
Nadav Rotem [Mon, 29 Jul 2013 18:47:36 +0000 (18:47 +0000)]
Add the C source code to the test to make it easier to update when debug info changes.
Thanks Eric.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187368
91177308-0d34-0410-b5e6-
96231b3b80d8
Nadav Rotem [Mon, 29 Jul 2013 18:18:46 +0000 (18:18 +0000)]
SLPVectorier: update the debug location for the new instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187363
91177308-0d34-0410-b5e6-
96231b3b80d8
Manman Ren [Mon, 29 Jul 2013 18:12:58 +0000 (18:12 +0000)]
Debug Info: update testing cases to pass verifier.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187362
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Rieck [Mon, 29 Jul 2013 13:58:39 +0000 (13:58 +0000)]
Use proper section suffix for COFF weak symbols
32-bit symbols have "_" as global prefix, but when forming the name of
COMDAT sections this prefix is ignored. The current behavior assumes that
this prefix is always present which is not the case for 64-bit and names
are truncated.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187356
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Rieck [Mon, 29 Jul 2013 13:07:06 +0000 (13:07 +0000)]
Proper va_arg/va_copy lowering on win64
Win64 uses CharPtrBuiltinVaList instead of X86_64ABIBuiltinVaList like
other 64-bit targets.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187355
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Mon, 29 Jul 2013 13:02:08 +0000 (13:02 +0000)]
Re-application of 187310. Re-enabling warning C4275 for MSVC 11 and up, but not MSVC 10 since it is still required there.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187354
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Mon, 29 Jul 2013 12:40:31 +0000 (12:40 +0000)]
Add support for the 's' operation to llvm-ar.
If no other operation is specified, 's' becomes an operation instead of an
modifier. The s operation just creates a symbol table. It is the same as
running ranlib.
We assume the archive was created by a sane ar (like llvm-ar or gnu ar) and
if the symbol table is present, then it is current. We use that to optimize
the most common case: a broken build system that thinks it has to run ranlib.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187353
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Rieck [Mon, 29 Jul 2013 12:30:12 +0000 (12:30 +0000)]
MC: Support larger COFF string tables
Single-slash encoded entries do not require a terminating null. This bumps
the maximum table size from ~1MB to ~9.5MB.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187352
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Mon, 29 Jul 2013 11:03:50 +0000 (11:03 +0000)]
ExceptionDemo.cpp: Tweak a @param. [-Wdocumentation]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187351
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 29 Jul 2013 11:02:08 +0000 (11:02 +0000)]
Some Intel Penryn CPUs come with SSE4 disabled. Detect them as core 2.
PR16721.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187350
91177308-0d34-0410-b5e6-
96231b3b80d8
Silviu Baranga [Mon, 29 Jul 2013 09:25:50 +0000 (09:25 +0000)]
Allow generation of vmla.f32 instructions when targeting Cortex-A15. The patch also adds the VFP4 feature to Cortex-A15 and fixes the DontUseFusedMAC predicate so that we can still generate vmla.f32 instructions on non-darwin targets with VFP4.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187349
91177308-0d34-0410-b5e6-
96231b3b80d8
Robert Lytton [Mon, 29 Jul 2013 09:23:13 +0000 (09:23 +0000)]
test commit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187348
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Mon, 29 Jul 2013 09:06:53 +0000 (09:06 +0000)]
Teach the AllocaPromoter which is wrapped around the SSAUpdater
infrastructure to do promotion without a domtree the same smarts about
looking through GEPs, bitcasts, etc., that I just taught mem2reg about.
This way, if SROA chooses to promote an alloca which still has some
noisy instructions this code can cope with them.
I've not used as principled of an approach here for two reasons:
1) This code doesn't really need it as we were already set up to zip
through the instructions used by the alloca.
2) I view the code here as more of a hack, and hopefully a temporary one.
The SSAUpdater path in SROA is a real sore point for me. It doesn't make
a lot of architectural sense for many reasons:
- We're likely to end up needing the domtree anyways in a subsequent
pass, so why not compute it earlier and use it.
- In the future we'll likely end up needing the domtree for parts of the
inliner itself.
- If we need to we could teach the inliner to preserve the domtree. Part
of the re-work of the pass manager will allow this to be very powerful
even in large SCCs with many functions.
- Ultimately, computing a domtree has gotten significantly faster since
the original SSAUpdater-using code went into ScalarRepl. We no longer
use domfrontiers, and much of domtree is lazily done based on queries
rather than eagerly.
- At this point keeping the SSAUpdater-based promotion saves a total of
0.7% on a build of the 'opt' tool for me. That's not a lot of
performance given the complexity!
So I'm leaving this a bit ugly in the hope that eventually we just
remove all of this nonsense.
I can't even readily test this because this code isn't reachable except
through SROA. When I re-instate the patch that fast-tracks allocas
already suitable for promotion, I'll add a testcase there that failed
before this change. Before that, SROA will fix any test case I give it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187347
91177308-0d34-0410-b5e6-
96231b3b80d8
Nadav Rotem [Mon, 29 Jul 2013 05:13:00 +0000 (05:13 +0000)]
Don't vectorize when the attribute NoImplicitFloat is used.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187340
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sun, 28 Jul 2013 23:43:28 +0000 (23:43 +0000)]
Fix -Wdocumentation warnings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187336
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sun, 28 Jul 2013 22:00:33 +0000 (22:00 +0000)]
Update comments for SSAUpdater to use the modern doxygen comment
standards for LLVM. Remove duplicated comments on the interface from the
implementation file (implementation comments are left there of course).
Also clean up, re-word, and fix a few typos and errors in the commenst
spotted along the way.
This is in preparation for changes to these files and to keep the
uninteresting tidying in a separate commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187335
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 28 Jul 2013 21:28:02 +0000 (21:28 +0000)]
Remove use of sprintf added to X86 disassembler tablegen code. Send message with instruction name to errs() instead and use a generic message for the llvm_unreachable. Consistent with other places in this file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187333
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Sun, 28 Jul 2013 18:04:26 +0000 (18:04 +0000)]
Partial revert of 187310; it seems MSVC 10 still spits out this warning, but MSVC 11 does not.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187331
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sun, 28 Jul 2013 09:05:49 +0000 (09:05 +0000)]
Temporarily revert r187323 until I update SSAUpdater to match mem2reg.
I forgot that we had two totally independent things here. :: sigh ::
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187327
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Sun, 28 Jul 2013 08:45:12 +0000 (08:45 +0000)]
fixed compilation issue
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187325
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Sun, 28 Jul 2013 08:28:38 +0000 (08:28 +0000)]
Added encoding prefixes for KNL instructions (EVEX).
Added 512-bit operands printing.
Added instruction formats for KNL instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187324
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sun, 28 Jul 2013 08:27:12 +0000 (08:27 +0000)]
Now that mem2reg understands how to cope with a slightly wider set of
uses of an alloca, we can pre-compute promotability while analyzing an
alloca for splitting in SROA. That lets us short-circuit the common case
of a bunch of trivially promotable allocas. This cuts 20% to 30% off the
run time of SROA for typical frontend-generated IR sequneces I'm seeing.
It gets the new SROA to within 20% of ScalarRepl for such code. My
current benchmark for these numbers is PR15412, but it fits the general
pattern of IR emitted by Clang so it should be widely applicable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187323
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sun, 28 Jul 2013 06:43:11 +0000 (06:43 +0000)]
Thread DataLayout through the callers and into mem2reg. This will be
useful in a subsequent patch, but causes an unfortunate amount of noise,
so I pulled it out into a separate patch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187322
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Schmidt [Sun, 28 Jul 2013 03:23:32 +0000 (03:23 +0000)]
[PowerPC] Add comment explaining preprocessor directive.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187320
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Schmidt [Sun, 28 Jul 2013 02:13:24 +0000 (02:13 +0000)]
Revert 187318
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187319
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Schmidt [Sun, 28 Jul 2013 02:08:13 +0000 (02:08 +0000)]
[PowerPC] Remove unnecessary preprocessor checking.
The tests !defined(__ppc__) && !defined(__powerpc__) are not needed
or helpful when verifying that code is being compiled for a 64-bit
target. The simpler test provided by this revision is sufficient to
tell if the target is 64-bit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187318
91177308-0d34-0410-b5e6-
96231b3b80d8