- Oct 03, 2005
-
-
Chris Lattner authored
for globals llvm-svn: 23608
-
Chris Lattner authored
llvm-svn: 23606
-
Chris Lattner authored
particular, it should realize that phi's use their values in the pred block not the phi block itself. This change turns our em3d loop from this: _test: cmpwi cr0, r4, 0 bgt cr0, LBB_test_2 ; entry.no_exit_crit_edge LBB_test_1: ; entry.loopexit_crit_edge li r2, 0 b LBB_test_6 ; loopexit LBB_test_2: ; entry.no_exit_crit_edge li r6, 0 LBB_test_3: ; no_exit or r2, r6, r6 lwz r6, 0(r3) cmpw cr0, r6, r5 beq cr0, LBB_test_6 ; loopexit LBB_test_4: ; endif addi r3, r3, 4 addi r6, r2, 1 cmpw cr0, r6, r4 blt cr0, LBB_test_3 ; no_exit LBB_test_5: ; endif.loopexit.loopexit_crit_edge addi r3, r2, 1 blr LBB_test_6: ; loopexit or r3, r2, r2 blr into: _test: cmpwi cr0, r4, 0 bgt cr0, LBB_test_2 ; entry.no_exit_crit_edge LBB_test_1: ; entry.loopexit_crit_edge li r2, 0 b LBB_test_5 ; loopexit LBB_test_2: ; entry.no_exit_crit_edge li r6, 0 LBB_test_3: ; no_exit lwz r2, 0(r3) cmpw cr0, r2, r5 or r2, r6, r6 beq cr0, LBB_test_5 ; loopexit LBB_test_4: ; endif addi r3, r3, 4 addi r6, r6, 1 cmpw cr0, r6, r4 or r2, r6, r6 blt cr0, LBB_test_3 ; no_exit LBB_test_5: ; loopexit or r3, r2, r2 blr Unfortunately, this is actually worse code, because the register coallescer is getting confused somehow. If it were doing its job right, it could turn the code into this: _test: cmpwi cr0, r4, 0 bgt cr0, LBB_test_2 ; entry.no_exit_crit_edge LBB_test_1: ; entry.loopexit_crit_edge li r6, 0 b LBB_test_5 ; loopexit LBB_test_2: ; entry.no_exit_crit_edge li r6, 0 LBB_test_3: ; no_exit lwz r2, 0(r3) cmpw cr0, r2, r5 beq cr0, LBB_test_5 ; loopexit LBB_test_4: ; endif addi r3, r3, 4 addi r6, r6, 1 cmpw cr0, r6, r4 blt cr0, LBB_test_3 ; no_exit LBB_test_5: ; loopexit or r3, r6, r6 blr ... which I'll work on next. :) llvm-svn: 23604
-
Chris Lattner authored
llvm-svn: 23603
-
Chris Lattner authored
memoizing code when IV's are used by phinodes outside of loops. In a simple example, we were getting this code before (note that r6 and r7 are isomorphic IV's): li r6, 0 or r7, r6, r6 LBB_test_3: ; no_exit lwz r2, 0(r3) cmpw cr0, r2, r5 or r2, r7, r7 beq cr0, LBB_test_5 ; loopexit LBB_test_4: ; endif addi r2, r7, 1 addi r7, r7, 1 addi r3, r3, 4 addi r6, r6, 1 cmpw cr0, r6, r4 blt cr0, LBB_test_3 ; no_exit Now we get: li r6, 0 LBB_test_3: ; no_exit or r2, r6, r6 lwz r6, 0(r3) cmpw cr0, r6, r5 beq cr0, LBB_test_6 ; loopexit LBB_test_4: ; endif addi r3, r3, 4 addi r6, r2, 1 cmpw cr0, r6, r4 blt cr0, LBB_test_3 ; no_exit this was noticed in em3d. llvm-svn: 23602
-
Chris Lattner authored
check the presplit pred, not the post-split pred. This was causing us to make the wrong decision in some cases, leaving the critical edge block in the loop. llvm-svn: 23601
-
- Oct 02, 2005
-
-
Chris Lattner authored
large basic blocks because it was purely recursive. This switches it to an iterative/recursive hybrid. llvm-svn: 23596
-
Chris Lattner authored
llvm-svn: 23595
-
Chris Lattner authored
llvm-svn: 23594
-
Chris Lattner authored
llvm-svn: 23593
-
Chris Lattner authored
llvm-svn: 23592
-
Chris Lattner authored
compile with an assertion that the tables are not sorted! llvm-svn: 23591
-
Chris Lattner authored
up between defs and uses. llvm-svn: 23590
-
Chris Lattner authored
the comparison to be 64-bits. This is fine because extensions from float to double are free. llvm-svn: 23589
-
Chris Lattner authored
split the FSEL family into 4 things instead of just two. llvm-svn: 23588
-
Chris Lattner authored
llvm-svn: 23587
-
Chris Lattner authored
destination vreg. llvm-svn: 23586
-
Chris Lattner authored
llvm-svn: 23585
-
Chris Lattner authored
we're in a single-mbb loop, make sure to emit the backwards branch as the conditional branch instead of the uncond branch. For example, emit this: LBBl29_z__44: stw r9, 0(r15) stw r9, 4(r15) stw r9, 8(r15) stw r9, 12(r15) addi r15, r15, 16 addi r8, r8, 1 cmpw cr0, r8, r28 ble cr0, LBBl29_z__44 b LBBl29_z__48 *** NOT PART OF LOOP Instead of: LBBl29_z__44: stw r9, 0(r15) stw r9, 4(r15) stw r9, 8(r15) stw r9, 12(r15) addi r15, r15, 16 addi r8, r8, 1 cmpw cr0, r8, r28 bgt cr0, LBBl29_z__48 *** PART OF LOOP! b LBBl29_z__44 The former sequence has one fewer dispatch group for the loop body. llvm-svn: 23582
-
Chris Lattner authored
llvm-svn: 23581
-
- Oct 01, 2005
-
-
Chris Lattner authored
For instructions that define multiple results, use the right regclass to define the result, not always the rc of result #0 llvm-svn: 23580
-
Jeff Cohen authored
llvm-svn: 23579
-
Chris Lattner authored
llvm-svn: 23578
-
Chris Lattner authored
These are used to represent float and double values, and the two regclasses contain the same physical registers. llvm-svn: 23577
-
Chris Lattner authored
llvm-svn: 23575
-
Jim Laskey authored
llvm-svn: 23574
-
Jim Laskey authored
2. Printing node groups when displaying nodes. llvm-svn: 23573
-
Jim Laskey authored
llvm-svn: 23572
-
- Sep 30, 2005
-
-
Nate Begeman authored
llvm-svn: 23571
-
Andrew Lenharth authored
llvm-svn: 23569
-
Jim Laskey authored
2. Added node groups to handle flagged nodes. 3. Started weaning simple scheduling off existing emitter. llvm-svn: 23566
-
Chris Lattner authored
llvm-svn: 23564
-
Chris Lattner authored
trim down the target info structs now that we have a preferred spill register class for each callee save register Why is V9 maintaining these tables manually? ugh! llvm-svn: 23561
-
Chris Lattner authored
llvm-svn: 23559
-
Chris Lattner authored
llvm-svn: 23558
-
Chris Lattner authored
llvm-svn: 23557
-
Chris Lattner authored
class into the spill/reload methods. Targets can now rely on that argument. llvm-svn: 23556
-
Chris Lattner authored
llvm-svn: 23554
-
Chris Lattner authored
llvm-svn: 23552
-
Chris Lattner authored
as callee save. They can never be generated by the compiler. llvm-svn: 23551
-