| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 123553
|
| |
|
|
| |
llvm-svn: 123552
|
| |
|
|
|
|
| |
still uses PathV1.
llvm-svn: 123551
|
| |
|
|
|
|
| |
external API still uses PathV1.
llvm-svn: 123550
|
| |
|
|
| |
llvm-svn: 123549
|
| |
|
|
| |
llvm-svn: 123548
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel
In a silly microbenchmark on a 65 nm core2 this is 1.5x faster than the old
code in 32 bit mode and about 2x faster in 64 bit mode. It's also a lot shorter,
especially when counting 64 bit population on a 32 bit target.
I hope this is fast enough to replace Kernighan-style counting loops even when
the input is rather sparse.
llvm-svn: 123547
|
| |
|
|
| |
llvm-svn: 123546
|
| |
|
|
| |
llvm-svn: 123545
|
| |
|
|
| |
llvm-svn: 123544
|
| |
|
|
| |
llvm-svn: 123543
|
| |
|
|
|
|
| |
CharUnits::fromQuantity() of the form CharUnits::fromQuantity(bitSize, Context.getCharWidth()).
llvm-svn: 123542
|
| |
|
|
|
|
| |
opporuntities. Fixes PR8978.
llvm-svn: 123541
|
| |
|
|
|
|
| |
Patch by arrowdodger!
llvm-svn: 123539
|
| |
|
|
| |
llvm-svn: 123538
|
| |
|
|
| |
llvm-svn: 123537
|
| |
|
|
|
|
| |
Also, replace tabs with spaces. Yes, it's 2011.
llvm-svn: 123535
|
| |
|
|
|
|
|
|
|
|
|
| |
half a million non-local queries, each of which would otherwise have triggered a
linear scan over a basic block.
Also fix a fixme for memory intrinsics which dereference pointers. With this,
we prove that a pointer is non-null because it was dereferenced by an intrinsic
112 times in llvm-test.
llvm-svn: 123533
|
| |
|
|
| |
llvm-svn: 123531
|
| |
|
|
| |
llvm-svn: 123530
|
| |
|
|
| |
llvm-svn: 123529
|
| |
|
|
|
|
| |
realize that ConstantFoldTerminator doesn't preserve dominfo.
llvm-svn: 123527
|
| |
|
|
|
|
|
|
|
| |
The basic issue is that isel (very reasonably!) expects conditional branches
to be folded, so CGP leaving around a bunch dead computation feeding
conditional branches isn't such a good idea. Just fold branches on constants
into unconditional branches.
llvm-svn: 123526
|
| |
|
|
| |
llvm-svn: 123525
|
| |
|
|
|
|
|
|
| |
have objectsize folding recursively simplify away their result when it
folds. It is important to catch this here, because otherwise we won't
eliminate the cross-block values at isel and other times.
llvm-svn: 123524
|
| |
|
|
|
|
|
| |
potentially invalidate it (like inline asm lowering) to be sunk into
their proper place, cleaning up a ton of code.
llvm-svn: 123523
|
| |
|
|
|
|
|
|
| |
the ted-o-matic.
rdar://8867482
llvm-svn: 123522
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
template template parameter pack that cannot be fully expanded because
its enclosing pack expansion could not be expanded. This form of
TemplateName plays the same role as SubstTemplateTypeParmPackType and
SubstNonTypeTemplateParmPackExpr do for template type parameter packs
and non-type template parameter packs, respectively.
We should now handle these multi-level pack expansion substitutions
anywhere. The largest remaining gap in our variadic-templates support
is that we cannot cope with non-type template parameter packs whose
type is a pack expansion.
llvm-svn: 123521
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and-with-constant operations.
This fixes rdar://8808586 which observed that we used to compile:
union xy {
struct x { _Bool b[15]; } x;
__attribute__((packed))
struct y {
__attribute__((packed)) unsigned long b0to7;
__attribute__((packed)) unsigned int b8to11;
__attribute__((packed)) unsigned short b12to13;
__attribute__((packed)) unsigned char b14;
} y;
};
struct x
foo(union xy *xy)
{
return xy->x;
}
into:
_foo: ## @foo
movq (%rdi), %rax
movabsq $1095216660480, %rcx ## imm = 0xFF00000000
andq %rax, %rcx
movabsq $-72057594037927936, %rdx ## imm = 0xFF00000000000000
andq %rax, %rdx
movzbl %al, %esi
orq %rdx, %rsi
movq %rax, %rdx
andq $65280, %rdx ## imm = 0xFF00
orq %rsi, %rdx
movq %rax, %rsi
andq $16711680, %rsi ## imm = 0xFF0000
orq %rdx, %rsi
movl %eax, %edx
andl $-16777216, %edx ## imm = 0xFFFFFFFFFF000000
orq %rsi, %rdx
orq %rcx, %rdx
movabsq $280375465082880, %rcx ## imm = 0xFF0000000000
movq %rax, %rsi
andq %rcx, %rsi
orq %rdx, %rsi
movabsq $71776119061217280, %r8 ## imm = 0xFF000000000000
andq %r8, %rax
orq %rsi, %rax
movzwl 12(%rdi), %edx
movzbl 14(%rdi), %esi
shlq $16, %rsi
orl %edx, %esi
movq %rsi, %r9
shlq $32, %r9
movl 8(%rdi), %edx
orq %r9, %rdx
andq %rdx, %rcx
movzbl %sil, %esi
shlq $32, %rsi
orq %rcx, %rsi
movl %edx, %ecx
andl $-16777216, %ecx ## imm = 0xFFFFFFFFFF000000
orq %rsi, %rcx
movq %rdx, %rsi
andq $16711680, %rsi ## imm = 0xFF0000
orq %rcx, %rsi
movq %rdx, %rcx
andq $65280, %rcx ## imm = 0xFF00
orq %rsi, %rcx
movzbl %dl, %esi
orq %rcx, %rsi
andq %r8, %rdx
orq %rsi, %rdx
ret
We now compile this into:
_foo: ## @foo
## BB#0: ## %entry
movzwl 12(%rdi), %eax
movzbl 14(%rdi), %ecx
shlq $16, %rcx
orl %eax, %ecx
shlq $32, %rcx
movl 8(%rdi), %edx
orq %rcx, %rdx
movq (%rdi), %rax
ret
A small improvement :-)
llvm-svn: 123520
|
| |
|
|
| |
llvm-svn: 123519
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
these would try hard to match constants by inverting the bits
and recursively matching. There are two problems with this:
1) some patterns would match when we didn't want them to (theoretical)
2) this is insanely expensive to do, and most often pointless.
This was apparently useful in just 2 instcombine cases, which I
added code to handle explicitly. This change speeds up 'opt'
time on 176.gcc by 1% and produces bitwise identical code.
llvm-svn: 123518
|
| |
|
|
|
|
| |
no functionality change currently.
llvm-svn: 123517
|
| |
|
|
| |
llvm-svn: 123516
|
| |
|
|
|
|
| |
means that are about to disappear.
llvm-svn: 123515
|
| |
|
|
| |
llvm-svn: 123514
|
| |
|
|
| |
llvm-svn: 123513
|
| |
|
|
|
|
| |
-Wuninitialized based on CFG dataflow analysis. WIP.
llvm-svn: 123512
|
| |
|
|
| |
llvm-svn: 123511
|
| |
|
|
| |
llvm-svn: 123510
|
| |
|
|
| |
llvm-svn: 123509
|
| |
|
|
|
|
|
| |
the TemplateName class. Nothing actually changes, but I find this less
objectionable (and it will factor into an upcoming change).
llvm-svn: 123508
|
| |
|
|
|
|
|
| |
stuff soon when we get a fix for looking up the "OBJC_IVAR_$_Class.ivar"
style symbols into IRForTarget::ResolveExternals() next week.
llvm-svn: 123507
|
| |
|
|
|
|
|
|
|
| |
that captures the substitution of a non-type template argument pack
for a non-type template parameter pack within a pack expansion that
cannot be fully expanded. This follows the approach taken by
SubstTemplateTypeParmPackType.
llvm-svn: 123506
|
| |
|
|
| |
llvm-svn: 123505
|
| |
|
|
|
|
|
|
|
| |
RegisterContext::InvalidateAllRegisters.
This patch simply allows the tree to build. A proper implementation still needs
to be provided.
llvm-svn: 123504
|
| |
|
|
| |
llvm-svn: 123503
|
| |
|
|
|
|
|
| |
Propagate the environment if one is not provided. Also, do not allocate the
monitor threads launch arguments on the stack.
llvm-svn: 123502
|
| |
|
|
|
|
| |
to use it.
llvm-svn: 123501
|
| |
|
|
| |
llvm-svn: 123500
|
| |
|
|
| |
llvm-svn: 123499
|