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