- Jan 26, 2008
-
-
Duncan Sands authored
when inlining a readonly function. llvm-svn: 46393
-
Bill Wendling authored
void bork() { int *address = 0; *address = 0; } It's compiled into LLVM code that looks like this: define void @bork() noreturn nounwind { entry: unreachable } This is bad on some platforms (like PPC) because it will generate the label for the function but no body. The label could end up being associated with some non-code related stuff, like a section. This places a "trap" instruction if the SimplifyCFG pass removed all code from the function leaving only one "unreachable" instruction. llvm-svn: 46387
-
- Jan 25, 2008
-
-
Duncan Sands authored
llvm-svn: 46369
-
Owen Anderson authored
DeadStoreElimination can treat byval parameters as if there were alloca's for the purpose of removing end-of-function stores. llvm-svn: 46351
-
- Jan 22, 2008
-
-
Nick Lewycky authored
llvm-svn: 46247
-
Nick Lewycky authored
a smaller bitwidth. llvm-svn: 46244
-
- Jan 20, 2008
-
-
Duncan Sands authored
Fixes PR1935. llvm-svn: 46203
-
Duncan Sands authored
to complain on x86-64 (gcc 4.1). Use ~0U instead. llvm-svn: 46197
-
- Jan 17, 2008
-
-
Evan Cheng authored
llvm-svn: 46113
-
Chris Lattner authored
promoted functions. This is important for varargs calls in particular. Thanks to duncan for providing a great testcase. llvm-svn: 46108
-
- Jan 16, 2008
-
-
Chris Lattner authored
llvm-svn: 46090
-
Devang Patel authored
llvm-svn: 46045
-
- Jan 14, 2008
-
-
Duncan Sands authored
drop attributes on varargs call arguments. Also, it could generate invalid IR if the transformed call already had the 'nest' attribute somewhere (this can never happen for code coming from llvm-gcc, but it's a theoretical possibility). Fix both problems. llvm-svn: 45973
-
Chris Lattner authored
byval work. This miscompilation is due to the program indexing an array out of range and us doing a transformation that broke this. llvm-svn: 45949
-
Chris Lattner authored
llvm-svn: 45948
-
Chris Lattner authored
difficult to understand the invariants. llvm-svn: 45947
-
Chris Lattner authored
easier to show that its safe. No functionality change. llvm-svn: 45946
-
Chris Lattner authored
a load/store of i64. The later prevents promotion/scalarrepl of the source and dest in many cases. This fixes the 300% performance regression of the byval stuff on stepanov_v1p2. llvm-svn: 45945
-
Chris Lattner authored
method, no functionality change. llvm-svn: 45944
-
- Jan 13, 2008
-
-
Chris Lattner authored
greater than memcpy alignment, and if we lower to load/store, use the best alignment info we have. llvm-svn: 45943
-
Chris Lattner authored
make memmove->memcpy conversion a bit simpler. llvm-svn: 45942
-
Chris Lattner authored
realize that ne & sgt was a signed comparison (it was only looking at whether the left compare was signed). llvm-svn: 45937
-
Duncan Sands authored
llvm-svn: 45932
-
Duncan Sands authored
if this becomes a varargs call then deal correctly with any parameter attributes on the newly vararg call arguments. llvm-svn: 45931
-
- Jan 12, 2008
-
-
Chris Lattner authored
inlining a function if we know that the function does not write to *any* memory. This implements test/Transforms/Inline/byval2.ll llvm-svn: 45912
-
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
-