- Jan 28, 2008
-
-
Nick Lewycky authored
llvm-svn: 46431
-
Chris Lattner authored
llvm-svn: 46429
-
Chris Lattner authored
way or the other. Rewriting the code itself prevents subsequent analysis passes from making contradictory conclusions about the code that could cause an infeasible path to be made feasible. llvm-svn: 46427
-
Chris Lattner authored
llvm-svn: 46424
-
Chris Lattner authored
llvm-svn: 46422
-
- Jan 27, 2008
-
-
Owen Anderson authored
llvm-svn: 46420
-
Nick Lewycky authored
llvm-svn: 46417
-
Duncan Sands authored
longer allowed to write through byval arguments. llvm-svn: 46416
-
Chris Lattner authored
registers if used by a bitconvert or using a bitconvert. This allows us to avoid constant pool loads and use cheaper integer instructions when the values come from or end up in integer regs anyway. For example, we now compile CodeGen/X86/fp-in-intregs.ll to: _test1: movl $2147483648, %eax xorl 4(%esp), %eax ret _test2: movl $1065353216, %eax orl 4(%esp), %eax andl $3212836864, %eax ret Instead of: _test1: movss 4(%esp), %xmm0 xorps LCPI2_0, %xmm0 movd %xmm0, %eax ret _test2: movss 4(%esp), %xmm0 andps LCPI3_0, %xmm0 movss LCPI3_1, %xmm1 andps LCPI3_2, %xmm1 orps %xmm0, %xmm1 movd %xmm1, %eax ret bitconverts can happen due to various calling conventions that require fp values to passed in integer regs in some cases, e.g. when returning a complex. llvm-svn: 46414
-
Chris Lattner authored
llvm-svn: 46413
-
Chris Lattner authored
llvm-svn: 46411
-
Bill Wendling authored
This fixes PR1769. llvm-svn: 46408
-
Chris Lattner authored
For long double constants, print an approximation of their value to the .s file to make it easier to read. llvm-svn: 46407
-
Chris Lattner authored
llvm-svn: 46406
-
- Jan 26, 2008
-
-
Chris Lattner authored
llvm-svn: 46405
-
Chris Lattner authored
now that the dag combiner does it. llvm-svn: 46404
-
Chris Lattner authored
from the stack. This allows us to compile stack-align.ll to: _test: movsd LCPI1_0, %xmm0 movapd %xmm0, %xmm1 *** andpd 4(%esp), %xmm1 andpd _G, %xmm0 addsd %xmm1, %xmm0 movl 20(%esp), %eax movsd %xmm0, (%eax) ret instead of: _test: movsd LCPI1_0, %xmm0 ** movsd 4(%esp), %xmm1 ** andpd %xmm0, %xmm1 andpd _G, %xmm0 addsd %xmm1, %xmm0 movl 20(%esp), %eax movsd %xmm0, (%eax) ret llvm-svn: 46401
-
Bill Wendling authored
nop. Emit the nop directly for PPC. llvm-svn: 46398
-
Bill Wendling authored
a "nop" instruction so that we don't have the function's label associated with something that it's not supposed to be associated with. llvm-svn: 46394
-
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
-
Chris Lattner authored
delete a node even if it was not dead in some cases. Instead, just add it to the worklist. Also, make sure to use the CombineTo methods, as it was doing things that were unsafe: the top level combine loop could touch dangling memory. This fixes CodeGen/Generic/2008-01-25-dag-combine-mul.ll llvm-svn: 46384
-
Chris Lattner authored
don't bother making x&-1 only to simplify it in dag combine. This commonly occurs expanding i64 ops. llvm-svn: 46383
-
Chris Lattner authored
llvm-svn: 46377
-
- Jan 25, 2008
-
-
Duncan Sands authored
llvm-svn: 46369
-
Chris Lattner authored
llvm-svn: 46355
-
Chris Lattner authored
was actually passing a completely incorrect size to sys_icache_invalidate. Instead of having the JITEmitter do this (which doesn't have the correct size), just make the target sync its own stubs. llvm-svn: 46354
-
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
-
Chris Lattner authored
we can infer it. This will eventually help stuff, though it doesn't do much right now because all fixed FI's have an alignment of 1. llvm-svn: 46349
-
Chris Lattner authored
a reference to TargetFrameInfo. Rearrange order of fields in StackObject to save a word. llvm-svn: 46348
-
Chris Lattner authored
llvm-svn: 46347
-
Chris Lattner authored
llvm-svn: 46345
-
Chris Lattner authored
us to compile: double test(double X) { return copysign(0.0, X); } into: _test: andpd LCPI1_0(%rip), %xmm0 ret instead of: _test: pxor %xmm1, %xmm1 andpd LCPI1_0(%rip), %xmm1 movapd %xmm0, %xmm2 andpd LCPI1_1(%rip), %xmm2 movapd %xmm1, %xmm0 orpd %xmm2, %xmm0 ret llvm-svn: 46344
-
Anton Korobeynikov authored
This should fix bunch of issues. llvm-svn: 46337
-
- Jan 24, 2008
-
-
Chris Lattner authored
llvm-svn: 46320
-
Chris Lattner authored
llvm-svn: 46318
-
Chris Lattner authored
can't be aliased to other known objects. This allows us to know that byval pointer args don't alias globals, etc. llvm-svn: 46315
-
Chris Lattner authored
llvm-svn: 46314
-
Chris Lattner authored
llvm-svn: 46313
-
Chris Lattner authored
This case returns the value in ST(0) and then has to convert it to an SSE register. This causes significant codegen ugliness in some cases. For example in the trivial fp-stack-direct-ret.ll testcase we used to generate: _bar: subl $28, %esp call L_foo$stub fstpl 16(%esp) movsd 16(%esp), %xmm0 movsd %xmm0, 8(%esp) fldl 8(%esp) addl $28, %esp ret because we move the result of foo() into an XMM register, then have to move it back for the return of bar. Instead of hacking ever-more special cases into the call result lowering code we take a much simpler approach: on x86-32, fp return is modeled as always returning into an f80 register which is then truncated to f32 or f64 as needed. Similarly for a result, we model it as an extension to f80 + return. This exposes the truncate and extensions to the dag combiner, allowing target independent code to hack on them, eliminating them in this case. This gives us this code for the example above: _bar: subl $12, %esp call L_foo$stub addl $12, %esp ret The nasty aspect of this is that these conversions are not legal, but we want the second pass of dag combiner (post-legalize) to be able to hack on them. To handle this, we lie to legalize and say they are legal, then custom expand them on entry to the isel pass (PreprocessForFPConvert). This is gross, but less gross than the code it is replacing :) This also allows us to generate better code in several other cases. For example on fp-stack-ret-conv.ll, we now generate: _test: subl $12, %esp call L_foo$stub fstps 8(%esp) movl 16(%esp), %eax cvtss2sd 8(%esp), %xmm0 movsd %xmm0, (%eax) addl $12, %esp ret where before we produced (incidentally, the old bad code is identical to what gcc produces): _test: subl $12, %esp call L_foo$stub fstpl (%esp) cvtsd2ss (%esp), %xmm0 cvtss2sd %xmm0, %xmm0 movl 16(%esp), %eax movsd %xmm0, (%eax) addl $12, %esp ret Note that we generate slightly worse code on pr1505b.ll due to a scheduling deficiency that is unrelated to this patch. llvm-svn: 46307
-