| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
These instructions are available on the P5x (and later) and on the A2. They
implement the standard floating-point rounding operations (floor, trunc, etc.).
One caveat: frin (round to nearest) does not implement "ties to even", and so
is only enabled in fast-math mode.
llvm-svn: 178337
|
|
|
|
|
|
|
|
| |
register classes for Mips64 and DSP-ASE.
No functionality changes.
llvm-svn: 178328
|
|
|
|
|
|
| |
No functionality changes.
llvm-svn: 178327
|
|
|
|
|
|
| |
No functionality changes.
llvm-svn: 178326
|
|
|
|
|
|
|
|
|
| |
Mips assembler supports macros that allows the OR instruction
to have an immediate parameter. This patch adds an instruction
alias that converts this macro into a Mips ORI instruction.
Contributer: Vladimir Medic
llvm-svn: 178316
|
|
|
|
| |
llvm-svn: 178314
|
|
|
|
|
|
|
|
|
| |
- RDRAND always clears the destination value when a random value is not
available (i.e. CF == 0). This value is truncated or zero-extended as
the false boolean value to be returned. Boolean simplification needs
to skip this 'zext' or 'trunc' node.
llvm-svn: 178312
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
indirect call.
To enable a load of a call address to be folded with that call, this
load is moved from outside of callseq into callseq. Such a moving
adds a non-glued node (that load) into a glued sequence. This non-glue
load is only removed when DAG selection folds them into a memory form
call instruction. When such instruction selection is disabled, it breaks
DAG schedule.
To prevent that, such moving is disabled when target favors register
indirect call.
Previous workaround disabling CALL32m/CALL64m insn selection is removed.
llvm-svn: 178308
|
|
|
|
|
|
|
|
|
|
|
| |
Mips assembler allows following to be used as aliased instructions:
jal $rs for jalr $rs
jal $rd,$rd for jalr $rd,$rs
This patch provides alias definitions in td files and test cases to show the usage.
Contributer: Vladimir Medic
llvm-svn: 178304
|
|
|
|
| |
llvm-svn: 178303
|
|
|
|
| |
llvm-svn: 178301
|
|
|
|
| |
llvm-svn: 178300
|
|
|
|
| |
llvm-svn: 178299
|
|
|
|
| |
llvm-svn: 178293
|
|
|
|
| |
llvm-svn: 178291
|
|
|
|
|
|
|
|
| |
Compiling in 32-bit mode on a P7 would assert after 64-bit DAG combines were
added for bswap with load/store. This is because these combines are really only
valid in 64-bit mode, regardless of the CPU (and this was not being checked).
llvm-svn: 178286
|
|
|
|
| |
llvm-svn: 178281
|
|
|
|
|
|
| |
Thanks to Bill Schmidt for pointing this out!
llvm-svn: 178280
|
|
|
|
| |
llvm-svn: 178279
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This follows up Ulrich Weigand's work in PPCInstrInfo.td and
PPCInstr64Bit.td by doing the corresponding work for most of the
Altivec patterns. I have not been able to do anything for the
following classes of instructions:
(1) Vector logicals. These don't have corresponding intrinsics and
don't have a single obvious vector type. So far as I can tell I need
to leave these as VRRC. Affected instructions are: VAND, VANDC,
VNOR, VOR, VXOR, V_SET0.
(2) Instructions that make use of vector shuffle. The selection code
promotes all shuffles to v16i8, so any pattern that matches on a
shuffle is constrained. I haven't found any way to make the patterns
match on their natural types, so I plan to leave these as VRRC.
Affected instructions are: VMRG*, VSPLTB, VSPLTH, VSPLTW, VPKUHUM,
VPKUWUM.
No change in behavior is anticipated.
llvm-svn: 178277
|
|
|
|
|
|
|
|
| |
These are 64-bit load/store with byte-swap, and available on the P7 and the A2.
Like the similar instructions for 16- and 32-bit words, these are matched in the
target DAG-combine phase against load/store-bswap pairs.
llvm-svn: 178276
|
|
|
|
|
|
|
|
| |
the upper bit is set.
They should always be zero-extended, not sign extended. Added test case.
llvm-svn: 178275
|
|
|
|
|
|
| |
Thumb README.
llvm-svn: 178256
|
|
|
|
|
|
| |
Remove noV4T gp-relative instructions.
llvm-svn: 178246
|
|
|
|
| |
llvm-svn: 178236
|
|
|
|
|
|
|
| |
PPC ISA 2.06 (P7, A2, etc.) has a popcntd instruction. Add this instruction and
tell TTI about it so that popcount-loop recognition will know about it.
llvm-svn: 178233
|
|
|
|
|
|
|
|
| |
There were a few places where kill flags were not being set correctly, and
where 32-bit instruction variants were being used with 64-bit registers. After
r178180, this code was being triggered causing llc to assert.
llvm-svn: 178220
|
|
|
|
| |
llvm-svn: 178219
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
form of call in preference to memory indirect on Atom.
In this case, the patch applies the optimization to the code for reloading
spilled registers.
The patch also includes changes to sibcall.ll and movgs.ll, which were
failing on the Atom buildbot after the first patch was applied.
This patch by Sriram Murali.
llvm-svn: 178193
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
expression. Specifically, this syntax:
ImmDisp [ BaseReg + Scale*IndexReg + Disp ]
We don't currently support:
ImmDisp [ Symbol ]
rdar://13518671
llvm-svn: 178186
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
PPCInstrInfo
These functions should have the same list of load/store instructions. Now that
all load/store forms have been normalized (to single instructions or pseudos)
they can be resynchronized.
Found by inspection, although hopefully this will improve optimization. I've
also added some comments.
llvm-svn: 178180
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
indirect through a memory address is to load the memory address into
a register and then call indirect through the register.
This patch implements this improvement by modifying SelectionDAG to
force a function address which is a memory reference to be loaded
into a virtual register.
Patch by Sriram Murali.
llvm-svn: 178171
|
|
|
|
|
|
| |
Thanks to Bill Schmidt for pointing this out during code review!
llvm-svn: 178170
|
|
|
|
|
|
| |
I had removed similar code a few days ago, but somehow missed this.
llvm-svn: 178169
|
|
|
|
|
|
| |
As Chris pointed out, post r178123, this is now done!
llvm-svn: 178165
|
|
|
|
|
|
|
|
| |
6 more piglit tests.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
llvm-svn: 178145
|
|
|
|
|
|
|
| |
It seems that the Darwin PPC assembler requires r0 to be written as 0 when it
means 0 (at least in lwarx/stwcx.). Fixes PR15605.
llvm-svn: 178142
|
|
|
|
| |
llvm-svn: 178141
|
|
|
|
|
|
| |
Cortex-A15. Also fixing a small bug in getting the update clearence for VLD1LNd32.
llvm-svn: 178134
|
|
|
|
| |
llvm-svn: 178132
|
|
|
|
|
|
|
| |
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
llvm-svn: 178127
|
|
|
|
|
|
|
| |
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
llvm-svn: 178126
|
|
|
|
|
|
|
| |
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
llvm-svn: 178125
|
|
|
|
|
|
|
| |
The R0 register can now be allocated because instructions
that cannot use R0 as a GPR have been appropriately marked.
llvm-svn: 178123
|
|
|
|
|
|
|
|
|
|
| |
The register parameter in these instructions becomes the base register in an
r+i ld instruction (and, thus, cannot be r0).
This is not yet testable because we don't yet allocate r0 (and even then any
test would be very fragile).
llvm-svn: 178121
|
|
|
|
|
|
|
|
|
|
| |
Either operand of these pseudo instructions can be transformed into the first
operand of an isel instruction (and this operand cannot be r0).
This is not yet testable because we don't yet allocate r0 (and even when we do,
any test would be very fragile).
llvm-svn: 178119
|
|
|
|
|
|
|
|
|
|
|
|
| |
Like the addi/addis instructions themselves, these pseudo instructions also
cannot have r0 as their register parameter (because it will be interpreted as
the value 0).
This is not yet testable because we don't yet allocate r0 (and even when we do,
any regression test would be very fragile because it would depend on the
register allocator heuristics).
llvm-svn: 178118
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Some implementation detail in the forgotten past required the link
register to be placed in the GPRC and G8RC register classes. This is
just wrong on the face of it, and causes several extra intersection
register classes to be generated. I found this was having evil
effects on instruction scheduling, by causing the wrong register class
to be consulted for register pressure decisions.
No code generation changes are expected, other than some minor changes
in instruction order. Seven tests in the test bucket required minor
tweaks to adjust to the new normal.
llvm-svn: 178114
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
As Bill Schmidt pointed out to me, only on Darwin do we need to spill/restore
VRSAVE in the SjLj code. For non-Darwin, don't spill/restore VRSAVE (and I've
added some asserts to make sure that we're not).
As it turns out, we're not currently handling the Darwin case correctly (I've
added a FIXME in the test case). I've tried adding various implied register
definitions/uses to force the spill without success, so I'll need to address
this later.
llvm-svn: 178096
|
|
|
|
| |
llvm-svn: 178083
|