| Commit message (Collapse) | Author | Age | Files | Lines | 
| | 
| 
| 
| 
| 
|  | 
bytes, not power of 2.
llvm-svn: 163405
 | 
| | 
| 
| 
|  | 
llvm-svn: 163401
 | 
| | 
| 
| 
| 
| 
| 
|  | 
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
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
registers.
gas accepts this and it seems to be common enough to be worth supporting. This
doesn't affect the parsing of reg operands outside of .cfi directives.
llvm-svn: 163390
 | 
| | 
| 
| 
|  | 
llvm-svn: 163383
 | 
| | 
| 
| 
| 
| 
|  | 
Patch by Rick Foos.
llvm-svn: 163380
 | 
| | 
| 
| 
|  | 
llvm-svn: 163378
 | 
| | 
| 
| 
| 
| 
|  | 
without using regular expressions.
llvm-svn: 163371
 | 
| | 
| 
| 
| 
| 
|  | 
- this should fix PR13780
llvm-svn: 163370
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
The assembler can alias one instruction into another based
on the operands. For example the jump instruction "J" takes
and immediate operand, but if the operand is a register the
assembler will change it into a jump register "JR" instruction.
These changes are in the instruction td file.
Test cases included
Contributer: Vladimir Medic
llvm-svn: 163368
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Actually these are just stubs for parsing the directives.
Semantic support will come later.
Test cases included
Contributer: Vladimir Medic
llvm-svn: 163364
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Test cases included
Contributer: Vladimir Medic
llvm-svn: 163363
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
- This patch is inspired by the failure of the following code snippet
  which is used to convert enumerable values into encoding bits to
  improve the readability of td files.
  class S<int s> {
    bits<2> V = !if(!eq(s, 8),  {0, 0},
                !if(!eq(s, 16), {0, 1},
                !if(!eq(s, 32), {1, 0},
                !if(!eq(s, 64), {1, 1}, {?, ?}))));
  }
  Later, PR8330 is found to report not exactly the same bug relevant
  issue to bit/bits values.
- Instead of resolving bit/bits values separately through
  resolveBitReference(), this patch adds getBit() for all Inits and
  resolves bit value by resolving plus getting the specified bit. This
  unifies the resolving of bit with other values and removes redundant
  logic for resolving bit only. In addition,
  BitsInit::resolveReferences() is optimized to take advantage of this
  origanization by resolving VarBitInit's variable reference first and
  then getting bits from it.
- The type interference in '!if' operator is revised to support possible
  combinations of int and bits/bit in MHS and RHS.
- As there may be illegal assignments from integer value to bit, says
  assign 2 to a bit, but we only check this during instantiation in some
  cases, e.g.
  bit V = !if(!eq(x, 17), 0, 2);
  Verbose diagnostic message is generated when invalid value is
  resolveed to help locating the error.
- PR8330 is fixed as well.
llvm-svn: 163360
 | 
| | 
| 
| 
|  | 
llvm-svn: 163359
 | 
| | 
| 
| 
|  | 
llvm-svn: 163354
 | 
| | 
| 
| 
| 
| 
|  | 
<rdar://problem/12184899>
llvm-svn: 163349
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
This includes sb,sc,sh,sw,lb,lw,lbu,lh,lhu,ll,lw
Test case included
Contributer: Vladimir Medic
llvm-svn: 163346
 | 
| | 
| 
| 
| 
| 
|  | 
No functional change.
llvm-svn: 163344
 | 
| | 
| 
| 
| 
| 
|  | 
Thanks, Andy.
llvm-svn: 163343
 | 
| | 
| 
| 
| 
| 
|  | 
No functional change.
llvm-svn: 163339
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
The RegisterCoalescer understands overlapping live ranges where one
register is defined as a copy of the other. With this change, register
allocators using LiveRegMatrix can do the same, at least for copies
between physical and virtual registers.
When a physreg is defined by a copy from a virtreg, allow those live
ranges to overlap:
  %CL<def> = COPY %vreg11:sub_8bit; GR32_ABCD:%vreg11
  %vreg13<def,tied1> = SAR32rCL %vreg13<tied0>, %CL<imp-use,kill>
We can assign %vreg11 to %ECX, overlapping the live range of %CL.
llvm-svn: 163336
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
We will soon allow virtual register live ranges to overlap regunit live
ranges when the physreg is defined as a copy of the virtreg:
  %EAX = COPY %vreg5
  FOO %vreg5
  BAR %EAX<kill>
There is no real interference since %vreg5 and %EAX have the same value
where they overlap.
This patch prevents addKillFlags from adding virtreg kill flags to FOO
where the assigned physreg is overlapping the virtual register live
range.
llvm-svn: 163335
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
Kill flags are difficult to maintain, and liveness queries are better
handled by live intervals.
Kill flags are reinserted after register allocation by addKillFlags().
llvm-svn: 163334
 | 
| | 
| 
| 
|  | 
llvm-svn: 163324
 | 
| | 
| 
| 
| 
| 
|  | 
Patch by Chris Lidbury.
llvm-svn: 163323
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
instructions.
Patch by Chris Lidbury.
llvm-svn: 163321
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Enhances basic alias analysis to recognize phis whose first incoming values are
NoAlias and whose other incoming values are just the phi node itself through
some amount of recursion.
Example: With this change basicaa reports that ptr_phi and ptr_phi2 do not alias
each other.
bb:
 ptr = ptr2 + 1
loop:
  ptr_phi = phi [bb, ptr], [loop, ptr_plus_one]
  ptr2_phi = phi [bb, ptr2], [loop, ptr2_plus_one]
  ...
  ptr_plus_one = gep ptr_phi, 1
  ptr2_plus_one = gep ptr2_phi, 1
This enables the elimination of one load in code like the following:
extern int foo;
int test_noalias(int *ptr, int num, int* coeff) {
  int *ptr2 = ptr;
  int result = (*ptr++) * (*coeff--);
  while (num--) {
    *ptr2++ = *ptr;
    result +=  (*coeff--) * (*ptr++);
  }
  *ptr = foo;
  return result;
}
Part 2/2 of fix for PR13564.
llvm-svn: 163319
 | 
| | 
| 
| 
| 
| 
|  | 
Patch by Chris Lidbury.
llvm-svn: 163318
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
If we can show that the base pointers of two GEPs don't alias each other using
precise analysis and the indices and base offset are equal then the two GEPs
also don't alias each other.
This is primarily needed for the follow up patch that analyses NoAlias'ing PHI
nodes.
Part 1/2 of fix for PR13564.
llvm-svn: 163317
 | 
| | 
| 
| 
|  | 
llvm-svn: 163316
 | 
| | 
| 
| 
| 
| 
| 
|  | 
This Operand type takes a default argument, and is initialized to
this value if it does not appear in a patter.
llvm-svn: 163315
 | 
| | 
| 
| 
| 
| 
|  | 
Added generation of VPSHUB instruction for <32 x i8> vector shuffle when possible.
llvm-svn: 163312
 | 
| | 
| 
| 
|  | 
llvm-svn: 163309
 | 
| | 
| 
| 
|  | 
llvm-svn: 163307
 | 
| | 
| 
| 
|  | 
llvm-svn: 163306
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
The lookup tables did not get built in a deterministic order.
This makes them get built in the order that the corresponding phi nodes
were found.
llvm-svn: 163305
 | 
| | 
| 
| 
| 
| 
|  | 
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
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
This adds a transformation to SimplifyCFG that attemps to turn switch
instructions into loads from lookup tables. It works on switches that
are only used to initialize one or more phi nodes in a common successor
basic block, for example:
  int f(int x) {
    switch (x) {
    case 0: return 5;
    case 1: return 4;
    case 2: return -2;
    case 5: return 7;
    case 6: return 9;
    default: return 42;
  }
This speeds up the code by removing the hard-to-predict jump, and
reduces code size by removing the code for the jump targets.
llvm-svn: 163302
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
allocations (allocas). Allocas are known to be
disjoint if they are marked by disjoint lifetime markers (@llvm.lifetime.XXX intrinsics).
llvm-svn: 163299
 | 
| | 
| 
| 
| 
| 
|  | 
to a VSETLN on D registers, instead of an (INSERT_SUBREG (VSETLN (EXTRACT_SUBREG ))) sequence to help the register coalescer.
llvm-svn: 163298
 | 
| | 
| 
| 
|  | 
llvm-svn: 163295
 | 
| | 
| 
| 
| 
| 
|  | 
lowering and patterns. This makes it consistent with the incoming DAG nodes from the DAG builder.
llvm-svn: 163293
 | 
| | 
| 
| 
| 
| 
|  | 
of a 256-bit vector to VMOVAPSmr/VMOVUPSmr.
llvm-svn: 163292
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
This reverts commit 163278.
Works OK on x86_64, but not i386. Will re-enable when that's cleared up.
llvm-svn: 163290
 | 
| | 
| 
| 
|  | 
llvm-svn: 163289
 | 
| | 
| 
| 
|  | 
llvm-svn: 163288
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
assembler such as shifts greater than 32. In the case 
of direct object, the code gen needs to do this lowering 
since the assembler is not involved.
With the advent of the llvm-mc assembler, it also needs 
to do the same lowering.
This patch makes that specific lowering code accessible 
to both the direct object output and the assembler.
This patch does not affect generated output.
llvm-svn: 163287
 | 
| | 
| 
| 
| 
| 
|  | 
No functional change.
llvm-svn: 163279
 | 
| | 
| 
| 
|  | 
llvm-svn: 163278
 |