Path: csiph.com!xmission!news.snarked.org!border2.nntp.dca1.giganews.com!nntp.giganews.com!news.iecc.com!.POSTED.news.iecc.com!nerds-end From: Kaz Kylheku <847-115-0292@kylheku.com> Newsgroups: comp.compilers Subject: Re: Optimization techniques Date: Fri, 19 Apr 2019 08:49:11 +0000 (UTC) Organization: Aioe.org NNTP Server Lines: 32 Sender: news@iecc.com Approved: comp.compilers@iecc.com Message-ID: <19-04-009@comp.compilers> References: <19-04-004@comp.compilers> Injection-Info: gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="97882"; mail-complaints-to="abuse@iecc.com" Keywords: optimize Posted-Date: 19 Apr 2019 10:34:53 EDT X-submission-address: compilers@iecc.com X-moderator-address: compilers-request@iecc.com X-FAQ-and-archives: http://compilers.iecc.com Xref: csiph.com comp.compilers:2193 On 2019-04-17, R. C. Hodgin wrote: > Are there resources someone can point me to for learning more about > time-honored, long-established, safely applied, optimization > techniques for a C/C++ like language? Optimization only preserves the meaning of the program to the extent that the program has a defined meaning, as far as the compiler is concerned. Thus, there is one huge pitfall in optimizing C or C++: there is a large space of possible programs that have unspecified or undefined semantics, and that programmers actually write. If you can make your language "C/C++ like" without all the undefined behavior looming at every corner (i.e. not actually "C/C++ like" at all in a significant regard), then you've dodged what is probably the number one optimization pitfall. For instance, don't have it so that the order of evaluation of function or operator arguments is unspecified. If you allow side-effects in expressions, specify when those effects take place in relation to everything else in the expression. If you have clear ordering rules, then you honor them when optimizing: you rearrange the user's calculation order only when it can't possibly make a difference to the result that is required by the defined order. Reordering arithmetic calculations has pitfalls. There are n! orders for adding together n numbers. Under floating-point, these all potentially return different results even if nothing overflows. You can't blindly rely on arithmetic identities to hold.