On Wednesday, 6 August 2014 at 07:29:02 UTC, Ola Fosheim Grøstad wrote:
On Wednesday, 6 August 2014 at 06:56:40 UTC, eles wrote:

Not right:

b = a+1
assume(b>C)

implies

assume(a+1>C)
b = a+1

b = a+1
if(C<=b) exit(1);

implies

if(C<=a+1) exit(1);
b = a+1

Is not the same? Still, one would allow the optimizer to exit before executing b=a+1 line (in the first version) based on that condition (considering no volatile variables).

I stick to my point: as long as the code is there, optimization based on it is acceptable (as long as the functionality of the program is not changed, of course). The sole floating point is what to do when the code that is used for optimization is discarded.

Would you accept optimization of a C program based on code that is guarded by:

#ifndef _NDEBUG
//code that could be used for optimization
#endif

in the -D_NDEBUG version?

(I am not convinced 100% that for D is the same, but should help with the concepts)

Reply via email to