abc プロジェクト
14.8.4. ChackRefDoValF メンバ関数説明

メンバ関数名 ChackRefDoValF
定義ファイル名TuneRegion.cpp
定義行 894
所属名 TTuneRegion
アクセス属性 public
宣言形式 void ChackRefDoValF ( int sPos , int ePos )
概要 各変数がDo変数からの依存かどうかをチェックする。
ValData->RefDoValがセットされる。
Do依存の変数は、UnRollの数だけ、別変数に置き換えられる。

DO i = 1,100 で da = b(i); の場合は、 daは、Do変数依存
a(i) = b(i) の場合は、 aに(Do変数 i)があるために依存でない。
da = b(i) で daがDo変数依存の場合に dc = 2*da での dcは、Do依存
da = b(i) で da = da + c(i) は、 daは Do依存だが、元々Do依存
戻り値
パラメタ説明 sPos 開始位置
ePos 終了位置
機能説明
備考

呼出し元関数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::MakeUnrollData TuneRegion.cpp 577

参照メンバ変数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::TokenList TuneRegion.h 120

参照先一覧表
名称 種別 定義ファイル名 定義行
1 Enum_RefType 列挙型 pass1.h 192
2 TToken クラス pass1.h 216
3 TValData クラス pass2.h 42

関数論理チャート

        |  +------------------------------------------------------+ 
   894  +--+ void TTuneRegion::ChackRefDoValF(int sPos,int ePos)  | 
   895     | {                                                    | 
           +--+---------------------------------------------------+ 
   896        +--- int i,j;
   897        +--- TToken *Token;
   898        +--- TValData *ValData,*ValData2;
   899        +--- DWORD RefDoValBits;
   900        +--- DWORD RefDoValBitsInArray;
   901        +--- Enum_RefType SetValTokenRefType;
   902        |    
              |  +----------------------------------+ 
   903        +--+ for(i = sPos ; i <= ePos ; i++){ | 
              |  +--+-------------------------------+ 
   904        |     +--- Token = (TToken *)TokenList->Items[i];
              |     |  +------------------------------+ 
   905        |     +--+ if(Token->ValData != NULL){  | 
              |     |  +--+---------------------------+ 
   906        |     |     +--- ValData = (TValData *)Token->ValData;
   907        |     |     +--- //          if(Token->RefType != vrf_set){
   908        |     |     +--- SetValTokenRefType = Token->RefType;
              |     |     |  +------------------------------------------------------------------+ 
   909        |     |     +--+ if((Token->RefType != vrf_set)&&(Token->RefType != vrf_refset)){ | 
              |     |     |  +--+---------------------------------------------------------------+ 
              |     |     |     |  +------------+ 
   910        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
   911        |     |     |   |  }  | 
              |     |     |   +-----+ 
   912        |     |     +--- RefDoValBits = 0;
   913        |     |     +--- RefDoValBitsInArray = 0;
   914        |     |     +--- //
   915        |     |     |    // 変数への代入が発生、参照変数を調べる。  
   916        |     |     |    //                                         
   917        |     |     +--- i++; // Skip ValToken
   918        |     |     +--- //
   919        |     |     |    // 配列への代入の場合は、添え字に、Do依存変数がないかを調べる。  
   920        |     |     |    // もし、Do依存変数があれば、それでOKとなる。                  
   921        |     |     |    //                                                               
              |     |     |  +--------------------------+ 
   922        |     |     +--+ for( ; i < ePos ; i++){  | 
              |     |     |  +--+-----------------------+ 
   923        |     |     |     +--- Token = (TToken *)TokenList->Items[i];
              |     |     |     |  +----------------------------------------------------------------+ 
   924        |     |     |     +--+ if((Token->TokId == tid_Set)||(Token->TokId == tid_LineEnd)){  | 
              |     |     |     |  +--+-------------------------------------------------------------+ 
              |     |     |     |     |  +--------+ 
   925        |     |     |     |     +--+ break; | 
              |     |     |     |     |  +--------+ 
              |     |     |     |   +-+---+ 
   926        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +------------------------------+ 
   927        |     |     |     +--+ if(Token->ValData != NULL){  | 
              |     |     |     |  +--+---------------------------+ 
   928        |     |     |     |     +--- ValData2 = (TValData *)Token->ValData;
   929        |     |     |     |     +--- //                  RefDoValBits |= ValData2->RefDoValBits;
   930        |     |     |     |     +--- RefDoValBitsInArray |= ValData2->RefDoValBits;
              |     |     |     |   +-+---+ 
   931        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
   932        |     |     |   |  }  | 
              |     |     |   +-----+ 
   933        |     |     +--- //
   934        |     |     |    // 行末まで、調べて参照変数にDO依存があるかをチェックする、  
   935        |     |     |    //                                                           
              |     |     |  +--------------------------+ 
   936        |     |     +--+ for( ; i < ePos ; i++){  | 
              |     |     |  +--+-----------------------+ 
   937        |     |     |     +--- Token = (TToken *)TokenList->Items[i];
              |     |     |     |  +----------------------------------+ 
   938        |     |     |     +--+ if(Token->TokId == tid_LineEnd){ | 
              |     |     |     |  +--+-------------------------------+ 
              |     |     |     |     |  +--------+ 
   939        |     |     |     |     +--+ break; | 
              |     |     |     |     |  +--------+ 
              |     |     |     |   +-+---+ 
   940        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +------------------------------+ 
   941        |     |     |     +--+ if(Token->ValData != NULL){  | 
              |     |     |     |  +--+---------------------------+ 
   942        |     |     |     |     +--- ValData2 = (TValData *)Token->ValData;
   943        |     |     |     |     +--- RefDoValBits |= ValData2->RefDoValBits;
              |     |     |     |   +-+---+ 
   944        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
   945        |     |     |   |  }  | 
              |     |     |   +-----+ 
   946        |     |     +--- //
   947        |     |     |    // Do依存の結果を ValDataにセット  
   948        |     |     |    //                                 
   949        |     |     +--- RefDoValBits &= ~RefDoValBitsInArray;
   950        |     |     +--- #if 1
   951        |     |     +--- //
   952        |     |     |    //  参照&設定のトークン (Exp. S = S + A(I) )の場合は、            
   953        |     |     |    //  ePosまでの間の後の式で参照があるかをチェックする。             
   954        |     |     |    //  参照があれば、RefTypeを vrf_setとして扱い、UnRoll対象とする。  
   955        |     |     |    //      Add 2009/02/24                                             
   956        |     |     |    //                                                                 
              |     |     |  +--------------------------------------------------------------+ 
   957        |     |     +--+ if((RefDoValBits != 0)&&(SetValTokenRefType == vrf_refset)){ | 
              |     |     |  +--+-----------------------------------------------------------+ 
              |     |     |     |  +--------------------------+ 
   958        |     |     |     +--+ for( ; i < ePos ; i++){  | 
              |     |     |     |  +--+-----------------------+ 
   959        |     |     |     |     +--- Token = (TToken *)TokenList->Items[i];
              |     |     |     |     |  +----------------------------------------------------------------+ 
   960        |     |     |     |     +--+ if((Token->ValData == ValData)&&(Token->RefType == vrf_ref)){  | 
              |     |     |     |     |  +--+-------------------------------------------------------------+ 
              |     |     |     |     |     |  +--------+ 
   961        |     |     |     |     |     +--+ break; | 
              |     |     |     |     |     |  +--------+ 
              |     |     |     |     |   +-+---+ 
   962        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
   963        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +----------------+ 
   964        |     |     |     +--+ if(i == ePos){ | 
              |     |     |     |  +--+-------------+ 
   965        |     |     |     |     +--- // vrf_refset後の式での参照がなかったので対象外とする。
   966        |     |     |     |     |    // S = S + A(i) でのみ使用として解釈した。               
              |     |     |     |     |  +------------+ 
   967        |     |     |     |     +--+ continue;  | 
              |     |     |     |     |  +------------+ 
              |     |     |     |   +-+---+ 
   968        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
   969        |     |     |   |  }  | 
              |     |     |   +-----+ 
   970        |     |     +--- #endif
   971        |     |     +--- ValData->RefDoValBits |= RefDoValBits;
              |     |   +-+---+ 
   972        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   973        |   |  }  | 
              |   +-----+ 
            +-+---+ 
   974      |  }  | 
            +-----+