Chris Lattner
cd72043c89
Fix FIXME by removing FIXME
...
llvm-svn: 7832
2003-08-13 22:15:04 +00:00
Chris Lattner
2b7babcc41
Implement instcombine optimizations:
...
(A <setcc1> B) logicalop (A <setcc2> B) -> (A <setcc3> B) or true or false
Where setcc[123] is one of the 6 setcc instructions, and logicalop is one of: And, Or, Xor
llvm-svn: 7828
2003-08-13 20:16:26 +00:00
Chris Lattner
7ba3220999
Generalize some of the add tests to allow for reassociation to take place
...
llvm-svn: 7825
2003-08-13 19:01:45 +00:00
Brian Gaeke
77c65be59e
Factory methods for FunctionPasses now return type FunctionPass *.
...
llvm-svn: 7823
2003-08-13 18:18:15 +00:00
Chris Lattner
4e543f7021
Assign arguments different ranks so they get grouped together
...
llvm-svn: 7813
2003-08-13 16:16:26 +00:00
John Criswell
64631c7abe
Removing the pool allocator from the main CVS tree.
...
Use the poolalloc module in CVS from now on.
llvm-svn: 7810
2003-08-13 15:36:15 +00:00
Chris Lattner
374473c778
Implement InstCombine/2003-08-12-AllocaNonNull.ll
...
llvm-svn: 7807
2003-08-13 05:38:46 +00:00
Chris Lattner
f8fbdb5ded
Do not cannonicalize (X != 0) into (cast X to bool)
...
llvm-svn: 7806
2003-08-13 05:33:12 +00:00
Chris Lattner
5c9ccccd96
Change cannonicalization rules: add X,X is represented as multiplies, multiplies
...
of a power of two are represented as a shift.
llvm-svn: 7803
2003-08-13 04:18:28 +00:00
Brian Gaeke
9aa6b2db94
Give std::map<BasicBlock *, BasicBlock *> the short name BBMap, because
...
it's used 7 different times.
Rename `getBackEdges' to `findAndInstrumentBackEdges', for clarity.
Remove some excess whitespace and commented-out code.
Use shorter forms of CallInst ctors.
Do not make `reopt_threshold' visible to the LLVM program, and do not
pass it to the call to `reoptimizerInitialize'. Don't pass the
GlobalVariable representing it to any of our helper methods.
`reopt_threshold' is an internal parameter of the reoptimizer, which
InstLoops does not need to know about.
llvm-svn: 7794
2003-08-12 22:00:24 +00:00
Chris Lattner
3e52e8ce5a
Allow pulling logical operations through shifts.
...
This implements InstCombine/shift.ll:test14*
llvm-svn: 7793
2003-08-12 21:53:41 +00:00
Chris Lattner
7105c4aad0
Fix bug: Reassociate/2003-08-12-InfiniteLoop.ll
...
llvm-svn: 7792
2003-08-12 21:45:24 +00:00
Chris Lattner
c8d2398084
Assign finer grained ranks, make sure to reassociate top-level after reassociating bottom level
...
llvm-svn: 7787
2003-08-12 20:14:27 +00:00
Chris Lattner
2e2432d69e
Simplify code
...
llvm-svn: 7783
2003-08-12 19:17:27 +00:00
Chris Lattner
c9c1d9f778
Implement testcases InstCombine/or.ll:test16/test17
...
llvm-svn: 7782
2003-08-12 19:11:07 +00:00
Sumant Kowshik
b3e21bb00f
Bug fix: Some nodes pointed to by globals may not be marked incomplete and need to be tracked to find pool arguments
...
llvm-svn: 7763
2003-08-12 00:45:13 +00:00
Chris Lattner
623bd2eb83
Fix handling of 'free' if it has absolutely no prototype
...
llvm-svn: 7721
2003-08-11 15:05:08 +00:00
John Criswell
e5d4f11e14
Fixed a segfault in gccld.
...
The original code does not work because the value from WorkList.end() is
invalidated once WorkList.erase() is called. To ensure proper functionality,
we must ensure that WorkList.erase() is always called before WorkList.end().
llvm-svn: 7673
2003-08-07 14:43:13 +00:00
Sumant Kowshik
095e7c3052
Added code for pool allocating only the pool-allocatable data structures in the presence of collapsed nodes + a couple of bug fixes
...
llvm-svn: 7662
2003-08-07 05:29:28 +00:00
Chris Lattner
c25494f95e
Remove unnecessary use of NonCopyable
...
llvm-svn: 7641
2003-08-06 17:16:24 +00:00
Tanya Lattner
6fbe85279f
Fixed minor bug in SafeToHoist and made some changes suggested by Chris.
...
llvm-svn: 7614
2003-08-05 20:39:02 +00:00
Tanya Lattner
48745a598c
Fixed LICM bug that hoists trapping instructions that are not guaranteed to execute.
...
llvm-svn: 7612
2003-08-05 18:45:46 +00:00
Chris Lattner
629c78afe3
Minor changes:
...
* Expand most tabs into spaces
* Move #define DEBUG_TYPE to top of file to avoid warning
llvm-svn: 7611
2003-08-05 18:44:12 +00:00
Sumant Kowshik
18c49a775f
Major bug fixes including a memory leak and tracking some exceptional conditions. Also added support for including global and indirect call information in the DS graphs used by the pool allocation
...
llvm-svn: 7605
2003-08-05 17:01:54 +00:00
Chris Lattner
488b0e52a8
Fix bug: SimplifyCFG/2003-08-05-InvokeCrash.ll
...
Fix bug: SimplifyCFG/2003-08-05-MishandleInvoke.ll
llvm-svn: 7599
2003-08-05 16:27:44 +00:00
Chris Lattner
686e94e760
DEBUG got moved to Support/Debug.h
...
llvm-svn: 7492
2003-08-01 22:15:03 +00:00
Chris Lattner
c5b0f39c96
Instcombine: (A >> c1) << c2 for signed integers
...
llvm-svn: 7295
2003-07-24 18:38:56 +00:00
Chris Lattner
bf9589bf1f
Reorganization of code, no functional changes.
...
Now it shoudl be a bit more efficient
llvm-svn: 7292
2003-07-24 17:52:58 +00:00
Chris Lattner
785e8453f0
Allow folding several instructions into casts, which can simplify a lot
...
of codes. For example,
short kernel (short t1) {
t1 >>= 8; t1 <<= 8;
return t1;
}
became:
short %kernel(short %t1.1) {
%tmp.3 = shr short %t1.1, ubyte 8 ; <short> [#uses=1]
%tmp.5 = cast short %tmp.3 to int ; <int> [#uses=1]
%tmp.7 = shl int %tmp.5, ubyte 8 ; <int> [#uses=1]
%tmp.8 = cast int %tmp.7 to short ; <short> [#uses=1]
ret short %tmp.8
}
before, now it becomes:
short %kernel(short %t1.1) {
%tmp.3 = shr short %t1.1, ubyte 8 ; <short> [#uses=1]
%tmp.8 = shl short %tmp.3, ubyte 8 ; <short> [#uses=1]
ret short %tmp.8
}
which will become:
short %kernel(short %t1.1) {
%tmp.3 = and short %t1.1, 0xFF00
ret short %tmp.3
}
This implements cast-set.ll:test4 and test5
llvm-svn: 7290
2003-07-24 17:35:25 +00:00
Chris Lattner
9eb9ec67f7
Minor cleanups
...
llvm-svn: 7289
2003-07-24 17:31:56 +00:00
Chris Lattner
31224cdff9
Fix bug: FunctionResolve/2003-07-23-CPR-Reference.ll
...
This fixes a long time annoyance which caused prototypes for bzero, bcopy,
bcmp, fputs, and fputs_unlocked to never get deleted. Grr.
llvm-svn: 7285
2003-07-23 22:03:18 +00:00
Chris Lattner
6d10220481
Add comments
...
llvm-svn: 7283
2003-07-23 21:41:57 +00:00
Chris Lattner
ac8a2be5e4
Remove explicit check for: not (not X) = X, it is already handled because xor is commutative
...
- InstCombine: (X & C1) ^ C2 --> (X & C1) | C2 iff (C1&C2) == 0
- InstCombine: (X | C1) ^ C2 --> (X | C1) & ~C2 iff (C1&C2) == C2
llvm-svn: 7282
2003-07-23 21:37:07 +00:00
Chris Lattner
f453a39185
InstCombine: (X ^ C1) & C2 --> (X & C2) iff (C1&C2) == 0
...
llvm-svn: 7272
2003-07-23 19:36:21 +00:00
Chris Lattner
80d9c3a900
- InstCombine: (X | C1) & C2 --> X & C2 iff C1 & C1 == 0
...
- InstCombine: (X | C) & C --> C
- InstCombine: (X | C1) & C2 --> (X | (C1&C2)) & C2
llvm-svn: 7269
2003-07-23 19:25:52 +00:00
Chris Lattner
76c1da471c
IC: (X & C1) | C2 --> (X | C2) & (C1|C2)
...
IC: (X ^ C1) | C2 --> (X | C2) ^ (C1&~C2)
We are now guaranteed that all 'or's will be inside of 'and's, and all 'and's
will be inside of 'xor's, if the second operands are constants.
llvm-svn: 7264
2003-07-23 18:29:44 +00:00
Chris Lattner
4b43cd9700
IC: (X ^ C1) & C2 --> (X & C2) ^ (C1&C2)
...
Minor code cleanup
llvm-svn: 7262
2003-07-23 17:57:01 +00:00
Chris Lattner
ae691a3068
InstCombine: (X ^ 4) == 8 --> X == 12
...
llvm-svn: 7260
2003-07-23 17:26:36 +00:00
Chris Lattner
b07de65646
IC: (X & 5) == 13 --> false
...
IC: (X | 8) == 4 --> false
llvm-svn: 7257
2003-07-23 17:02:11 +00:00
Chris Lattner
6ad460b336
Simplify code by using ConstantInt::getRawValue instead of checking to see
...
whether the constant is signed or unsigned, then casting
llvm-svn: 7252
2003-07-23 15:22:26 +00:00
Chris Lattner
74a266d229
Fix bug: TailDup/2003-07-22-InfiniteLoop.ll
...
llvm-svn: 7243
2003-07-23 03:32:41 +00:00
Chris Lattner
7594fa7280
- InstCombine (cast (xor A, B) to bool) ==> (setne A, B)
...
- InstCombine (cast (and X, (1 << size(X)-1)) to bool) ==> x < 0
llvm-svn: 7241
2003-07-22 21:46:59 +00:00
John Criswell
98946bac5b
Added code that checks to see if a global variable is external before replacing
...
a load of the global variable with the variable's constant value.
llvm-svn: 7216
2003-07-21 19:42:57 +00:00
Anand Shukla
d02a20b947
Added check for inlinable function
...
llvm-svn: 7206
2003-07-18 20:55:26 +00:00
Anand Shukla
bb730173d6
A pass to combine multiple backedges that go to same target
...
llvm-svn: 7201
2003-07-18 16:08:32 +00:00
John Criswell
dbaf5f719c
Dinakar and I fixed a bug where we were trying to get the initializer of
...
an external constant. Since external constants don't have initializers, we
were failing on an assert() call in llvm/GlobalVariable.h.
llvm-svn: 7193
2003-07-17 19:06:55 +00:00
Vikram S. Adve
f5914c9bca
Trace loads and stores as they happen (stores were being
...
remembered in valuesStoredInFunction, but never traced at function return,
and that's too late to be finding the error anyway).
Stores trace both the value and the address being stored to,
but after some experience I think only values should be traced.
The pointer hash table just fills up far too quickly if every
store address were traced.
llvm-svn: 7169
2003-07-11 21:57:43 +00:00
Anand Shukla
cb78ec5ada
Added functionality to instrmentation pass
...
llvm-svn: 7161
2003-07-10 21:55:57 +00:00
John Criswell
258dfc0319
Merged in autoconf branch. This provides configuration via the autoconf
...
system.
llvm-svn: 7014
2003-06-30 21:59:07 +00:00
Chris Lattner
a824a1ab66
Eliminate using declarations, adjust for new DSGraph API
...
llvm-svn: 6992
2003-06-30 03:14:44 +00:00
Chris Lattner
17ea08b804
Allow the inlining limit to be controlled from the command line!
...
llvm-svn: 6929
2003-06-28 15:57:04 +00:00
Chris Lattner
6b54665aa9
Add support to globaldce for deleting dead function prototypes
...
llvm-svn: 6918
2003-06-26 05:41:18 +00:00
Chris Lattner
3dc8d444ff
When internalizing global ctor/dtor list, also mark it constant. This is gross, but
...
until DSA is working all of the time and is totally reliable, we do this.
llvm-svn: 6917
2003-06-26 05:30:40 +00:00
Chris Lattner
0cc143577c
Add support for elimination of load instruction from global constants
...
llvm-svn: 6912
2003-06-26 05:06:25 +00:00
Chris Lattner
ebbc28f553
Instcombine: X * -1 -> -X
...
llvm-svn: 6904
2003-06-25 17:09:20 +00:00
Chris Lattner
0903331006
Fix bug: Mem2Reg/2003-06-26-IterativePromote.ll
...
llvm-svn: 6901
2003-06-25 14:58:56 +00:00
Chris Lattner
e3d0b99978
Add argument to DAE to allow operation on non-internal functions
...
llvm-svn: 6895
2003-06-25 04:12:49 +00:00
Chris Lattner
2cd94ee470
Fix bug: ADCE/2003-06-24-BadSuccessor.ll
...
llvm-svn: 6891
2003-06-24 23:02:45 +00:00
Chris Lattner
aac87d1e58
Do not mark ALL terminators live if any instruciton in the block is live. We only
...
want to mark it live if it is an unconditional branch. This fixes bug:
ADCE/2002-05-28-Crash.ll and makes this pass _much_ more useful.
llvm-svn: 6887
2003-06-24 21:49:45 +00:00
Chris Lattner
867b7661cb
Fix bug: SCCP/2003-06-24-OverdefinedPHIValue.ll
...
llvm-svn: 6883
2003-06-24 20:29:52 +00:00
Chris Lattner
e1051d9fcf
Fix bug: TailDup/2003-06-24-Simpleloop.ll
...
llvm-svn: 6881
2003-06-24 19:48:06 +00:00
Chris Lattner
e1f9e715c6
Implement new transforms:
...
Replace (cast (sub A, B) to bool) -> (setne A, B)
Replace (cast (add A, B) to bool) -> (setne A, -B)
llvm-svn: 6873
2003-06-23 21:59:52 +00:00
Chris Lattner
1586e054a6
avoid dividing by zero when dealing with zero sized types (like [0 x double])
...
llvm-svn: 6862
2003-06-23 17:36:49 +00:00
Chris Lattner
a98d464fd6
Add paranoia checking
...
llvm-svn: 6856
2003-06-22 20:46:00 +00:00
Chris Lattner
99633d8cd2
Test change
...
llvm-svn: 6852
2003-06-22 20:25:27 +00:00
Chris Lattner
6d372c7450
Initial checkin of Tail duplication pass.
...
llvm-svn: 6846
2003-06-22 20:10:28 +00:00
Chris Lattner
9a0da3e531
Instcombine cast (getelementptr Ptr, 0, 0, 0) to ... into: cast Ptr to ...
...
This fixes type safety problems in a variety of benchmarks that were confusing
DSA.
llvm-svn: 6837
2003-06-21 23:12:02 +00:00
Chris Lattner
95bf937b5a
Fix the build. :(
...
llvm-svn: 6797
2003-06-20 14:36:52 +00:00
Chris Lattner
3a8e92a30b
Changes to privatize NodeType
...
llvm-svn: 6795
2003-06-19 21:15:26 +00:00
Chris Lattner
29e8adc038
Implement the functionality of InstCombine/call.ll
...
llvm-svn: 6783
2003-06-19 17:00:31 +00:00
Chris Lattner
cee19b1ace
Remove a bunch of complicated code. The functionality is implemented in instcombine instead
...
llvm-svn: 6782
2003-06-19 16:59:19 +00:00
Chris Lattner
d176218b2d
Handle arguments passed in through the va_arg area
...
llvm-svn: 6769
2003-06-18 16:25:51 +00:00
Chris Lattner
911e2c331c
Initial checkin of DAE pass
...
llvm-svn: 6759
2003-06-17 22:21:05 +00:00
Chris Lattner
2b01ee820e
Don't corrupt memory when removing an instruction from the program, but
...
not the worklist
llvm-svn: 6733
2003-06-17 03:57:18 +00:00
Chris Lattner
64ec8f36aa
Fix bug: ADCE/2003-06-11-InvalidCFG.ll
...
This was because we were deleting large chunks of functions without an exit block, because the post-dominance
information was not useful. This broke crafty and twolf.
llvm-svn: 6698
2003-06-16 12:10:45 +00:00
Chris Lattner
326e1fb77d
Fix bug: LevelRaise/2003-06-07-EmptyArrayTest.ll
...
llvm-svn: 6669
2003-06-07 21:45:42 +00:00
Chris Lattner
26c238c746
Fix compilation problem on GCC 2.9x
...
llvm-svn: 6667
2003-06-07 20:29:58 +00:00
Chris Lattner
1bbfcd901c
Fix bug: InstCombine/2003-06-05-BranchInvertInfLoop.ll
...
llvm-svn: 6630
2003-06-05 20:12:51 +00:00
Anand Shukla
80e3f54082
Fixed a bug so initialization code is always inserted in main
...
llvm-svn: 6622
2003-06-05 06:02:46 +00:00
Chris Lattner
b7423ab729
Use a constant expr GEP instead of an actual instruction
...
llvm-svn: 6620
2003-06-05 04:48:18 +00:00
Chris Lattner
3c98c8953a
Make this work with counter > 127
...
llvm-svn: 6613
2003-06-04 20:08:47 +00:00
Sumant Kowshik
a961b3c083
Made changes suggested by Chris
...
llvm-svn: 6606
2003-06-04 08:03:57 +00:00
Chris Lattner
95d21756aa
Clean up previous code.
...
Add new combination to turn seteq X, 0 -> not(cast X to bool)
llvm-svn: 6604
2003-06-04 05:10:11 +00:00
Chris Lattner
b2ea03d03a
Implement combination of boolean not with branch
...
llvm-svn: 6599
2003-06-04 04:46:00 +00:00
Chris Lattner
eaafbfd2df
Implement xform: (X != 0) -> (bool)X
...
llvm-svn: 6506
2003-06-01 03:35:25 +00:00
Anand Shukla
6939133e23
Added the #(internal functions) to output
...
llvm-svn: 6502
2003-06-01 02:40:49 +00:00
Chris Lattner
0897583c5c
Fix bug: FunctionResolve/2003-05-31-AllInternalDecls.ll
...
llvm-svn: 6486
2003-05-31 21:57:06 +00:00
Chris Lattner
00751219b0
Fix bug: FuncResolve/2003-05-31-InternalDecl.ll
...
Count resolutions correctly.
llvm-svn: 6482
2003-05-31 21:08:45 +00:00
Chris Lattner
d825cf5ee3
Simplify funcresolve a bit more
...
llvm-svn: 6480
2003-05-31 20:44:46 +00:00
Chris Lattner
a7b50146af
Fix bug: FunctionResolve/2003-05-31-FuncPointerResolve.ll
...
llvm-svn: 6479
2003-05-31 20:33:31 +00:00
Tanya Lattner
eaa01f0821
Fixed comment width, changed arg to be const, fixed indentation, removed unnecessary includes.
...
llvm-svn: 6476
2003-05-31 20:01:37 +00:00
Chris Lattner
1c10a30949
Okay totally give up on trying to optimize aggregates that cannot be completely
...
broken up into their elements. Too many programs break because of this.
llvm-svn: 6440
2003-05-30 19:22:14 +00:00
Chris Lattner
bf8c1cb6a3
add a check that allows the SRoA pass to avoid breaking programs, even if their
...
behavior is technically undefined
llvm-svn: 6438
2003-05-30 18:09:57 +00:00
Tanya Lattner
ce23a1f169
Added the CloneTrace function which clones traces. It takes a vector of basic blocks, removes
...
internal phi nodes, and returns a new vector of basic blocks.
llvm-svn: 6431
2003-05-30 15:50:18 +00:00
Chris Lattner
c9d950434b
Fix bug: ScalarRepl/2003-05-30-MultiLevel.ll
...
llvm-svn: 6428
2003-05-30 05:26:30 +00:00
Chris Lattner
0d415b2dd3
Fix bug: ScalarRepl/2003-05-29-ArrayFail.ll
...
llvm-svn: 6425
2003-05-30 04:15:41 +00:00
Sumant Kowshik
3186cb2b05
Added support for function pointers
...
llvm-svn: 6420
2003-05-29 22:42:44 +00:00
Chris Lattner
58c7aaa0e5
Add comment
...
llvm-svn: 6415
2003-05-29 20:26:30 +00:00
Chris Lattner
01cbfa9317
Eliminate unnecessary ->get calls that are now automatically handled.
...
llvm-svn: 6397
2003-05-29 15:12:27 +00:00
Chris Lattner
24947af013
* Separate all of the grunt work of inlining out into the Utils library.
...
* Make the function inliner _significantly_ smarter. :)
llvm-svn: 6396
2003-05-29 15:11:31 +00:00
Chris Lattner
416e30b07b
Fix bug: Instcombine/2003-05-27-ConstExprCrash.ll
...
llvm-svn: 6352
2003-05-27 16:40:51 +00:00
Chris Lattner
8a6c3b5cbe
* Actually USE the statistic that we made
...
* Implement SRoA for arrays
llvm-svn: 6349
2003-05-27 16:09:27 +00:00
Chris Lattner
5c093a1a93
Implementation of the simple "scalar replacement of aggregates" transformation
...
llvm-svn: 6346
2003-05-27 15:45:27 +00:00
Chris Lattner
1fde83c9b5
Fix bug: InstCombine/2003-05-26-CastMiscompile.ll
...
llvm-svn: 6338
2003-05-26 23:41:32 +00:00
Chris Lattner
e58f6153f4
Remove using declarations
...
llvm-svn: 6306
2003-05-22 22:00:07 +00:00
Chris Lattner
e1d3dfec23
Make the list accept comma separated names
...
llvm-svn: 6295
2003-05-22 20:27:13 +00:00
Chris Lattner
ab034e55b5
* Revert to old behavior of ignoring a module if it doesn't contain a main
...
function and no symbols were explicitly marked to be externalized.
* Add new -internalize-public-api-list option that can be used if the symbol
list is small, and making a new file is annoying.
llvm-svn: 6289
2003-05-22 19:48:00 +00:00
Chris Lattner
f26f3f74a3
Add option to internalize to allow it to read a file to determine which symbols
...
should not be internalized
llvm-svn: 6288
2003-05-22 19:34:49 +00:00
Chris Lattner
91c5d68261
Minor cleanups.
...
This hunk:
- } else if (Src->getNumOperands() == 2 && Src->use_size() == 1) {
+ } else if (Src->getNumOperands() == 2) {
Allows GEP folding to be more aggressive, which reduces the number of instructions
and can dramatically speed up BasicAA in some cases.
llvm-svn: 6286
2003-05-22 19:07:21 +00:00
Chris Lattner
2fba72b389
Fix bug: FunctionResolve/2003-05-21-MissingArguments.ll
...
llvm-svn: 6273
2003-05-21 20:51:52 +00:00
Misha Brukman
825e174bf7
Hopefully, the final fix for `[Pp]ropogate'.
...
llvm-svn: 6251
2003-05-20 21:01:22 +00:00
Misha Brukman
74cf3f5246
s/convertable/convertible/g
...
llvm-svn: 6248
2003-05-20 18:45:36 +00:00
Chris Lattner
d8234cfa3a
Fix long standing bug
...
llvm-svn: 6232
2003-05-15 18:25:13 +00:00
Chris Lattner
d0f6311c43
Fix Bug: Linker/2003-05-15-TypeProblem.ll
...
llvm-svn: 6225
2003-05-15 16:30:55 +00:00
Chris Lattner
be0b81a4e9
Fix major problem with appending linkage changes
...
llvm-svn: 6185
2003-05-14 12:11:51 +00:00
Chris Lattner
576323e25e
Implement linkage of appending global variables!
...
llvm-svn: 6178
2003-05-13 21:33:43 +00:00
Chris Lattner
6cb27840a7
Fix bug: LoopPreheaders/2003-05-12-PreheaderExitOfChild.ll
...
llvm-svn: 6153
2003-05-12 22:04:34 +00:00
Chris Lattner
a7ee27e0fd
Handle va_arg instruction correctly
...
llvm-svn: 6030
2003-05-08 02:50:13 +00:00
Chris Lattner
f1f55e385c
Don't inline functions that take variable numbers of arguments!
...
llvm-svn: 6024
2003-05-08 02:36:43 +00:00
Chris Lattner
d381dc9316
Remove using decl
...
llvm-svn: 6023
2003-05-08 02:34:52 +00:00
Chris Lattner
984bb45d4a
Attempt to fix sumant's typesafety issue
...
llvm-svn: 5984
2003-05-02 19:32:04 +00:00
Chris Lattner
e006ca4580
Fix spelling
...
llvm-svn: 5983
2003-05-02 19:26:34 +00:00
Chris Lattner
f13fe891d1
Fix Bug: LowerSwitch/2003-05-01-PHIProblem.ll
...
llvm-svn: 5979
2003-05-01 22:21:21 +00:00
Chris Lattner
c2eb77b84f
Fix bug: LevelRaise/2003-05-01-CallCast.ll
...
llvm-svn: 5975
2003-05-01 21:02:53 +00:00
Chris Lattner
5045ab0fac
Fix another case where constexprs could cause a crash
...
llvm-svn: 5972
2003-04-30 22:34:06 +00:00
Chris Lattner
caa766b40f
Fix constant folding of constexprs
...
llvm-svn: 5971
2003-04-30 22:19:10 +00:00
Chris Lattner
a1250081cc
Create constant expression casts instead of constant instructions if possible
...
llvm-svn: 5968
2003-04-28 01:25:38 +00:00
Chris Lattner
b74f4c1462
Fix several bugs:
...
* Warnings were emitted all of the time and were really annoying
* Functions could not be resolved unless they had external linkage. Linkonce
linkage was not allowed
* ConstantPointerRef's were not handled when linking functions
we now actually handle cast (CPR) to X -> cast (NewCPR) to X
llvm-svn: 5967
2003-04-28 01:23:29 +00:00
Chris Lattner
7e9f0ea3fd
Avoid naming things exactly the same
...
llvm-svn: 5966
2003-04-27 22:55:56 +00:00
Chris Lattner
d2960ee802
Fix bug: ADCE/2003-04-25-PHIPostDominateProblem.ll
...
llvm-svn: 5952
2003-04-25 22:53:27 +00:00
Chris Lattner
c78cd5c758
Fix major problem with PHI node traversal: rechecking PHIs should go into
...
the visit function. The worklist is for when their lattice value changes.
llvm-svn: 5927
2003-04-25 03:35:10 +00:00
Chris Lattner
7b67a6e77d
Minor non-functional changes:
...
* Spell propagate right
* Improve performance of phi node handling
* Delete using directive
* Other minor changes
llvm-svn: 5920
2003-04-25 02:50:03 +00:00
Chris Lattner
e1c995e9b6
Fix bug: mem2reg/2003-04-24-MultipleIdenticalSuccessors.ll
...
llvm-svn: 5919
2003-04-25 00:54:58 +00:00
Chris Lattner
3dbf3f0ac1
Make the levelraise pass be well behaved w.r.t the TargetData that the current
...
PassMAnager provides.
llvm-svn: 5896
2003-04-24 18:25:27 +00:00
Chris Lattner
043b4a7621
Fix iterator invalidation problem
...
llvm-svn: 5895
2003-04-24 17:52:20 +00:00
Chris Lattner
f0c01a508b
Make sure that the cloned module retains the type symbol table entries!
...
llvm-svn: 5894
2003-04-24 17:15:33 +00:00
Chris Lattner
868b3316c9
Make sure to preserve endiannes and pointer size when cloning modules!
...
llvm-svn: 5892
2003-04-24 15:54:40 +00:00
Chris Lattner
b6050c264d
Fix Bug: Linker/2003-04-23-LinkOnceLost.ll
...
llvm-svn: 5879
2003-04-23 18:38:39 +00:00
Chris Lattner
db6b7ba364
Remove unnecesary &*'s
...
llvm-svn: 5872
2003-04-23 16:37:45 +00:00
Chris Lattner
a9eaa10358
New pass to lower switch instructions to branch instructions
...
llvm-svn: 5865
2003-04-23 16:23:59 +00:00
Chris Lattner
d609c99c87
Minor cleanups
...
llvm-svn: 5863
2003-04-23 16:18:14 +00:00
Chris Lattner
69b54208f4
Add warning when linking modules with disagreeing target properties
...
llvm-svn: 5845
2003-04-22 19:13:20 +00:00
Chris Lattner
ce0beca3fc
Preserve the new moduleID field
...
llvm-svn: 5835
2003-04-22 18:02:26 +00:00
Chris Lattner
21967df20a
Fix bug: 2003-01-30-LinkerRename.ll
...
llvm-svn: 5828
2003-04-21 21:15:04 +00:00
Chris Lattner
6da72fd92a
Fix linking a function with qualifiers to a external function declaration:
...
Fixed bug: Linker/2003-04-21-Linkage.ll
llvm-svn: 5827
2003-04-21 21:07:05 +00:00
Chris Lattner
a489b529fe
Fix bug where use still existed in dead code
...
llvm-svn: 5824
2003-04-21 19:15:26 +00:00
Chris Lattner
5931df28b7
Implement: FunctionResolve/2003-04-18-ForwardDeclGlobal.ll
...
llvm-svn: 5816
2003-04-19 00:15:27 +00:00
Chris Lattner
61d704329e
Fix bug: Mem2reg/2003-04-18-DeadBlockProblem.ll
...
llvm-svn: 5810
2003-04-18 19:25:22 +00:00
Chris Lattner
08b5392e07
Global constants CAN be external
...
llvm-svn: 5808
2003-04-18 04:34:29 +00:00
Chris Lattner
f171f30deb
Refactor CloneFunction to expose the new CloneBasicBlock function
...
llvm-svn: 5806
2003-04-18 03:50:09 +00:00
Chris Lattner
5403f79db0
New const_cast instead of c style cast
...
llvm-svn: 5805
2003-04-18 03:49:49 +00:00
Chris Lattner
bb00f755ed
Change the interface to constant expressions to allow automatic folding
...
llvm-svn: 5793
2003-04-16 22:40:51 +00:00
Chris Lattner
fa4f750f3e
Add new linkage types to support a real frontend
...
llvm-svn: 5786
2003-04-16 20:28:45 +00:00
Chris Lattner
fc93e77390
Make help message more clear
...
llvm-svn: 5775
2003-04-13 03:50:14 +00:00
Chris Lattner
0ac391e6c8
* Fix bug: Mem2Reg/2003-04-10-DFNotFound.ll
...
* Make Mem2Reg assign version numbers now for renamed variables instead of
.mem2reg suffixes. This produces what people think of as SSA.
llvm-svn: 5771
2003-04-10 19:41:13 +00:00
Chris Lattner
731913bab3
Initial checkin of PRE on LLVM. This implementation is still lacking in
...
several ways:
* Load expressions are not PRE'd well. Alias Analysis should be used to
get accurate information when computing anticipatibility.
* The expression collection implementation does not handle PHI nodes properly,
thus the implementation misses many opportunities to PRE.
* This code could be sped up quite a bit
Despite these flaws, the code seems to work well, and handles PR's as one
would expect.
llvm-svn: 5759
2003-03-31 19:55:43 +00:00
Chris Lattner
44370a85d9
* We now preserve the no-critical-edge pass (because we cannot insert critical edges)
...
* Small modification to be more efficient
llvm-svn: 5757
2003-03-31 17:30:25 +00:00
Chris Lattner
b215db890f
Move BreakCriticalEdges pass to lib/Transforms/Utils
...
llvm-svn: 5754
2003-03-21 21:43:19 +00:00
Chris Lattner
c51d7871ee
Add the following instcombine xforms:
...
- Implement simple reassociation: (A|c1)|(B|c2) == (A|B)|(c1|c2)
- (A & C1)+(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0
- (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0
llvm-svn: 5743
2003-03-11 00:12:48 +00:00
Chris Lattner
6eededc41f
Implement: -A*-B == A*B
...
llvm-svn: 5740
2003-03-10 23:23:04 +00:00
Chris Lattner
715b592fc4
Add new transformation: // (~A | ~B) == (~(A & B))
...
llvm-svn: 5738
2003-03-10 23:13:59 +00:00
Chris Lattner
0f5ab645eb
Generalize not and neg comparison testers to allow constant to be considered not'able and neg'able. This
...
allows optimization of this:
int %test4(int %A, int %B) {
%a = xor int %A, -1
%c = and int %a, 5 ; 5 = ~c2
%d = xor int %c, -1
ret int %d
}
into this:
int %test4(int %A, int %B) { ; No predecessors!
%c.demorgan = or int %A, -6 ; <int> [#uses=1]
ret int %c.demorgan
}
llvm-svn: 5736
2003-03-10 23:06:50 +00:00
Chris Lattner
3eca9aaa0a
Generalize (A+c1)+c2 optimization to work with all associative operators
...
llvm-svn: 5733
2003-03-10 21:43:22 +00:00
Chris Lattner
9dec4368c0
Minor change, no functionality diff
...
llvm-svn: 5731
2003-03-10 19:20:30 +00:00
Chris Lattner
5fbfe9b9a8
Fix bug: (x << 100) wasn't folded to 0, but (x >> 100) was (when x is unsigned)
...
Implement new shift optimizations for shifting the result of a shift.
llvm-svn: 5729
2003-03-10 19:16:08 +00:00
Chris Lattner
5e6fb8b8d5
Implement: (A|B)^B == A & (~B)
...
llvm-svn: 5728
2003-03-10 18:24:17 +00:00
Chris Lattner
9f2f48a648
Fix bug: SimplifyCFG/2003-03-07-DominateProblem.ll
...
llvm-svn: 5722
2003-03-07 18:13:41 +00:00
Chris Lattner
bd009a8938
Implement %test7 in InstCombine/getelementptr.ll
...
llvm-svn: 5704
2003-03-05 22:33:14 +00:00
Chris Lattner
4a9f0be9dd
Implement CFGSimplify/PhiBlockMerge*.ll
...
llvm-svn: 5702
2003-03-05 21:36:33 +00:00
Chris Lattner
e025920ff8
Implement testcase CFGSimplify/EqualPHIEdgeBlockMerge.ll
...
llvm-svn: 5699
2003-03-05 21:01:52 +00:00
Chris Lattner
4eaaa99b93
Convert LICM over to use AliasSetTracker. Besides being nicer, this automatically
...
allows LICM to use access sizes to help alias analysis be more precise.
llvm-svn: 5693
2003-03-03 23:32:45 +00:00
Chris Lattner
db94bd1661
Eliminate tons of bogus warnings
...
llvm-svn: 5686
2003-03-03 19:57:46 +00:00
Chris Lattner
a49e96dda5
Change the mem2reg interface to accept a TargetData argument
...
llvm-svn: 5685
2003-03-03 17:25:18 +00:00
Chris Lattner
09c35df4e9
Fix bug: LICM/2003-02-28-PromoteDifferentType.ll
...
llvm-svn: 5675
2003-02-28 19:21:40 +00:00
Chris Lattner
dec7727a9f
Fix bug I introduced yesterday :(
...
llvm-svn: 5669
2003-02-28 16:54:17 +00:00
Chris Lattner
e2aebf5906
Fix bug: LICM/2003-02-27-PreheaderExitNodeUpdate.ll
...
llvm-svn: 5667
2003-02-28 03:07:54 +00:00
Chris Lattner
d64f135965
Fix bug: 2003-02-27-PreheaderExitNodeUpdate.ll by updating exit node info
...
llvm-svn: 5664
2003-02-27 22:48:57 +00:00
Chris Lattner
74b9aaa89c
Add a new assertion to check that stuff is happening right
...
Ironically the exit block modification code wasn't updating the exit block
information itself. Fix this.
llvm-svn: 5659
2003-02-27 22:31:07 +00:00
Chris Lattner
d40fa5ca2f
Fix bug: 2003-02-27-StoreSinkPHIs.ll
...
llvm-svn: 5658
2003-02-27 21:59:36 +00:00
Chris Lattner
e8dda81b22
* Don't forget to update Loop information!
...
* Remove bogus assertion: there may be a single outside predecessor and
still need a new loop-preheader if the predecessor has multiple
successors. See bug: LICM/2003-02-27-PreheaderProblem.ll
llvm-svn: 5655
2003-02-27 21:50:19 +00:00
Chris Lattner
3b3cce733d
Replace assertion with a handler.
...
llvm-svn: 5653
2003-02-27 20:55:48 +00:00
Chris Lattner
b078b28fa5
* Significant changes to the preheader insertion pass:
...
- Now we perform loop exit-block splitting to ensure exit blocks are
always dominated by the loop header.
- We now preserve dominance frontier information
- This fixes bug: LICM/2003-02-26-LoopExitNotDominated.ll
llvm-svn: 5652
2003-02-27 20:27:08 +00:00
Chris Lattner
92a8816086
Convert to work with new AliasAnalysis interface by conservatively assuming all pointers are arbitrarily large accesses
...
llvm-svn: 5636
2003-02-26 19:28:57 +00:00
Chris Lattner
497c0d443c
Rename Instruction::hasSideEffects() -> mayWriteToMemory()
...
llvm-svn: 5620
2003-02-24 20:48:32 +00:00
Chris Lattner
1c1f11bd3f
Initial implementation of Loop invariant memory->scalar promotion
...
llvm-svn: 5613
2003-02-24 03:52:32 +00:00
Chris Lattner
2e4c1c8640
Split mem2reg promotion into two parts: a function which does the work, and
...
a pass which wraps the function. This allows other passes to use the functionality
llvm-svn: 5610
2003-02-22 23:57:48 +00:00
Chris Lattner
283d117dad
Clean up std namespace references
...
llvm-svn: 5608
2003-02-22 22:25:17 +00:00
Chris Lattner
c24ffa9297
4 new transformations:
...
* X*C + X --> X * (C+1)
* X + X*C --> X * (C+1)
* X - X*C --> X * (1-C)
* X*C - X --> X * (C-1)
llvm-svn: 5592
2003-02-18 19:57:07 +00:00
Chris Lattner
8306cc5c5c
Add a variety of new transformations:
...
* A & ~A == 0
* A / (2^c) == A >> c if unsigned
* 0 / A == 0
* 1.0 * A == A
* A * (2^c) == A << c
* A ^ ~A == -1
* A | ~A == -1
* 0 % X = 0
* A % (2^c) == A & (c-1) if unsigned
* A - (A & B) == A & ~B
* -1 - A == ~A
llvm-svn: 5587
2003-02-18 19:28:33 +00:00
Anand Shukla
7aae29d426
Changes to runtime framework
...
llvm-svn: 5572
2003-02-14 20:41:53 +00:00
Chris Lattner
174a241cd5
Fix a bug that cause a crash resolving questionable function calls
...
llvm-svn: 5567
2003-02-14 19:12:29 +00:00
Chris Lattner
8de17c9baf
Fix a misunderstanding of the standard associative containers
...
llvm-svn: 5565
2003-02-14 05:34:36 +00:00
Chris Lattner
e70bdb4355
Fix bug: LevelRaise/2003-02-13-CallRaise.ll
...
llvm-svn: 5562
2003-02-14 03:07:17 +00:00
Chris Lattner
644b87ddb2
Revert Anand's patch which broke the build
...
llvm-svn: 5525
2003-02-10 15:55:50 +00:00
Anand Shukla
a502e67a14
*** empty log message ***
...
llvm-svn: 5522
2003-02-09 21:15:36 +00:00
Chris Lattner
cc7f4a3c65
Fix a problem Sumant was running into
...
llvm-svn: 5499
2003-02-06 22:03:46 +00:00
Chris Lattner
978ff5d0dd
Split public interface out into header file
...
llvm-svn: 5472
2003-02-03 19:08:18 +00:00
Chris Lattner
7aec6c471b
Change DSGraph stuff to use hash_(set|map) instead of std::(set|map)
...
This change provides a small (3%) but consistent speedup
llvm-svn: 5460
2003-02-01 04:52:08 +00:00
Chris Lattner
aceb57a289
Fix typo
...
llvm-svn: 5458
2003-02-01 04:50:59 +00:00
Chris Lattner
dcf38586ef
Fix a bug resolving sprintf(...) to sprintf(char*, char*, ...)
...
llvm-svn: 5446
2003-01-30 22:38:44 +00:00
Chris Lattner
0e59c67f69
Actually print the function _name_ if there is a problem
...
llvm-svn: 5443
2003-01-30 21:33:07 +00:00
Chris Lattner
f1f1b83cbe
* Fix linking of opaque types and their non-opaque versions
...
* Fix bug: Linker/2003-01-30-LinkerTypeRename.ll
llvm-svn: 5441
2003-01-30 20:53:43 +00:00
Chris Lattner
f9ace7ffb1
Eliminate using decls
...
llvm-svn: 5439
2003-01-30 19:53:34 +00:00
Chris Lattner
70b2c322eb
* Fix function resolution for varargs function to generate incorrect bytecode instead of crashing
...
* remove using decls
CVS: ----------------------------------------------------------------------
llvm-svn: 5437
2003-01-30 18:22:32 +00:00
Chris Lattner
0ee7b79c71
Fix levelraise/2003-01-30-ShiftCrash.ll
...
llvm-svn: 5435
2003-01-30 17:10:41 +00:00
Chris Lattner
3c20e2c6d1
Initial checkin of pool allocation code
...
llvm-svn: 5432
2003-01-29 21:12:13 +00:00
Chris Lattner
19ad3aaf0a
Disable construction of pool allocator
...
llvm-svn: 5422
2003-01-24 20:13:20 +00:00
Chris Lattner
5db30d467a
Fix bug: LevelRaise/2003-01-22-GEPProblem.ll
...
llvm-svn: 5407
2003-01-23 02:39:10 +00:00
Chris Lattner
7af7b1c82c
Fix bug: ADCE/2003-01-22-PredecessorProblem.ll
...
llvm-svn: 5405
2003-01-23 02:12:18 +00:00
Chris Lattner
9cb223ad0d
Rename include/llvm/Transforms/Instrumentation/TraceFunctions.h to Instrumentation.h
...
llvm-svn: 5281
2003-01-14 22:39:29 +00:00
Chris Lattner
1b6292ad6f
Fix typeo
...
llvm-svn: 5278
2003-01-14 22:34:36 +00:00
Chris Lattner
b5580841b3
Remove unused header and function
...
llvm-svn: 5277
2003-01-14 22:34:13 +00:00
Chris Lattner
a61f16fc93
Clean up #includes
...
Move graph.h into local directory
llvm-svn: 5276
2003-01-14 22:33:56 +00:00
Chris Lattner
95583742c4
Fix bug
...
llvm-svn: 5264
2003-01-14 19:04:43 +00:00
Chris Lattner
31a6321785
Add debugging helper
...
llvm-svn: 5235
2003-01-13 00:52:25 +00:00
Chris Lattner
5fb6540457
Make sure to handle %'s in strings correctly so that the names of BB's and functions are actually printed!
...
llvm-svn: 5234
2003-01-13 00:52:14 +00:00
Chris Lattner
23aa2d5bfd
Fix references to functions
...
llvm-svn: 5222
2003-01-13 00:27:23 +00:00
Chris Lattner
61d594690a
Fix a huge performance problem in reassociate by introducing a
...
rank map cache for instruction ranks
llvm-svn: 5030
2002-12-15 03:56:00 +00:00
Chris Lattner
18fe81719d
Minor changes:
...
* Reword comment to make more clear
* Don't print out BB's after modification made
* Don't delete and new an instruction when we need to move something, just move it.
llvm-svn: 5029
2002-12-15 03:49:50 +00:00
Vikram S. Adve
6c46fba526
External routines used to identify Cilk operations inserted by the
...
parallelization pass.
llvm-svn: 4965
2002-12-10 13:08:48 +00:00
Vikram S. Adve
a9966ae8ad
This file implements the function DemoteRegToStack(), which takes a
...
virtual register computed by an Instruction& X and replaces it with
a slot in the stack frame, allocated via alloca.
llvm-svn: 4964
2002-12-10 13:07:58 +00:00
Vikram S. Adve
849346ee23
This file implements a pass that automatically parallelizes a program,
...
using the Cilk multi-threaded runtime system to execute parallel code.
The current version inserts too many sync() operations in the program
because it does not attempt to optimize their placement.
llvm-svn: 4962
2002-12-10 00:43:34 +00:00
Chris Lattner
fc15b7a661
Fix bug that was bugging bugpoint
...
llvm-svn: 4953
2002-12-07 21:27:16 +00:00
Chris Lattner
be53e88459
Remove dead code
...
llvm-svn: 4952
2002-12-07 18:42:13 +00:00
Chris Lattner
6c9d57c590
Fix bug: 2002-12-05-MissedConstProp.ll pointed out by Casey Carter
...
llvm-svn: 4935
2002-12-05 22:41:53 +00:00
Chris Lattner
dd9d97436d
Fix big bug introduced with symbol table changes
...
llvm-svn: 4885
2002-12-03 18:32:30 +00:00
Chris Lattner
6aa0ec26d5
Initial checkin of Module cloning support stuff
...
llvm-svn: 4788
2002-11-20 20:47:41 +00:00
Chris Lattner
58944216ff
Fix symbol table problem
...
llvm-svn: 4785
2002-11-20 19:32:43 +00:00
Chris Lattner
b5027095e5
- Eliminated the deferred symbol table stuff in Module & Function, it really
...
wasn't an optimization and it was causing lots of bugs.
llvm-svn: 4779
2002-11-20 18:36:02 +00:00
Chris Lattner
ec0df74910
Fix minor bugs
...
llvm-svn: 4778
2002-11-20 18:32:31 +00:00
Chris Lattner
62629300d3
Remove unneccesary #include
...
llvm-svn: 4772
2002-11-19 23:12:53 +00:00
Chris Lattner
4053d2dd12
Implement the CloneFunction function
...
llvm-svn: 4771
2002-11-19 23:12:22 +00:00
Chris Lattner
e5a05ec13b
Minor changes to cloning interface
...
llvm-svn: 4770
2002-11-19 22:54:01 +00:00
Chris Lattner
aff50cfe1d
Fix two fixmes: integrate with inlining, and document
...
llvm-svn: 4769
2002-11-19 22:04:49 +00:00
Chris Lattner
27bf5916fb
Rework inline pass to use cloning infrastructure to do the dirty work
...
llvm-svn: 4766
2002-11-19 21:54:07 +00:00
Chris Lattner
ccb8790bc4
Start using the new function cloning header
...
llvm-svn: 4764
2002-11-19 20:59:41 +00:00
Chris Lattner
7e4c65114b
Move MutatStructTypes.h out of IPO
...
llvm-svn: 4762
2002-11-19 20:49:40 +00:00
Chris Lattner
17da38496e
Rename CloneFunction.h to Cloning.h
...
llvm-svn: 4760
2002-11-19 20:08:24 +00:00
Chris Lattner
adea9960ab
Move the function extractor pass from tools/extract into lib/Xform/IPO
...
llvm-svn: 4759
2002-11-19 18:42:59 +00:00
Chris Lattner
996bf14a4f
Fix bug: 2002-11-13-PointerFunction.ll
...
This should fix codegen on vortex to work much better
llvm-svn: 4704
2002-11-13 06:54:20 +00:00
Chris Lattner
96d1bfd014
Fix testcase: FunctionResolve/2002-11-09-ExternFn.ll
...
llvm-svn: 4668
2002-11-10 03:36:55 +00:00
Chris Lattner
0141841bc4
Fix warning
...
llvm-svn: 4649
2002-11-09 00:49:43 +00:00
Chris Lattner
f03f32d2e8
Fix spelling error
...
llvm-svn: 4645
2002-11-08 23:18:37 +00:00
Chris Lattner
7252fe359e
Use the new getMainFunction() method to efficiently locate main
...
llvm-svn: 4630
2002-11-08 20:34:21 +00:00
Chris Lattner
d5dc2c1417
Fix bug: FunctionResolve/2002-11-07-RetMismatch.ll
...
llvm-svn: 4618
2002-11-08 00:38:20 +00:00
Chris Lattner
aaf2fa34a5
Instcombine this away:
...
%A = getelementptr [4 x int]* %M, long 0, long 0
%B = getelementptr int* %A, long 2
llvm-svn: 4536
2002-11-04 16:43:32 +00:00
Chris Lattner
ecddf3396f
Add a transformation to turn:
...
malloc Ty, C
int
malloc [C x Ty], 1
llvm-svn: 4534
2002-11-04 16:18:53 +00:00
Chris Lattner
e27815a482
Ack: Fix bug in previous checkin.
...
llvm-svn: 4526
2002-11-04 05:50:42 +00:00
Chris Lattner
81135c4c57
Be more generous about level raising constant expressions don't force each
...
constant to one particular type.
llvm-svn: 4525
2002-11-04 05:46:37 +00:00
Chris Lattner
b9fa84c1ed
Make sure to _delete_ memory allocated by worklists
...
llvm-svn: 4523
2002-11-04 02:54:22 +00:00