===================================================================
@@ -9422,7 +9422,13 @@
function Must_Inline (Subp : Entity_Id) return Boolean is
begin
- return Optimization_Level = 0
+ -- AAMP and VM targets have no support for inlining in the backend.
+ -- Hence we do as much inlining as possible in the front end.
+
+ return
+ (Optimization_Level = 0
+ or else AAMP_On_Target
+ or else VM_Target /= No_VM)
and then Has_Pragma_Inline (Subp)
and then (Has_Pragma_Inline_Always (Subp) or else Front_End_Inlining);
end Must_Inline;
===================================================================
@@ -3790,10 +3790,7 @@
Spec : constant Node_Id := Unit_Declaration_Node (Subp);
begin
- if Optimization_Level > 0 then
- Do_Inline (Subp, Orig_Subp);
-
- elsif Must_Inline (Subp) then
+ if Must_Inline (Subp) then
if In_Extended_Main_Code_Unit (Call_Node)
and then In_Same_Extended_Unit (Sloc (Spec), Loc)
and then not Has_Completion (Subp)
@@ -3805,6 +3802,9 @@
else
Do_Inline_Always (Subp, Orig_Subp);
end if;
+
+ elsif Optimization_Level > 0 then
+ Do_Inline (Subp, Orig_Subp);
end if;
-- The call may have been inlined or may have been passed to
===================================================================
@@ -4888,9 +4888,13 @@
Remove (Body_To_Analyze);
-- Keep separate checks needed when compiling without optimizations
+ -- AAMP and VM targets have no support for inlining in the backend
+ -- and hence we use frontend inlining at all optimization levels.
- if Optimization_Level = 0 then
-
+ if Optimization_Level = 0
+ or else AAMP_On_Target
+ or else VM_Target /= No_VM
+ then
-- Cannot inline functions whose body has a call that returns an
-- unconstrained type since the secondary stack is involved, and
-- it is not worth inlining.