| Commit message (Collapse) | Author | Age | Files | Lines | 
| ... |  | 
| | 
| 
| 
| 
| 
| 
|  | 
anything but the simplest of cases, lower a 256-bit BUILD_VECTOR by
splitting it into 128-bit parts and recombining.
llvm-svn: 125105
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
are live.
If a live range is used by a terminator instruction, and that live range needs
to leave the block on the stack or in a different register, it can be necessary
to have both sides of the split live at the terminator instruction.
Example:
  %vreg2 = COPY %vreg1
  JMP %vreg1
Becomes after spilling %vreg2:
  SPILL %vreg1
  JMP %vreg1
The spill doesn't kill the register as is normally the case.
llvm-svn: 125102
 | 
| | 
| 
| 
|  | 
llvm-svn: 125101
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
Avoid using the same register for two def operands or and earlyclobber
def and use operand. This fixes PR8986 and improves on the prior fix
for rdar://problem/8959122.
llvm-svn: 125089
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
t2LDRpci with t2LDRi12.
There are a couple of problems with this.
1. The encoding for the literal and immediate constant are different.
   Note bit 7 of the literal case is 'U' so it can be negative.
2. t2LDRi12 is now narrowed to tLDRpci before constant island pass is run.
   So we end up never using the Thumb2 instruction, which ends up creating a
   lot more constant islands.
llvm-svn: 125074
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
the active loop. This is generally desirable, and it avoids trouble
in situations such as the testcase in PR9123, though the failure
mode depends on use-list order, so it is infeasible to test.
llvm-svn: 125065
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
After uses of a live range are removed, recompute the live range to only cover
the remaining uses. This is necessary after rematerializing the value before
some (but not all) uses.
llvm-svn: 125058
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
switch. If we used only one icmp, don't turn it into a switch.
Also prevent the switch-to-icmp transform from creating identity adds, noticed by Marius Wachtler.
llvm-svn: 125056
 | 
| | 
| 
| 
|  | 
llvm-svn: 125055
 | 
| | 
| 
| 
|  | 
llvm-svn: 125054
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
parsing of operands introduced in r125030. As a small note, besides using a more
generic approach we can also have more descriptive output when debugging
llvm-mc, example:
mcr  p7, #1, r5, c1, c1, #4
note: parsed instruction:
  ['mcr', <ARMCC::al>,
          <coprocessor number: 7>,
          1,
          <register 73>,
          <coprocessor register: 1>,
          <coprocessor register: 1>,
          4]
llvm-svn: 125052
 | 
| | 
| 
| 
|  | 
llvm-svn: 125047
 | 
| | 
| 
| 
| 
| 
| 
|  | 
couple of utility functions that will be used in other places for more
AVX lowering.
llvm-svn: 125029
 | 
| | 
| 
| 
|  | 
llvm-svn: 125025
 | 
| | 
| 
| 
|  | 
llvm-svn: 125023
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
The vld1-lane, vld1-dup and vst1-lane instructions do not yet support using
post-increment versions, but all the rest of the NEON load/store instructions
should be handled now.
llvm-svn: 125014
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
These operations are expanded to pairs of loads or stores, and the first one
uses the address register update to produce the address for the second one.
So far, the second load/store has also updated the address register, just
for convenience, since that output has never been used.  In anticipation of
actually supporting post-increment updates for these operations, this changes
the non-updating operations to use a non-updating load/store for the second
instruction.
llvm-svn: 125013
 | 
| | 
| 
| 
|  | 
llvm-svn: 125012
 | 
| | 
| 
| 
|  | 
llvm-svn: 125011
 | 
| | 
| 
| 
| 
| 
|  | 
until the instructions are emitted or printed.
llvm-svn: 125010
 | 
| | 
| 
| 
|  | 
llvm-svn: 125009
 | 
| | 
| 
| 
| 
| 
|  | 
Factor some code better.
llvm-svn: 125006
 | 
| | 
| 
| 
| 
| 
|  | 
to simplify the "(X/Y)*Y->X when the division is exact" transform.
llvm-svn: 125004
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
failures with relocations.
The code committed is a first cut at compatibility for emitted relocations in
ELF .o.
Why do this? because existing ARM tools like emitting relocs symbols as
explicit relocations, not as section-offset relocs.
Result is that with these changes,
1) relocs are now substantially identical what to gcc outputs.
2) larger apps (including many spec2k tests) compile, cross-link, and pass
Added reminder fixme to tests for future conversion to .s form.
llvm-svn: 124996
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Unified EmitTextAttribute for both Asm and Obj emission (.cpu only)
Added necessary cortex-A8 related attrs for codegen compat tests.
llvm-svn: 124995
 | 
| | 
| 
| 
| 
| 
|  | 
when the div is an exact udiv.
llvm-svn: 124994
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
instcombine xform to exercise this.
Nothing forms exact udivs yet though.  This is progress on PR8862
llvm-svn: 124992
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
if we weren't going to inline the function. The rest of the code using
this was removed.
Fixes PR9154.
llvm-svn: 124991
 | 
| | 
| 
| 
|  | 
llvm-svn: 124990
 | 
| | 
| 
| 
|  | 
llvm-svn: 124989
 | 
| | 
| 
| 
| 
| 
|  | 
resulting pointer type both have the same size.
llvm-svn: 124987
 | 
| | 
| 
| 
|  | 
llvm-svn: 124977
 | 
| | 
| 
| 
| 
| 
|  | 
now, and this wasn't comparing some of their relevant bits anyhow.
llvm-svn: 124976
 | 
| | 
| 
| 
|  | 
llvm-svn: 124961
 | 
| | 
| 
| 
|  | 
llvm-svn: 124960
 | 
| | 
| 
| 
| 
| 
| 
|  | 
config.h.* have conditions whether each symbol is defined or not.
Autoconf and CMake may check symbols in libgcc.a for JIT on Mingw.
llvm-svn: 124950
 | 
| | 
| 
| 
| 
| 
|  | 
enough for caller to allocate one.
llvm-svn: 124949
 | 
| | 
| 
| 
| 
| 
|  | 
functional changes.
llvm-svn: 124948
 | 
| | 
| 
| 
|  | 
llvm-svn: 124947
 | 
| | 
| 
| 
|  | 
llvm-svn: 124946
 | 
| | 
| 
| 
| 
| 
|  | 
cmd.exe or MSYS shell) are included to invoke CreateProcess(). Thanks to Danil Malyshev.
llvm-svn: 124945
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
<rdar://problem/8959122> illegal register operands for UMULL instruction in cfrac nightly test
I'm stil working on a unit test, but the case is:
rx = movcc rx, r3
r2 = ldr
r2, r3 = umull r2, r2
The anti-dep breaker should not convert this into an illegal instruction:
r2, r2 = umull
llvm-svn: 124932
 | 
| | 
| 
| 
|  | 
llvm-svn: 124930
 | 
| | 
| 
| 
| 
| 
|  | 
If the interference overlaps the instruction, we cannot separate it.
llvm-svn: 124918
 | 
| | 
| 
| 
| 
| 
| 
|  | 
If these inequalities don't hold, we are creating a live range split that won't
allocate.
llvm-svn: 124917
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
a) Making it a per call site bonus for functions that we can move from
indirect to direct calls.
b) Reduces the bonus from 500 to 100 per call site.
c) Subtracts the size of the possible newly inlineable call from the
bonus to only add a bonus if we can inline a small function to devirtualize
it.
Also changes the bonus from a positive that's subtracted to a negative
that's added.
Fixes the remainder of rdar://8546196 by reducing the object file size
after inlining by 84%.
llvm-svn: 124916
 | 
| | 
| 
| 
|  | 
llvm-svn: 124912
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
This allows us to easily support 256-bit operations that don't have
native 256-bit support.  This applies to integer operations, certain
types of shuffles and various othher things.
llvm-svn: 124910
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
no calls.
In that case we simply ignore the landing pad and split live ranges before the
first terminator.
llvm-svn: 124907
 | 
| | 
| 
| 
|  | 
llvm-svn: 124904
 |