Thread overview
floating-point optimization
Oct 02, 2006
Brian Gardner
Oct 02, 2006
Walter Bright
Oct 02, 2006
Brian Gardner
Oct 02, 2006
Walter Bright
October 02, 2006
Does DMC perform floating-point optimizations with the -o option?

For example: y = 2.0l * (1.0l * x + 0.0l);
after optimization becomes: y = x + x;

Thanks,
Brian
October 02, 2006
Brian Gardner wrote:
> Does DMC perform floating-point optimizations with the -o option?
> 
> For example: y = 2.0l * (1.0l * x + 0.0l);
> after optimization becomes: y = x + x;

To check what kinds it does, it's pretty easy to write up a sample, compile it, then obj2asm the result. For the above case, the two statements aren't equivalent.
October 02, 2006
Walter Bright wrote:
> Brian Gardner wrote:
>> Does DMC perform floating-point optimizations with the -o option?
>>
>> For example: y = 2.0l * (1.0l * x + 0.0l);
>> after optimization becomes: y = x + x;
> 
> To check what kinds it does, it's pretty easy to write up a sample, compile it, then obj2asm the result.

Well, I'm not familiar with assembler code.
Anyway I set up a test code:

#include <stdio.h>

int main(int argc, char *argv[]){
 long double y, x = argc;
 y = 1.0l * x + 0.0l;

 return printf("%Lg\n", y);
}

With or without -o, instruction faddp is in the asm code generated from obj2asm. So, this means that x + 0.0l is left?
What about for 1.0l * x?

>For the above case, the two statements aren't equivalent.

So, 2.0l * x is not equivalent to x + x? Why?

Thanks,
Brian
October 02, 2006
Brian Gardner wrote:
> So, 2.0l * x is not equivalent to x + x? Why?

(x + x) would be equivalent to (2.00 * x).