| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 45774
|
|
|
|
| |
llvm-svn: 45773
|
|
|
|
| |
llvm-svn: 45768
|
|
|
|
| |
llvm-svn: 45766
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
void test(long long *P) { *P ^= 1; }
into just:
_test:
movl 4(%esp), %eax
xorl $1, (%eax)
ret
instead of code like this:
_test:
movl 4(%esp), %ecx
xorl $1, (%ecx)
movl 4(%ecx), %edx
movl %edx, 4(%ecx)
ret
llvm-svn: 45762
|
|
|
|
| |
llvm-svn: 45759
|
|
|
|
|
|
|
|
| |
on 64-bit builds. Analysis and original patch
by Török Edwin. Code audit found another place
with the same problem, also fixed here.
llvm-svn: 45746
|
|
|
|
|
|
| |
arithmetic.
llvm-svn: 45745
|
|
|
|
|
|
|
|
| |
the code generated is not wonderful. This turns a miscompilation into
a code quality bug (noted in the ppc readme). This fixes PR642, which
is over 2 years old (!). Nate, please review this.
llvm-svn: 45742
|
|
|
|
| |
llvm-svn: 45738
|
|
|
|
| |
llvm-svn: 45734
|
|
|
|
| |
llvm-svn: 45733
|
|
|
|
| |
llvm-svn: 45731
|
|
|
|
|
|
| |
isSimpleLoad = 1.
llvm-svn: 45727
|
|
|
|
| |
llvm-svn: 45726
|
|
|
|
| |
llvm-svn: 45725
|
|
|
|
| |
llvm-svn: 45723
|
|
|
|
| |
llvm-svn: 45720
|
|
|
|
| |
llvm-svn: 45719
|
|
|
|
| |
llvm-svn: 45718
|
|
|
|
|
|
|
| |
to be used for the force_interpreter parameter...
Spotted by gcc-4.2.
llvm-svn: 45714
|
|
|
|
| |
llvm-svn: 45712
|
|
|
|
|
|
| |
incompatibility.
llvm-svn: 45704
|
|
|
|
| |
llvm-svn: 45703
|
|
|
|
| |
llvm-svn: 45701
|
|
|
|
| |
llvm-svn: 45700
|
|
|
|
| |
llvm-svn: 45699
|
|
|
|
| |
llvm-svn: 45698
|
|
|
|
| |
llvm-svn: 45697
|
|
|
|
|
|
|
| |
Make MachineInstr::getDesc return a reference instead
of a pointer, since it can never be null.
llvm-svn: 45695
|
|
|
|
| |
llvm-svn: 45693
|
|
|
|
|
|
|
|
| |
all clients over to using predicates instead of these flags directly.
These are now private values which are only to be used to statically
initialize the tables.
llvm-svn: 45692
|
|
|
|
| |
llvm-svn: 45691
|
|
|
|
|
|
|
| |
flags that can be set. Add predicates for the ones lacking it, and switch
some clients over to using the predicates instead of Flags directly.
llvm-svn: 45690
|
|
|
|
| |
llvm-svn: 45689
|
|
|
|
|
|
|
| |
Evan, please review the comments I added to getNumDefs to make sure
that they are accurate, thx.
llvm-svn: 45687
|
|
|
|
| |
llvm-svn: 45685
|
|
|
|
| |
llvm-svn: 45683
|
|
|
|
| |
llvm-svn: 45680
|
|
|
|
| |
llvm-svn: 45679
|
|
|
|
|
|
| |
into TargetInstrDescriptor from TargetInstrInfo.
llvm-svn: 45678
|
|
|
|
|
|
|
| |
over to using them, instead of diddling Flags directly. Change the
various flags from const variables to enums.
llvm-svn: 45677
|
|
|
|
|
|
|
| |
providing a misleading facility. It's used once in the MIPS backend
and hardcoded as "\t.globl\t" everywhere else.
llvm-svn: 45676
|
|
|
|
| |
llvm-svn: 45675
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
that it is cheap and efficient to get.
Move a variety of predicates from TargetInstrInfo into
TargetInstrDescriptor, which makes it much easier to query a predicate
when you don't have TII around. Now you can use MI->getDesc()->isBranch()
instead of going through TII, and this is much more efficient anyway. Not
all of the predicates have been moved over yet.
Update old code that used MI->getInstrDescriptor()->Flags to use the
new predicates in many places.
llvm-svn: 45674
|
|
|
|
| |
llvm-svn: 45673
|
|
|
|
|
|
| |
Some day I'll get it all moved over...
llvm-svn: 45672
|
|
|
|
| |
llvm-svn: 45671
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ShadowStackCollector, which additionally has reduced overhead with
no sacrifice in portability.
Considering a function @fun with 8 loop-local roots,
ShadowStackCollector introduces the following overhead
(x86):
; shadowstack prologue
movl L_llvm_gc_root_chain$non_lazy_ptr, %eax
movl (%eax), %ecx
movl $___gc_fun, 20(%esp)
movl $0, 24(%esp)
movl $0, 28(%esp)
movl $0, 32(%esp)
movl $0, 36(%esp)
movl $0, 40(%esp)
movl $0, 44(%esp)
movl $0, 48(%esp)
movl $0, 52(%esp)
movl %ecx, 16(%esp)
leal 16(%esp), %ecx
movl %ecx, (%eax)
; shadowstack loop overhead
(none)
; shadowstack epilogue
movl 48(%esp), %edx
movl %edx, (%ecx)
; shadowstack metadata
.align 3
___gc_fun: # __gc_fun
.long 8
.space 4
In comparison to LowerGC:
; lowergc prologue
movl L_llvm_gc_root_chain$non_lazy_ptr, %eax
movl (%eax), %ecx
movl %ecx, 48(%esp)
movl $8, 52(%esp)
movl $0, 60(%esp)
movl $0, 56(%esp)
movl $0, 68(%esp)
movl $0, 64(%esp)
movl $0, 76(%esp)
movl $0, 72(%esp)
movl $0, 84(%esp)
movl $0, 80(%esp)
movl $0, 92(%esp)
movl $0, 88(%esp)
movl $0, 100(%esp)
movl $0, 96(%esp)
movl $0, 108(%esp)
movl $0, 104(%esp)
movl $0, 116(%esp)
movl $0, 112(%esp)
; lowergc loop overhead
leal 44(%esp), %eax
movl %eax, 56(%esp)
leal 40(%esp), %eax
movl %eax, 64(%esp)
leal 36(%esp), %eax
movl %eax, 72(%esp)
leal 32(%esp), %eax
movl %eax, 80(%esp)
leal 28(%esp), %eax
movl %eax, 88(%esp)
leal 24(%esp), %eax
movl %eax, 96(%esp)
leal 20(%esp), %eax
movl %eax, 104(%esp)
leal 16(%esp), %eax
movl %eax, 112(%esp)
; lowergc epilogue
movl 48(%esp), %edx
movl %edx, (%ecx)
; lowergc metadata
(none)
llvm-svn: 45670
|
|
|
|
|
|
|
|
|
| |
up to the various compiler pipelines.
This doesn't actually add support for any GC algorithms, which means it
temporarily breaks a few tests. To be fixed shortly.
llvm-svn: 45669
|