summaryrefslogtreecommitdiff
path: root/src/vhdl/translate/trans-chap3.adb
diff options
context:
space:
mode:
authorTristan Gingold2014-11-17 06:26:42 +0100
committerTristan Gingold2014-11-17 06:26:42 +0100
commit0506aa8f9797a0b3eff751d564818cd65b7a57b5 (patch)
tree7d7e5938595d94826110d21e1f1668e19dcadfc3 /src/vhdl/translate/trans-chap3.adb
parent56ab294531f7c12ae9407df88ec12c448e695e5a (diff)
downloadghdl-0506aa8f9797a0b3eff751d564818cd65b7a57b5.tar.gz
ghdl-0506aa8f9797a0b3eff751d564818cd65b7a57b5.tar.bz2
ghdl-0506aa8f9797a0b3eff751d564818cd65b7a57b5.zip
Translate: rewrite concatenation. Now O(n).
Diffstat (limited to 'src/vhdl/translate/trans-chap3.adb')
-rw-r--r--src/vhdl/translate/trans-chap3.adb92
1 files changed, 0 insertions, 92 deletions
diff --git a/src/vhdl/translate/trans-chap3.adb b/src/vhdl/translate/trans-chap3.adb
index 7b0c7a4..bc0d9d2 100644
--- a/src/vhdl/translate/trans-chap3.adb
+++ b/src/vhdl/translate/trans-chap3.adb
@@ -682,95 +682,6 @@ package body Trans.Chap3 is
end if;
end Translate_Array_Type_Base;
- -- For unidimensional arrays: create a constant bounds whose length
- -- is 1, for concatenation with element.
- procedure Translate_Static_Unidimensional_Array_Length_One
- (Def : Iir_Array_Type_Definition)
- is
- Indexes : constant Iir_List := Get_Index_Subtype_List (Def);
- Index_Type : Iir;
- Index_Base_Type : Iir;
- Constr : O_Record_Aggr_List;
- Constr1 : O_Record_Aggr_List;
- Arr_Info : Type_Info_Acc;
- Tinfo : Type_Info_Acc;
- Irange : Iir;
- Res1 : O_Cnode;
- Res : O_Cnode;
- begin
- if Get_Nbr_Elements (Indexes) /= 1 then
- -- Not a one-dimensional array.
- return;
- end if;
- Index_Type := Get_Index_Type (Indexes, 0);
- Arr_Info := Get_Info (Def);
- if Get_Type_Staticness (Index_Type) = Locally then
- if Global_Storage /= O_Storage_External then
- Index_Base_Type := Get_Base_Type (Index_Type);
- Tinfo := Get_Info (Index_Base_Type);
- Irange := Get_Range_Constraint (Index_Type);
- Start_Record_Aggr (Constr, Arr_Info.T.Bounds_Type);
- Start_Record_Aggr (Constr1, Tinfo.T.Range_Type);
- New_Record_Aggr_El
- (Constr1,
- Chap7.Translate_Static_Range_Left (Irange, Index_Base_Type));
- New_Record_Aggr_El
- (Constr1,
- Chap7.Translate_Static_Range_Left (Irange, Index_Base_Type));
- New_Record_Aggr_El
- (Constr1, Chap7.Translate_Static_Range_Dir (Irange));
- New_Record_Aggr_El
- (Constr1, Ghdl_Index_1);
- Finish_Record_Aggr (Constr1, Res1);
- New_Record_Aggr_El (Constr, Res1);
- Finish_Record_Aggr (Constr, Res);
- else
- Res := O_Cnode_Null;
- end if;
- Arr_Info.T.Array_1bound := Create_Global_Const
- (Create_Identifier ("BR1"),
- Arr_Info.T.Bounds_Type, Global_Storage, Res);
- else
- Arr_Info.T.Array_1bound := Create_Var
- (Create_Var_Identifier ("BR1"),
- Arr_Info.T.Bounds_Type, Global_Storage);
- end if;
- end Translate_Static_Unidimensional_Array_Length_One;
-
- procedure Translate_Dynamic_Unidimensional_Array_Length_One
- (Def : Iir_Array_Type_Definition)
- is
- Indexes : constant Iir_List := Get_Index_Subtype_List (Def);
- Index_Type : Iir;
- Arr_Info : Type_Info_Acc;
- Bound1, Rng : Mnode;
- begin
- if Get_Nbr_Elements (Indexes) /= 1 then
- return;
- end if;
- Index_Type := Get_Index_Type (Indexes, 0);
- if Get_Type_Staticness (Index_Type) = Locally then
- return;
- end if;
- Arr_Info := Get_Info (Def);
- Open_Temp;
- Bound1 := Varv2M (Arr_Info.T.Array_1bound, Arr_Info, Mode_Value,
- Arr_Info.T.Bounds_Type, Arr_Info.T.Bounds_Ptr_Type);
- Bound1 := Bounds_To_Range (Bound1, Def, 1);
- Stabilize (Bound1);
- Rng := Type_To_Range (Index_Type);
- Stabilize (Rng);
- New_Assign_Stmt (M2Lv (Range_To_Dir (Bound1)),
- M2E (Range_To_Dir (Rng)));
- New_Assign_Stmt (M2Lv (Range_To_Left (Bound1)),
- M2E (Range_To_Left (Rng)));
- New_Assign_Stmt (M2Lv (Range_To_Right (Bound1)),
- M2E (Range_To_Left (Rng)));
- New_Assign_Stmt (M2Lv (Range_To_Length (Bound1)),
- New_Lit (Ghdl_Index_1));
- Close_Temp;
- end Translate_Dynamic_Unidimensional_Array_Length_One;
-
procedure Translate_Array_Type_Definition
(Def : Iir_Array_Type_Definition)
is
@@ -795,8 +706,6 @@ package body Trans.Chap3 is
end if;
Finish_Type_Definition (Info, Completion);
- Translate_Static_Unidimensional_Array_Length_One (Def);
-
El_Tinfo := Get_Info (Get_Element_Subtype (Def));
if Is_Complex_Type (El_Tinfo) then
-- This is a complex type.
@@ -1761,7 +1670,6 @@ package body Trans.Chap3 is
end if;
end loop;
end;
- Translate_Dynamic_Unidimensional_Array_Length_One (Def);
return;
when Iir_Kind_Access_Type_Definition
| Iir_Kind_Access_Subtype_Definition