summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
Commit message (Collapse)AuthorAgeFilesLines
* Use ETForest instead of DominatorTree.Owen Anderson2007-04-181-21/+18
| | | | llvm-svn: 36247
* Spell doFinalization right, so that it is a proper virtual override andDan Gohman2007-04-171-1/+1
| | | | | | gets called. llvm-svn: 36208
* remove use of BasicBlock::getNextChris Lattner2007-04-172-3/+6
| | | | llvm-svn: 36205
* remove use of BasicBlock::getNextChris Lattner2007-04-171-3/+4
| | | | llvm-svn: 36202
* eliminate use of Instruction::getNext()Chris Lattner2007-04-171-13/+15
| | | | llvm-svn: 36200
* remove use of Instruction::getNextChris Lattner2007-04-171-3/+5
| | | | llvm-svn: 36199
* FixDevang Patel2007-04-161-0/+6
| | | | | | http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070416/047888.html llvm-svn: 36182
* Removed tabs everywhere except autogenerated & external files. Add makeAnton Korobeynikov2007-04-1611-34/+35
| | | | | | target for tabs checking. llvm-svn: 36146
* Fix PR1335 and Transforms/Inline/2007-04-15-InlineEH.llChris Lattner2007-04-151-4/+5
| | | | llvm-svn: 36090
* Remove ImmediateDominator analysis. The same information can be obtained ↵Owen Anderson2007-04-153-51/+0
| | | | | | | | | | from DomTree. A lot of code for constructing ImmediateDominator is now folded into DomTree construction. This is part of the ongoing work for PR217. llvm-svn: 36063
* fix SimplifyLibCalls/IsDigit.llChris Lattner2007-04-151-1/+1
| | | | llvm-svn: 36047
* Extend store merging to support the 'if/then' version in addition to ↵Chris Lattner2007-04-151-26/+60
| | | | | | | | | | | | | | | | | | | | if/then/else. This sinks the two stores in this example into a single store in cond_next. In this case, it allows elimination of the load as well: store double 0.000000e+00, double* @s.3060 %tmp3 = fcmp ogt double %tmp1, 5.000000e-01 ; <i1> [#uses=1] br i1 %tmp3, label %cond_true, label %cond_next cond_true: ; preds = %entry store double 1.000000e+00, double* @s.3060 br label %cond_next cond_next: ; preds = %entry, %cond_true %tmp6 = load double* @s.3060 ; <double> [#uses=1] This implements Transforms/InstCombine/store-merge.ll:test2 llvm-svn: 36040
* refactor some code, no functionality change.Chris Lattner2007-04-151-58/+77
| | | | llvm-svn: 36037
* fix long linesChris Lattner2007-04-146-18/+20
| | | | llvm-svn: 36031
* Implement Transforms/InstCombine/vec_extract_elt.ll, transforming:Chris Lattner2007-04-141-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | define i32 @test(float %f) { %tmp7 = insertelement <4 x float> undef, float %f, i32 0 %tmp17 = bitcast <4 x float> %tmp7 to <4 x i32> %tmp19 = extractelement <4 x i32> %tmp17, i32 0 ret i32 %tmp19 } into: define i32 @test(float %f) { %tmp19 = bitcast float %f to i32 ; <i32> [#uses=1] ret i32 %tmp19 } On PPC, this is the difference between: _test: mfspr r2, 256 oris r3, r2, 8192 mtspr 256, r3 stfs f1, -16(r1) addi r3, r1, -16 addi r4, r1, -32 lvx v2, 0, r3 stvx v2, 0, r4 lwz r3, -32(r1) mtspr 256, r2 blr and: _test: stfs f1, -4(r1) nop nop nop lwz r3, -4(r1) blr llvm-svn: 36025
* Implement InstCombine/vec_demanded_elts.ll:test2. This allows us to turnChris Lattner2007-04-141-0/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | unsigned test(float f) { return _mm_cvtsi128_si32( (__m128i) _mm_set_ss( f*f )); } into: _test: movss 4(%esp), %xmm0 mulss %xmm0, %xmm0 movd %xmm0, %eax ret instead of: _test: movss 4(%esp), %xmm0 mulss %xmm0, %xmm0 xorps %xmm1, %xmm1 movss %xmm0, %xmm1 movd %xmm1, %eax ret GCC gets: _test: subl $28, %esp movss 32(%esp), %xmm0 mulss %xmm0, %xmm0 xorps %xmm1, %xmm1 movss %xmm0, %xmm1 movaps %xmm1, %xmm0 movd %xmm0, 12(%esp) movl 12(%esp), %eax addl $28, %esp ret llvm-svn: 36020
* avoid copying sets and vectors around.Chris Lattner2007-04-141-7/+6
| | | | llvm-svn: 36017
* avoid iterator invalidation.Chris Lattner2007-04-141-2/+4
| | | | llvm-svn: 36002
* An even better fix.Jeff Cohen2007-04-141-3/+2
| | | | llvm-svn: 35998
* Fix recent regression that broke several llvm-tests.Jeff Cohen2007-04-141-0/+2
| | | | llvm-svn: 35996
* Implement a few missing xforms: printf("foo\n") -> puts. printf("x") -> putcharChris Lattner2007-04-141-9/+48
| | | | | | | | printf("") -> noop. Still need to do the xforms for fprintf. This implements Transforms/SimplifyLibCalls/Printf.ll llvm-svn: 35984
* in addition to merging, constantmerge should also delete trivially dead globals,Chris Lattner2007-04-141-1/+8
| | | | | | in order to clean up after simplifylibcalls. llvm-svn: 35982
* Implement PR1201 and test/Transforms/InstCombine/malloc-free-delete.llChris Lattner2007-04-141-8/+23
| | | | llvm-svn: 35981
* use an accessor to simplify code.Chris Lattner2007-04-141-15/+1
| | | | llvm-svn: 35979
* Now that codegen prepare isn't defeating me, I can finally fix what I setChris Lattner2007-04-131-1/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | out to do! :) This fixes a problem where LSR would insert a bunch of code into each MBB that uses a particular subexpression (e.g. IV+base+C). The problem is that this code cannot be CSE'd back together if inserted into different blocks. This patch changes LSR to attempt to insert a single copy of this code and share it, allowing codegenprepare to duplicate the code if it can be sunk into various addressing modes. On CodeGen/ARM/lsr-code-insertion.ll, for example, this gives us code like: add r8, r0, r5 str r6, [r8, #+4] .. ble LBB1_4 @cond_next LBB1_3: @cond_true str r10, [r8, #+4] LBB1_4: @cond_next ... LBB1_5: @cond_true55 ldr r6, LCPI1_1 str r6, [r8, #+4] instead of: add r10, r0, r6 str r8, [r10, #+4] ... ble LBB1_4 @cond_next LBB1_3: @cond_true add r8, r0, r6 str r10, [r8, #+4] LBB1_4: @cond_next ... LBB1_5: @cond_true55 add r8, r0, r6 ldr r10, LCPI1_1 str r10, [r8, #+4] Besides being smaller and more efficient, this makes it immediately obvious that it is profitable to predicate LBB1_3 now :) llvm-svn: 35972
* Completely rewrite addressing-mode related sinking of code. In particular,Chris Lattner2007-04-131-341/+542
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | this fixes problems where codegenprepare would sink expressions into load/stores that are not valid, and fixes cases where it would miss important valid ones. This fixes several serious codesize and perf issues, particularly on targets with complex addressing modes like arm and x86. For example, now we compile CodeGen/X86/isel-sink.ll to: _test: movl 8(%esp), %eax movl 4(%esp), %ecx cmpl $1233, %eax ja LBB1_2 #F LBB1_1: #T movl $4, (%ecx,%eax,4) movl $141, %eax ret LBB1_2: #F movl (%ecx,%eax,4), %eax ret instead of: _test: movl 8(%esp), %eax leal (,%eax,4), %ecx addl 4(%esp), %ecx cmpl $1233, %eax ja LBB1_2 #F LBB1_1: #T movl $4, (%ecx) movl $141, %eax ret LBB1_2: #F movl (%ecx), %eax ret llvm-svn: 35970
* Remove use of SlowOperationInformer.Devang Patel2007-04-131-3/+0
| | | | llvm-svn: 35967
* Undo previous check-in.Devang Patel2007-04-131-1/+1
| | | | llvm-svn: 35966
* Hello uses LLVMSupport.a (SlowerOperationInformer)Devang Patel2007-04-131-1/+1
| | | | llvm-svn: 35965
* Implement the "thread_local" keyword.Lauro Ramos Venancio2007-04-122-7/+21
| | | | llvm-svn: 35950
* Build Hello by default so it can be used in test cases.Reid Spencer2007-04-111-1/+1
| | | | llvm-svn: 35922
* Fix Transforms/ScalarRepl/union-pointer.llChris Lattner2007-04-111-6/+7
| | | | llvm-svn: 35906
* Turn stuff like:Chris Lattner2007-04-111-9/+40
| | | | | | | | | | | | | icmp slt i32 %X, 0 ; <i1>:0 [#uses=1] sext i1 %0 to i32 ; <i32>:1 [#uses=1] into: %X.lobit = ashr i32 %X, 31 ; <i32> [#uses=1] This implements InstCombine/icmp.ll:test[34] llvm-svn: 35891
* Simplify some comparisons to arithmetic, this implements:Chris Lattner2007-04-111-0/+27
| | | | | | Transforms/InstCombine/icmp.ll llvm-svn: 35890
* canonicalize (x <u 2147483648) -> (x >s -1) and (x >u 2147483647) -> (x <s 0)Chris Lattner2007-04-111-25/+32
| | | | llvm-svn: 35886
* fix a miscompilation of:Chris Lattner2007-04-111-63/+59
| | | | | | | | | | | | | | | define i32 @test(i32 %X) { entry: %Y = and i32 %X, 4 ; <i32> [#uses=1] icmp eq i32 %Y, 0 ; <i1>:0 [#uses=1] sext i1 %0 to i32 ; <i32>:1 [#uses=1] ret i32 %1 } by moving code out of commonIntCastTransforms into visitZExt. Simplify the APInt gymnastics in it etc. llvm-svn: 35885
* fix a regression introduced by my last patch.Chris Lattner2007-04-111-14/+1
| | | | llvm-svn: 35879
* Simplify SROA conversion to integer in some ways, make it more general in ↵Chris Lattner2007-04-111-131/+138
| | | | | | | | | | | others. We now tolerate small amounts of undefined behavior, better emulating what would happen if the transaction actually occurred in memory. This fixes SingleSource/UnitTests/2007-04-10-BitfieldTest.c on PPC, at least until Devang gets a chance to fix the CFE from doing undefined things with bitfields :) llvm-svn: 35875
* Strengthen the boundary conditions of this fold, implementingChris Lattner2007-04-091-3/+3
| | | | | | InstCombine/set.ll:test25 llvm-svn: 35852
* Re-constify things that don't break the build. Last patch in thisOwen Anderson2007-04-091-2/+4
| | | | | | series, I promise. llvm-svn: 35848
* eliminate the last uses of some TLI methods.Chris Lattner2007-04-091-3/+7
| | | | llvm-svn: 35844
* Unconst-ify stuff that broke the build.Owen Anderson2007-04-091-1/+1
| | | | llvm-svn: 35843
* Const-ify some parameters, and some cosmetic cleanups. No functionalityOwen Anderson2007-04-091-3/+4
| | | | | | change. llvm-svn: 35842
* Tabs -> SpacesOwen Anderson2007-04-091-36/+36
| | | | llvm-svn: 35841
* Improve some _slow_ behavior introduced in my patches the last few days.Owen Anderson2007-04-091-42/+42
| | | | llvm-svn: 35839
* switch LSR to use isLegalAddressingMode instead of other simpler hooksChris Lattner2007-04-091-18/+21
| | | | llvm-svn: 35837
* Check _all_ PHINodes.Devang Patel2007-04-091-1/+1
| | | | llvm-svn: 35836
* Insert new pre-header before new header. Original pre-header mayDevang Patel2007-04-091-2/+2
| | | | | | | | | happen to be an entry, in such case, it is not a good idea to insert new block before entry. Also fix typo in assertion check. llvm-svn: 35833
* Preserve canonical loop form.Devang Patel2007-04-091-5/+55
| | | | llvm-svn: 35829
* Don't link against System or Support library. These things will alreadyReid Spencer2007-04-091-1/+1
| | | | | | be in the opt tool. llvm-svn: 35827
OpenPOWER on IntegriCloud