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: Tue, 23 Mar 2021 10:31:01 +0100	[thread overview]
Message-ID: <s3ccgm$4j7$1@dont-email.me> (raw)
In-Reply-To: <302c2e86-2379-46e0-b1f7-d69e7e14f9cfn@googlegroups.com>

On 3/22/21 11:11 PM, John Perry wrote:
> 
> Current optimization is -O3 -funroll-loops -gnatn, but the behavior remains consistent.
> 
> |  function Object_Intersect( obj: in Thing_Type; ray: in Ray_Type )
> |                            return Long_Float
> |  is
> |  begin
> |     case obj.kind is
> |     when Sphere =>
> |        declare
> |           eo: Vector := obj.center - ray.start;
> |           v: Long_Float := eo * ray.dir;
> |        begin
> |           if v > 0.0 then
> |              declare
> |                 disc: Long_Float := obj.radius2 - ( eo * eo - v * v );
> |              begin
> |                 if disc > 0.0 then
> |                    return v - Sqrt(disc);
> |                 end if;
> |              end;
> |           end if;
> |        end;
> |     when Plane =>
> |        declare
> |           denom: Long_Float := obj.norm * ray.dir;
> |        begin
> |           if denom <= 0.0 then
> |              return ( obj.norm * ray.start + obj.offset ) / ( -denom );
> |           end if;
> |        end;
> |        when None =>
> |           return far_away;
> |     end case;
> |     return Far_Away;
> |  end Object_Intersect;

Interesting. With that optimization I would not expect this to differ noticeably 
from a record without discriminants.

I note that all your nested declarations could be declared constant.

Use of Long_Float is completely non-portable.

If you want to look into this further, IIRC, there is an option that will output 
a low-level, Ada-like description of the IR that the front end produces. You'll 
have to look in the top-secret GNAT documentation to find it.

-- 
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  9:31 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 [this message]
2021-03-23 14:27           ` Simon Wright
2021-03-23 23:00           ` John Perry
2021-03-23 23:27             ` Jeffrey R. Carter
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