Commit Graph

61 Commits

Author SHA1 Message Date
peter
1b53fa6f8a * removed unused var 2000-06-18 18:13:12 +00:00
Jonas Maebe
e360abb77b * fixed web bug #972, test for the bug in tests/testopt/testcse3.pp 2000-06-03 09:41:37 +00:00
peter
e60344ccf7 * removed notes 2000-06-01 11:01:20 +00:00
Jonas Maebe
6e83066171 * fixed incompatibility with range chcking code, -O2 and higher
now work correctly together with -Cr
2000-04-29 16:57:44 +00:00
Jonas Maebe
e4ceb46242 * fixed a serious bug in the CSE which (I think) only showed with
-dnewoptimizations when using multi-dimensional arrays with
    elements of a size different from 1, 2 or 4 (especially strings).
  * made the DFA/CSE more robust (much less dependent on specifics of the
    code generator)
2000-04-10 12:45:56 +00:00
Jonas Maebe
3ec9514966 * fixed some things for -Or. Make cycle now works with -OG2p3r if
you use -Aas. There still a bug in popt386.pas that causes a
    problem with the binary writer, but I haven't found it yet
2000-03-25 19:05:47 +00:00
Jonas Maebe
34dd37729c * fix for -dnewoptimizations and -Or (never remove stores to regvars)
but make cycle with -OG2p3r still fails :(
2000-03-24 15:54:49 +00:00
peter
2ba0ebe607 * removed warnings/notes 2000-02-24 18:41:38 +00:00
Jonas Maebe
fb5ac39a26 * fixed bug in -dnewoptizations (showed itself only if -Or was
used as well I think)
2000-02-19 13:50:29 +00:00
Jonas Maebe
aafacbb44b * -dreplacereg no logner tries to optimize "movl %reg1,%reg1" (which are
always marked as CanBeRemoved)
  + some comments in -dreplacereg code
  * small fix which could cause crash when optimizer is compiler with -dTP
2000-02-17 07:46:49 +00:00
Jonas Maebe
958d6dacef * fix for imul optimization in popt386 (exclude top_ref as first
argument)
  * in csopt386: change "mov reg1,reg2; <several operations on reg2>;
    mov reg2,reg1" to "<several operations on reg1>" (-dnewopt...)
2000-02-12 19:28:56 +00:00
Jonas Maebe
0cbad4fe45 + change "mov reg1,reg2;imul x,reg2" to "imul x,reg1,reg2" in popt386
(-dnewoptimizations)
  * shl(d) and shr(d) are considered to have a hardcoded register if
    they use cl as shift count (since you can't replace them with
    another register) in csopt386 (also for -dnewoptimizations)
2000-02-12 14:10:14 +00:00
Jonas Maebe
bee612f94a * fixed edi allocation in allocRegBetween
* fixed bug I introduced yesterday, added comment to prevent it from
    happening again in the future
2000-02-12 10:54:18 +00:00
Jonas Maebe
89abe234d9 * fixed crashing bug under Dos with -dnewoptimizations (found it,
John!). Don't understand why it didn't crash under Linux :(
2000-02-11 23:50:03 +00:00
Jonas Maebe
9e85007190 * fixed stupid typo! 2000-02-10 16:04:43 +00:00
Jonas Maebe
e558713f0c * fixed small bug introduced with my previous fix 2000-02-10 15:07:41 +00:00
Jonas Maebe
8a40388de3 * fixed bug due to lack of support for top_symbol operands 2000-02-10 14:57:13 +00:00
peter
4a4a24b6e8 * log truncated 2000-02-09 13:22:42 +00:00
Jonas Maebe
4e361ef71f * better support for regvars (still needs a move of the call to the optimize
procedure to a place where resetusableregisters is not yet called to work)
  * small regallocation fixes for -dnewoptimizations
2000-02-04 13:52:17 +00:00
Jonas Maebe
38b993f7dc * moved skipinstr from daopt386 to aasm
* fixed crashing bug with -dreplacereg in csopt386.pas
2000-01-28 15:15:31 +00:00
michael
587a967353 + Fixes from Jonas. 2000-01-23 11:11:36 +00:00
Jonas Maebe
02381105d6 + all code generator generated "mov reg1,reg2" instructions are now
attempted to be removed using the replacereg code
    (-dnewoptimizations)
  * small fixes to -dreplacereg code
2000-01-22 16:10:06 +00:00
Jonas Maebe
5910b48cbe * released -dalignreg
* some small fixes to -dnewOptimizations helper procedures
2000-01-13 13:07:05 +00:00
peter
e525797c51 * updated copyright to 2000 2000-01-07 01:14:18 +00:00
Jonas Maebe
ace77883c8 * fixed bug with -dreplacereg 2000-01-03 17:11:17 +00:00
Jonas Maebe
8272526892 * CSE of constant loading in regs works properly again
+ if a constant is stored into memory using "mov const, ref" and
    there is a reg that contains this const, it is changed into
    "mov reg, ref"
1999-12-05 16:48:43 +00:00
peter
ad2b1fb278 * newoptimizations define added 1999-12-02 11:26:41 +00:00
Jonas Maebe
7d1b3066d9 * fixed some missed optimizations because 8bit regs were not always
taken into account
1999-11-21 13:09:41 +00:00
Jonas Maebe
1a761b3881 * make cycle works with -dreplacereg (register renaming)! I have not
tested it yet together with -darithopt, but I don't expect problems
1999-11-20 11:37:03 +00:00
Jonas Maebe
404ca4568d + basic register renaming (not yet working completely, between
-dreplacereg/-dreplaceregdebug)
1999-11-14 11:26:53 +00:00
Jonas Maebe
d70b3211a4 + search optimial register to use in alignment code (compile with
-dalignreg, -dalignregdebug to see chosen register in
    assembler code). Still needs support in ag386bin.
1999-11-06 16:21:57 +00:00
peter
0887060ff2 * truncated log to 20 revs 1999-11-06 14:34:16 +00:00
Jonas Maebe
2688bfd9ec + first implementation of choosing least used register for alignment code
(not yet working, between ifdef alignreg)
1999-11-05 16:01:45 +00:00
Jonas Maebe
9a8ecfc76b * fixed bug which sometimes caused a crash when optimizing blocks of code with
assembler blocks (didn't notice before because of lack of zero page protection
    under Win9x :( )
1999-10-11 11:11:31 +00:00
Jonas Maebe
6ca2b6e276 * CSE now updates the RegAlloc's 1999-10-01 13:51:40 +00:00
Jonas Maebe
47b0fcf922 * fixed small efficiency which caused some missed optimizations (saves 1
assembler instruction on the whole compiler/RTL source tree! :)
1999-09-30 14:43:13 +00:00
peter
6b1ab5eb31 * procinfo is now a pointer
* support for result setting in sub procedure
1999-09-27 23:44:46 +00:00
Jonas Maebe
5fc1435036 * changed pai386, paippc and paiapha (same for tai*) to paicpu (taicpu) 1999-08-25 11:59:32 +00:00
florian
ca53eee67e * renamed i386asm and i386base to cpuasm and cpubase 1999-08-04 00:22:34 +00:00
Jonas Maebe
7e4f903a9e * sequences are now checked only once (previously, some long ones were
checked once completely and then several times partially)
1999-06-03 15:45:08 +00:00
Jonas Maebe
460464ff24 * seperate OPTimizer INFO pointer field in tai object 1999-05-08 20:38:02 +00:00
peter
611da2d24e * merged nasm compiler
* old asm moved to oldasm/
1999-05-01 13:23:57 +00:00
peter
a17c03cca3 * assembler writers fixed for ag386bin 1999-02-26 00:48:13 +00:00
Jonas Maebe
8cf4da6d5e + optimize pascal code surrounding assembler blocks 1998-12-29 18:48:15 +00:00
Jonas Maebe
09f430de39 + extra checks in RegsEquivalent so some more optimizations can be done (which
where disabled by the second fix from revision 1.22)
1998-12-17 16:37:38 +00:00
Jonas Maebe
242244016d * changed "if longintvar in set" to case or "if () or () .." statements
* tree.pas: changed inlinenumber (and associated constructor/vars) to a byte
1998-12-02 16:23:29 +00:00
Jonas Maebe
4df2da0cc7 * fixed problems posiible with 3 operand instructions 1998-11-24 19:47:22 +00:00
Jonas Maebe
2b9d08c912 * fixed comments from last commit (apparently there's still a 255 char limit :( ) 1998-11-09 19:40:46 +00:00
Jonas Maebe
d8c11fa743 * changed specific bugfix (which was actually wrong implemented, but did the
right thing in most cases nevertheless) to general bugfix
  * fixed bug that caused
    mov (ebp), edx                                    mov (ebp), edx
    mov (edx), edx
1998-11-09 19:33:39 +00:00
peter
9a650233f0 * removed some unused vars 1998-10-20 09:32:54 +00:00