| Commit message (Collapse) | Author | Age | Files | Lines | 
| | 
| 
| 
|  | 
llvm-svn: 122613
 | 
| | 
| 
| 
|  | 
llvm-svn: 122612
 | 
| | 
| 
| 
|  | 
llvm-svn: 122611
 | 
| | 
| 
| 
| 
| 
|  | 
in the most obvious way.
llvm-svn: 122610
 | 
| | 
| 
| 
|  | 
llvm-svn: 122609
 | 
| | 
| 
| 
| 
| 
|  | 
it relies on assumptions that may not be true in the future.
llvm-svn: 122608
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
subxcc defs/uses;
and fixed CustomInserter.
llvm-svn: 122607
 | 
| | 
| 
| 
| 
| 
| 
|  | 
This was done for label, void, floating point, x86mmx, metadata,
just not integer.
llvm-svn: 122606
 | 
| | 
| 
| 
| 
| 
| 
|  | 
check for "multiple of a byte" in size to make it clear that the
>> 3 below is safe.
llvm-svn: 122604
 | 
| | 
| 
| 
|  | 
llvm-svn: 122603
 | 
| | 
| 
| 
|  | 
llvm-svn: 122602
 | 
| | 
| 
| 
| 
| 
|  | 
original instruction.
llvm-svn: 122601
 | 
| | 
| 
| 
|  | 
llvm-svn: 122600
 | 
| | 
| 
| 
|  | 
llvm-svn: 122598
 | 
| | 
| 
| 
|  | 
llvm-svn: 122597
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
we are only interested in the defs when discovering interferences.
This is a 28% speedup running StrongPHIElimination on 403.gcc.
llvm-svn: 122596
 | 
| | 
| 
| 
| 
| 
| 
|  | 
in this function, but the compiler was warning that it might be when
doing a release build.
llvm-svn: 122595
 | 
| | 
| 
| 
| 
| 
|  | 
when doing a release build.
llvm-svn: 122594
 | 
| | 
| 
| 
|  | 
llvm-svn: 122593
 | 
| | 
| 
| 
|  | 
llvm-svn: 122591
 | 
| | 
| 
| 
|  | 
llvm-svn: 122590
 | 
| | 
| 
| 
| 
| 
|  | 
fs::has_magic.
llvm-svn: 122589
 | 
| | 
| 
| 
|  | 
llvm-svn: 122588
 | 
| | 
| 
| 
|  | 
llvm-svn: 122587
 | 
| | 
| 
| 
|  | 
llvm-svn: 122586
 | 
| | 
| 
| 
|  | 
llvm-svn: 122585
 | 
| | 
| 
| 
|  | 
llvm-svn: 122584
 | 
| | 
| 
| 
|  | 
llvm-svn: 122583
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
when running without the verifier, and I have not yet checked them to see if
the new results are still correct. There are more verifier failures, but they
all seem to be additional occurrences of verifier failures that occur with the
existing PHIElimination pass. There are a few obvious issues with the code:
1) It doesn't properly update the register equivalence classes during copy
insertion, and instead recomputes them before merging live intervals and
renaming registers. I wanted to keep this first patch simple for debugging
purposes, but it shouldn't be very hard to do this.
2) It doesn't mix the renaming and live interval merging with the copy insertion
process, which leads to a lot of virtual register churn. Virtual registers and
live intervals are created, only to later be merged into others. The code should
be smarter and only create a new virtual register if there is no existing
register in the same congruence class.
3) In one place the code uses a DenseMap per basic block, which is unnecessary
heap allocation. There should be an inline storage version of DenseMap.
I did a quick compile-time test of running llc on 403.gcc with and without
StrongPHIElimination. It is slightly slower with StrongPHIElimination, because
the small decrease in the coalescer runtime can't beat the increase in phi
elimination runtime. Perhaps fixing the above performance issues will narrow
the gap.
I also haven't yet run any tests of the quality of the generated code.
llvm-svn: 122582
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
valno verification. The "Different value live out of predecessor" check is
incorrect in the case of phi-def valnos, so just skip that check for phi-def
valnos and instead check that all of the valnos for predecessors have phi-kill.
Fixes PR8863.
llvm-svn: 122581
 | 
| | 
| 
| 
|  | 
llvm-svn: 122580
 | 
| | 
| 
| 
|  | 
llvm-svn: 122579
 | 
| | 
| 
| 
| 
| 
|  | 
supports.
llvm-svn: 122577
 | 
| | 
| 
| 
| 
| 
|  | 
and superseded by IRBuilder.
llvm-svn: 122576
 | 
| | 
| 
| 
|  | 
llvm-svn: 122575
 | 
| | 
| 
| 
|  | 
llvm-svn: 122574
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
memsets.  This is still missing one important validity check, but this is enough
to compile stuff like this:
void test0(std::vector<char> &X) {
  for (std::vector<char>::iterator I = X.begin(), E = X.end(); I != E; ++I)
    *I = 0;
}
void test1(std::vector<int> &X) {
  for (long i = 0, e = X.size(); i != e; ++i)
    X[i] = 0x01010101;
}
With:
 $ clang t.cpp -S -o - -O2 -emit-llvm | opt -loop-idiom | opt -O3 | llc 
to:
__Z5test0RSt6vectorIcSaIcEE:            ## @_Z5test0RSt6vectorIcSaIcEE
## BB#0:                                ## %entry
	subq	$8, %rsp
	movq	(%rdi), %rax
	movq	8(%rdi), %rsi
	cmpq	%rsi, %rax
	je	LBB0_2
## BB#1:                                ## %bb.nph
	subq	%rax, %rsi
	movq	%rax, %rdi
	callq	___bzero
LBB0_2:                                 ## %for.end
	addq	$8, %rsp
	ret
...
__Z5test1RSt6vectorIiSaIiEE:            ## @_Z5test1RSt6vectorIiSaIiEE
## BB#0:                                ## %entry
	subq	$8, %rsp
	movq	(%rdi), %rax
	movq	8(%rdi), %rdx
	subq	%rax, %rdx
	cmpq	$4, %rdx
	jb	LBB1_2
## BB#1:                                ## %for.body.preheader
	andq	$-4, %rdx
	movl	$1, %esi
	movq	%rax, %rdi
	callq	_memset
LBB1_2:                                 ## %for.end
	addq	$8, %rsp
	ret
llvm-svn: 122573
 | 
| | 
| 
| 
|  | 
llvm-svn: 122572
 | 
| | 
| 
| 
|  | 
llvm-svn: 122571
 | 
| | 
| 
| 
|  | 
llvm-svn: 122570
 | 
| | 
| 
| 
|  | 
llvm-svn: 122568
 | 
| | 
| 
| 
|  | 
llvm-svn: 122567
 | 
| | 
| 
| 
|  | 
llvm-svn: 122566
 | 
| | 
| 
| 
|  | 
llvm-svn: 122565
 | 
| | 
| 
| 
|  | 
llvm-svn: 122563
 | 
| | 
| 
| 
| 
| 
|  | 
No functionality yet.
llvm-svn: 122562
 | 
| | 
| 
| 
|  | 
llvm-svn: 122561
 | 
| | 
| 
| 
|  | 
llvm-svn: 122560
 | 
| | 
| 
| 
|  | 
llvm-svn: 122559
 | 
| | 
| 
| 
| 
| 
|  | 
rejected by the mc assembler.
llvm-svn: 122557
 |