www.digitalmars.com         C & C++   DMDScript  

c++ - floating-point optimization

reply Brian Gardner <briangr friberg.us> writes:
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
Oct 01 2006
parent reply Walter Bright <newshound digitalmars.com> writes:
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.
Oct 01 2006
parent reply Brian Gardner <briangr friberg.us> writes:
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
Oct 02 2006
parent Walter Bright <newshound digitalmars.com> writes:
Brian Gardner wrote:
 So, 2.0l * x is not equivalent to x + x? Why?

(x + x) would be equivalent to (2.00 * x).
Oct 02 2006