summaryrefslogtreecommitdiffstats
path: root/llvm
Commit message (Collapse)AuthorAgeFilesLines
...
* If there are no machine instructions emitted for a function, then insertBill Wendling2008-01-262-16/+16
| | | | | | | 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
* Create an explicit copy for byval parameters evenDuncan Sands2008-01-262-6/+28
| | | | | | when inlining a readonly function. llvm-svn: 46393
* If we have a function like this:Bill Wendling2008-01-262-1/+21
| | | | | | | | | | | | | | | | | | | | | | 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
* Add another testcase.Devang Patel2008-01-261-0/+8
| | | | llvm-svn: 46385
* Fix some bugs in SimplifyNodeWithTwoResults where it would call deletenode to Chris Lattner2008-01-262-41/+62
| | | | | | | | | | 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
* don't bother making x&-1 only to simplify it in dag combine. This commonly ↵Chris Lattner2008-01-261-0/+2
| | | | | | occurs expanding i64 ops. llvm-svn: 46383
* New test case.Evan Cheng2008-01-261-0/+23
| | | | llvm-svn: 46382
* reduce indentationChris Lattner2008-01-251-42/+44
| | | | llvm-svn: 46377
* add a testcase for a bug Duncan pointed out.Chris Lattner2008-01-251-0/+10
| | | | llvm-svn: 46372
* Do this more neatly.Duncan Sands2008-01-251-2/+1
| | | | llvm-svn: 46369
* Reorder a field to reduce the size of StackObject. Note that thisChris Lattner2008-01-251-10/+19
| | | | | | may require a clean rebuild on leopard. :( llvm-svn: 46360
* Test for PR1942.Duncan Sands2008-01-251-0/+23
| | | | llvm-svn: 46357
* fix long lines.Chris Lattner2008-01-251-2/+3
| | | | llvm-svn: 46355
* JITEmitter.cpp was trying to sync the icache for function stubs, butChris Lattner2008-01-252-10/+19
| | | | | | | | 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
* Add more assertions to catch accesses outside ofDuncan Sands2008-01-251-13/+30
| | | | | | | | | arrays. Also, as a convenience, don't barf, just return false, if someone calls isTruncStoreLegal or isLoadXLegal with an extended type for the in memory type. llvm-svn: 46352
* DeadStoreElimination can treat byval parameters as if there were alloca's ↵Owen Anderson2008-01-252-5/+16
| | | | | | for the purpose of removing end-of-function stores. llvm-svn: 46351
* move this field back. Moving the field causes miscompilations (!) of ↵Chris Lattner2008-01-251-5/+5
| | | | | | voronoi and others. llvm-svn: 46350
* Add skeletal code to increase the alignment of loads and stores whenChris Lattner2008-01-251-0/+38
| | | | | | | 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
* move MachineFrameInfo::CreateFixedObject out of line, give MachineFrameInfoChris Lattner2008-01-252-13/+27
| | | | | | | a reference to TargetFrameInfo. Rearrange order of fields in StackObject to save a word. llvm-svn: 46348
* include alignment and volatility information in -view-*-dags outputChris Lattner2008-01-251-3/+10
| | | | llvm-svn: 46347
* add a fixme.Chris Lattner2008-01-251-0/+2
| | | | llvm-svn: 46346
* optimize fxor like forChris Lattner2008-01-251-3/+6
| | | | llvm-svn: 46345
* Add target-specific dag combines for FAND(x,0) and FOR(x,0). This allowsChris Lattner2008-01-252-4/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Provide correct DWARF register numbering for debug information emission on ↵Anton Korobeynikov2008-01-253-9/+9
| | | | | | | | x86-32/Darwin. This should fix bunch of issues. llvm-svn: 46337
* New test.Devang Patel2008-01-241-0/+6
| | | | llvm-svn: 46333
* Don't dump the function!Chris Lattner2008-01-241-2/+0
| | | | llvm-svn: 46320
* getUnderlyingObject can return null, handle this.Chris Lattner2008-01-241-2/+3
| | | | llvm-svn: 46318
* Added additional overloaded operators for APSInt to match the operators ofTed Kremenek2008-01-241-24/+124
| | | | | | | | | | | | | | | APInt. While some operators were already specifically overloaded for APSInt, others resulted in using the overloaded operator methods in APInt, which would result in the signedness bit being lost. Modified the APSInt(APInt&) constructor to be "explicit" and to take an extra (optional) flag to indicate the signedness. Making the ctor explicit will catch any implicit conversations between APSInt -> APInt -> APSInt that results in the signedness flag being lost. llvm-svn: 46316
* Teach basicaa that 'byval' arguments define a new memory location thatChris Lattner2008-01-242-34/+52
| | | | | | | 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
* Add hasByValAttr() and hasNoAliasAttr() methods to the Argument class.Chris Lattner2008-01-242-2/+44
| | | | llvm-svn: 46314
* clarify a comment, thanks Duncan.Chris Lattner2008-01-241-2/+3
| | | | llvm-svn: 46313
* Significantly simplify and improve handling of FP function results on x86-32.Chris Lattner2008-01-246-128/+157
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Fix this buggy transformation. Two observations:Chris Lattner2008-01-241-17/+8
| | | | | | | | | | | | 1. we already know the value is dead, so don't bother replacing it with undef. 2. The very case the comment describes actually makes the load live which asserts in deletenode. If we do the replacement and the node becomes live, just treat it as new. This fixes a failure on X86/2008-01-16-InvalidDAGCombineXform.ll with some local changes in my tree. llvm-svn: 46306
* The dag combiner is missing revisiting nodes that it really should, and thus ↵Chris Lattner2008-01-241-0/+5
| | | | | | | | | | leaving dead stuff around. This gets fed into the isel pass and causes certain foldings from happening because nodes have extraneous uses floating around. For example, if we turned foo(bar(x)) -> baz(x), we sometimes left bar(x) around. llvm-svn: 46305
* fold fp_round(fp_round(x)) -> fp_round(x).Chris Lattner2008-01-241-0/+9
| | | | llvm-svn: 46304
* take these with a pr #Chris Lattner2008-01-242-2/+2
| | | | llvm-svn: 46303
* Fixing the stack walker.Gordon Henriksen2008-01-241-4/+7
| | | | llvm-svn: 46302
* Fix potential buffer overflowAnton Korobeynikov2008-01-241-1/+1
| | | | llvm-svn: 46296
* Move some functionality for adding flags to MachineInstr's into methods on ↵Owen Anderson2008-01-245-130/+126
| | | | | | MachineInstr rather than LiveVariables. llvm-svn: 46295
* Forgot these.Evan Cheng2008-01-242-4/+8
| | | | llvm-svn: 46292
* Let each target decide byval alignment. For X86, it's 4-byte unless the ↵Evan Cheng2008-01-237-5/+85
| | | | | | aggregare contains SSE vector(s). For x86-64, it's max of 8 or alignment of the type. llvm-svn: 46286
* Added special escape sequences "\{", "\}", and "\|" when processingTed Kremenek2008-01-231-2/+7
| | | | | | | | getNodeLabel(); these sequences allow the user to specify the characters '{', '}', and '|' in the label, which facilitate breaking the label into multiple record segments. llvm-svn: 46283
* The last pieces needed for loading arbitraryDuncan Sands2008-01-238-78/+190
| | | | | | | | | | | | | | | precision integers. This won't actually work (and most of the code is dead) unless the new legalization machinery is turned on. While there, I rationalized the handling of i1, and removed some bogus (and unused) sextload patterns. For i1, this could result in microscopically better code for some architectures (not X86). It might also result in worse code if annotating with AssertZExt nodes turns out to be more harmful than helpful. llvm-svn: 46280
* Added "getRoot()" to ImmutableSet. Ted Kremenek2008-01-231-5/+10
| | | | | | | Made ImmutableSet::ImmutableSet(ImutAVLTree* Root) public. (this allows handy casting between trees and sets). llvm-svn: 46277
* Honor explicit section information on Darwin.Dale Johannesen2008-01-233-3/+13
| | | | llvm-svn: 46267
* Fix an iterator invalidation issue.Owen Anderson2008-01-221-2/+8
| | | | llvm-svn: 46263
* SSE varargs arguments are passed in memory.Evan Cheng2008-01-222-2/+11
| | | | llvm-svn: 46262
* Simplify SelectionDAG::getNode so that a big switch stmt is not #ifndef Chris Lattner2008-01-221-119/+88
| | | | | | | | NDEBUG. This is in response to a really nasty bug I introduced that Dale tracked down, hopefully this won't happen in the future. Many thanks Dale. llvm-svn: 46254
* Silence a warning. Should we turn this into configure-time check?Anton Korobeynikov2008-01-221-1/+1
| | | | llvm-svn: 46251
* Add interator interface to DAGInit alsoAnton Korobeynikov2008-01-221-0/+22
| | | | llvm-svn: 46250
OpenPOWER on IntegriCloud