aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2005-04-26constmul bugfix: multiply by 27611 was brokenDuraid Madina
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21564 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-26clean up the code! (oops) lots more cleaning left, however.Duraid Madina
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21563 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-26* Merge get_GVInitializer and getCharArrayLength into a single functionReid Spencer
named getConstantStringLength. This is the common part of StrCpy and StrLen optimizations and probably several others, yet to be written. It performs all the validity checks for looking at constant arrays that are supposed to be null-terminated strings and then computes the actual length of the string. * Implement the MemCpyOptimization class. This just turns memcpy of 1, 2, 4 and 8 byte data blocks that are properly aligned on those boundaries into a load and a store. Much more could be done here but alignment restrictions and lack of knowledge of the target instruction set prevent use from doing significantly more. That will have to be delegated to the code generators as they lower llvm.memcpy calls. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21562 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-26Add a new test case for the llvm.memcpy simplification case.Reid Spencer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21561 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-26* Add code to reduce multiplies by constant integers to shifts, adds andDuraid Madina
subtracts. This is a very rough and nasty implementation of Lefevre's "pattern finding" algorithm. With a few small changes though, it should end up beating most other methods in common use, regardless of the size of the constant (currently, it's often one or two shifts worse) TODO: rewrite it so it's not hideously ugly (this is a translation from perl, which doesn't help ;) bypass most of it for multiplies by 2^n+1 (eventually) teach it that some combinations of shift+add are cheaper than others (e.g. shladd on ia64, scaled adds on alpha) get it to try multiple booth encodings in search of the cheapest routine make it work for negative constants This is hacked up as a DAG->DAG transform, so once I clean it up I hope it'll be pulled out of here and put somewhere else. The only thing backends should really have to worry about for now is where to draw the line between using this code vs. going ahead and doing an integer multiply anyway. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21560 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-26* Implement StrLenOptimizationReid Spencer
* Factor out commonalities between StrLenOptimization and StrCatOptimization * Make sure that signatures return sbyte* not void* git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21559 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-26* Add a test case for StrLenOptimizationReid Spencer
* Rename ExitInMain and StrCat tests so they don't have the date the regression was entered since they are feature tests, not regressions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21558 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-26Incorporate feedback from Chris:Reid Spencer
* Change signatures of OptimizeCall and ValidateCalledFunction so they are non-const, allowing the optimization object to be modified. This is in support of caching things used across multiple calls. * Provide two functions for constructing and caching function types * Modify the StrCatOptimization to cache Function objects for strlen and llvm.memcpy so it doesn't regenerate them on each call site. Make sure these are invalidated each time we start the pass. * Handle both a GEP Instruction and a GEP ConstantExpr * Add additional checks to make sure we really are dealing with an arary of sbyte and that all the element initializers are ConstantInt or ConstantExpr that reduce to ConstantInt. * Make sure the GlobalVariable is constant! * Don't use ConstantArray::getString as it can fail and it doesn't give us the right thing. We must check for null bytes in the middle of the array. * Use llvm.memcpy instead of memcpy so we can factor alignment into it. * Don't use void* types in signatures, replace with sbyte* instead. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21555 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-26Add SimplyLibCalls.cpp to VC++ buildJeff Cohen
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21554 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-26Fix RUN: line to not always pass.Reid Spencer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21553 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-26Fold (X > -1) | (Y > -1) --> (X&Y > -1)Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21552 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Changes due to code review and new implementation:Reid Spencer
* Don't use std::string for the function names, const char* will suffice * Allow each CallOptimizer to validate the function signature before doing anything * Repeatedly loop over the functions until an iteration produces no more optimizations. This allows one optimization to insert a call that is optimized by another optimization. * Implement the ConstantArray portion of the StrCatOptimization * Provide a template for the MemCpyOptimization * Make ExitInMainOptimization split the block, not delete everything after the return instruction. (This covers revision 1.3 and 1.4, as the 1.3 comments were botched) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21548 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25implement some more logical compares with constants, so that:Chris Lattner
int foo1(int x, int y) { int t1 = x >= 0; int t2 = y >= 0; return t1 & t2; } int foo2(int x, int y) { int t1 = x == -1; int t2 = y == -1; return t1 & t2; } produces: _foo1: or r2, r4, r3 srwi r2, r2, 31 xori r3, r2, 1 blr _foo2: and r2, r4, r3 addic r2, r2, 1 li r2, 0 addze r3, r2 blr instead of: _foo1: srwi r2, r4, 31 xori r2, r2, 1 srwi r3, r3, 31 xori r3, r3, 1 and r3, r2, r3 blr _foo2: addic r2, r4, 1 li r2, 0 addze r2, r2 addic r3, r3, 1 li r3, 0 addze r3, r3 and r3, r2, r3 blr git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21547 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Lots of changes based on review and new functionality:Reid Spencer
* Use a  git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21546 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Update the test case to handle a few more (degenerate) cases and removeReid Spencer
the restriction that it is an XFAIL because it now passes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21545 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Codegen x < 0 | y < 0 as (x|y) < 0. This allows us to compile this to:Chris Lattner
_foo: or r2, r4, r3 srwi r3, r2, 31 blr instead of: _foo: srwi r2, r4, 31 srwi r3, r3, 31 or r3, r2, r3 blr git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21544 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Make dominates(A,B) work with post dominators. Patch contributed byChris Lattner
Naveen Neelakantam, thanks! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21543 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Added question about turning off all optimizations. I think this has been ↵Tanya Lattner
asked once or twice. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21542 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25implement getelementptr.ll:test10Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21541 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25rename fnChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21540 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25new testcaseChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21539 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Correctly handle global-argument aliases induced in mainChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21537 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Don't mess up SCC traversal when a node has null edges out of it.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21536 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25document 'opaque' typesChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21535 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Add feedback from VikramChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21534 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Make sure the target buffer is null terminated so we don't blow upReid Spencer
strcat when its called. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21533 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25A test case for testing the StrCatOptimizer, currently XFAILed everywhere.Reid Spencer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21532 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Post-Review Cleanup:Reid Spencer
* Fix comments at top of file * Change algorithm for running the call optimizations from n*n to something closer to n. * Use a hash_map to store and lookup the optimizations since there will eventually (or potentially) be a large number of them. This gets lookup based on the name of the function to O(1). Each CallOptimizer now has a std::string member named func_name that tracks the name of the function that it applies to. It is this string that is entered into the hash_map for fast comparison against the function names encountered in the module. * Cleanup some style issues pertaining to iterator invalidation * Don't pass the Function pointer to the OptimizeCall function because if the optimization needs it, it can get it from the CallInst passed in. * Add the skeleton for a new CallOptimizer, StrCatOptimizer which will eventually replace strcat's of constant strings with direct copies. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21526 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Use the %name rather than the "name" format so those familiar with theReid Spencer
llvm-dis output don't go blind. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21525 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Shut GCC 4.0 up about classes that have virtual functions but a non-virtualReid Spencer
destructor. Just add the do-nothing virtual destructor. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21524 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Declare a function to create the SimplifyLibCalls pass.Reid Spencer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21523 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25A new pass to provide specific optimizations for certain well-known libraryReid Spencer
calls. The pass visits all external functions in the module and determines if such function calls can be optimized. The optimizations are specific to the library calls involved. This initial version only optimizes calls to exit(3) when they occur in main(): it changes them to ret instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21522 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25A test case for the the ExitInMain libcall simplification.Reid Spencer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21521 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Older compilers won't like the inline virtual destructor in the header fileReid Spencer
so we put the destructor in Pass.cpp and make it non-inline. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21520 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25fix some bugsChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21515 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-25Fix a thinko in the documentation of the splitBasicBlock method. The branchReid Spencer
instruction is added to the original block, not the new block. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21513 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24Shut GCC 4.0 up about classes with virtual functions but no virtualReid Spencer
destructor. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21510 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24Shut GCC 4.0 up when it complains about classes with virtual functions thatReid Spencer
don't have virtual destructors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21507 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24Make this readable for newbies and those who can only understand one set ofReid Spencer
grammar rules for the English language. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21503 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24extract has been renamed to llvm-extract to avoid conflicting with another toolMisha Brukman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21501 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24Eliminate cases where we could << by 64, which is undefined in C.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21500 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24There are still uses for spaces in Makefiles -- to make text line up together,Misha Brukman
regardless of the tab size/stop settings on the developer side git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21499 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24extract has been renamed to llvm-extract to avoid conflicting with another toolMisha Brukman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21498 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24elisp code to help with LLVM code standards complianceMisha Brukman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21497 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24.vimrc file to aid in LLVM coding standards conformanceMisha Brukman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21496 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24Implement xor.ll:test21: select (not C), A, B -> select C, B, AChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21495 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24Test that xor/select are folded into a select with inverted operands.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21494 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24Allow these methods to take a generic Value* to simplify clients. UseChris Lattner
const_cast instead of c casts. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21493 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24allow these to take a generic Value*Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21492 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-24Use getPrimitiveSizeInBits() instead of getPrimitiveSize()*8Chris Lattner
Completely rework the 'setcc (cast x to larger), y' code. This code has the advantage of implementing setcc.ll:test19 (being more general than the previous code) and being correct in all cases. This allows us to unxfail 2004-11-27-SetCCForCastLargerAndConstant.ll, and close PR454. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21491 91177308-0d34-0410-b5e6-96231b3b80d8