120584 Commits

Author SHA1 Message Date
Cameron Esfahani
7ec94a3dea Explicitly clear the MI operand list when getInstruction() is called. Call MI.clear() within MCD::OPC_Decode case and inside of translateInstruction() for the X86 target. Remove now unnecessary MI.clear() from ARMDisassembler.
Summary: Explicitly clear the MI operand list when getInstruction() is called.

Reviewers: hfinkel, t.p.northover, hvarga, kparzysz, jyknight, qcolombet, uweigand

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D11665

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244557 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11 01:15:07 +00:00
Tyler Nowicki
f175a4758b Print vectorization analysis when loop hint is specified.
This patch and a relatec clang patch solve the problem of having to explicitly enable analysis when specifying a loop hint pragma to get the diagnostics. Passing AlwasyPrint as the pass name (see below) causes the front-end to print the diagnostic if the user has specified '-Rpass-analysis' without an '=<target-pass>’. Users of loop hints can pass that compiler option without having to specify the pass and they will get diagnostics for only those loops with loop hints.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244555 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11 01:09:15 +00:00
Nick Lewycky
ad12f71abc Update the syntax for load instruction in this example.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244554 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11 01:05:16 +00:00
Tyler Nowicki
c57ee2b13e Moved LoopVectorizeHints and related functions before LoopVectorizationLegality and LoopVectorizationCostModel.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244552 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11 00:52:54 +00:00
JF Bastien
d01f7fced4 WebAssembly: simply assert on SNaN and NaNs with payloads
Summary: convertToHexString doesn't represent them correctly at this point in time. This is a follow-up to sunfish's suggestion in D11914.

Subscribers: llvm-commits, sunfish, jfb

Differential Revision: http://reviews.llvm.org/D11925

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244551 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11 00:49:20 +00:00
Tyler Nowicki
ef5b3ab595 Simplify processLoop() by moving loop hint verification into Hints::allowVectorization().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244550 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11 00:35:44 +00:00
Alex Lorenz
2a04c76ecd MIR Serialization: Serialize UsedPhysRegMask from the machine register info.
This commit serializes the UsedPhysRegMask register mask from the machine
register information class. The mask is serialized as an inverted
'calleeSavedRegisters' mask to keep the output minimal.

This commit also allows the MIR parser to infer this mask from the register
mask operands if the machine function doesn't specify it.

Reviewers: Duncan P. N. Exon Smith


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244548 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11 00:32:49 +00:00
Sanjay Patel
9d469f4f5f use range-based for loops; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244545 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11 00:26:05 +00:00
Kostya Serebryany
0e2c9c8c4a [libFuzzer] don't crash if the condition in a switch has unusual type (e.g. i72)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244544 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11 00:24:39 +00:00
Sanjoy Das
6ea7654870 Address post-commit review from r243378.
This checks that bork_directive occurs exactly twice in the test output.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244543 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11 00:20:24 +00:00
Adam Nemet
5bcbae6404 [LAA] Change name from addRuntimeCheck to addRuntimeChecks, NFC
This was requested by Hal in D11205.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244540 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-11 00:09:37 +00:00
Alex Lorenz
2084c0d3a2 MIR Parser: Report an error when a stack object is redefined.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244536 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 23:50:41 +00:00
Joerg Sonnenberger
ec605efedd Add lduw and lwua aliases for SPARCv9.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244535 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 23:47:22 +00:00
Alex Lorenz
dd0dde5b84 MIR Parser: Report an error when a fixed stack object is redefined.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244534 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 23:45:02 +00:00
Joerg Sonnenberger
3e8ed5f441 Load/store for float registers from/to alternate space.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244532 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 23:33:17 +00:00
Sanjay Patel
05e835fb9d use range-based for loop; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244531 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 23:29:41 +00:00
Alex Lorenz
8615171600 MIR Serialization: Serialize the liveout register mask machine operands.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244529 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 23:24:42 +00:00
Sanjay Patel
f838c41c99 fix minsize detection: minsize attribute implies optimizing for size
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244528 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 23:07:26 +00:00
Adam Nemet
3de535e566 [LoopVer] Remove unused pointer partition argument, NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244527 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 23:05:31 +00:00
Tyler Nowicki
22876919c3 Extend late diagnostics to include late test for runtime pointer checks.
This patch moves checking the threshold of runtime pointer checks to the vectorization requirements (late diagnostics) and emits a diagnostic that infroms the user the loop would be vectorized if not for exceeding the pointer-check threshold. Clang will also append the options that can be used to allow vectorization.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244523 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 23:01:55 +00:00
JF Bastien
60b5a25d13 WebAssembly: print immediates
Summary:
For now output using C99's hexadecimal floating-point representation.

This patch also cleans up how machine operands are printed: instead of special-casing per type of machine instruction, the code now handles operands generically.

Reviewers: sunfish

Subscribers: llvm-commits, jfb

Differential Revision: http://reviews.llvm.org/D11914

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244520 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 22:36:48 +00:00
Joerg Sonnenberger
edb32ec099 Add support for the signx instrution alias of SPARCv9.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244519 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 22:32:25 +00:00
Cong Hou
7ab9abd7fc NFC. Fix some format issues in lib/CodeGen/MachineBasicBlock.cpp.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244518 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 22:27:10 +00:00
Justin Bogner
8179d06019 cmake: Make CMAKE_BUILD_TYPE check case-insensitive
Juergen pointed out that this variable is treated in a case
insensitive way.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244516 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 21:58:27 +00:00
Alex Lorenz
43e844c48b MachineVerifier: Handle the optional def operand in a PATCHPOINT instruction.
The PATCHPOINT instructions have a single optional defined register operand,
but the machine verifier can't verify the optional defined register operands.
This commit makes sure that the machine verifier won't report an error when a
PATCHPOINT instruction doesn't have its optional defined register operand.
This change will allow us to enable the machine verifier for the code
generation tests for the patchpoint intrinsics.

Reviewers: Juergen Ributzka


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244513 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 21:47:36 +00:00
Reid Kleckner
b28578be8a [llvm-symbolizer] Remove underscores and other C mangling on Windows
Summary:
This makes it so that reports symbolized after the fact with
llvm-symbolizer are more similar to the ones we generate at runtime with
in-process dbghelp.

Reviewers: samsonov

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D11785

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244512 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 21:47:11 +00:00
Rafael Espindola
0d34e64f73 Don't iterate over all sections in the ELFFile constructor.
With this we finally have an ELFFile that is O(1) to construct. This is helpful
for programs like lld which have to do their own section walk.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244510 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 21:29:35 +00:00
Sanjay Patel
ac7345f4c1 remove function names from comments; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244509 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 21:28:16 +00:00
Alex Lorenz
8843f88076 StackMap: FastISel: Add an appropriate number of immediate operands to the
frame setup instruction.

This commit ensures that the stack map lowering code in FastISel adds an
appropriate number of immediate operands to the frame setup instruction.

The previous code added just one immediate operand, which was fine for a target
like AArch64, but on X86 the ADJCALLSTACKDOWN64 instruction needs two explicit
operands. This caused the machine verifier to report an error when the old code
added just one.

Reviewers: Juergen Ributzka

Differential Revision: http://reviews.llvm.org/D11853


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244508 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 21:27:03 +00:00
Rafael Espindola
bfbf462c0d Rename improperly named variable. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244507 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 21:25:44 +00:00
Tyler Nowicki
35a800f993 Make fp vectorization test X86 specified to avoid cost-model related problems on arm-thumb and hexagon.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244505 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 21:14:38 +00:00
Rafael Espindola
afa388d65e Add a test showing that objdump (and so ObjectFIle) can handle shndx.
It was already passing, we were just not testing the code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244504 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 21:00:15 +00:00
JF Bastien
010fa7174d x86: Emit LAHF/SAHF instead of PUSHF/POPF
NaCl's sandbox doesn't allow PUSHF/POPF out of security concerns (priviledged emulators have forgotten to mask system bits in the past, and EFLAGS's DF bit is a constant source of hilarity). Commit r220529 fixed PR20376 by saving cmpxchg's flags result using EFLAGS, this commit now generated LAHF/SAHF instead, for all of x86 (not just NaCl) because it leads to an overall performance gain over PUSHF/POPF.

As with the previous patch this code generation is pretty bad because it occurs very later, after register allocation, and in many cases it rematerializes flags which were already available (e.g. already in a register through SETE). Fortunately it's somewhat rare that this code needs to fire.

I did [[ https://github.com/jfbastien/benchmark-x86-flags | a bit of benchmarking ]], the results on an Intel Haswell E5-2690 CPU at 2.9GHz are:

| Time per call (ms)  | Runtime (ms) | Benchmark                      |
| 0.000012514         |      6257    | sete.i386                      |
| 0.000012810         |      6405    | sete.i386-fast                 |
| 0.000010456         |      5228    | sete.x86-64                    |
| 0.000010496         |      5248    | sete.x86-64-fast               |
| 0.000012906         |      6453    | lahf-sahf.i386                 |
| 0.000013236         |      6618    | lahf-sahf.i386-fast            |
| 0.000010580         |      5290    | lahf-sahf.x86-64               |
| 0.000010304         |      5152    | lahf-sahf.x86-64-fast          |
| 0.000028056         |     14028    | pushf-popf.i386                |
| 0.000027160         |     13580    | pushf-popf.i386-fast           |
| 0.000023810         |     11905    | pushf-popf.x86-64              |
| 0.000026468         |     13234    | pushf-popf.x86-64-fast         |

Clearly `PUSHF`/`POPF` are suboptimal. It doesn't really seems to be worth teaching LLVM about individual flags, at least not for this purpose.

Reviewers: rnk, jvoung, t.p.northover

Subscribers: llvm-commits

Differential revision: http://reviews.llvm.org/D6629

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244503 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 20:59:36 +00:00
Rafael Espindola
e03b9f566c Use higher level functions in llvm-objdump.
This matches the rest of llvm-objdump better and isolates it from upcoming
changes to ELFFile.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244500 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 20:50:40 +00:00
Sanjay Patel
b718a987d0 fix minsize detection: minsize attribute implies optimizing for size
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244499 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 20:45:44 +00:00
Sanjay Patel
8ea2236e27 [x86, SSE]]add missing tests for load folding with partial register update
The minsize case is wrong; that will be fixed in the next commit.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244498 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 20:34:34 +00:00
Rafael Espindola
4d79d2fcbf Delete getDotSymtabSec.
Another step in avoiding iterating over all sections in the ELFFile constructor.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244496 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 20:25:04 +00:00
Simon Pilgrim
ac77529540 [InstCombine] Move SSE2/AVX2 arithmetic vector shift folding to instcombiner
As discussed in D11760, this patch moves the (V)PSRA(WD) arithmetic shift-by-constant folding to InstCombine to match the logical shift implementations.

Differential Revision: http://reviews.llvm.org/D11886

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244495 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 20:21:15 +00:00
Tyler Nowicki
90622a1bc9 Removed unused and incorrectly implemented classof() on Optimization Remark base class.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244494 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 20:13:32 +00:00
Colin LeMahieu
eb9e5f081c [TableGen] NFC improving comments about what the tokenized identifiers will contain.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244493 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 19:58:06 +00:00
Jonathan Roelofs
db61c30220 Fix a few more cases of 'CHECK[^:]*$'. NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244491 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 19:56:39 +00:00
Tyler Nowicki
9224227bc2 Late evaluation of the fast-math vectorization requirement.
This patch moves the verification of fast-math to just before vectorization is done. This way we can tell clang to append the command line options would that allow floating-point commutativity. Specifically those are enableing fast-math or specifying a loop hint. 


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244489 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 19:51:46 +00:00
Jonathan Roelofs
beb8a9efb7 Fix another case of 'CHECK[^:]*$'. NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244486 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 19:22:55 +00:00
Tyler Nowicki
5a88b327ad Modify diagnostic messages to clearly indicate the why interleaving wasn't done.
Sometimes interleaving is not beneficial, as determined by the cost-model and sometimes it is disabled by a loop hint (by the user). This patch modifies the diagnostic messages to make it clear why interleaving wasn't done.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244485 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 19:14:16 +00:00
James Y Knight
5b2a2849af [Sparc] Implement i64 load/store support for 32-bit sparc.
The LDD/STD instructions can load/store a 64bit quantity from/to
memory to/from a consecutive even/odd pair of (32-bit) registers. They
are part of SparcV8, and also present in SparcV9. (Although deprecated
there, as you can store 64bits in one register).

As recommended on llvmdev in the thread "How to enable use of 64bit
load/store for 32bit architecture" from Apr 2015, I've modeled the
64-bit load/store operations as working on a v2i32 type, rather than
making i64 a legal type, but with few legal operations. The latter
does not (currently) work, as there is much code in llvm which assumes
that if i64 is legal, operations like "add" will actually work on it.

The same assumption does not hold for v2i32 -- for vector types, it is
workable to support only load/store, and expand everything else.

This patch:
- Adds a new register class, IntPair, for even/odd pairs of registers.

- Modifies the list of reserved registers, the stack spilling code,
  and register copying code to support the IntPair register class.

- Adds support in AsmParser. (note that in asm text, you write the
  name of the first register of the pair only. So the parser has to
  morph the single register into the equivalent paired register).

- Adds the new instructions themselves (LDD/STD/LDDA/STDA).

- Hooks up the instructions and registers as a vector type v2i32. Adds
  custom legalizer to transform i64 load/stores into v2i32 load/stores
  and bitcasts, so that the new instructions can actually be
  generated, and marks all operations other than load/store on v2i32
  as needing to be expanded.

- Copies the unfortunate SelectInlineAsm hack from ARMISelDAGToDAG.
  This hack undoes the transformation of i64 operands into two
  arbitrarily-allocated separate i32 registers in
  SelectionDAGBuilder. and instead passes them in a single
  IntPair. (Arbitrarily allocated registers are not useful, asm code
  expects to be receiving a pair, which can be passed to ldd/std.)

Also adds a bunch of test cases covering all the bugs I've added along
the way.

Differential Revision: http://reviews.llvm.org/D8713

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244484 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 19:11:39 +00:00
Rafael Espindola
47b7f78637 rename toELFShdrIter to getSection and move it closer to getSymbol. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244483 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 19:10:37 +00:00
Rafael Espindola
42f80af623 toELFSymIter and getSymbol are now the same thing. Merge them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244482 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 19:07:56 +00:00
Jonathan Roelofs
993a1116f7 Fix a bunch of trivial cases of 'CHECK[^:]*$' in the tests. NFCI
I looked into adding a warning / error for this to FileCheck, but there doesn't
seem to be a good way to avoid it triggering on the instances of it in RUN lines.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244481 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 19:01:27 +00:00
Rafael Espindola
c505e6df7a Use continue to reduce indentation. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244480 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 18:57:42 +00:00
Chad Rosier
93f90ed6e4 [AArch64] Convert a conditional check that will always be true to an assert. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244479 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 18:42:45 +00:00