On 02 Jan 2012, at 17:56, Bernd wrote: > This seems to work: > > http://pastebin.com/E3LYfJCx (used with 2.6.0) > > Is this how it should look like or am I doing something completely > stupid or did I forget something important?
At first sight, one important thing you forgot is that a single memory location can be aliased by multiple pointers. Simply checking whether the base register and offsets match is not enough to determine whether a write invalidates register contents, since a write via a pointer could overwrite any other memory location. > BTW: wouldn't it be possible to make it not generate this redundant > code in the first place or would this again be some kind of impossible > / overly complicated thing? A better register allocator undoubtedly result in less spilling code (by e.g. performing live range splitting). > It seems to me the code is not really meant for performing complicated > analysis and operations on the generated assembly code, even the > simplest things like comparing two instructions or getting a list of > input and output registers seems so incredibly cumbersome, or is this > only my impression because I am not very familiar with this kind of > things? Originally it was probably about as simple as your code. Afterwards, much more functionality was added beyond removing single loads. Jonas_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal