| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
| |
llvm-svn: 103109
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Microoptimize Twine's with unsigned and int to not pin their value to
the stack. This saves stack space in common cases and allows mem2reg
in the caller. A simple example is:
void foo(const Twine &);
void bar(int x) {
foo("xyz: " + Twine(x));
}
Before:
__Z3bari:
subq $40, %rsp
movl %edi, 36(%rsp)
leaq L_.str3(%rip), %rax
leaq 36(%rsp), %rcx
leaq 8(%rsp), %rdi
movq %rax, 8(%rsp)
movq %rcx, 16(%rsp)
movb $3, 24(%rsp)
movb $7, 25(%rsp)
callq __Z3fooRKN4llvm5TwineE
addq $40, %rsp
ret
After:
__Z3bari:
subq $24, %rsp
leaq L_.str3(%rip), %rax
movq %rax, (%rsp)
movslq %edi, %rax
movq %rax, 8(%rsp)
movb $3, 16(%rsp)
movb $7, 17(%rsp)
leaq (%rsp), %rdi
callq __Z3fooRKN4llvm5TwineE
addq $24, %rsp
ret
It saves 16 bytes of stack and one instruction in this case.
llvm-svn: 103107
|
| |
|
|
| |
llvm-svn: 103104
|
| |
|
|
| |
llvm-svn: 103103
|
| |
|
|
|
|
|
|
|
|
| |
reg_sequence instructions that are formed by registers defined by distinct instructions. e.g.
80 %reg1041:6<def> = VSHRNv4i16 %reg1034<kill>, 12, pred:14, pred:%reg0
. . .
120 %reg1041:5<def> = VSHRNv4i16 %reg1039<kill>, 12, pred:14, pred:%reg0
llvm-svn: 103102
|
| |
|
|
| |
llvm-svn: 103095
|
| |
|
|
|
|
|
| |
when possible.
- <rdar://problem/7934873>
llvm-svn: 103092
|
| |
|
|
|
|
|
| |
This should fix mysteriously crashing boost regression tests when stderr is
managed by bjam (PR7043).
llvm-svn: 103085
|
| |
|
|
|
|
| |
hack the code to turn it off when debugging.
llvm-svn: 103083
|
| |
|
|
|
|
| |
MachineSSAUpdater to avoid duplicating all the code.
llvm-svn: 103060
|
| |
|
|
| |
llvm-svn: 103057
|
| |
|
|
|
|
| |
consecutive D registers as a REG_SEQUENCE.
llvm-svn: 103047
|
| |
|
|
| |
llvm-svn: 103041
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
references of the source operands with references of the destination with subreg indices. e.g.
%reg1029<def>, %reg1030<def> = VLD1q16 %reg1024<kill>, ...
%reg1031<def> = REG_SEQUENCE %reg1029<kill>, 5, %reg1030<kill>, 6
=>
%reg1031:5<def>, %reg1031:6<def> = VLD1q16 %reg1024<kill>, ...
PHI elimination now does more than phi elimination. It is really a de-SSA pass.
llvm-svn: 103039
|
| |
|
|
|
|
|
|
| |
indirect branches in all the predecessors. This avoids unnecessarily
splitting edges in cases where load PRE is not possible anyway.
Thanks to Jakub Staszak for pointing this out.
llvm-svn: 103034
|
| |
|
|
|
|
|
|
| |
emit an add instruction of the form 'a reg, reg, imm'."
Patch by Kalle Raiskila!
llvm-svn: 103021
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
instructions which have no direct register usage.
Darwin 'as' accepts:
add $0, (%rax)
but rejects
mov $0, (%rax)
for example.
Given that, only accept suffix matches which match exactly one form. We still
need to emit nice diagnostics for failures...
llvm-svn: 103015
|
| |
|
|
| |
llvm-svn: 103013
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- The idea is that when a match fails, we just try to match each of +'b', +'w',
+'l'. If exactly one matches, we assume this is a mnemonic prefix and accept
it. If all match, we assume it is width generic, and take the 'l' form.
- This would be a horrible hack, if it weren't so simple. Therefore it is an
elegant solution! Chris gets the credit for this particular elegant
solution. :)
- Next step to making this more robust is to have the X86 matcher generate the
mnemonic prefix information. Ideally we would also compute up-front exactly
which mnemonic to attempt to match, but this may require more custom code in
the matcher than is really worth it.
llvm-svn: 103012
|
| |
|
|
|
|
|
|
|
| |
buildbot: the debugging and non-debugging versions of getFunction were not
functionally equivalent: the non-debugging version wrongly assumed that if a
metadata operand was not metadata, then it had a non-null containing function.
This is not true, since the operand might be a global value, constant etc.
llvm-svn: 103008
|
| |
|
|
|
|
|
|
|
|
| |
RAUW of a global variable with a local variable in function F,
if function local metadata M in function G was using the global
then M would become function-local to both F and G, which is not
allowed. See the testcase for an example. Fixed by detecting
this situation and zapping the metadata operand when it occurs.
llvm-svn: 103007
|
| |
|
|
| |
llvm-svn: 103003
|
| |
|
|
|
|
| |
available all the time.
llvm-svn: 103001
|
| |
|
|
|
|
| |
of doing the same thing manually.
llvm-svn: 102997
|
| |
|
|
| |
llvm-svn: 102996
|
| |
|
|
|
|
| |
debug info used by a module.
llvm-svn: 102995
|
| |
|
|
|
|
| |
argument out of the entry block. rdar://7937489
llvm-svn: 102993
|
| |
|
|
|
|
| |
changed to 0x7E from 0x6E as well as the previous change of RPDI to S3SI.
llvm-svn: 102991
|
| |
|
|
|
|
|
|
| |
match failure.
Also, fixes a few memory leak FIXMEs.
llvm-svn: 102986
|
| |
|
|
| |
llvm-svn: 102984
|
| |
|
|
| |
llvm-svn: 102981
|
| |
|
|
|
|
| |
eliminateFrameIndex(), leading to llvm_unreachable() assertion failure.
llvm-svn: 102980
|
| |
|
|
|
|
|
| |
This should make it possible to start producing kill flags in isel without
breaking stuff.
llvm-svn: 102976
|
| |
|
|
|
|
|
| |
in registers into a separate function to de-couple it from the
top-down-specific logic in getRegForValue.
llvm-svn: 102975
|
| |
|
|
|
|
| |
on PPC for x!=0. 7624113.
llvm-svn: 102972
|
| |
|
|
|
|
|
|
| |
to fadd, fsub, and fmul, when used with a floating-point type. LLVM
has supported the new instructions since 2.6, so it's time to get
on board.
llvm-svn: 102971
|
| |
|
|
|
|
|
|
| |
RemoveCopyByCommutingDef().
This fixes PR6941.
llvm-svn: 102970
|
| |
|
|
| |
llvm-svn: 102966
|
| |
|
|
|
|
| |
same, now that getConstant has overloads consistent with ConstantInt::get.
llvm-svn: 102965
|
| |
|
|
|
|
|
|
| |
debug output is showing machine instructions, the IR-level basic block names
aren't very meaningful, and because multiple machine basic blocks may be
derived from one IR-level BB, they're also not unique.
llvm-svn: 102960
|
| |
|
|
| |
llvm-svn: 102959
|
| |
|
|
|
|
|
| |
instructions as the Mac OS X darwin assembler. Some of which like 'fcoml'
assembled to different opcodes. While some of the suffixes were just different.
llvm-svn: 102958
|
| |
|
|
|
|
|
| |
mm to mm/m64 and the Move quadword from xmm2/mem64 to xmm1 had the incorrect
encodings.
llvm-svn: 102952
|
| |
|
|
|
|
|
|
|
|
| |
caused the a pushl instruction to be incorrectly encoding using only two bytes
of immediate, causing the following 2 instruction bytes to be part of the 32-bit
immediate value. Also fixed the one byte form of push to be used when the
immediate would fit in a signed extended byte. Lastly changed the names to not
include the 32 of PUSH32 since they actually push the size of the stack pointer.
llvm-svn: 102951
|
| |
|
|
|
|
|
|
| |
Also, pass true for isSigned even when creating constants for unsigned
comparisons, because the point is to create an all-ones constant,
rather than UINT64_MAX, even for integers wider than 64 bits.
llvm-svn: 102946
|
| |
|
|
| |
llvm-svn: 102941
|
| |
|
|
|
|
| |
Patch by Jakub Staszak!
llvm-svn: 102928
|
| |
|
|
|
|
|
|
| |
SimplifyICmpOperands will simplify such cases to EQ or NE. This makes
the correcntess of the code independent on SimplifyICmpOperands doing
certain simplifications.
llvm-svn: 102927
|
| |
|
|
|
|
|
| |
comparison instructions, since they aren't interesting, despite having
integer result types.
llvm-svn: 102925
|
| |
|
|
|
|
| |
case where both are addrecs in unrelated loops.
llvm-svn: 102924
|