so may be those new functions doesn't belong in the .h file Sun On Fri, Nov 30, 2012 at 10:18 AM, zhangliwei <lifelong830...@gmail.com> wrote: > Hi, Sun > You are right. > This function is a little complex , "inline" is not suitable. > > But all other functions in this file is inline, this function will looks > inconsistent. > Which method will be better? > > Thanks. > Liwei Zhang > > -----邮件原件----- > 发件人: Sun Chan [mailto:sun.c...@gmail.com] > 发送时间: 2012年11月30日 7:05 > 收件人: zhangliwei > 抄送: open64-devel@lists.sourceforge.net; rfshen > 主题: Re: [Open64-devel] Code review for bug1011[WOPT] > > are you sure you want to inline Find_derived_symbol? > Sun > > On Wed, Nov 28, 2012 at 11:17 AM, zhangliwei <lifelong830...@gmail.com> > wrote: >> Hi, >> >> Could someone review the patch for Bug1011? Thanks very much. >> >> >> >> This solution is that when the compiler improves the variable “a” > alignment >> from 1byte to 4byte, the derived variable “a.init” alignment also change >> from 1 to 4. >> >> >> >> This is the patch: >> >> 1 Index: be/com/wn_lower.cxx >> >> 2 =================================================================== >> >> 3 --- be/com/wn_lower.cxx (revision 4043) >> >> 4 +++ be/com/wn_lower.cxx (working copy) >> >> 5 @@ -9513,6 +9513,14 @@ >> >> 6 { >> >> 7 symType = Make_Pointer_Type(newType); >> >> 8 } >> >> 9 + ST *sym_init = Find_Derived_Symbol(ST_name(sym)); >> >> 10 + if(sym_init) >> >> 11 + { >> >> 12 + FmtAssert((ST_type(sym_init) == ST_type(sym) || >> ST_type(sym_init) == symType) , >> >> 13 + ("variable %s and its deriveed symble %s have different >> type.", >> >> 14 + ST_name(sym), ST_name(sym_init))); >> >> 15 + Set_ST_type(sym_init, symType); >> >> 16 + } >> >> 17 Set_ST_type(sym, symType); >> >> 18 >> >> 19 if (stAlign > align) >> >> 20 Index: kgccfe/wfe_decl.cxx >> >> 21 =================================================================== >> >> 22 --- kgccfe/wfe_decl.cxx (revision 4043) >> >> 23 +++ kgccfe/wfe_decl.cxx (working copy) >> >> 24 @@ -2257,15 +2257,7 @@ >> >> 25 WFE_Generate_Temp_For_Initialized_Aggregate (tree init, char * name) >> >> 26 { >> >> 27 TY_IDX ty_idx = Get_TY(TREE_TYPE(init)); >> >> 28 - ST *temp = New_ST (CURRENT_SYMTAB); >> >> 29 - ST_Init (temp, >> >> 30 -#ifdef TARG_NVISA >> >> 31 - Save_Str2 (name, "_init"), >> >> 32 -#else >> >> 33 - Save_Str2 (name, ".init"), >> >> 34 -#endif >> >> 35 - CLASS_VAR, SCLASS_PSTATIC, EXPORT_LOCAL, >> >> 36 - ty_idx ); >> >> 37 + ST *temp = Make_Derived_Symbol(name,ty_idx); >> >> 38 if (TREE_CODE(init) == CONSTRUCTOR >> >> 39 && ! Use_Static_Init_For_Aggregate (temp, init)) >> >> 40 { >> >> 41 Index: common/com/symtab.h >> >> 42 =================================================================== >> >> 43 --- common/com/symtab.h (revision 4043) >> >> 44 +++ common/com/symtab.h (working copy) >> >> 45 @@ -232,6 +232,33 @@ >> >> 46 && (ST_strong(s) != s); >> >> 47 } >> >> 48 >> >> 49 +inline ST * >> >> 50 +Make_Derived_Symbol(char * name, TY_IDX ty_idx){ >> >> 51 + ST *temp = New_ST(CURRENT_SYMTAB); >> >> 52 + ST_Init(temp, >> >> 53 + Save_Str2(name, ST_INIT_SUFFIX), >> >> 54 + CLASS_VAR, SCLASS_PSTATIC, EXPORT_LOCAL, >> >> 55 + ty_idx); >> >> 56 + return temp; >> >> 57 +} >> >> 58 + >> >> 59 +inline ST * >> >> 60 +Find_Derived_Symbol(char * name){ >> >> 61 + ST * sym_init = NULL; >> >> 62 + int i = 0; >> >> 63 + int len = strlen(name); >> >> 64 + FOREACH_SYMBOL(CURRENT_SYMTAB,sym_init,i) >> >> 65 + { >> >> 66 + char *p= ST_name(ST_st_idx(sym_init)); >> >> 67 + if(p && memcmp(p, name, len) == 0 && >> >> 68 + memcmp(p+len, ST_INIT_SUFFIX, ST_INIT_SUFFIX_LEN) == 0) >> >> 69 + { >> >> 70 + return sym_init; >> >> 71 + } >> >> 72 + } >> >> 73 + return NULL; >> >> 74 +} >> >> 75 + >> >> 76 >> //---------------------------------------------------------------------- >> >> 77 // INITO >> >> 78 >> //---------------------------------------------------------------------- >> >> 79 Index: common/com/symtab_defs.h >> >> 80 =================================================================== >> >> 81 --- common/com/symtab_defs.h (revision 4043) >> >> 82 +++ common/com/symtab_defs.h (working copy) >> >> 83 @@ -1127,5 +1127,11 @@ >> >> 84 typedef SYMTAB_HEADER_TABLE<GLOBAL_SYMTAB_TABLES> >> GLOBAL_SYMTAB_HEADER_TABLE; >> >> 85 typedef SYMTAB_HEADER_TABLE<LOCAL_SYMTAB_TABLES> >> LOCAL_SYMTAB_HEADER_TABLE; >> >> 86 >> >> 87 +#ifdef TARG_NVISA >> >> 88 +#define ST_INIT_SUFFIX "_init" >> >> 89 +#else >> >> 90 +#define ST_INIT_SUFFIX ".init" >> >> 91 +#endif >> >> 92 +#define ST_INIT_SUFFIX_LEN sizeof(ST_INIT_SUFFIX) >> >> 93 #endif /* symtab_defs_INCLUDED */ >> >> 94 >> >> 95 Index: wgen/wgen_decl.cxx >> >> 96 =================================================================== >> >> 97 --- wgen/wgen_decl.cxx (revision 4043) >> >> 98 +++ wgen/wgen_decl.cxx (working copy) >> >> 99 @@ -4452,11 +4452,7 @@ >> >> 100 WGEN_Generate_Temp_For_Initialized_Aggregate (gs_t init, char * name) >> >> 101 { >> >> 102 TY_IDX ty_idx = Get_TY(gs_tree_type(init)); >> >> 103 - ST *temp = New_ST (CURRENT_SYMTAB); >> >> 104 - ST_Init (temp, >> >> 105 - Save_Str2 (name, ".init"), >> >> 106 - CLASS_VAR, SCLASS_PSTATIC, EXPORT_LOCAL, >> >> 107 - ty_idx ); >> >> 108 + ST * temp = Make_Derived_Symbol(name,ty_idx); >> >> 109 AGGINIT agginit; >> >> 110 gs_code_t code = gs_tree_code(init); >> >> 111 if (code == GS_CONSTRUCTOR >> >> 112 @@ -4546,11 +4542,7 @@ >> >> 113 DevWarn ("Static initialize %s(%s)\n", >> >> 114 ST_name(target_st), >> Sclass_Name(ST_sclass(target_st))); >> >> 115 TY_IDX ty_idx = Get_TY(gs_tree_type(init)); >> >> 116 - ST *temp = New_ST (CURRENT_SYMTAB); >> >> 117 - ST_Init (temp, >> >> 118 - Save_Str2 (ST_name(target_st), ".init"), >> >> 119 - CLASS_VAR, SCLASS_PSTATIC, EXPORT_LOCAL, >> >> 120 - ty_idx ); >> >> 121 + ST *temp = Make_Derived_Symbol(ST_name(target_st),ty_idx); >> >> 122 // setup inito for target_st >> >> 123 Set_ST_is_initialized(temp); >> >> 124 agginit.Set_inito(New_INITO(temp)); >> >> 125 Index: kg++fe/wfe_decl.cxx >> >> 126 =================================================================== >> >> 127 --- kg++fe/wfe_decl.cxx (revision 4043) >> >> 128 +++ kg++fe/wfe_decl.cxx (working copy) >> >> 129 @@ -3113,11 +3113,7 @@ >> >> 130 WFE_Generate_Temp_For_Initialized_Aggregate (tree init, char * name) >> >> 131 { >> >> 132 TY_IDX ty_idx = Get_TY(TREE_TYPE(init)); >> >> 133 - ST *temp = New_ST (CURRENT_SYMTAB); >> >> 134 - ST_Init (temp, >> >> 135 - Save_Str2 (name, ".init"), >> >> 136 - CLASS_VAR, SCLASS_PSTATIC, EXPORT_LOCAL, >> >> 137 - ty_idx ); >> >> 138 + ST *temp = Make_Derived_Symbol(name,ty_idx); >> >> 139 if (TREE_CODE(init) == CONSTRUCTOR >> >> 140 && ! Use_Static_Init_For_Aggregate (temp, init)) >> >> 141 { >> >> 142 @@ -3172,11 +3168,7 @@ >> >> 143 DevWarn ("Static initialize %s(%s)\n", >> >> 144 ST_name(target_st), >> Sclass_Name(ST_sclass(target_st))); >> >> 145 TY_IDX ty_idx = Get_TY(TREE_TYPE(init)); >> >> 146 - ST *temp = New_ST (CURRENT_SYMTAB); >> >> 147 - ST_Init (temp, >> >> 148 - Save_Str2 (ST_name(target_st), ".init"), >> >> 149 - CLASS_VAR, SCLASS_PSTATIC, EXPORT_LOCAL, >> >> 150 - ty_idx ); >> >> 151 + ST *temp = Make_Derived_Symbol(name,ty_idx); >> >> 152 // setup inito for target_st >> >> 153 Set_ST_is_initialized(temp); >> >> 154 aggregate_inito = New_INITO (temp); >> >> >> >> Best wishes, >> >> Liwei Zhang >> >> >> > ---------------------------------------------------------------------------- > -- >> Keep yourself connected to Go Parallel: >> INSIGHTS What's next for parallel hardware, programming and related areas? >> Interviews and blogs by thought leaders keep you ahead of the curve. >> http://goparallel.sourceforge.net >> _______________________________________________ >> Open64-devel mailing list >> Open64-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/open64-devel >> >
------------------------------------------------------------------------------ Keep yourself connected to Go Parallel: TUNE You got it built. Now make it sing. Tune shows you how. http://goparallel.sourceforge.net _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel