- Jan 12, 2008
-
-
Chris Lattner authored
the inliner pass. Patch by Robert Zeh. llvm-svn: 45903
-
Duncan Sands authored
attributes on the vararg call arguments are also dropped. llvm-svn: 45892
-
- Jan 11, 2008
-
-
Chris Lattner authored
get away with it, which exposes opportunities to eliminate the memory objects entirely. For example, we now compile byval.ll to: define internal void @f1(i32 %b.0, i64 %b.1) { entry: %tmp2 = add i32 %b.0, 1 ; <i32> [#uses=0] ret void } define i32 @main() nounwind { entry: call void @f1( i32 1, i64 2 ) ret i32 0 } This seems like it would trigger a lot for code that passes around small structs (e.g. SDOperand's or _Complex)... llvm-svn: 45886
-
Chris Lattner authored
llvm-svn: 45878
-
Chris Lattner authored
llvm-svn: 45877
-
Chris Lattner authored
whether an argument is byval and pass into isSafeToPromoteArgument. llvm-svn: 45876
-
Chris Lattner authored
llvm-svn: 45875
-
Chris Lattner authored
llvm-svn: 45874
-
Chris Lattner authored
llvm-svn: 45873
-
Chris Lattner authored
copy of it in case the callee modifies the struct. llvm-svn: 45853
-
- Jan 08, 2008
-
-
Chris Lattner authored
llvm-svn: 45745
-
- Jan 07, 2008
-
-
Duncan Sands authored
incompatibility. llvm-svn: 45704
-
Gordon Henriksen authored
llvm-svn: 45675
-
Gordon Henriksen authored
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
-
- Jan 06, 2008
-
-
Duncan Sands authored
direct calls bails out unless caller and callee have essentially equivalent parameter attributes. This is illogical - the callee's attributes should be of no relevance here. Rework the logic, which incidentally fixes a crash when removed arguments have attributes. llvm-svn: 45658
-
Duncan Sands authored
a direct call with cast parameters and cast return value (if any), instcombine was prepared to cast any non-void return value into any other, whether castable or not. Add a new predicate for testing whether casting is valid, and check it both for the return value and (as a cleanup) for the parameters. llvm-svn: 45657
-
- Jan 05, 2008
-
-
Chris Lattner authored
llvm-svn: 45613
-
Chris Lattner authored
things that are not equality comparisons, for example: (2147479553+4096)-2147479553 < 0 != (2147479553+4096) < 2147479553 llvm-svn: 45612
-
- Jan 04, 2008
-
-
Wojciech Matyjewicz authored
llvm-svn: 45594
-
Chris Lattner authored
llvm-svn: 45568
-
- Jan 03, 2008
-
-
Chris Lattner authored
could theoretically introduce a trap, but is also a performance issue. This speeds up ptrdist/ks by 8%. llvm-svn: 45533
-
Chris Lattner authored
llvm-svn: 45516
-
- Dec 29, 2007
-
-
Chris Lattner authored
llvm-svn: 45418
-
Chris Lattner authored
llvm-svn: 45415
-
Christopher Lamb authored
Disable null pointer folding transforms for non-generic address spaces. This should probably be a target-specific predicate based on address space. That way for targets where this isn't applicable the predicate can be optimized away. llvm-svn: 45403
-
Chris Lattner authored
have potential side-effects. llvm-svn: 45392
-
- Dec 28, 2007
-
-
Owen Anderson authored
Repair a transform that Chris noticed a bug in. Thanks to Nicholas for pointing out my stupid mistakes when writing this patch. :-) llvm-svn: 45384
-
Chris Lattner authored
define i32 @main() { entry: %z = alloca i32 ; <i32*> [#uses=2] store i32 0, i32* %z %tmp = load i32* %z ; <i32> [#uses=1] %sub = sub i32 %tmp, 1 ; <i32> [#uses=1] %cmp = icmp ult i32 %sub, 0 ; <i1> [#uses=1] %retval = select i1 %cmp, i32 1, i32 0 ; <i32> [#uses=1] ret i32 %retval } into ret 1, instead of ret 0. Christopher, please investigate. llvm-svn: 45383
-
- Dec 25, 2007
-
-
Gordon Henriksen authored
when copying functions. llvm-svn: 45356
-
Chris Lattner authored
it is only a partial fix. This change is noise for most programs, but speeds up Shootout-C++/matrix by 20%, Ptrdist/ks by 24%, smg2000 by 8%, hexxagon by 9%, bzip2 by 9% (not sure I trust this), ackerman by 13%, etc. OTOH, it slows down Shootout/fib2 by 40% (I'll update PR1877 with this info). llvm-svn: 45354
-
Gordon Henriksen authored
define void @f() { ... call i32 @g() ... } define void @g() { ... } The hazards are: - @f and @g have GC, but they differ GC. Inlining is invalid. This may never occur. - @f has no GC, but @g does. g's GC must be propagated to @f. The other scenarios are safe: - @f and @g have the same GC. - @f and @g have no GC. - @g has no GC. This patch adds inliner checks for the former two scenarios. llvm-svn: 45351
-
- Dec 24, 2007
-
-
Chris Lattner authored
When specified, don't split backedges of single-bb loops. This helps address PR1877 llvm-svn: 45344
-
- Dec 22, 2007
-
-
Chris Lattner authored
us to compile: #include <math.h> int t1(double d) { return signbit(d); } into: _t1: movd %xmm0, %rax shrq $63, %rax ret instead of: _t1: movd %xmm0, %rax shrq $32, %rax shrl $31, %eax ret on x86-64. llvm-svn: 45311
-
Devang Patel authored
not merge current bb and succ even if bb's terminator is unconditional branch to succ. llvm-svn: 45305
-
- Dec 21, 2007
-
-
Duncan Sands authored
return attributes on the floor. In the case of a call to a varargs function where the varargs arguments are being removed, any call attributes on those arguments need to be dropped. I didn't do this because I plan to make it illegal to have such attributes (see next patch). With this change, compiling the gcc filter2 eh test at -O0 and then running opt -std-compile-opts on it results in a correctly working program (compiling at -O1 or higher results in the test failing due to a problem with how we output eh info into the IR). llvm-svn: 45285
-
- Dec 20, 2007
-
-
Christopher Lamb authored
(icmp slt (sub A B) 1) -> (icmp sle A B) icmp sgt (sub A B) -1) -> (icmp sge A B) and add testcase. llvm-svn: 45256
-
Evan Cheng authored
Clean up previous patch: PHI uses should not prevent iv reuse if all other uses are addresses. This trades a constant multiply for one fewer iv. llvm-svn: 45251
-
Chris Lattner authored
has a single use, and generalize it to not require N to be a constant. llvm-svn: 45250
-
Evan Cheng authored
llvm-svn: 45230
-
- Dec 19, 2007
-
-
Duncan Sands authored
calls 'nounwind'. It is important for correct C++ exception handling that nounwind markings do not get lost, so this transformation is actually needed for correctness. llvm-svn: 45218
-