Changeset 380
- Timestamp:
- 02/12/10 09:35:06 (15 years ago)
- Files:
-
- branches/dmd-1.x/src/backend/blockopt.c (modified) (2 diffs)
- branches/dmd-1.x/src/backend/cgelem.c (modified) (2 diffs)
- trunk/src/backend/blockopt.c (modified) (2 diffs)
- trunk/src/backend/cgelem.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/dmd-1.x/src/backend/blockopt.c
r288 r380 1 1 // Copyright (C) 1986-1997 by Symantec 2 // Copyright (C) 2000-20 09by Digital Mars2 // Copyright (C) 2000-2010 by Digital Mars 3 3 // All Rights Reserved 4 4 // http://www.digitalmars.com 5 5 // Written by Walter Bright 6 6 /* 7 7 * This source file is made available for personal use 8 8 * only. The license is in /dmd/src/dmd/backendlicense.txt 9 9 * or /dm/src/dmd/backendlicense.txt 10 10 * For any other uses, please contact Digital Mars. 11 11 */ 12 12 13 13 14 14 /**************************************************************** 15 15 * Handle basic blocks. 16 16 */ 17 17 18 18 #if !SPP 19 19 20 20 #include <stdio.h> 21 21 #include <string.h> 22 22 #include <time.h> … … 726 726 if (b2->Belem) 727 727 { 728 728 op = OPandand; 729 729 b->Belem = PARSER ? el_bint(op,tsint,b->Belem,b2->Belem) 730 730 : el_bin(op,TYint,b->Belem,b2->Belem); 731 731 b2->Belem = NULL; 732 732 } 733 733 list_subtract(&(b->Bsucc),b2); 734 734 list_subtract(&(b2->Bpred),b); 735 735 cmes("brcombine(): if !e1 then e2 => e1 || e2\n"); 736 736 anychanges++; 737 737 } 738 738 else if (list_next(b3->Bpred) || b3 == startblock) 739 739 continue; 740 740 else if ((bc2 == BCretexp && b3->BC == BCretexp) 741 741 //|| (bc2 == BCret && b3->BC == BCret) 742 742 ) 743 743 { elem *e; 744 744 745 745 if (PARSER) 746 { type *t; 747 748 t = (bc2 == BCretexp) ? b2->Belem->ET : tsvoid; 746 { 747 type *t = (bc2 == BCretexp) ? b2->Belem->ET : tsvoid; 749 748 e = el_bint(OPcolon2,t,b2->Belem,b3->Belem); 750 749 b->Belem = el_bint(OPcond,t,b->Belem,e); 751 750 } 752 751 else 753 { tym_t ty; 754 752 { 755 753 if (EOP(b3->Belem)) 756 754 continue; 757 ty = (bc2 == BCretexp) ? b2->Belem->Ety : TYvoid;755 tym_t ty = (bc2 == BCretexp) ? b2->Belem->Ety : TYvoid; 758 756 e = el_bin(OPcolon2,ty,b2->Belem,b3->Belem); 759 757 b->Belem = el_bin(OPcond,ty,b->Belem,e); 760 758 } 761 759 b->BC = bc2; 760 b->Belem->Enumbytes = b2->Belem->Enumbytes; 762 761 b2->Belem = NULL; 763 762 b3->Belem = NULL; 764 763 list_free(&b->Bsucc,FPNULL); 765 764 list_subtract(&(b2->Bpred),b); 766 765 list_subtract(&(b3->Bpred),b); 767 766 cmes("brcombine(): if e1 return e2 else return e3 => ret e1?e2:e3\n"); 768 767 anychanges++; 769 768 } 770 769 else if (bc2 == BCgoto && 771 770 b3->BC == BCgoto && 772 771 list_block(b2->Bsucc) == list_block(b3->Bsucc)) 773 772 { elem *e; 774 773 block *bsucc; 775 774 776 775 bsucc = list_block(b2->Bsucc); 777 776 if (b2->Belem) 778 777 { 779 778 if (PARSER) 780 779 { 781 780 if (b3->Belem) 782 781 { 783 782 e = el_bint(OPcolon2,b2->Belem->ET, 784 783 b2->Belem,b3->Belem); 785 784 e = el_bint(OPcond,e->ET,b->Belem,e); 786 785 } 787 786 else 788 787 { 789 788 op = OPandand; 790 789 e = el_bint(op,tsint,b->Belem,b2->Belem); 791 790 } 792 791 } 793 792 else 794 793 { 795 794 if (b3->Belem) 796 795 { 797 796 if (EOP(b3->Belem)) 798 797 continue; 799 798 e = el_bin(OPcolon2,b2->Belem->Ety, 800 799 b2->Belem,b3->Belem); 801 800 e = el_bin(OPcond,e->Ety,b->Belem,e); 801 e->Enumbytes = b2->Belem->Enumbytes; 802 802 } 803 803 else 804 804 { 805 805 op = OPandand; 806 806 e = el_bin(op,TYint,b->Belem,b2->Belem); 807 807 } 808 808 } 809 809 b2->Belem = NULL; 810 810 b->Belem = e; 811 811 } 812 812 else if (b3->Belem) 813 813 { 814 814 op = OPoror; 815 815 b->Belem = PARSER ? el_bint(op,tsint,b->Belem,b3->Belem) 816 816 : el_bin(op,TYint,b->Belem,b3->Belem); 817 817 } 818 818 b->BC = BCgoto; 819 819 b3->Belem = NULL; 820 820 list_free(&b->Bsucc,FPNULL); 821 821 branches/dmd-1.x/src/backend/cgelem.c
r289 r380 1 1 // Copyright (C) 1985-1998 by Symantec 2 // Copyright (C) 2000-20 09by Digital Mars2 // Copyright (C) 2000-2010 by Digital Mars 3 3 // All Rights Reserved 4 4 // http://www.digitalmars.com 5 5 // Written by Walter Bright 6 6 /* 7 7 * This source file is made available for personal use 8 8 * only. The license is in /dmd/src/dmd/backendlicense.txt 9 9 * or /dm/src/dmd/backendlicense.txt 10 10 * For any other uses, please contact Digital Mars. 11 11 */ 12 12 13 13 #if !SPP 14 14 15 15 #include <stdio.h> 16 16 #include <string.h> 17 17 #include <time.h> 18 18 #include "cc.h" 19 19 #include "oper.h" 20 20 #include "global.h" 21 21 #include "el.h" 22 22 #include "dt.h" … … 4378 4378 if (EOP(e1)) // if failed to fold the constants 4379 4379 { // Undo the changes so we don't infinite loop 4380 4380 e->E2 = e1->E1; 4381 4381 e1->E1 = e->E1; 4382 4382 e->E1 = e1; 4383 4383 } 4384 4384 else 4385 4385 { e->E2 = e1; 4386 4386 goto beg; 4387 4387 } 4388 4388 } 4389 4389 else 4390 4390 goto beg; 4391 4391 } 4392 4392 } 4393 4393 4394 4394 if (!OTrtol(op) && op != OPparam && op != OPcolon && op != OPcolon2 && 4395 4395 e1->Eoper == OPcomma) 4396 4396 { // Convert ((a,b) op c) to (a,(b op c)) 4397 4397 e1->Ety = e->Ety; 4398 e1->Enumbytes = e->Enumbytes; 4398 4399 e->E1 = e1->E2; 4399 4400 e1->E2 = e; 4400 4401 e = e1; 4401 4402 goto beg; 4402 4403 } 4403 4404 } 4404 4405 4405 4406 if (OTcommut(op)) // if commutative 4406 4407 { 4407 4408 /* see if we should swap the leaves */ 4408 4409 #if 0 4409 4410 if (tyfloating(e1->Ety)) 4410 4411 { 4411 4412 if (fcost(e2) > fcost(e1)) 4412 4413 { e->E1 = e2; 4413 4414 e2 = e->E2 = e1; 4414 4415 e1 = e->E1; // reverse the leaves 4415 4416 op = e->Eoper = swaprel(op); 4416 4417 } 4417 4418 } trunk/src/backend/blockopt.c
r288 r380 1 1 // Copyright (C) 1986-1997 by Symantec 2 // Copyright (C) 2000-20 09by Digital Mars2 // Copyright (C) 2000-2010 by Digital Mars 3 3 // All Rights Reserved 4 4 // http://www.digitalmars.com 5 5 // Written by Walter Bright 6 6 /* 7 7 * This source file is made available for personal use 8 8 * only. The license is in /dmd/src/dmd/backendlicense.txt 9 9 * or /dm/src/dmd/backendlicense.txt 10 10 * For any other uses, please contact Digital Mars. 11 11 */ 12 12 13 13 14 14 /**************************************************************** 15 15 * Handle basic blocks. 16 16 */ 17 17 18 18 #if !SPP 19 19 20 20 #include <stdio.h> 21 21 #include <string.h> 22 22 #include <time.h> … … 726 726 if (b2->Belem) 727 727 { 728 728 op = OPandand; 729 729 b->Belem = PARSER ? el_bint(op,tsint,b->Belem,b2->Belem) 730 730 : el_bin(op,TYint,b->Belem,b2->Belem); 731 731 b2->Belem = NULL; 732 732 } 733 733 list_subtract(&(b->Bsucc),b2); 734 734 list_subtract(&(b2->Bpred),b); 735 735 cmes("brcombine(): if !e1 then e2 => e1 || e2\n"); 736 736 anychanges++; 737 737 } 738 738 else if (list_next(b3->Bpred) || b3 == startblock) 739 739 continue; 740 740 else if ((bc2 == BCretexp && b3->BC == BCretexp) 741 741 //|| (bc2 == BCret && b3->BC == BCret) 742 742 ) 743 743 { elem *e; 744 744 745 745 if (PARSER) 746 { type *t; 747 748 t = (bc2 == BCretexp) ? b2->Belem->ET : tsvoid; 746 { 747 type *t = (bc2 == BCretexp) ? b2->Belem->ET : tsvoid; 749 748 e = el_bint(OPcolon2,t,b2->Belem,b3->Belem); 750 749 b->Belem = el_bint(OPcond,t,b->Belem,e); 751 750 } 752 751 else 753 { tym_t ty; 754 752 { 755 753 if (EOP(b3->Belem)) 756 754 continue; 757 ty = (bc2 == BCretexp) ? b2->Belem->Ety : TYvoid;755 tym_t ty = (bc2 == BCretexp) ? b2->Belem->Ety : TYvoid; 758 756 e = el_bin(OPcolon2,ty,b2->Belem,b3->Belem); 759 757 b->Belem = el_bin(OPcond,ty,b->Belem,e); 760 758 } 761 759 b->BC = bc2; 760 b->Belem->Enumbytes = b2->Belem->Enumbytes; 762 761 b2->Belem = NULL; 763 762 b3->Belem = NULL; 764 763 list_free(&b->Bsucc,FPNULL); 765 764 list_subtract(&(b2->Bpred),b); 766 765 list_subtract(&(b3->Bpred),b); 767 766 cmes("brcombine(): if e1 return e2 else return e3 => ret e1?e2:e3\n"); 768 767 anychanges++; 769 768 } 770 769 else if (bc2 == BCgoto && 771 770 b3->BC == BCgoto && 772 771 list_block(b2->Bsucc) == list_block(b3->Bsucc)) 773 772 { elem *e; 774 773 block *bsucc; 775 774 776 775 bsucc = list_block(b2->Bsucc); 777 776 if (b2->Belem) 778 777 { 779 778 if (PARSER) 780 779 { 781 780 if (b3->Belem) 782 781 { 783 782 e = el_bint(OPcolon2,b2->Belem->ET, 784 783 b2->Belem,b3->Belem); 785 784 e = el_bint(OPcond,e->ET,b->Belem,e); 786 785 } 787 786 else 788 787 { 789 788 op = OPandand; 790 789 e = el_bint(op,tsint,b->Belem,b2->Belem); 791 790 } 792 791 } 793 792 else 794 793 { 795 794 if (b3->Belem) 796 795 { 797 796 if (EOP(b3->Belem)) 798 797 continue; 799 798 e = el_bin(OPcolon2,b2->Belem->Ety, 800 799 b2->Belem,b3->Belem); 801 800 e = el_bin(OPcond,e->Ety,b->Belem,e); 801 e->Enumbytes = b2->Belem->Enumbytes; 802 802 } 803 803 else 804 804 { 805 805 op = OPandand; 806 806 e = el_bin(op,TYint,b->Belem,b2->Belem); 807 807 } 808 808 } 809 809 b2->Belem = NULL; 810 810 b->Belem = e; 811 811 } 812 812 else if (b3->Belem) 813 813 { 814 814 op = OPoror; 815 815 b->Belem = PARSER ? el_bint(op,tsint,b->Belem,b3->Belem) 816 816 : el_bin(op,TYint,b->Belem,b3->Belem); 817 817 } 818 818 b->BC = BCgoto; 819 819 b3->Belem = NULL; 820 820 list_free(&b->Bsucc,FPNULL); 821 821 trunk/src/backend/cgelem.c
r289 r380 1 1 // Copyright (C) 1985-1998 by Symantec 2 // Copyright (C) 2000-20 09by Digital Mars2 // Copyright (C) 2000-2010 by Digital Mars 3 3 // All Rights Reserved 4 4 // http://www.digitalmars.com 5 5 // Written by Walter Bright 6 6 /* 7 7 * This source file is made available for personal use 8 8 * only. The license is in /dmd/src/dmd/backendlicense.txt 9 9 * or /dm/src/dmd/backendlicense.txt 10 10 * For any other uses, please contact Digital Mars. 11 11 */ 12 12 13 13 #if !SPP 14 14 15 15 #include <stdio.h> 16 16 #include <string.h> 17 17 #include <time.h> 18 18 #include "cc.h" 19 19 #include "oper.h" 20 20 #include "global.h" 21 21 #include "el.h" 22 22 #include "dt.h" … … 4378 4378 if (EOP(e1)) // if failed to fold the constants 4379 4379 { // Undo the changes so we don't infinite loop 4380 4380 e->E2 = e1->E1; 4381 4381 e1->E1 = e->E1; 4382 4382 e->E1 = e1; 4383 4383 } 4384 4384 else 4385 4385 { e->E2 = e1; 4386 4386 goto beg; 4387 4387 } 4388 4388 } 4389 4389 else 4390 4390 goto beg; 4391 4391 } 4392 4392 } 4393 4393 4394 4394 if (!OTrtol(op) && op != OPparam && op != OPcolon && op != OPcolon2 && 4395 4395 e1->Eoper == OPcomma) 4396 4396 { // Convert ((a,b) op c) to (a,(b op c)) 4397 4397 e1->Ety = e->Ety; 4398 e1->Enumbytes = e->Enumbytes; 4398 4399 e->E1 = e1->E2; 4399 4400 e1->E2 = e; 4400 4401 e = e1; 4401 4402 goto beg; 4402 4403 } 4403 4404 } 4404 4405 4405 4406 if (OTcommut(op)) // if commutative 4406 4407 { 4407 4408 /* see if we should swap the leaves */ 4408 4409 #if 0 4409 4410 if (tyfloating(e1->Ety)) 4410 4411 { 4411 4412 if (fcost(e2) > fcost(e1)) 4412 4413 { e->E1 = e2; 4413 4414 e2 = e->E2 = e1; 4414 4415 e1 = e->E1; // reverse the leaves 4415 4416 op = e->Eoper = swaprel(op); 4416 4417 } 4417 4418 }
