| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 130528
|
|
|
|
| |
llvm-svn: 130527
|
|
|
|
|
|
| |
phi node folding
llvm-svn: 130526
|
|
|
|
|
|
|
|
|
|
|
|
| |
instruction around, reducing work.
Greatly simplify handling of debug instructions. There is no need to
build up a vector of them and then move them into the one predecessor
if we're processing a block. Instead just rescan the block and *copy*
them into the pred. If a block gets merged into multiple preds, this
will retain more debug info.
llvm-svn: 129502
|
|
|
|
| |
llvm-svn: 129319
|
|
|
|
| |
llvm-svn: 129114
|
|
|
|
|
|
| |
match.
llvm-svn: 129078
|
|
|
|
| |
llvm-svn: 129041
|
|
|
|
|
|
| |
values also.
llvm-svn: 129035
|
|
|
|
|
|
| |
PHINode::Create() giving the (known or expected) number of operands.
llvm-svn: 128537
|
|
|
|
| |
llvm-svn: 128535
|
|
|
|
|
|
| |
of pointers in an std::map.
llvm-svn: 127650
|
|
|
|
|
|
|
|
| |
reachable uses, but there still might be uses in dead blocks. Use the
standard solution of replacing all the uses with undef. This is
a rare case because it's very sensitive to phase ordering in SimplifyCFG.
llvm-svn: 127299
|
|
|
|
|
|
|
|
| |
branch.
Based on a patch by Alistair Lynn.
llvm-svn: 126647
|
|
|
|
|
|
|
| |
Yes, there are other types than i8* and GEPs on them can produce an add+multiply.
We don't consider that cheap enough to be speculatively executed.
llvm-svn: 126481
|
|
|
|
| |
llvm-svn: 126452
|
|
|
|
|
|
| |
unconditionally.
llvm-svn: 126445
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
are not sorted into sub+icmp.
This transforms another 1000 switches in gcc.c.
llvm-svn: 124826
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This makes the job of the later optzn passes easier, allowing the vast amount of
icmp transforms to chew on it.
We transform 840 switches in gcc.c, leading to a 16k byte shrink of the resulting
binary on i386-linux.
The testcase from README.txt now compiles into
decl %edi
cmpl $3, %edi
sbbl %eax, %eax
andl $1, %eax
ret
llvm-svn: 124724
|
|
|
|
| |
llvm-svn: 124526
|
|
|
|
| |
llvm-svn: 124522
|
|
|
|
|
|
| |
unconditional predecessor to enable TCE on demand.
llvm-svn: 124518
|
|
|
|
| |
llvm-svn: 124478
|
|
|
|
|
|
|
|
| |
branches. PR8575, rdar://5134905, rdar://8911460.
- Allow codegen tail duplication to dup small return blocks after register
allocation is done.
llvm-svn: 124462
|
|
|
|
|
|
|
|
| |
a new helper function so it can be reused in e.g. an upcoming SimplifySwitchOnSelect.
No functional change.
llvm-svn: 123234
|
|
|
|
| |
llvm-svn: 122156
|
|
|
|
| |
llvm-svn: 122054
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
comparisons formed by comparisons. For example,
this:
void foo(unsigned x) {
if (x == 0 || x == 1 || x == 3 || x == 4 || x == 6)
bar();
}
compiles into:
_foo: ## @foo
## BB#0: ## %entry
cmpl $6, %edi
ja LBB0_2
## BB#1: ## %entry
movl %edi, %eax
movl $91, %ecx
btq %rax, %rcx
jb LBB0_3
instead of:
_foo: ## @foo
## BB#0: ## %entry
cmpl $2, %edi
jb LBB0_4
## BB#1: ## %switch.early.test
cmpl $6, %edi
ja LBB0_3
## BB#2: ## %switch.early.test
movl %edi, %eax
movl $88, %ecx
btq %rax, %rcx
jb LBB0_4
This catches a bunch of cases in GCC, which look like this:
%804 = load i32* @which_alternative, align 4, !tbaa !0
%805 = icmp ult i32 %804, 2
%806 = icmp eq i32 %804, 3
%or.cond121 = or i1 %805, %806
%807 = icmp eq i32 %804, 4
%or.cond124 = or i1 %or.cond121, %807
br i1 %or.cond124, label %.thread, label %808
turning this into a range comparison.
llvm-svn: 122045
|
|
|
|
| |
llvm-svn: 121838
|
|
|
|
|
|
|
|
|
|
| |
which is simpler than finding a place to insert in BB.
- Don't perform the 'if condition hoisting' xform on certain
i1 PHIs, as it interferes with switch formation.
This re-fixes "example 7", without breaking the world hopefully.
llvm-svn: 121764
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
first, it can kick in on blocks whose conditions have been
folded to a constant, even though one of the edges will be
trivially folded.
second, it doesn't clean up the "if diamond" that it just
eliminated away. This is a problem because other simplifycfg
xforms kick in depending on the order of block visitation,
causing pointless work.
llvm-svn: 121762
|
|
|
|
|
|
| |
breaking the selfhost builds, though I can't fathom how.
llvm-svn: 121761
|
|
|
|
|
|
| |
when all 2-entry phis are simplified away.
llvm-svn: 121760
|
|
|
|
|
|
| |
don't print it unless the xform happens.
llvm-svn: 121758
|
|
|
|
| |
llvm-svn: 121757
|
|
|
|
| |
llvm-svn: 121756
|
|
|
|
| |
llvm-svn: 121755
|
|
|
|
|
|
|
| |
GetIfCondition faster by avoiding pred_iterator. No
really interesting change.
llvm-svn: 121754
|
|
|
|
|
|
| |
code a bit, switch from constant folding to instsimplify.
llvm-svn: 121751
|
|
|
|
|
|
| |
work, but fixes 400.perlbmk.
llvm-svn: 121749
|
|
|
|
|
|
|
|
| |
r121694, the most recent state
where I'm confident there were no crashes or miscompilations. XFAIL the test added since then for now.
llvm-svn: 121733
|
|
|
|
|
|
| |
invalidation issue, causing a crash on some versions of perlbmk.
llvm-svn: 121728
|
|
|
|
| |
llvm-svn: 121711
|
|
|
|
|
|
| |
Fixes PR 8780.
llvm-svn: 121705
|
|
|
|
|
|
| |
'and' case.
llvm-svn: 121695
|
|
|
|
|
|
|
| |
I can track down a miscompile. This should bring the buildbots
back to life
llvm-svn: 121693
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
when simplifying, allowing them to be eagerly turned into switches. This
is the last step required to get "Example 7" from this blog post:
http://blog.regehr.org/archives/320
On X86, we now generate this machine code, which (to my eye) seems better
than the ICC generated code:
_crud: ## @crud
## BB#0: ## %entry
cmpb $33, %dil
jb LBB0_4
## BB#1: ## %switch.early.test
addb $-34, %dil
cmpb $58, %dil
ja LBB0_3
## BB#2: ## %switch.early.test
movzbl %dil, %eax
movabsq $288230376537592865, %rcx ## imm = 0x400000017001421
btq %rax, %rcx
jb LBB0_4
LBB0_3: ## %lor.rhs
xorl %eax, %eax
ret
LBB0_4: ## %lor.end
movl $1, %eax
ret
llvm-svn: 121690
|
|
|
|
| |
llvm-svn: 121689
|
|
|
|
|
|
| |
per terminator kind.
llvm-svn: 121688
|