| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 163547
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The ARM backend can eliminate cmp instructions by reusing flags from a
nearby sub instruction with similar arguments.
Don't do that if the sub is predicated - the flags are not written
unconditionally.
<rdar://problem/12263428>
llvm-svn: 163535
|
| |
|
|
|
|
| |
FFLOOR of v4f32 to Expand for ARM. v2f64 was already correct.
llvm-svn: 163458
|
| |
|
|
|
|
|
| |
The 'select' transformations apply to all ARM architectures and don't
require hasV6T2Ops.
llvm-svn: 163396
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- Darwin lied about not supporting .lcomm and turned it into zerofill in the
asm parser. Push the zerofill-conversion down into macho-specific code.
- This makes the tri-state LCOMMType enum superfluous, there are no targets
without .lcomm.
- Do proper error reporting when trying to use .lcomm with alignment on a target
that doesn't support it.
- .comm and .lcomm alignment was parsed in bytes on COFF, should be power of 2.
- Fixes PR13755 (.lcomm crashes on ELF).
llvm-svn: 163395
|
| |
|
|
|
|
| |
Patch by Chris Lidbury.
llvm-svn: 163323
|
| |
|
|
|
|
|
|
| |
instructions.
Patch by Chris Lidbury.
llvm-svn: 163321
|
| |
|
|
|
|
| |
Patch by Chris Lidbury.
llvm-svn: 163318
|
| |
|
|
| |
llvm-svn: 163309
|
| |
|
|
| |
llvm-svn: 163306
|
| |
|
|
|
|
| |
If we have a BUILD_VECTOR that is mostly a constant splat, it is often better to splat that constant then insertelement the non-constant lanes instead of insertelementing every lane from an undef base.
llvm-svn: 163304
|
| |
|
|
|
|
| |
to a VSETLN on D registers, instead of an (INSERT_SUBREG (VSETLN (EXTRACT_SUBREG ))) sequence to help the register coalescer.
llvm-svn: 163298
|
| |
|
|
|
|
|
| |
These pseudos are no longer needed now that it is possible to represent
predicated instructions in SSA form.
llvm-svn: 163275
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now that it is possible to dynamically tie MachineInstr operands,
predicated instructions are possible in SSA form:
%vreg3<def> = SUBri %vreg1, -2147483647, pred:14, pred:%noreg, %opt:%noreg
%vreg4<def,tied1> = MOVCCr %vreg3<tied0>, %vreg1, %pred:12, pred:%CPSR
Becomes a predicated SUBri with a tied imp-use:
SUBri %vreg1, -2147483647, pred:13, pred:%CPSR, opt:%noreg, %vreg1<imp-use,tied0>
This means that any instruction that is safe to move can be folded into
a MOVCC, and the *CC pseudo-instructions are no longer needed.
The test case changes reflect that Thumb2SizeReduce recognizes the
predicated instructions. It didn't understand the pseudos.
llvm-svn: 163274
|
| |
|
|
| |
llvm-svn: 163258
|
| |
|
|
|
|
|
|
| |
Previous patch accidentally decided it couldn't convert a VFP to a
NEON instruction after it had already destroyed the old one. Not a
good move.
llvm-svn: 163230
|
| |
|
|
| |
llvm-svn: 163187
|
| |
|
|
|
|
|
|
|
|
|
| |
This patch corrects the definition of umlal/smlal instructions and adds support
for matching them to the ARM dag combiner.
Bug 12213
Patch by Yin Ma!
llvm-svn: 163136
|
| |
|
|
|
|
|
| |
the NumMCOperands argument to the GetMCInstOperandNum() function that is set
to the number of MCOperands this asm operand mapped to.
llvm-svn: 163124
|
| |
|
|
|
|
| |
MCTargetAsmParser class.
llvm-svn: 163122
|
| |
|
|
| |
llvm-svn: 163104
|
| |
|
|
|
|
|
|
|
|
| |
MatchInstructionImpl() function.
These values are used by the ConvertToMCInst() function to index into the
ConversionTable. The values are also needed to call the GetMCInstOperandNum()
function.
llvm-svn: 163101
|
| |
|
|
|
|
|
|
|
| |
For example, the ARM target does not have efficient ISel handling for vector
selects with scalar conditions. This patch adds a TLI hook which allows the
different targets to report which selects are supported well and which selects
should be converted to CF duting codegen prepare.
llvm-svn: 163093
|
| |
|
|
|
|
|
|
| |
NEON domain conversion was too heavy-handed with its widened
registers, which could have stripped existing instructions of their
dependency, leaving them vulnerable to scheduling errors.
llvm-svn: 163070
|
| |
|
|
| |
llvm-svn: 163063
|
| |
|
|
|
|
| |
function nowadays.
llvm-svn: 163030
|
| |
|
|
| |
llvm-svn: 163005
|
| |
|
|
|
|
| |
Match_ConversionFail enum.
llvm-svn: 163002
|
| |
|
|
|
|
|
|
|
| |
Thumb2 instructions are mostly constrained to rGPR, not tGPR which is
for Thumb1.
rdar://problem/12203728
llvm-svn: 162968
|
| |
|
|
|
|
|
| |
the ConvertToMCInst() return void, rather then a bool. Update all the cvt
functions as well.
llvm-svn: 162961
|
| |
|
|
| |
llvm-svn: 162955
|
| |
|
|
|
|
| |
belongs.
llvm-svn: 162954
|
| |
|
|
| |
llvm-svn: 162952
|
| |
|
|
| |
llvm-svn: 162898
|
| |
|
|
| |
llvm-svn: 162844
|
| |
|
|
| |
llvm-svn: 162825
|
| |
|
|
| |
llvm-svn: 162823
|
| |
|
|
|
|
|
|
| |
I have tested the fix, but have not been successfull in generating
a robust unit test. This can only be exposed through particular
register assignments.
llvm-svn: 162821
|
| |
|
|
| |
llvm-svn: 162820
|
| |
|
|
|
|
|
|
|
|
|
| |
ARM."
This wasn't the right way to enforce ordering of atomics.
We are already setting the isVolatile bit on memory operands of atomic
operations which is good enough to enforce the correct ordering.
llvm-svn: 162732
|
| |
|
|
|
|
|
|
|
|
|
| |
It is not safe to use normal LDR instructions because they may be
reordered by the scheduler. The ATOMIC_LDR pseudos have a mayStore flag
that prevents reordering.
Atomic loads are also prevented from participating in rematerialization
and load folding.
llvm-svn: 162713
|
| |
|
|
|
|
| |
<rdar://problem/12183003>
llvm-svn: 162703
|
| |
|
|
|
|
| |
Reviewed offline by chandlerc.
llvm-svn: 162623
|
| |
|
|
|
|
|
| |
ARMConstantIslandPass expects this instruction to stay in the same basic
block as the jump table branch.
llvm-svn: 162615
|
| |
|
|
|
|
|
|
|
|
| |
It's not clear that they should be marked as such, but tbb formation
fails if t2LEApcrelJT is hoisted of of a loop.
This doesn't change the flags on these instructions,
UnmodeledSideEffects was already inferred from the missing pattern.
llvm-svn: 162603
|
| |
|
|
|
|
|
|
|
| |
The ARM BL and BLX instructions don't have predicate operands, but the
thumb variants tBL and tBLX do.
The argument registers should be added as implicit uses.
llvm-svn: 162593
|
| |
|
|
| |
llvm-svn: 162557
|
| |
|
|
| |
llvm-svn: 162520
|
| |
|
|
| |
llvm-svn: 162362
|
| |
|
|
|
|
| |
did getFunction()->getName(). Remove includes of Function.h that are no longer needed.
llvm-svn: 162347
|