| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
| |
brace) so that we get more accurate line number information about the
declaration of a given function and the line where the function
first starts.
Part of rdar://11026482
llvm-svn: 153916
|
| |
|
|
|
|
| |
VirtRegMap is NULL. Also changed it in this case to just avoid updating the map, but live ranges or intervals will still get updated and created
llvm-svn: 153914
|
| |
|
|
|
|
| |
backend, not just libCodeGen
llvm-svn: 153906
|
| |
|
|
|
|
|
|
|
| |
This is just the fallback tie-breaker ordering, the main allocation
order is still descending size.
Patch by Shamil Kurmangaleev!
llvm-svn: 153904
|
| |
|
|
|
|
| |
TargetInstrInfo, MachineRegisterInfo, LiveIntervals, and VirtRegMap are all passed into the constructor and stored as members instead of passed in to each method.
llvm-svn: 153903
|
| |
|
|
|
|
| |
operations, and prevent the DAGCombiner from turning them into bitwise operations if they do.
llvm-svn: 153901
|
| |
|
|
|
|
|
| |
operands. Make TryInstructionTransform return false to reflect this.
Fixes PR11861.
llvm-svn: 153892
|
| |
|
|
| |
llvm-svn: 153880
|
| |
|
|
|
|
|
|
|
| |
shuffles.
Do not try to optimize swizzles of shuffles if the source shuffle has more than
a single user, except when the source shuffle is also a swizzle.
llvm-svn: 153864
|
| |
|
|
|
|
| |
getInstructionName and the static data it contains since the same tables are already in MCInstrInfo.
llvm-svn: 153860
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. Simplify xor/and/or (bitcast(A), bitcast(B)) -> bitcast(op (A,B))
(and also scalar_to_vector).
2. Xor/and/or are indifferent to the swizzle operation (shuffle of one src).
Simplify xor/and/or (shuff(A), shuff(B)) -> shuff(op (A, B))
3. Optimize swizzles of shuffles: shuff(shuff(x, y), undef) -> shuff(x, y).
4. Fix an X86ISelLowering optimization which was very bitcast-sensitive.
Code which was previously compiled to this:
movd (%rsi), %xmm0
movdqa .LCPI0_0(%rip), %xmm2
pshufb %xmm2, %xmm0
movd (%rdi), %xmm1
pshufb %xmm2, %xmm1
pxor %xmm0, %xmm1
pshufb .LCPI0_1(%rip), %xmm1
movd %xmm1, (%rdi)
ret
Now compiles to this:
movl (%rsi), %eax
xorl %eax, (%rdi)
ret
llvm-svn: 153848
|
| |
|
|
| |
llvm-svn: 153846
|
| |
|
|
| |
llvm-svn: 153827
|
| |
|
|
|
|
|
|
| |
This is the CodeGen equivalent of r153747. I tested that there is not noticeable
performance difference with any combination of -O0/-O2 /-g when compiling
gcc as a single compilation unit.
llvm-svn: 153817
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
here but it has no other uses, then we have a problem. E.g.,
int foo (const int *x) {
char a[*x];
return 0;
}
If we assign 'a' a vreg and fast isel later on has to use the selection
DAG isel, it will want to copy the value to the vreg. However, there are
no uses, which goes counter to what selection DAG isel expects.
<rdar://problem/11134152>
llvm-svn: 153705
|
| |
|
|
|
|
|
|
|
|
| |
http://llvm.org/docs/SourceLevelDebugging.html#objcproperty
including type and DECL. Expand the metadata needed accordingly.
rdar://11144023
llvm-svn: 153639
|
| |
|
|
|
|
|
|
|
|
| |
Some targets still mess up the liveness information, but that isn't
verified after MRI->invalidateLiveness().
The verifier can still check other useful things like register classes
and CFG, so it should be enabled after all passes.
llvm-svn: 153615
|
| |
|
|
|
|
|
|
|
|
| |
The late scheduler depends on accurate liveness information if it is
breaking anti-dependencies, so we should be able to verify it.
Relax the terminator checking in the machine code verifier so it can
handle the basic blocks created by if conversion.
llvm-svn: 153614
|
| |
|
|
| |
llvm-svn: 153599
|
| |
|
|
|
|
|
| |
Branch folding invalidates liveness and disables liveness verification
on some targets.
llvm-svn: 153597
|
| |
|
|
|
|
|
|
|
| |
Extract the liveness verification into its own method.
This makes it possible to run the machine code verifier after liveness
information is no longer required to be valid.
llvm-svn: 153596
|
| |
|
|
|
|
|
|
|
| |
This avoids the silly double search:
if (isLiveIn(Reg))
removeLiveIn(Reg);
llvm-svn: 153592
|
| |
|
|
|
|
| |
indices weren't commuted
llvm-svn: 153579
|
| |
|
|
| |
llvm-svn: 153571
|
| |
|
|
|
|
|
|
| |
and not the rest of the member tag.
Fixes PR11695
llvm-svn: 153570
|
| |
|
|
|
|
|
| |
will always be tiny sets, so DenseSet is overkill (SmallSet won't work as we
need iteration support).
llvm-svn: 153529
|
| |
|
|
|
|
| |
Fixes PR10105
llvm-svn: 153524
|
| |
|
|
| |
llvm-svn: 153518
|
| |
|
|
|
|
|
|
| |
Branch folding can use a register scavenger to update liveness
information when required. Don't do that if liveness information is
already invalid.
llvm-svn: 153517
|
| |
|
|
| |
llvm-svn: 153513
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Late optimization passes like branch folding and tail duplication can
transform the machine code in a way that makes it expensive to keep the
register liveness information up to date. There is a fuzzy line between
register allocation and late scheduling where the liveness information
degrades.
The MRI::tracksLiveness() flag makes the line clear: While true,
liveness information is accurate, and can be used for register
scavenging. Once the flag is false, liveness information is not
accurate, and can only be used as a hint.
Late passes generally don't need the liveness information, but they will
sometimes use the register scavenger to help update it. The scavenger
enforces strict correctness, and we have to spend a lot of code to
update register liveness that may never be used.
llvm-svn: 153511
|
| |
|
|
|
|
|
|
| |
register that's read by the preheader terminator.
rdar://11095580
llvm-svn: 153492
|
| |
|
|
|
|
|
|
|
|
| |
copies being considered for removal. Make sure to track all of the copies,
rather than just the most recent encountered, by holding a DenseSet instead of
an unsigned in SrcMap.
No test case - couldn't reduce something with a sane size.
llvm-svn: 153487
|
| |
|
|
| |
llvm-svn: 153483
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
backtrace locations.
Testcase forthcoming, but I wanted to get some testing here.
Should fix:
PR12323
PR12314
rdar://11091100
llvm-svn: 153471
|
| |
|
|
| |
llvm-svn: 153438
|
| |
|
|
| |
llvm-svn: 153429
|
| |
|
|
| |
llvm-svn: 153428
|
| |
|
|
|
|
| |
PPC64 SVR4 ABI.
llvm-svn: 153372
|
| |
|
|
|
|
|
| |
Dump the hex representation to the comment stream as well as the float
value.
llvm-svn: 153346
|
| |
|
|
| |
llvm-svn: 153341
|
| |
|
|
|
|
| |
rdar://11096639
llvm-svn: 153270
|
| |
|
|
|
|
| |
rdar://11096639
llvm-svn: 153269
|
| |
|
|
|
|
|
|
|
| |
metadata operand as an actual operand, leading to an assert. Error
out in this case.
rdar://11007633
llvm-svn: 153234
|
| |
|
|
|
|
|
|
|
| |
execution-time regression for nsieve-bits on the ARMv7 -O0 -g nightly tester.
This may also improve compile-time on architectures that would otherwise
generate a libcall for urem (e.g., ARM) or fall back to the DAG selector.
rdar://10810716
llvm-svn: 153230
|
| |
|
|
|
|
|
|
| |
Type legalization can zero-extend the elements of the build_vector node, so,
for example, we may have an <8 x i8> with i32 elements of value 255. That
should return 'true' for the vector being all ones.
llvm-svn: 153203
|
| |
|
|
| |
llvm-svn: 153162
|
| |
|
|
| |
llvm-svn: 153161
|
| |
|
|
| |
llvm-svn: 153160
|
| |
|
|
| |
llvm-svn: 153159
|