| Commit message (Collapse) | Author | Age | Files | Lines | 
| ... |  | 
| | 
| 
| 
|  | 
llvm-svn: 113158
 | 
| | 
| 
| 
|  | 
llvm-svn: 113157
 | 
| | 
| 
| 
| 
| 
|  | 
pattern, so there is no need to define a matching function.
llvm-svn: 113122
 | 
| | 
| 
| 
|  | 
llvm-svn: 113119
 | 
| | 
| 
| 
|  | 
llvm-svn: 113116
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Since mem2reg isn't run at -O0, we get a ton of reloads from the stack,
for example, before, this code:
int foo(int x, int y, int z) {
  return x+y+z;
}
used to compile into:
_foo:                                   ## @foo
	subq	$12, %rsp
	movl	%edi, 8(%rsp)
	movl	%esi, 4(%rsp)
	movl	%edx, (%rsp)
	movl	8(%rsp), %edx
	movl	4(%rsp), %esi
	addl	%edx, %esi
	movl	(%rsp), %edx
	addl	%esi, %edx
	movl	%edx, %eax
	addq	$12, %rsp
	ret
Now we produce:
_foo:                                   ## @foo
	subq	$12, %rsp
	movl	%edi, 8(%rsp)
	movl	%esi, 4(%rsp)
	movl	%edx, (%rsp)
	movl	8(%rsp), %edx
	addl	4(%rsp), %edx    ## Folded load
	addl	(%rsp), %edx     ## Folded load
	movl	%edx, %eax
	addq	$12, %rsp
	ret
Fewer instructions and less register use = faster compiles.
llvm-svn: 113102
 | 
| | 
| 
| 
|  | 
llvm-svn: 113073
 | 
| | 
| 
| 
| 
| 
|  | 
not SelectAddr
llvm-svn: 113072
 | 
| | 
| 
| 
| 
| 
|  | 
regarding mmx shuffles
llvm-svn: 113059
 | 
| | 
| 
| 
|  | 
llvm-svn: 113058
 | 
| | 
| 
| 
| 
| 
|  | 
versions yet.
llvm-svn: 113056
 | 
| | 
| 
| 
|  | 
llvm-svn: 113055
 | 
| | 
| 
| 
|  | 
llvm-svn: 113050
 | 
| | 
| 
| 
|  | 
llvm-svn: 113048
 | 
| | 
| 
| 
|  | 
llvm-svn: 113047
 | 
| | 
| 
| 
|  | 
llvm-svn: 113045
 | 
| | 
| 
| 
|  | 
llvm-svn: 113044
 | 
| | 
| 
| 
|  | 
llvm-svn: 113043
 | 
| | 
| 
| 
|  | 
llvm-svn: 113035
 | 
| | 
| 
| 
|  | 
llvm-svn: 113034
 | 
| | 
| 
| 
| 
| 
| 
|  | 
checking each standalone condition and decide whether emit target
specific nodes or remove the condition if it's already matched before.
llvm-svn: 113031
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
"Use target specific nodes instead of relying in unpckl and
unpckh pattern fragments during isel time. Also place a
depth limit in getShuffleScalarElt.
llvm-svn: 113020
 | 
| | 
| 
| 
| 
| 
|  | 
Bruno, please review.
llvm-svn: 113014
 | 
| | 
| 
| 
|  | 
llvm-svn: 113009
 | 
| | 
| 
| 
| 
| 
|  | 
functionality changes
llvm-svn: 113008
 | 
| | 
| 
| 
| 
| 
|  | 
functional changes
llvm-svn: 113007
 | 
| | 
| 
| 
|  | 
llvm-svn: 113006
 | 
| | 
| 
| 
| 
| 
| 
|  | 
some infinite loop and select failures.
 - Apologies for eager reverting, but its branch day.
llvm-svn: 113000
 | 
| | 
| 
| 
| 
| 
|  | 
infinite loop and select failures.
llvm-svn: 112999
 | 
| | 
| 
| 
| 
| 
| 
|  | 
mask pattern fragment", which depends on r112934, which introduced some infinite
loop and select failures.
llvm-svn: 112998
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
"For ARM stack frames that utilize variable sized objects and have either
large local stack areas or require dynamic stack realignment, allocate a
base register via which to access the local frame. This allows efficient
access to frame indices not accessible via the FP (either due to being out
of range or due to dynamic realignment) or the SP (due to variable sized
object allocation). In particular, this greatly improves efficiency of access
to spill slots in Thumb functions which contain VLAs."
r112986 fixed a latent bug exposed by the above.
llvm-svn: 112989
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
alignment should be performed. Otherwise dynamic realignment may trigger
when the register allocator has already used the frame pointer as a general
purpose register. That is, we need to make sure that the list of reserved
registers doesn't change after register allocation.
llvm-svn: 112986
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
instructions prior to regalloc.  Since it's getting a little close to
the 2.8 branch deadline, I'll have to leave the rest of the instructions
handled by the NEONPreAllocPass for now, but I didn't want to leave half
of the VLD instructions converted and the other half not.
llvm-svn: 112983
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
either", it is breaking oggenc with Clang for ARMv6.
This reverts commit 8d6e29cfda270be483abf638850311670829ee65.
llvm-svn: 112962
 | 
| | 
| 
| 
|  | 
llvm-svn: 112955
 | 
| | 
| 
| 
| 
| 
| 
|  | 
The AVX versions of PALIGN and PABS* should only exist for
128-bit. Remove the unnecessary stuff.
llvm-svn: 112944
 | 
| | 
| 
| 
| 
| 
|  | 
fragment
llvm-svn: 112942
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
vabd intrinsic and add and/or zext operations.  In the case of vaba, this
also avoids the need for a DAG combine pattern to combine vabd with add.
Update tests.  Auto-upgrade the old intrinsics.
llvm-svn: 112941
 | 
| | 
| 
| 
|  | 
llvm-svn: 112938
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
- Teach getShuffleScalarElt how to handle more target
specific nodes, so the DAGCombine can make use of it.
- Add another hack to avoid the node update problem
during legalization. More description on the comments
llvm-svn: 112934
 | 
| | 
| 
| 
|  | 
llvm-svn: 112923
 | 
| | 
| 
| 
|  | 
llvm-svn: 112921
 | 
| | 
| 
| 
|  | 
llvm-svn: 112920
 | 
| | 
| 
| 
|  | 
llvm-svn: 112919
 | 
| | 
| 
| 
| 
| 
|  | 
stores.
llvm-svn: 112912
 | 
| | 
| 
| 
| 
| 
|  | 
Patch by Cameron Esfahani!
llvm-svn: 112902
 | 
| | 
| 
| 
|  | 
llvm-svn: 112896
 | 
| | 
| 
| 
|  | 
llvm-svn: 112885
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
large local stack areas or require dynamic stack realignment, allocate a
base register via which to access the local frame. This allows efficient
access to frame indices not accessible via the FP (either due to being out
of range or due to dynamic realignment) or the SP (due to variable sized
object allocation). In particular, this greatly improves efficiency of access
to spill slots in Thumb functions which contain VLAs.
rdar://7352504
rdar://8374540
rdar://8355680
llvm-svn: 112883
 | 
| | 
| 
| 
| 
| 
|  | 
Patch by Jan Sjodin!
llvm-svn: 112875
 |