| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
| |
llvm-svn: 93227
|
| |
|
|
| |
llvm-svn: 93222
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
condition is a xor with a phi node. This eliminates nonsense
like this from 176.gcc in several places:
LBB166_84:
testl %eax, %eax
- setne %al
- xorb %cl, %al
- notb %al
- testb $1, %al
- je LBB166_85
+ je LBB166_69
+ jmp LBB166_85
This is rdar://7391699
llvm-svn: 93221
|
| |
|
|
|
|
|
|
|
| |
instruction is copy like where the source and destination registers can
overlap. This is to be used by the coalescable to coalesce the source and
destination registers of instructions like X86::MOVSX64rr32. Apparently
some crazy people believe the coalescer is too simple.
llvm-svn: 93210
|
| |
|
|
|
|
| |
on branches by renaming it and checking for a branch at the call site.
llvm-svn: 93208
|
| |
|
|
|
|
| |
autogen them after 93152 and 93191.
llvm-svn: 93204
|
| |
|
|
|
|
|
|
|
| |
uses,
codegen has no apparent problem with the trunc version of this, because it turns
into a simple subreg idiom
llvm-svn: 93202
|
| |
|
|
|
|
|
|
|
|
|
| |
the
trunc has multiple uses. Codegen is not able to coalesce the subreg case
correctly and so this leads to higher register pressure and spilling (see PR5997).
This speeds up 256.bzip2 from 8.60 -> 8.04s on my machine, ~7%.
llvm-svn: 93200
|
| |
|
|
|
|
| |
and ConvertValIDToValue into a more powerful ConvertValIDToValue() that does all three's work
llvm-svn: 93197
|
| |
|
|
|
|
| |
overlap, then select as an ADD instead.
llvm-svn: 93191
|
| |
|
|
| |
llvm-svn: 93185
|
| |
|
|
|
|
|
|
| |
BRCOND was constant folded.
This fixes PR5980.
llvm-svn: 93184
|
| |
|
|
| |
llvm-svn: 93183
|
| |
|
|
| |
llvm-svn: 93182
|
| |
|
|
|
|
|
|
| |
then a load if the
loads are not in the default address space because the transformation discards src value info.
llvm-svn: 93180
|
| |
|
|
| |
llvm-svn: 93174
|
| |
|
|
| |
llvm-svn: 93165
|
| |
|
|
|
|
| |
have a fix.
llvm-svn: 93163
|
| |
|
|
|
|
|
|
|
| |
- getToken is modeled after StringRef::split but it can split on multiple
separator chars and skips leading seperators.
- SplitString is a StringRef::split variant for more than 2 elements with the
same behaviour as getToken.
llvm-svn: 93161
|
| |
|
|
|
|
|
|
|
|
|
| |
has an immediate with at least 32 bits of leading zeros, to avoid needing to
materialize that immediate in a register first.
FileCheckize, tidy, and extend a testcase to cover this case.
This fixes rdar://7527390.
llvm-svn: 93160
|
| |
|
|
|
|
|
|
| |
new AsmPrinter. This is perhaps less elegant than describing them
in terms of MOV32r0 and subreg operations, but it allows the
current register to rematerialize them.
llvm-svn: 93158
|
| |
|
|
|
|
| |
single user. The _su forms are intended for non-top-level nodes.
llvm-svn: 93155
|
| |
|
|
| |
llvm-svn: 93154
|
| |
|
|
|
|
| |
allow the instruction to be 3address-fied if needed.
llvm-svn: 93152
|
| |
|
|
|
|
|
|
| |
ignore alignment requirements for SIMD memory operands. This
is useful on architectures like the AMD 10h that do not trap on
unaligned references if a status bit is twiddled at startup time.
llvm-svn: 93151
|
| |
|
|
|
|
|
| |
Make InsertDbgValueIntrinsic() and get Offset take and recieve a uint64_t.
Get constness correct for getVariable() and getValue().
llvm-svn: 93149
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
good code on PR4216:
_test_bitfield: ## @test_bitfield
orl $32962, %edi
movl $4294941946, %eax
andq %rdi, %rax
ret
instead of:
_test_bitfield:
movl $4294941696, %ecx
movl %edi, %eax
orl $194, %edi
orl $32768, %eax
andq $250, %rdi
andq %rax, %rcx
movq %rdi, %rax
orq %rcx, %rax
ret
Evan is looking into the remaining andq+imm -> andl optimization.
llvm-svn: 93147
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
BitsToClear case. This allows it to promote expressions which have an
and/or/xor after the lshr, promoting cases like test2 (from PR4216)
and test3 (random extample extracted from a spec benchmark).
clang now compiles the code in PR4216 into:
_test_bitfield: ## @test_bitfield
movl %edi, %eax
orl $194, %eax
movl $4294902010, %ecx
andq %rax, %rcx
orl $32768, %edi
andq $39936, %rdi
movq %rdi, %rax
orq %rcx, %rax
ret
instead of:
_test_bitfield: ## @test_bitfield
movl %edi, %eax
orl $194, %eax
movl $4294902010, %ecx
andq %rax, %rcx
shrl $8, %edi
orl $128, %edi
shlq $8, %rdi
andq $39936, %rdi
movq %rdi, %rax
orq %rcx, %rax
ret
which is still not great, but is progress.
llvm-svn: 93145
|
| |
|
|
|
|
|
|
|
| |
new BitsToClear result which allows us to start promoting
expressions that end with a lshr-by-constant. This is
conservatively correct and better than what we had before
(see testcases) but still needs to be extended further.
llvm-svn: 93144
|
| |
|
|
| |
llvm-svn: 93143
|
| |
|
|
|
|
| |
the dest of the sext.
llvm-svn: 93128
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the zext dest type. This allows us to handle test52/53 in cast.ll,
and allows llvm-gcc to generate much better code for PR4216 in -m64
mode:
_test_bitfield: ## @test_bitfield
orl $32962, %edi
movl %edi, %eax
andl $-25350, %eax
ret
This also fixes a bug handling vector extends, ensuring that the
mask produced is a vector constant, not an integer constant.
llvm-svn: 93127
|
| |
|
|
|
|
| |
integer vectors as well as just integers.
llvm-svn: 93126
|
| |
|
|
|
| |
warning: suggest parentheses around ‘&&’ within ‘||’.
llvm-svn: 93121
|
| |
|
|
|
|
| |
simpler profitability predicate.
llvm-svn: 93111
|
| |
|
|
| |
llvm-svn: 93110
|
| |
|
|
|
|
|
|
| |
elimination of a sign extend to be a win, which simplifies
the client of CanEvaluateSExtd, and allows us to eliminate
more casts (examples taken from real code).
llvm-svn: 93109
|
| |
|
|
|
|
|
|
| |
getWhenValsUnresolved().
Document PFS argument to ParseValID() and ConvertGlobalOrMetadataValIDToValue().
llvm-svn: 93108
|
| |
|
|
|
|
|
|
| |
lshr+ashr instead of trunc+sext. We want to avoid type
conversions whenever possible, it is easier to codegen expressions
without truncates and extensions.
llvm-svn: 93107
|
| |
|
|
| |
llvm-svn: 93106
|
| |
|
|
| |
llvm-svn: 93105
|
| |
|
|
|
|
|
| |
bits known clear in the result and don't care about the # casts
eliminated. TD is also dead but keeping it for now.
llvm-svn: 93098
|
| |
|
|
|
|
|
|
|
|
|
| |
1) don't try to optimize a sext or zext that is only used by a trunc, let
the trunc get optimized first. This avoids some pointless effort in
some common cases since instcombine scans down a block in the first pass.
2) Change the cost model for zext elimination to consider an 'and' cheaper
than a zext. This allows us to do it more aggressively, and for the next
patch to simplify the code quite a bit.
llvm-svn: 93097
|
| |
|
|
|
|
| |
more expressions to be promoted and casts eliminated.
llvm-svn: 93096
|
| |
|
|
| |
llvm-svn: 93095
|
| |
|
|
| |
llvm-svn: 93093
|
| |
|
|
| |
llvm-svn: 93092
|
| |
|
|
| |
llvm-svn: 93091
|
| |
|
|
|
|
|
|
|
| |
commonIntCastTransforms into the callers, eliminating a switch,
and allowing the static predicate methods to be moved down to
live next to the corresponding function. No functionality
change.
llvm-svn: 93089
|
| |
|
|
|
|
|
|
| |
boolean values were distinguishable from integers. The attached patch introduces "typedef int LLVMBool;", and uses LLVMBool instead of int throughout the C API, wherever a boolean value is called for."
Patch by James Y Knight!
llvm-svn: 93079
|