comp.lang.ada
 help / color / mirror / Atom feed
From: "Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org>
Subject: Re: Performance of records with variant parts
Date: Wed, 24 Mar 2021 00:27:19 +0100	[thread overview]
Message-ID: <s3dtgn$r48$1@dont-email.me> (raw)
In-Reply-To: <b962cd83-c15a-4285-9754-48008e685c49n@googlegroups.com>

On 3/24/21 12:00 AM, John Perry wrote:
> 
> |              if denom <= 0.0 then
> |                 [constraint_error when
> |                   objects__thing_typeD3 (obj.kind)
> |                   "discriminant check failed"]
> |                 [constraint_error when
> |                   objects__thing_typeD3 (obj.kind)
> |                   "discriminant check failed"]
> |                 return (vectors__vector_dot (obj.norm, ray.start) +
> |                   obj.offset) / (-denom);
> 
> Am I right in thinking this is a bug? It shouldn't even check it, let alone check it twice.

It's not technically an error. Both Obj.Norm and Obj.Offset depend on a 
discriminant, so having two checks is technically OK. But eliminating the checks 
completely seems like a basic optimization that one would expect at -O3.

It's possible that this kind of optimization takes place later, and I guess the 
only way to check that would be to look at the assembler.

You could perhaps create a reproducer that demonstrates the timing difference 
and submit it to AdaCore.

-- 
Jeff Carter
"[I]f you ask, 'Why does Ada do/have this?',
the answer often makes you a better programmer."
Chad R. Meiners
177

  reply	other threads:[~2021-03-23 23:27 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-22 17:02 Performance of records with variant parts John Perry
2021-03-22 17:32 ` Jeffrey R. Carter
2021-03-22 17:49   ` John Perry
2021-03-22 17:54     ` John Perry
2021-03-22 19:31     ` Jeffrey R. Carter
2021-03-22 22:11       ` John Perry
2021-03-23  9:31         ` Jeffrey R. Carter
2021-03-23 14:27           ` Simon Wright
2021-03-23 23:00           ` John Perry
2021-03-23 23:27             ` Jeffrey R. Carter [this message]
2021-03-26 15:38               ` Stephen Leake
2021-03-26 15:44                 ` John Perry
2021-03-30  7:12                   ` Emmanuel Briot
2021-04-01  0:03                     ` John Perry
2021-04-01  6:45                       ` Emmanuel Briot
2021-04-01 13:38                       ` Niklas Holsti
2021-04-02 16:07                         ` John Perry
2021-03-22 17:39 ` Dmitry A. Kazakov
2021-03-22 17:45   ` John Perry
2021-03-22 18:07     ` Dmitry A. Kazakov
2021-03-22 18:23       ` John Perry
2021-03-22 20:30         ` Dmitry A. Kazakov
2021-03-22 18:59 ` Niklas Holsti
2021-03-22 21:54   ` John Perry
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox