From f0c57fcd0a50c9f96ee108c9299eed22e639f354 Mon Sep 17 00:00:00 2001 From: Ghjuvan Lacambre Date: Tue, 25 Aug 2020 12:16:24 +0200 Subject: [PATCH] [Ada] CUDA: discover runtime types instead of hard-coding gcc/ada/ * exp_prag.adb (Get_Launch_Kernel_Arg_Type): New function. (Build_Shared_Memory_Declaration): Use Get_Launch_Kernel_Arg_Type. (Build_Stream_Declaration): Use Get_Launch_Kernel_Arg_Type. * rtsfind.ads: Remove RO_IC_Unsigned_Long_Long. --- gcc/ada/exp_prag.adb | 23 +++++++++++++++++++++-- gcc/ada/rtsfind.ads | 2 -- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/gcc/ada/exp_prag.adb b/gcc/ada/exp_prag.adb index d3c63f457a0..1367884cef6 100644 --- a/gcc/ada/exp_prag.adb +++ b/gcc/ada/exp_prag.adb @@ -748,6 +748,10 @@ package body Exp_Prag is -- type of which is Integer, the value of which is Init_Val if present -- and 0 otherwise. + function Get_Launch_Kernel_Arg_Type (N : Positive) return Entity_Id; + -- Returns the type of the Nth argument of the Launch_Kernel CUDA + -- runtime function. + function To_Addresses (Elmts : Elist_Id) return List_Id; -- Returns a new list containing each element of Elmts wrapped in an -- 'address attribute reference. When passed No_Elist, returns an empty @@ -910,7 +914,7 @@ package body Exp_Prag is (Decl_Id => Decl_Id, Init_Val => Init_Val, Typ => - New_Occurrence_Of (RTE (RO_IC_Unsigned_Long_Long), Loc), + New_Occurrence_Of (Get_Launch_Kernel_Arg_Type (5), Loc), Default_Val => Make_Integer_Literal (Loc, 0)); end Build_Shared_Memory_Declaration; @@ -948,10 +952,25 @@ package body Exp_Prag is return Build_Simple_Declaration_With_Default (Decl_Id => Decl_Id, Init_Val => Init_Val, - Typ => New_Occurrence_Of (RTE (RE_Stream_T), Loc), + Typ => + New_Occurrence_Of (Get_Launch_Kernel_Arg_Type (6), Loc), Default_Val => Make_Null (Loc)); end Build_Stream_Declaration; + -------------------------------- + -- Get_Launch_Kernel_Arg_Type -- + -------------------------------- + + function Get_Launch_Kernel_Arg_Type (N : Positive) return Entity_Id is + Argument : Entity_Id := First_Entity (RTE (RE_Launch_Kernel)); + begin + for J in 2 .. N loop + Argument := Next_Entity (Argument); + end loop; + + return Etype (Argument); + end Get_Launch_Kernel_Arg_Type; + ------------------ -- To_Addresses -- ------------------ diff --git a/gcc/ada/rtsfind.ads b/gcc/ada/rtsfind.ads index 01f33a0e246..cbcf52bdc8e 100644 --- a/gcc/ada/rtsfind.ads +++ b/gcc/ada/rtsfind.ads @@ -731,7 +731,6 @@ package Rtsfind is RE_Unsigned_128, -- Interfaces RO_IC_Unsigned, -- Interfaces.C - RO_IC_Unsigned_Long_Long, -- Interfaces.C RE_Chars_Ptr, -- Interfaces.C.Strings RE_New_Char_Array, -- Interfaces.C.Strings @@ -2380,7 +2379,6 @@ package Rtsfind is RE_Unsigned_128 => Interfaces, RO_IC_Unsigned => Interfaces_C, - RO_IC_Unsigned_Long_Long => Interfaces_C, RE_Chars_Ptr => Interfaces_C_Strings, RE_New_Char_Array => Interfaces_C_Strings,