summaryrefslogtreecommitdiffstats
path: root/llvm/lib
Commit message (Collapse)AuthorAgeFilesLines
...
* Fix some typos. Call getTypeToTransformTo rather thanDuncan Sands2007-10-151-14/+14
| | | | | | | | | getTypeToExpandTo. The difference is that getTypeToExpandTo gives the final result of expansion (eg: i128 -> i32 on a 32 bit machine) while getTypeToTransformTo does just one step (i128 -> i64). llvm-svn: 42982
* One mundane change: Change ReplaceAllUsesOfValueWith to *optionally* Chris Lattner2007-10-155-58/+1595
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | take a deleted nodes vector, instead of requiring it. One more significant change: Implement the start of a legalizer that just works on types. This legalizer is designed to run before the operation legalizer and ensure just that the input dag is transformed into an output dag whose operand and result types are all legal, even if the operations on those types are not. This design/impl has the following advantages: 1. When finished, this will *significantly* reduce the amount of code in LegalizeDAG.cpp. It will remove all the code related to promotion and expansion as well as splitting and scalarizing vectors. 2. The new code is very simple, idiomatic, and modular: unlike LegalizeDAG.cpp, it has no 3000 line long functions. :) 3. The implementation is completely iterative instead of recursive, good for hacking on large dags without blowing out your stack. 4. The implementation updates nodes in place when possible instead of deallocating and reallocating the entire graph that points to some mutated node. 5. The code nicely separates out handling of operations with invalid results from operations with invalid operands, making some cases simpler and easier to understand. 6. The new -debug-only=legalize-types option is very very handy :), allowing you to easily understand what legalize types is doing. This is not yet done. Until the ifdef added to SelectionDAGISel.cpp is enabled, this does nothing. However, this code is sufficient to legalize all of the code in 186.crafty, olden and freebench on an x86 machine. The biggest issues are: 1. Vectors aren't implemented at all yet 2. SoftFP is a mess, I need to talk to Evan about it. 3. No lowering to libcalls is implemented yet. 4. Various operations are missing etc. 5. There are FIXME's for stuff I hax0r'd out, like softfp. Hey, at least it is a step in the right direction :). If you'd like to help, just enable the #ifdef in SelectionDAGISel.cpp and compile code with it. If this explodes it will tell you what needs to be implemented. Help is certainly appreciated. Once this goes in, we can do three things: 1. Add a new pass of dag combine between the "type legalizer" and "operation legalizer" passes. This will let us catch some long-standing isel issues that we miss because operation legalization often obfuscates the dag with target-specific nodes. 2. We can rip out all of the type legalization code from LegalizeDAG.cpp, making it much smaller and simpler. When that happens we can then reimplement the core functionality left in it in a much more efficient and non-recursive way. 3. Once the whole legalizer is non-recursive, we can implement whole-function selectiondags maybe... llvm-svn: 42981
* One xform performed by LegalizeDAG is transformation of "store of fp" to ↵Chris Lattner2007-10-151-6/+28
| | | | | | | | | | | | | "store of int". Make two changes: 1) only xform "store of f32" if i32 is a legal type for the target. 2) only xform "store of f64" if either i64 or i32 are legal for the target. 3) if i64 isn't legal, manually lower to 2 stores of i32 instead of letting a later pass of legalize do it. This is ugly, but helps future changes I'm about to commit. llvm-svn: 42980
* avoid an APFloat copy.Chris Lattner2007-10-151-1/+1
| | | | llvm-svn: 42979
* Add a (disabled by default) way to view the ID of a node.Chris Lattner2007-10-151-0/+4
| | | | llvm-svn: 42978
* Handle PPC long double in CBackend.Dale Johannesen2007-10-151-0/+9
| | | | llvm-svn: 42972
* remove misleading comment.Chris Lattner2007-10-141-2/+1
| | | | llvm-svn: 42970
* If a target doesn't have HasMULHU or HasUMUL_LOHI, ExpandOp would returnChris Lattner2007-10-141-1/+0
| | | | | | without lo/hi set. Fall through to making a libcall instead. llvm-svn: 42969
* Consolidate logic for creating NaNs. Silence compiler warning.Neil Booth2007-10-141-10/+15
| | | | llvm-svn: 42966
* Whether arithmetic is supported is a property of the semantics. Make itNeil Booth2007-10-141-41/+36
| | | | | | so, and clean up the checks by putting them in an inline function. llvm-svn: 42965
* Separate out parsing of decimal number. Use this to only allocateNeil Booth2007-10-141-97/+150
| | | | | | | memory for the significand once up-front. Also ignore insignificant trailing zeroes; this saves unnecessary multiplications later. llvm-svn: 42964
* Unbreak x86-64.Evan Cheng2007-10-141-4/+3
| | | | llvm-svn: 42962
* When coalescing an EXTRACT_SUBREG and the dst register is a physical register,Evan Cheng2007-10-142-26/+28
| | | | | | | | the source register will be coalesced to the super register of the LHS. Properly merge in the live ranges of the resulting coalesced interval that were part of the original source interval to the live interval of the super-register. llvm-svn: 42961
* Revert 42908 for now.Evan Cheng2007-10-149-70/+69
| | | | llvm-svn: 42960
* Fix type mismatch error in PPC Altivec (only causesDale Johannesen2007-10-141-2/+2
| | | | | | a problem when asserts are on). From vecLib. llvm-svn: 42959
* Disable some compile-time optimizations on PPCDale Johannesen2007-10-142-0/+15
| | | | | | long double. llvm-svn: 42958
* Clarify that fastcc has a problem with nested functionDuncan Sands2007-10-131-1/+1
| | | | | | trampolines, rather than with nested functions themselves. llvm-svn: 42955
* Enhance the truncstore optimization code to handle shiftedChris Lattner2007-10-131-2/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | values and propagate demanded bits through them in simple cases. This allows this code: void foo(char *P) { strcpy(P, "abc"); } to compile to: _foo: ldrb r3, [r1] ldrb r2, [r1, #+1] ldrb r12, [r1, #+2]! ldrb r1, [r1, #+1] strb r1, [r0, #+3] strb r2, [r0, #+1] strb r12, [r0, #+2] strb r3, [r0] bx lr instead of: _foo: ldrb r3, [r1, #+3] ldrb r2, [r1, #+2] orr r3, r2, r3, lsl #8 ldrb r2, [r1, #+1] ldrb r1, [r1] orr r2, r1, r2, lsl #8 orr r3, r2, r3, lsl #16 strb r3, [r0] mov r2, r3, lsr #24 strb r2, [r0, #+3] mov r2, r3, lsr #16 strb r2, [r0, #+2] mov r3, r3, lsr #8 strb r3, [r0, #+1] bx lr testcase here: test/CodeGen/ARM/truncstore-dag-combine.ll This also helps occasionally for X86 and other cases not involving unaligned load/stores. llvm-svn: 42954
* Add a simple optimization to simplify the input toChris Lattner2007-10-132-1/+43
| | | | | | | truncate and truncstore instructions, based on the knowledge that they don't demand the top bits. llvm-svn: 42952
* If the power of 5 is exact, and the reciprocal exact, the error is zero not ↵Neil Booth2007-10-131-1/+1
| | | | | | one half-ulps. This prevents an infinite loop in rare cases. llvm-svn: 42950
* Local spiller optimization: Evan Cheng2007-10-132-4/+54
| | | | | | | | | | | | | | | | | | | Turn this: movswl %ax, %eax movl %eax, -36(%ebp) xorl %edi, -36(%ebp) into movswl %ax, %eax xorl %edi, %eax movl %eax, -36(%ebp) by unfolding the load / store xorl into an xorl and a store when we know the value in the spill slot is available in a register. This doesn't change the number of instructions but reduce the number of times memory is accessed. Also unfold some load folding instructions and reuse the value when similar situation presents itself. llvm-svn: 42947
* Change unfoldMemoryOperand(). User is now responsible for passing in theEvan Cheng2007-10-132-12/+19
| | | | | | | register used by the unfolded instructions. User can also specify whether to unfold the load, the store, or both. llvm-svn: 42946
* Optionally create a MachineInstr without default implicit operands.Evan Cheng2007-10-131-4/+5
| | | | llvm-svn: 42945
* Correcting the corrections. Bad bad baaad emacs!Arnold Schwaighofer2007-10-121-1/+1
| | | | llvm-svn: 42935
* Corrected many typing errors. And removed 'nest' parameter handlingArnold Schwaighofer2007-10-1210-39/+40
| | | | | | | for fastcc from X86CallingConv.td. This means that nested functions are not supported for calling convention 'fastcc'. llvm-svn: 42934
* Dest type is always i8 *. This allows some simplification.Devang Patel2007-10-121-33/+12
| | | | | | Do not filter memmove. llvm-svn: 42930
* Due to the new tail call optimization, trampolines can noDuncan Sands2007-10-121-1/+0
| | | | | | longer be created for fastcc functions. llvm-svn: 42925
* ppc long double. Implement fabs and fneg.Dale Johannesen2007-10-121-0/+16
| | | | llvm-svn: 42924
* Update.Evan Cheng2007-10-121-18/+2
| | | | llvm-svn: 42922
* Fix a bug in my patch last night that broke InstCombine/2007-10-12-Crash.llChris Lattner2007-10-121-1/+7
| | | | llvm-svn: 42920
* Implement i64->ppcf128 conversions.Dale Johannesen2007-10-121-1/+20
| | | | llvm-svn: 42919
* Did mean to leave this in. INSERT_SUBREG isn't being coalesced yet.Evan Cheng2007-10-121-2/+1
| | | | llvm-svn: 42916
* Remove duplicate comment.Neil Booth2007-10-121-11/+0
| | | | llvm-svn: 42913
* Implement correctly-rounded decimal->binary conversion, i.e. conversionNeil Booth2007-10-121-6/+349
| | | | | | | | | | | from user input strings. Such conversions are more intricate and subtle than they may appear; it is unlikely I have got it completely right first time. I would appreciate being informed of any bugs and incorrect roundings you might discover. llvm-svn: 42912
* Remove a field that was never used.Neil Booth2007-10-121-9/+6
| | | | llvm-svn: 42911
* If we're trying to be arbitrary precision, unsigned char clearly won't cut ↵Neil Booth2007-10-121-1/+1
| | | | | | it. Needed for dec->bin conversions. llvm-svn: 42910
* Don't attempt to mask no bitsNeil Booth2007-10-121-1/+2
| | | | llvm-svn: 42909
* Change the names used for internal labels to use the currentDan Gohman2007-10-129-69/+70
| | | | | | | | | function symbol name instead of a codegen-assigned function number. Thanks Evan! :-) llvm-svn: 42908
* Fix some corner cases with vectors in copyToRegs and copyFromRegs.Dan Gohman2007-10-121-1/+16
| | | | llvm-svn: 42907
* Add support to SplitVectorOp for powi, where the second operandDan Gohman2007-10-121-0/+6
| | | | | | is a scalar integer. llvm-svn: 42906
* Mark vector ctpop, cttz, and ctlz as Expand on x86.Dan Gohman2007-10-121-0/+3
| | | | llvm-svn: 42905
* Mark vector pow, ctpop, cttz, and ctlz as Expand on PowerPC.Dan Gohman2007-10-121-1/+4
| | | | llvm-svn: 42904
* Restrict EXTRACT_SUBREG coalescing to avoid negative performance impact.Evan Cheng2007-10-121-1/+6
| | | | llvm-svn: 42903
* EXTRACT_SUBREG coalescing support. The coalescer now treats EXTRACT_SUBREG likeEvan Cheng2007-10-127-231/+371
| | | | | | | | | (almost) a register copy. However, it always coalesced to the register of the RHS (the super-register). All uses of the result of a EXTRACT_SUBREG are sub- register uses which adds subtle complications to load folding, spiller rewrite, etc. llvm-svn: 42899
* Some clean up.Evan Cheng2007-10-121-3/+0
| | | | llvm-svn: 42898
* Fold load / store into MOV32to32_ and MOV16to16_.Evan Cheng2007-10-121-0/+4
| | | | llvm-svn: 42895
* Flag MOV32to32_ with EXTRACT_SUBREG. They should not be scheduled apart.Evan Cheng2007-10-121-7/+7
| | | | llvm-svn: 42894
* eliminate warningGabor Greif2007-10-121-1/+1
| | | | llvm-svn: 42892
* Fix some 80 column violations.Chris Lattner2007-10-121-35/+42
| | | | | | | | Fix DecomposeSimpleLinearExpr to handle simple constants better. Don't nuke gep(bitcast(allocation)) if the bitcast(allocation) will fold the allocation. This fixes PR1728 and Instcombine/malloc3.ll llvm-svn: 42891
* PPC long double. Implement a couple more conversions.Dale Johannesen2007-10-121-0/+35
| | | | llvm-svn: 42888
OpenPOWER on IntegriCloud