| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
Instead of emitting config values in a predefined order, the code
emitter will now emit a 32-bit register index followed by the 32-bit
config value.
llvm-svn: 179546
|
| |
|
|
| |
llvm-svn: 179545
|
| |
|
|
| |
llvm-svn: 179544
|
| |
|
|
|
|
|
|
|
|
| |
Now that the CR spilling issues have been resolved, we can remove the
unmodeled-side-effect attributes from the comparison instructions (and also
mark them as isCompare). By allowing these, by default, to have unmodeled side
effects, we were hiding problems with CR spilling; but everything seems much
happier now.
llvm-svn: 179502
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes an ABI bug for non-Darwin PPC64. For the callee-saved condition
registers, the spill location is specified relative to the stack pointer (SP +
8). However, this is not relative to the SP after the new stack frame is
established, but instead relative to the caller's stack pointer (it is stored
into the linkage area of the parent's stack frame).
So, like with the link register, we don't directly spill the CRs with other
callee-saved registers, but just mark them to be spilled during prologue
generation.
In practice, this reverts r179457 for PPC64 (but leaves it in place for PPC32).
llvm-svn: 179500
|
| |
|
|
|
|
| |
Test case by llvm-stress.
llvm-svn: 179477
|
| |
|
|
|
|
| |
For when 16 TB just isn't enough.
llvm-svn: 179474
|
| |
|
|
|
|
|
| |
This is the default model for non-PIC 64-bit code. It supports
text+data+bss linked anywhere in the low 16 TB of the address space.
llvm-svn: 179473
|
| |
|
|
|
|
|
| |
64-bit code models need multiple relocations that can't be inferred from
the opcode like they can in 32-bit code.
llvm-svn: 179472
|
| |
|
|
|
|
|
| |
Constant pool entries are accessed exactly the same way as global
variables.
llvm-svn: 179471
|
| |
|
|
|
|
| |
This fixes the pic32 code model for SPARC v9.
llvm-svn: 179469
|
| |
|
|
|
|
|
|
|
| |
SDNodes and MachineOperands get target flags representing the %hi() and
%lo() assembly annotations that eventually become relocations.
Also define flags to be used by the 64-bit code models.
llvm-svn: 179468
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Leaving MFCR has having unmodeled side effects is not enough to prevent
unwanted instruction reordering post-RA. We could probably apply a stronger
barrier attribute, but there is a better way: Add all (not just the first) CR
to be spilled as live-in to the entry block, and add all CRs to the MFCR
instruction as implicitly killed.
Unfortunately, I don't have a small test case.
llvm-svn: 179465
|
| |
|
|
|
|
|
| |
Currently, only abs32 and pic32 are implemented. Add a test case for
abs32 with 64-bit code. 64-bit PIC code is currently broken.
llvm-svn: 179463
|
| |
|
|
|
|
|
| |
It doesn't seem like anybody is checking types this late in isel, so no
test case.
llvm-svn: 179462
|
| |
|
|
|
|
|
|
|
|
| |
For functions that need to spill CRs, and have dynamic stack allocations, the
value of the SP during the restore is not what it was during the save, and so
we need to use the FP in these cases (as for all of the other spills and
restores, but the CR restore has a special code path because its reserved slot,
like the link register, is specified directly relative to the adjusted SP).
llvm-svn: 179457
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The initial values were arbitrary. I want them to be more
conservative. This represents the number of latency cycles hidden by
OOO execution. In practice, I think it should be within a small factor
of the complex floating point operation latency so the scheduler can
make some attempt to hide latency even for smallish blocks.
These are by no means the best values, just a starting point for
tuning heuristics. Some benchmarks such as TSVC run faster with this
lower value for SandyBridge. I haven't run anything on Haswell, but
it's shouldn't be 2x SB.
llvm-svn: 179450
|
| |
|
|
|
|
|
|
|
|
| |
I need to handle this for the test case in my following scheduler
commit.
Work is already under way to redesign the mechanism for node order
propagation because this case by case approach is unmaintainable.
llvm-svn: 179448
|
| |
|
|
|
|
|
|
| |
lowerINTRINSIC_WO_CHAIN into MipsSETargetLowering.
No functionality changes.
llvm-svn: 179444
|
| |
|
|
| |
llvm-svn: 179434
|
| |
|
|
| |
llvm-svn: 179433
|
| |
|
|
|
|
|
| |
change intended. Test case previously added in r178568.
Part of rdar://13611297
llvm-svn: 179425
|
| |
|
|
| |
llvm-svn: 179422
|
| |
|
|
|
|
| |
instructions.
llvm-svn: 179421
|
| |
|
|
| |
llvm-svn: 179420
|
| |
|
|
|
|
| |
when parsing MS-style inline assembly. No functional change intended.
llvm-svn: 179407
|
| |
|
|
|
|
|
|
| |
is a follow on to r179393 and r179399. Test case to be added on
the clang side.
Part of rdar://13453209
llvm-svn: 179403
|
| |
|
|
|
|
|
| |
is a follow on to r179393. Test case to be added on the clang side.
Part of rdar://13453209
llvm-svn: 179399
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
According to the ARM reference manual, constant offsets are mandatory for pre-indexed addressing modes.
The MC disassembler was not obeying this when the offset is 0.
It was producing instructions like: str r0, [r1]!.
Correct syntax is: str r0, [r1, #0]!.
This change modifies the dumping of operands so that the offset is always printed, regardless of its value, when pre-indexed addressing mode is used.
Patch by Mihail Popa <Mihail.Popa@arm.com>
llvm-svn: 179398
|
| |
|
|
|
|
|
|
|
| |
immediate displacement. Specifically, add support for generating the proper IR.
We've been able to parse this for some time now. Test case to be added on the
clang side.
Part of rdar://13453209
llvm-svn: 179393
|
| |
|
|
|
|
|
|
|
|
| |
TableGen will not combine nested list 'let' bindings into a single list, and
instead uses only the inner scope. As a result, several instruction definitions
were missing implicit register defs that were in outer scopes. This de-nests
these scopes and makes all instructions have only one let binding which sets
implicit register definitions.
llvm-svn: 179392
|
| |
|
|
| |
llvm-svn: 179391
|
| |
|
|
| |
llvm-svn: 179388
|
| |
|
|
|
|
| |
predication.
llvm-svn: 179387
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is prep. work for the implementation of optimizeCompare. Many PPC
instructions have 'record' forms (in almost all cases, this means that the RC
bit is set) that cause the result of the instruction to be compared with zero,
and the result of that comparison saved in a predefined condition register. In
order to add the record forms of the instructions without too much
copy-and-paste, the relevant functions have been refactored into multiclasses
which define both the record and normal forms.
Also, two TableGen-generated mapping functions have been added which allow
querying the instruction code for the record form given the normal form (and
vice versa).
No functionality change intended.
llvm-svn: 179356
|
| |
|
|
|
|
|
|
| |
variables that use namespace alias qualifiers. Test case coming on clang side
shortly.
Part of rdar://13499009
llvm-svn: 179343
|
| |
|
|
|
|
|
| |
namespace alias qualifiers. Test case coming on clang side shortly.
Part of rdar://13499009
llvm-svn: 179339
|
| |
|
|
|
|
|
|
| |
can build up the identifier string. No test case as support for looking up
these type of identifiers hasn't been implemented on the clang side.
Part of rdar://13499009
llvm-svn: 179336
|
| |
|
|
|
|
|
|
| |
specific logic. This makes the code much less fragile. Test case coming on the
clang side in a moment.
rdar://13634327
llvm-svn: 179323
|
| |
|
|
|
|
|
|
| |
A64Imms::isLogicalImmBits and A64Imms::isLogicalImm will attempt to
execute shifts that perform undefined behavior. Instead of attempting
to perform the 64-bit rotation, treat it as a no-op.
llvm-svn: 179317
|
| |
|
|
|
|
|
|
| |
multiply instructions in MipsSEDAGToDAGISel.
This patch was supposed to be part of r178403.
llvm-svn: 179314
|
| |
|
|
|
|
|
|
|
|
| |
- Rename function.
- Pass iterator by value.
- Remove header include.
No functionality changes.
llvm-svn: 179312
|
| |
|
|
|
|
|
|
| |
As packed comparisons in AVX/SSE produce all 0s or all 1s in each SIMD lane,
vector select could be simplified to AND/OR or removed if one or both values
being selected is all 0s or all 1s.
llvm-svn: 179267
|
| |
|
|
|
|
|
| |
As these two instructions in AVX extension are privileged instructions for
special purpose, it's only expected to be used in inlined assembly.
llvm-svn: 179266
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This patch is revised based on patch from Victor Umansky
<victor.umansky@intel.com>. More cases are handled in X86's bool
simplification, i.e.
- SETCC_CARRY
- value is truncated to i1 with AND
As a by-product, PR5443 is also fixed.
llvm-svn: 179265
|
| |
|
|
| |
llvm-svn: 179263
|
| |
|
|
| |
llvm-svn: 179262
|
| |
|
|
|
|
|
| |
Because of how predication in implemented on PPC (only for branches), I think
that this is the right thing to do. No functionality change intended.
llvm-svn: 179252
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add support for the COFF relocation types IMAGE_REL_I386_DIR32NB and
IMAGE_REL_AMD64_ADDR32NB for 32- and 64-bit respectively. These are
similar to normal 4-byte relocations except that they do not include
the base address of the image.
Image-relative relocations are used for debug information (32-bit) and
SEH unwind tables (64-bit).
A new MCSymbolRef variant called 'VK_COFF_IMGREL32' is introduced to
specify such relocations. For AT&T assembly, this variant can be accessed
using the symbol suffix '@imgrel'.
llvm-svn: 179240
|
| |
|
|
| |
llvm-svn: 179223
|