| 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 | } |
+-----+