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