欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

程序處理裝置的制作方法

文檔序號:6649410閱讀:172來源:國知局
專利名稱:程序處理裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及對用C語言等高級語言描述的源程序的邏輯矛盾進(jìn)行檢驗(yàn)的程序處理裝置,特別是涉及檢驗(yàn)向?qū)⒃闯绦蜃儞Q成機(jī)器語言程序的編譯器提供的啟發(fā)信息之邏輯矛盾的程序處理裝置。
背景技術(shù)
近年,隨著媒體處理應(yīng)用程序的增大化、多樣化,開發(fā)工數(shù)增大,在媒體技術(shù)領(lǐng)域也越來越需要利用高級語言的應(yīng)用程序開發(fā)。因此,進(jìn)行了利用高級語言實(shí)現(xiàn)媒體處理應(yīng)用程序開發(fā)的嘗試。此時,用戶期待即使利用高級語言的開發(fā)也能夠進(jìn)行更精確的調(diào)諧。因此,需要具體控制編譯器進(jìn)行的最佳化策略。
該最佳化策略的控制方法大致分為2個。
作為其中一控制方法,可以舉出對編譯器直接進(jìn)行有關(guān)某一最佳化的指示的控制方法。作為另一控制方法,可以舉出通過對編譯器示出整個程序的靜態(tài)信息,支持編譯器的最佳化的控制方法。
另外,作為用于具體實(shí)現(xiàn)上述2個控制方法的方法之一,可以舉出利用編譯指示(pragma)對編譯器進(jìn)行指示?!熬幾g指示”是指依賴于語言處理系統(tǒng)的描述,對編譯器提供某些信息。
下面示出編譯指示的例子。圖1是表示包含直接進(jìn)行與最佳化有關(guān)的指示的編譯指示的源程序一個例子的圖。[#pragma_software_pipelining]是指示利用軟件流水線技術(shù)對之后馬上描述的循環(huán)處理進(jìn)行最佳化的編譯指示,是用戶描述的。編譯器是基于該編譯指示的指示,利用軟件流水線技術(shù)對該循環(huán)處理實(shí)施最佳化。軟件流水線技術(shù)是同時執(zhí)行幾個不同的重復(fù)(iteration,重復(fù)處理)的技術(shù)。
圖2是表示包含對編譯器示出整個程序的靜態(tài)信息的源程序一個例子的圖。[#pragma_min_iteration=5]是用戶保證對之后馬上描述的循環(huán)處理至少執(zhí)行5次循環(huán)的編譯指示。編譯器基于該編譯指示例如判斷是否可以基于該軟件流水線技術(shù)進(jìn)行最佳化,如果可以,則進(jìn)行那樣的最佳化。
對于這樣的編譯指示,在日本特開2004-38597號公報中也有具體說明。
但是,上述2個控制方法中,用戶描述編譯指示時必須與實(shí)際程序在邏輯上不產(chǎn)生矛盾。因此,必須自己分析程序中的多個模塊,并在程序中描述編譯指示,但由于模塊的調(diào)用關(guān)系復(fù)雜性,用戶有可能將矛盾的編譯指示附加到程序中。在這樣的情況下,編譯器基于錯誤編譯指示的指示,進(jìn)行中間代碼的最佳化等。因此,存在編譯器生成錯誤的機(jī)器語言程序的問題。
另外,為了避免生成錯誤的機(jī)器語言程序,用戶只能附加自己可以解析的范圍內(nèi)的消極的編譯指示,不能進(jìn)行良好的最佳化。

發(fā)明內(nèi)容
本發(fā)明是為了解決上述問題而提出的,第一目的在于提供一種程序處理裝置,其可以對編譯指示代表的提示信息進(jìn)行檢驗(yàn),以便使編譯器不會生成錯誤的機(jī)器語言程序。
另外,第二目的在于提供一種程序處理裝置,其可以對提示信息進(jìn)行檢驗(yàn),以便即使用戶對編譯器積極提供編譯指示代表的提示信息,也能進(jìn)行良好的最佳化。
為了達(dá)成上述目的,本發(fā)明的程序處理裝置是作為輸入接受包含用戶提供給編譯器的提示信息的程序,檢驗(yàn)包含上述提示信息的程序中的上述提示信息的邏輯匹配性。最好是,上述程序處理裝置具有語法解析單元,解析包含用戶對編譯器提供的提示信息的程序的語法,生成解析信息;和檢驗(yàn)單元,基于上述解析信息,檢驗(yàn)包含上述提示信息的程序中的上述提示信息的邏輯匹配性。
通過基于解析信息來檢驗(yàn)提示信息的邏輯匹配性,可以檢驗(yàn)編譯指示所代表的提示信息,以便編譯器不會生成錯誤的機(jī)器語言程序。另外,為了即使用戶積極向編譯器提供編譯指示所代表的提示信息也能進(jìn)行良好的最佳化,可以對提示信息進(jìn)行檢驗(yàn)。另外,這樣的提示信息包含2個,即一個是編譯器直接進(jìn)行有關(guān)某個最佳化的指示的提示信息,另一個是通過對編譯器示出整個程序的靜態(tài)信息而支持利用編譯器的最佳化的提示信息。
最好是,上述提示信息是可通過程序的靜態(tài)解析得到的靜態(tài)信息,上述語法解析單元對包含上述提示信息的程序語法進(jìn)行靜態(tài)解析,生成上述解析信息。也可以是上述提示信息是有關(guān)循環(huán)處理的重復(fù)次數(shù)的信息,上述語法解析單元解析包含上述提示信息的程序中所包含的循環(huán)處理的重復(fù)次數(shù),生成包含該重復(fù)次數(shù)的上述解析信息。例如,上述提示信息是指定循環(huán)處理的循環(huán)進(jìn)行規(guī)定次數(shù)以上的信息,上述檢驗(yàn)單元基于上述解析信息檢驗(yàn)與上述提示信息對應(yīng)的循環(huán)處理的循環(huán)是否進(jìn)行上述規(guī)定次數(shù)以上。
可以檢驗(yàn)與循環(huán)處理的重復(fù)次數(shù)有關(guān)的提示信息在邏輯上是否矛盾。
更好是,上述提示信息是與數(shù)據(jù)的設(shè)置位置有關(guān)的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的數(shù)據(jù)的設(shè)置位置,生成包含該數(shù)據(jù)的設(shè)置位置的上述解析信息。例如,上述提示信息是指定數(shù)據(jù)和、該數(shù)據(jù)以規(guī)定值調(diào)整的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的數(shù)據(jù)的調(diào)整值,生成含有解析結(jié)果的上述解析信息,上述檢驗(yàn)單元基于上述解析信息,檢驗(yàn)上述提示信息指定的數(shù)據(jù)的調(diào)整值是否與上述提示信息指定的上述規(guī)定值一致。
可以檢驗(yàn)與數(shù)據(jù)設(shè)置有關(guān)的提示信息在邏輯上是否矛盾。
更好是,上述提示信息是與指針變量訪問的區(qū)域有關(guān)的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的指針變量訪問的區(qū)域,生成包含解析結(jié)果的上述解析信息。上述提示信息是指定指針變量和、該指針變量訪問的區(qū)域沒有與其他指針變量訪問的區(qū)域重復(fù)的區(qū)域的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的指針變量訪問的區(qū)域與其他指針變量訪問的區(qū)域之間是否存在重復(fù)區(qū)域,生成含有解析結(jié)果的上述解析信息,上述檢驗(yàn)單元基于上述解析信息,檢驗(yàn)上述提示信息指定的指針變量與其他指針變量訪問的區(qū)域之間是否存在重復(fù)區(qū)域。例如,上述程序是用遵循ISO/IEC98991999-Programming Language C的語言描述的,上述提示信息是上述指針變量和restrict描述的組合。
可以檢驗(yàn)有關(guān)指針變量的提示信息在邏輯上是否矛盾。
更好是,上述提示信息是與從變量讀出數(shù)據(jù)和向變量寫入數(shù)據(jù)有關(guān)的信息,上述語法解析單元解析從含有上述提示信息的程序中所包含的變量讀出數(shù)據(jù)或者向該變量寫入數(shù)據(jù),生成包含解析結(jié)果的上述解析信息。例如,上述提示信息指定變量和、在描述該提示信息的位置之后對該變量的訪問是從數(shù)據(jù)寫入開始的信息,上述檢驗(yàn)單元基于上述解析信息,檢驗(yàn)上述提示信息指定的變量在描述該提示信息的位置之后對該變量的訪問是否從寫入數(shù)據(jù)開始。
可以檢驗(yàn)與從變量讀出數(shù)據(jù)或者對變量寫入數(shù)據(jù)有關(guān)的提示信息在邏輯上是否矛盾。
更好是,上述提示信息是與分支條件的成立頻度有關(guān)的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的分支條件的靜態(tài)成立頻度,生成包含解析結(jié)果的上述解析信息。例如,上述提示信息是表示分支條件成立的可能性大的信息,上述檢驗(yàn)單元基于上述語法解析單元,檢驗(yàn)與上述提示信息對應(yīng)的分支條件成立的可能性是否大。
可以檢驗(yàn)與分支條件的成立頻度有關(guān)的提示信息在邏輯上是否矛盾。
更好是,上述提示信息是指示利用編譯器的程序的最佳化處理方法的信息,上述檢驗(yàn)單元基于上述解析信息,檢驗(yàn)上述提示信息指示的上述最佳化處理方法能否實(shí)現(xiàn)。另外,上述提示信息是指示循環(huán)展開的循環(huán)處理最佳化的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的循環(huán)處理的重復(fù)次數(shù),生成包含該重復(fù)次數(shù)的解析信息,上述檢驗(yàn)單元基于上述解析信息,對與上述提示信息對應(yīng)的循環(huán)處理檢驗(yàn)?zāi)芊襁M(jìn)行利用循環(huán)展開的最佳化。
可以檢驗(yàn)將循環(huán)展開的最佳化直接指示給編譯器的提示信息在邏輯上是否矛盾。
更好是,上述提示信息是指示軟件流水線技術(shù)的循環(huán)處理最佳化的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的循環(huán)處理的重復(fù)次數(shù),生成包含該重復(fù)次數(shù)的解析信息,上述檢驗(yàn)單元基于上述解析信息,判斷對與上述提示信息對應(yīng)的循環(huán)處理可否進(jìn)行利用軟件流水線技術(shù)的最佳化。
可以檢驗(yàn)將軟件流水線技術(shù)的最佳化直接指示給編譯器的提示信息在邏輯上是否矛盾。
更好是,上述提示信息是指示多個數(shù)據(jù)和、對該多個數(shù)據(jù)生成配對命令的數(shù)據(jù)訪問最佳化的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的數(shù)據(jù)的調(diào)整值,生成包含解析結(jié)果的上述解析信息,上述檢驗(yàn)單元具有條件判斷部和配對命令生成可否判斷部,條件判斷部是基于上述解析單元,判斷上述提示信息指定的上述多個數(shù)據(jù)的調(diào)整值是否滿足上述多個數(shù)據(jù)類型大小的2倍以上的條件,上述配對命令生成可否判斷部是在滿足上述條件時,對上述提示信息指定的上述多個數(shù)據(jù)判斷可以進(jìn)行利用生成配對命令的數(shù)據(jù)訪問的最佳化。
可以檢驗(yàn)將配對命令的輸出直接指示給編譯器的提示信息在邏輯上是否矛盾。
更好是,上述提示信息是指示變量和、緩沖存儲器的控制處理的最佳化的信息。
可以檢驗(yàn)指示緩沖存儲器等的控制處理的內(nèi)部函數(shù)的提示信息在邏輯上是否矛盾。
本發(fā)明的另一方面的程序處理裝置是檢驗(yàn)程序中的、對編譯器提供的提示信息的邏輯匹配性的程序處理裝置,具有檢驗(yàn)單元,將包含用戶提供給編譯器的提示信息的程序和、作為包含上述提示信息的程序的語法解析結(jié)果的解析信息作為輸入,基于上述解析信息,檢驗(yàn)含有上述提示信息的程序中的上述提示信息的邏輯匹配性。
通過基于從外部輸入的解析信息而檢驗(yàn)提示信息的邏輯匹配性,可以檢驗(yàn)編譯指示代表的提示信息,以便編譯器不會生成錯誤的機(jī)器語言程序。另外,為了即使用戶積極向編譯器提供編譯指示代表的提示信息也能進(jìn)行最佳化,可以對提示信息進(jìn)行檢驗(yàn)。另外,在這樣的提示信息包含對編譯器直接進(jìn)行與某個最佳化有關(guān)的指示的提示信息、和通過對編譯器示出整個程序的靜態(tài)信息而支持利用編譯器的最佳化的提示信息。
另外,本發(fā)明不僅僅可以作為具有這樣的特征單元的程序處理裝置實(shí)現(xiàn),還可以作為將程序處理裝置具有的特征單元作為步驟的程序處理方法實(shí)現(xiàn)。另外,作為程序處理裝置具有的特征單元還可以作為使計(jì)算機(jī)工作的程序?qū)崿F(xiàn)。另外,這樣的程序當(dāng)然可以經(jīng)Compact Disc-ReadOnly Memory(CD-ROM)等記錄媒體和因特網(wǎng)等通信網(wǎng)絡(luò)流通。
根據(jù)本發(fā)明,可以提供一種為了使編譯器不會生成錯誤的機(jī)器語言程序而能檢驗(yàn)編譯指示代表的提示信息的程序處理裝置。
另外,可以提供一種為了即使用戶向編譯器積極提供編譯指示代表的提示信息也能進(jìn)行良好的最佳化而檢驗(yàn)提示信息的程序處理裝置。


通過根據(jù)附圖對實(shí)施例的說明,可以更清楚本發(fā)明的其他優(yōu)點(diǎn)和特征。
圖1是表示包含直接進(jìn)行與最佳化有關(guān)的指示的編譯指示的源程序一個例子的圖。
圖2是表示包含對編譯器示出整個程序的靜態(tài)信息的編譯指示的源程序一個例子的圖。
圖3是表示程序處理裝置的結(jié)構(gòu)的功能框圖。
圖4A是表示包含有關(guān)重復(fù)次數(shù)的提示信息,并且包含函數(shù)func1的程序一個例子的圖。
圖4B是表示包含main函數(shù)、函數(shù)func2以及函數(shù)func3的程序的一例的圖。
圖5是語法解析部執(zhí)行的處理的流程圖。
圖6是表示調(diào)用流程圖表的一例的圖。
圖7是表示解析信息的一例的圖。
圖8是錯誤檢驗(yàn)部執(zhí)行的處理的流程圖。
圖9是表示檢驗(yàn)結(jié)果的一例的圖。
圖10A是包含有關(guān)指針變量的提示信息,并且包含函數(shù)func1、函數(shù)func2以及函數(shù)func3的程序的一例的圖。
圖10B是表示包含main函數(shù)的程序的一例的圖。
圖11是表示基于圖10A和圖10B所示的程序、由語法解析部生成的調(diào)用流程圖表的一例的圖。
圖12是表示語法解析部生成的解析信息的一例的圖。
圖13是錯誤檢驗(yàn)部執(zhí)行的處理的流程圖。
圖14是表示檢驗(yàn)結(jié)果的一例的圖。
圖15是表示包含與變量的讀寫有關(guān)的提示信息的程序的一例的圖。
圖16是表示基于圖15所示的程序,由語法解析部生成的調(diào)用流程圖表的一例的圖。
圖17是表示語法解析部生成的解析信息的一例的圖。
圖18是錯誤檢驗(yàn)部執(zhí)行的處理的流程圖。
圖19是表示檢驗(yàn)結(jié)果的一例的圖。
圖20是表示包含與靜態(tài)頻度有關(guān)的提示信息的程序的一例的圖。
圖21是表示基于圖20所示的程序,由語法解析部生成的調(diào)用流程圖表的一例的圖。
圖22是表示語法解析部生成的解析信息的一例的圖。
圖23是錯誤檢驗(yàn)部執(zhí)行的處理的流程圖。
圖24是表示檢驗(yàn)結(jié)果的一例的圖。
圖25是表示包含與循環(huán)展開有關(guān)的提示信息的程序的一例的圖。
圖26是表示圖5的S202的處理結(jié)果生成的調(diào)用流程圖表的圖。
圖27是表示圖5的S203和S204的處理結(jié)果生成的解析信息的圖。
圖28是錯誤檢驗(yàn)部執(zhí)行的處理的流程圖。
圖29是表示包含關(guān)于軟件流水線技術(shù)的提示信息的程序的一例的圖。
圖30是表示圖5的S202的處理結(jié)果生成的調(diào)用流程圖表的圖。
圖31是表示圖5的S203和S204的處理結(jié)果生成的解析信息的圖。
圖32是錯誤檢驗(yàn)部執(zhí)行的處理的流程圖。
圖33是表示包含有關(guān)配對命令的提示信息的程序的一例的圖。
圖34是表示圖5的S202的處理結(jié)果生成的調(diào)用流程圖表的圖。
圖35是表示圖5的S203和S204的處理結(jié)果生成的解析信息的圖。
圖36是錯誤檢驗(yàn)部執(zhí)行的處理的流程圖。
圖37是表示包含由指示緩沖存儲器等的控制處理的內(nèi)部函數(shù)生成的提示信息的程序的一例的圖。
圖38是表示圖5的S202的處理結(jié)果生成的調(diào)用流程圖表的圖。
圖39是表示圖5的S203和S204的處理結(jié)果生成的解析信息的圖。
圖40是錯誤檢驗(yàn)部執(zhí)行的處理的流程圖。
圖41是表示檢驗(yàn)結(jié)果的一例的圖。
圖42是表示程序的一例的圖。
圖43是表示示出提示信息的錯誤信息的檢驗(yàn)結(jié)果一個例子的圖。
圖44是表示包含糾正信息的檢驗(yàn)結(jié)果的一例的圖。
圖45是表示程序的一例的圖。
圖46是表示包含糾正信息的檢驗(yàn)結(jié)果一個例子的圖。
圖47是表示包含取決于編譯選項(xiàng)的糾正信息的檢驗(yàn)結(jié)果一個例子的圖。
圖48是表示程序的一例的圖。
圖49是表示包含不能判斷編譯指示是否有錯的不確定信息的檢驗(yàn)結(jié)果一個例子的圖。
圖50是表示包含示出編譯指示有可能錯誤的警告信息的檢驗(yàn)結(jié)果一個例子的圖。
圖51是表示程序處理裝置的另一結(jié)構(gòu)的功能框圖。
圖52是表示程序的一例的圖。
圖53是表示解析信息的一例的圖。
具體實(shí)施例方式
下面參考

本發(fā)明的實(shí)施例涉及的程序處理裝置。
圖3是表示程序處理裝置結(jié)構(gòu)的功能框圖。程序處理裝置102是接受用高級語言描述且包含編譯指示所代表的提示信息的程序101,并判斷程序101中的提示信息的邏輯匹配性的裝置,具有語法解析部104和錯誤檢驗(yàn)部105。
語法解析部104接受程序101(程序101由多個文件構(gòu)成時,適當(dāng)稱為程序101a和程序101b),對程序101進(jìn)行編譯器等所用的通常的語法解析處理,作為解析信息106輸出解析結(jié)果。
錯誤檢驗(yàn)部105基于程序101和解析信息106,檢驗(yàn)提示信息的邏輯匹配性,輸出檢驗(yàn)結(jié)果103。
另外,語法解析部104和錯誤檢驗(yàn)部105執(zhí)行的處理,在后述的每個實(shí)施例中都不同。因此,在說明各實(shí)施例時具體進(jìn)行說明。
本實(shí)施例說明檢驗(yàn)與循環(huán)處理的重復(fù)次數(shù)有關(guān)的提示信息的邏輯性矛盾的程序處理裝置。有關(guān)循環(huán)處理的重復(fù)次數(shù)的提示信息例如有下面信息。
(1)指定循環(huán)處理的最大重復(fù)次數(shù)的提示信息;
(2)指定循環(huán)處理的最小重復(fù)次數(shù)的提示信息;(3)指定循環(huán)處理的重復(fù)次數(shù)一定是偶數(shù)次的提示信息;(4)指定循環(huán)處理的重復(fù)次數(shù)一定是奇數(shù)次的提示信息。
說明程序處理裝置102執(zhí)行包含這些提示信息的程序101的處理。
圖4A是表示包含有關(guān)重復(fù)次數(shù)的提示信息并且包含函數(shù)func1的程序一個例子的圖。圖4B是表示包含main函數(shù)、函數(shù)func2以及函數(shù)func3的程序一個例子的圖。
圖4A所示的程序101a以及圖4B所示的程序101b的關(guān)系是分別被編譯之后被鏈接。
作為上述第2個提示信息的一種的編譯指示[#pragma_min_iteration]表示提示信息之后馬上進(jìn)行的循環(huán)處理(for,while,do)的重復(fù)次數(shù)為至少幾次。在圖4A所示的程序101a中,第3行描述有編譯指示[#pragma_min_iteration=5]。因此,通過用戶示出循環(huán)處理A(第5行至第12行)的重復(fù)次數(shù)最少是5次。
作為上述第3個提示信息的一種的編譯指示[#pragma_iteration_even]表示提示信息之后馬上進(jìn)行的循環(huán)處理(for,while,do)的重復(fù)次數(shù)一定為偶數(shù)次。在程序101a中,第4行描述有該編譯指示。因此,通過用戶示出循環(huán)處理A的重復(fù)次數(shù)一定是偶數(shù)次。
作為上述第4個提示信息的一種的編譯指示[#pragma_iteration_odd]表示提示信息之后馬上進(jìn)行的循環(huán)處理(for,while,do)的重復(fù)次數(shù)一定為奇數(shù)次。在程序101a中,第14行描述有該編譯指示。因此,通過用戶示出循環(huán)處理B(第15行至第21行)的重復(fù)次數(shù)一定是奇數(shù)次。
另外,在程序101a的第13行描述有編譯指示[#pragma_min_iteration=3]。因此,通過用戶示出循環(huán)處理B的重復(fù)次數(shù)最少是3次。
在利用編譯器編譯時,利用由編譯指示[#pragma_min_iteration]指定的循環(huán)處理的最小重復(fù)次數(shù),對該循環(huán)處理進(jìn)行可否適用軟件流水線技術(shù)的判斷,在可以時,進(jìn)行對該循環(huán)處理進(jìn)行利用軟件流水線技術(shù)的最佳化。
另外,編譯指示[#pragma_min_iteration]指定的循環(huán)處理的最小重復(fù)次數(shù)大于等于2次,并且,在對該循環(huán)處理只指定編譯指示[#pragma_iteration_even]或編譯指示[#pragma_iteration_odd]時,編譯器對該循環(huán)處理進(jìn)行如執(zhí)行循環(huán)展開的最佳化。循環(huán)展開是循環(huán)處理高速化方法的一種,是通過同時執(zhí)行多個重復(fù)(重復(fù)處理)來提高循環(huán)處理內(nèi)的執(zhí)行速度的方法。循環(huán)展開在展開的重復(fù)次數(shù)為2次時,循環(huán)處理的重復(fù)次數(shù)為偶數(shù)的場合下與奇數(shù)的場合下的最佳化處理的方法不同。在偶數(shù)的場合下,原樣展開即可,但在奇數(shù)的場合下,需要在循環(huán)處理的外側(cè)執(zhí)行多出的1次。
說明將包含這些提示信息的程序101a和101b作為輸入時的語法解析部104以及錯誤檢驗(yàn)部105執(zhí)行的處理。
圖5是語法解析部104執(zhí)行的處理的流程圖。語法解析部104解析程序101(程序101a以及程序101b)整體,生成各函數(shù)的調(diào)用程序圖表(S202)。這與由通常的編譯器等生成的調(diào)用流程圖表相同。
圖6是表示調(diào)用流程圖表的一例的圖。圖6所示的調(diào)用流程圖表107是圖4A以及圖4B分別所示的程序101a以及程序101b生成的調(diào)用流程圖表107。從該調(diào)用流程圖表107可以知道m(xù)ain函數(shù)調(diào)用函數(shù)func2以及func3。另外,還可以知道函數(shù)func2調(diào)用func1,函數(shù)func3也調(diào)用func1。像這樣,調(diào)用流程圖表107利用箭頭方向示出函數(shù)間的調(diào)用關(guān)系。
下面,如圖5所示,語法解析部104基于生成的調(diào)用流程圖表107,解析全局變量或各函數(shù)調(diào)出時虛變量取什么樣的值(S203)。本實(shí)施例中,語法解析部104解析全局變量或虛變量可取值的最大值以及最小值,同時解析是否可取得偶數(shù)值以及是否可取得奇數(shù)值。另外,也可以解析函數(shù)內(nèi)的局部變量。
語法解析部104作為解析信息106輸出解析的結(jié)果(S204)。圖7是表示解析信息的一例的圖。圖7所示的解析信息106表示解析結(jié)果的一部分。例如示出,關(guān)于函數(shù)func3的虛變量s,最大值和最小值都是[5],不能取偶數(shù)值,可以取奇數(shù)值。這是通過進(jìn)行以下解析而求出的。即,從圖6所示的調(diào)用流程圖表107可知函數(shù)func3被main函數(shù)調(diào)用。從程序101b知道m(xù)ain函數(shù)中的函數(shù)func3的實(shí)變量為[5],函數(shù)func3只被調(diào)用1次。因此,可以得到上述解析結(jié)果。
另外,關(guān)于函數(shù)func1內(nèi)的全局變量y,在解析信息106中示出最大值為[6],最小值為[5],可以取偶數(shù)值和奇數(shù)值的任一個。這可以通過進(jìn)行以下解析來求得。即,從調(diào)用流程圖表107知道函數(shù)func1被函數(shù)func2和函數(shù)func3調(diào)用。在函數(shù)func2內(nèi),對全局變量y代入[6]。另外,在函數(shù)func3內(nèi)對全局變量y代入虛變量s的值。在此,從調(diào)用流程圖表107可知函數(shù)func1被main函數(shù)調(diào)用。因此,檢查main函數(shù)內(nèi)的函數(shù)func3的實(shí)變量,就可知是[5]。因此,函數(shù)func3的虛變量s的值成為[5]。即,函數(shù)func3內(nèi)的全局變量y的值也成為[5]。通過上述,函數(shù)func3內(nèi)的全局變量可取的值是[5]或[6]。因此,可以得到上述的解析結(jié)果。通過進(jìn)行同樣的解析,可以得到圖7所示的解析信息106。
下面說明錯誤檢驗(yàn)部105執(zhí)行的處理。
圖8是錯誤檢驗(yàn)部105執(zhí)行的處理的流程圖。錯誤檢驗(yàn)部105對程序101a和程序101b中包含的各循環(huán)處理重復(fù)以下處理。在圖4A所示的程序101a中包含循環(huán)處理A和循環(huán)處理B的2個循環(huán)處理。從而,對這2個循環(huán)處理執(zhí)行以下處理。
錯誤檢驗(yàn)部105判斷對關(guān)注的循環(huán)處理附加的提示信息是什么(S302)。例如,在程序101a中包含的循環(huán)處理A附加有編譯指示[#pragma_min_iteration=5]和編譯指示[#pragma_iteration_even]。
在該提示信息是編譯指示[#pragma_min_iteration]時(在S302中#pragma_min_iteration),錯誤檢驗(yàn)部105還利用解析信息106,求出該循環(huán)處理的最小重復(fù)次數(shù)(S303)。例如,從解析信息106可知,在循環(huán)處理A的情況下,規(guī)定循環(huán)處理的重復(fù)次數(shù)的虛變量x值的最小值為[2]。因此,可求出循環(huán)處理A的最小重復(fù)次數(shù)為[2]。
對循環(huán)處理附加的提示信息是編譯指示[#pragma_iteration_even]時(在S302中#pragma_iteration_odd/even),錯誤檢驗(yàn)部105一邊利用解析信息106,一邊檢查該循環(huán)處理的重復(fù)次數(shù)是否僅僅是偶數(shù)(S305)。例如在循環(huán)處理A的情況下,示出規(guī)定循環(huán)處理的重復(fù)次數(shù)的虛變量x值僅僅取偶數(shù),不取奇數(shù)。同樣,對循環(huán)處理附加的提示信息是編譯指示[#pragma_iteration_odd]時(在S302中#pragma_iteration_odd/even),錯誤檢驗(yàn)部105一邊利用解析信息106,一邊檢查該循環(huán)處理的重復(fù)次數(shù)是否僅僅是奇數(shù)(S305)。
另外,不是執(zhí)行S303和S305的處理的某一方,而是在對同一循環(huán)處理附加的提示信息為多個的情況下,還有執(zhí)行S303和S305雙方的處理的情況。
S303和S305的處理之后,錯誤檢驗(yàn)部105檢查提供給循環(huán)處理的提示信息與實(shí)際循環(huán)處理的重復(fù)次數(shù)是否矛盾(S304)。在矛盾時(在S304中的“否”),錯誤檢驗(yàn)部105將檢驗(yàn)結(jié)果103作為錯誤信息顯示在未圖示的顯示部(S306)。
例如,在程序101a的第3行指定的編譯指示[#pragma_min_iteration=5]指示循環(huán)處理A的最小重復(fù)次數(shù)是最小5次,但如上所述,在S303的處理中求出循環(huán)處理A的最小重復(fù)次數(shù)為2次。因此,錯誤檢驗(yàn)部105作為錯誤信息顯示檢驗(yàn)結(jié)果103。同樣,在程序101a的第14行指定的編譯指示[#pragma_iteration_odd]指示循環(huán)處理B的重復(fù)次數(shù)僅僅是奇數(shù)次,但在S305的處理中檢查出規(guī)定循環(huán)處理B的重復(fù)次數(shù)的全局變量y值可以取得偶數(shù)和奇數(shù)的雙方。因此,錯誤檢驗(yàn)部105作為錯誤信息顯示檢驗(yàn)結(jié)果103。
圖9是示出檢驗(yàn)結(jié)果的一例的圖。如上所述,示出程序101a的第3行的[#pragma_min_iteration=5]和第14行的[#pragma_iteration_odd]在邏輯上矛盾。
在進(jìn)行了檢驗(yàn)結(jié)果103的錯誤顯示(S306)之后,或者提供給循環(huán)處理的提示信息與實(shí)際循環(huán)處理的重復(fù)次數(shù)不矛盾時(在S304中的“是”)時,對下一循環(huán)處理進(jìn)行與上述相同的處理(S302~S306)。另外,在不存在附加給關(guān)注的循環(huán)處理的提示信息時(在S302中“無”),錯誤檢驗(yàn)部105對該循環(huán)處理不進(jìn)行任何處理,對下一循環(huán)處理進(jìn)行與上述同樣的處理(S302~S306)。
在對程序101中包含的所有循環(huán)處理執(zhí)行了上述處理(S302~S306)的時刻,錯誤檢驗(yàn)部105應(yīng)執(zhí)行的處理結(jié)束。
如上所述,根據(jù)本實(shí)施例,可以檢驗(yàn)與循環(huán)處理的重復(fù)次數(shù)有關(guān)的提示信息在邏輯上是否矛盾。
另外,上述實(shí)施例中,采用作為第2個到第4個提示信息的一種的編譯指示進(jìn)行了說明,但作為第1個提示信息的一種,也可以采用編譯指示[#pragma_max_iteration]。該編譯指示表示提示信息之后馬上進(jìn)行的循環(huán)處理(for,while,do)的重復(fù)次數(shù)最多是幾次。例如,在程序中有編譯指示[#pragma_max_iteration=10]的描述時,通過用戶表示該編譯指示之后馬上進(jìn)行的循環(huán)處理的重復(fù)次數(shù)是最大10次。也可以是由錯誤檢驗(yàn)部105對該編譯指示進(jìn)行檢驗(yàn)。
另外,錯誤檢驗(yàn)部105不利用解析信息106就可以判斷提示信息的邏輯矛盾性時,也可以不利用解析信息106而判斷提示信息的邏輯矛盾性。例如,在循環(huán)處理的重復(fù)次數(shù)不是變量而是定義為常數(shù)時,錯誤檢驗(yàn)部105可以不參考解析信息106就能求出循環(huán)處理的最小重復(fù)次數(shù)等。
本實(shí)施例中,說明檢驗(yàn)有關(guān)指針變量的提示信息的邏輯性矛盾的程序處理裝置。有關(guān)指針變量的指針信息例如有以下信息。
(1)指定指針變量所示的數(shù)據(jù)的調(diào)整值的提示信息;(2)表示指針變量所示的區(qū)域沒有交迭(overlap)的提示信息。
說明程序處理裝置102執(zhí)行包含這些提示信息的程序101的處理。
圖10A是表示包含有關(guān)指針變量的提示信息并且包含函數(shù)func1、函數(shù)func2以及函數(shù)func3的程序一個例子的圖。圖10B是表示包含main函數(shù)的程序的一例的圖。
圖10A所示的程序101a和圖10B所示的程序101b的關(guān)系是被分別編譯后被鏈接。
作為上述第1個提示信息的一種的編譯指示[pragma_align_pointer],表示在主存儲器中有幾個由編譯指示指定的指針變量所指的數(shù)據(jù)的調(diào)整值。例如,圖10A所示的程序101a中的函數(shù)func3之前有編譯指示[pragma_align_pointer=8q1]的描述。這表示用戶示出以8字節(jié)單位調(diào)整函數(shù)func3的指針變量q1所指的數(shù)據(jù)。同樣,編譯指示[pragma_align_pointer=4q2,q3]的描述,表示用戶示出以4字節(jié)單位調(diào)整指針變量q2所指的數(shù)據(jù)和指針變量q3所指的數(shù)據(jù)。
另外,程序101a所含的編譯指示[#pragma_align_object]是對之后示出的數(shù)據(jù)以指定的字節(jié)數(shù)進(jìn)行調(diào)整的用戶指示。例如,函數(shù)func1內(nèi)的編譯指示[#pragma_align_object=4a,b]的描述是,在主存儲器上以4字節(jié)單位調(diào)整變量a和b的指示。變量a和b是短(short)型變量,通常短型變量是2字節(jié)的變量。從而,本實(shí)施例中,在沒有編譯指示[#pragma_align_object]的指定時,以2字節(jié)單位調(diào)整短型變量。
像這樣,通過調(diào)整數(shù)據(jù)并利用配對命令,可以從存儲器中一次裝載多個數(shù)據(jù)、或者寫數(shù)據(jù),編譯器可以進(jìn)行那樣的最佳化。這樣,可以減少訪問存儲器的次數(shù),可以使處理高速化。
作為上述第2個提示信息的一種的restrict描述,是用C99語言(IS0/IEC 98991999-Programming Language C)導(dǎo)入的,表示在其范圍內(nèi)指定的所有指針變量所指的主存儲器上的區(qū)域相互不交迭。即,通過用戶示出函數(shù)func3的指針變量q1、q2以及q3所指的區(qū)域相互不交迭。例如,若指針q1所指的區(qū)域和指針q2所指的區(qū)域相互不交迭,則編譯器可以進(jìn)行交換在前面區(qū)域?qū)懭霐?shù)據(jù)的命令和在后面區(qū)域?qū)懭霐?shù)據(jù)的命令的執(zhí)行順序的最佳化。
說明將包含這些提示信息的程序101a和101b作為輸入時的語法解析部104和錯誤檢驗(yàn)部105執(zhí)行的處理。
語法解析部104執(zhí)行與圖5所示的流程圖相同的處理。但是,在S203的處理中解析的對象不同。即,語法解析部104解析函數(shù)的指針變量所指的數(shù)據(jù)的調(diào)整值,同時對指針變量所指的區(qū)域進(jìn)行解析,解析是否有可能與其他指針指相同的區(qū)域。
圖11是表示基于圖10A和圖10B所示的程序101a和101b,由語法解析部104生成的調(diào)用流程圖表的一例的圖。根據(jù)該調(diào)用流程圖表107,main函數(shù)調(diào)用函數(shù)func1和函數(shù)func2。另外,func1和func2分別調(diào)用函數(shù)func3。
圖12是表示語法解析部104生成的解析信息106的一例的圖。在圖5的S203的處理中,語法解析部104基于程序101a和101b,解析調(diào)用各函數(shù)時的指針變量和全局指針變量的調(diào)整以及指示同一區(qū)域的可能性。
例如,考慮函數(shù)func3的虛變量q1。基于調(diào)用流程圖表107,可知函數(shù)func3被函數(shù)func1和函數(shù)func2調(diào)用。利用編譯指示[#pragma_align_object=4a,b],以4字節(jié)單位調(diào)整與函數(shù)func3的虛變量q1對應(yīng)的函數(shù)func1內(nèi)的函數(shù)func3的實(shí)變量[&a]所指的數(shù)據(jù)。另外,利用編譯指示[#pragma_align_object=8x],以8字節(jié)單位調(diào)整與函數(shù)func3的虛變量q1對應(yīng)的函數(shù)func2內(nèi)的函數(shù)func3的實(shí)變量[&x]所指的數(shù)據(jù)。因此,函數(shù)func3的虛變量q1所指的數(shù)據(jù)的調(diào)整值是4和8。
另外,函數(shù)func3的虛變量q1和q2分別對應(yīng)函數(shù)func1內(nèi)的函數(shù)func3的實(shí)變量[&a]和p1。在函數(shù)func1內(nèi)調(diào)用函數(shù)func3之前,在p1中代入[&a]的值。因此,p1和[&a]表示相同值。從而,作為有可能指定與虛變量q1所指的區(qū)域同一區(qū)域的指針,求出虛變量q2。
以下同樣,若對虛變量q2和q3進(jìn)行同樣解析,則可以得到如圖12所示的解析信息106。
下面說明錯誤檢驗(yàn)部105執(zhí)行的處理。
圖13是錯誤檢驗(yàn)部105執(zhí)行的處理的流程圖。錯誤檢驗(yàn)部105對在程序101a和程序101b中所含的各指針變量重復(fù)以下處理。如圖10A所示,在程序101a中包含指針變量q1、q2和q3等。
錯誤檢驗(yàn)部105判斷附加到指針變量上的提示信息是什么(S402)。對指針變量附加的提示信息是編譯指示[#pragma_align_pointer]時(在S402中#pragma_align_pointer),利用解析信息106,求出該指針變量的調(diào)整值(S403)。例如,在函數(shù)func3的虛變量q1的情況下,作為調(diào)整值求出4和8。
對指針變量附加的信息是restrict描述時(在S402中restrict),錯誤檢驗(yàn)部105利用解析信息106檢驗(yàn)該指針變量所指示的區(qū)域是否與其他指針變量所指示的區(qū)域相互交迭(S405)。例如,表示函數(shù)func3的虛變量q1指示的區(qū)域與函數(shù)func3的虛變量q2指示的區(qū)域相互交迭。
另外,不是執(zhí)行S403和S405的處理的某一方,在附加給同一指針變量的提示信息是多個的情況下,也有執(zhí)行S403和S405雙方的處理的情況。
在S403和S405的處理之后,錯誤檢驗(yàn)部105檢查提供給指針變量的提示信息與實(shí)際指針變量的信息是否矛盾(S404)。在矛盾時(在S404中的“否”),錯誤檢驗(yàn)部105將檢驗(yàn)結(jié)果103作為錯誤信息顯示在未圖示的顯示部(S406)。
例如,對函數(shù)func3的虛變量q1附加2個提示信息,即編譯指示[#pragma_align_pointer=8q1]和restrict描述。錯誤檢驗(yàn)部105對編譯指示[#pragma_align_pointer=8q1]首先進(jìn)行是否有矛盾的檢驗(yàn)。從解析信息106可知虛變量q1的調(diào)整值可以取4或8。這與作為提示信息的編譯指示[#pragma_align_pointer=8q1]不一致。因此,錯誤檢驗(yàn)部105作為錯誤信息顯示檢驗(yàn)結(jié)果103。接著,錯誤檢驗(yàn)部105進(jìn)行restrict描述是否有矛盾的檢驗(yàn)。從解析信息106可知存在虛變量q1和q2指向同一區(qū)域的情況,與restrict描述矛盾。因此,錯誤檢驗(yàn)部105作為錯誤信息顯示檢驗(yàn)結(jié)果103(S406)。
在進(jìn)行了檢驗(yàn)結(jié)果103的錯誤顯示(S406)之后,或者提供給指針變量的提示信息與實(shí)際的指針變量信息不矛盾時(在S404中的“是”),錯誤檢驗(yàn)部105對下一指針變量(例如虛變量q2或q3)進(jìn)行與上述同樣的處理(S402~S406)。另外,在不存在附加給指針變量的提示信息時(在S402中的“無”),錯誤檢驗(yàn)部105對該指針變量不進(jìn)行任何處理,對下一指針變量進(jìn)行與上述相同的處理(S402~S406)。
圖14是表示檢驗(yàn)結(jié)果103的一例的圖。如上所述,示出編譯指示[#pragma_align_pointer=8q1]和restrict描述[short *restrict q1]同實(shí)際的指針變量信息矛盾。此外,還示出對虛變量q2的restrict描述矛盾、和對虛變量q3的編譯指示矛盾。
在對程序101中包含的所有指針變量執(zhí)行上述處理(S402~S406)的時刻,錯誤檢驗(yàn)部105結(jié)束所有應(yīng)執(zhí)行的處理。
如上所述,根據(jù)本實(shí)施例,可以檢驗(yàn)有關(guān)數(shù)據(jù)設(shè)置的提示信息在邏輯上是否矛盾。
另外,可以檢驗(yàn)有關(guān)指針變量的提示信息在邏輯上是否矛盾。
本實(shí)施例說明檢驗(yàn)有關(guān)變量讀寫的提示信息的邏輯矛盾的程序處理裝置。有關(guān)變量讀寫的提示信息例如有以下信息。
(1)表示在提示信息的設(shè)置位置之后對指定變量的訪問是從數(shù)據(jù)寫入開始的提示信息。
說明程序處理裝置102執(zhí)行包含該提示信息的程序101的處理。
圖15是表示包含有關(guān)變量讀寫的提示信息的程序的一例的圖。在程序101中包含函數(shù)func1、函數(shù)func2以及函數(shù)func3。
作為上述提示信息的一種的編譯指示[#pragma_start_from_write],表示對于由該編譯指示指定的變量,在該編譯指示的設(shè)置位置之后,對該變量的訪問是從數(shù)據(jù)的寫入處理開始。例如,在程序101的函數(shù)func1()中有編譯指示[#pragma_start_from_write x]的描述。這表示用戶示出在該編譯指示的設(shè)置位置之后,對變量x的訪問是從數(shù)據(jù)的寫入處理開始。
編譯器將該編譯指示作為契機(jī),在具有緩沖存儲器的計(jì)算機(jī)中產(chǎn)生了存儲器訪問時,只確保該區(qū)域,可以進(jìn)行不從主存儲器向緩沖存儲器傳送數(shù)據(jù)(預(yù)取處理)的最佳化。由此,可以減少存儲器訪問時間。
說明將包含該提示信息的程序101作為輸入時的語法解析部104和錯誤校驗(yàn)部105執(zhí)行的處理。
語法解析部104執(zhí)行與圖5所示的流程相同的處理。但是,在S203的處理中,解析的對象不同。即,語法解析部104對各函數(shù)進(jìn)行是否存在全局變量的讀取及寫入的解析。
圖16是表示基于圖15所示的程序101,由語法解析部104生成的調(diào)用流程圖表的一例的圖。根據(jù)該調(diào)用流程圖表107,函數(shù)func1調(diào)用函數(shù)func2和函數(shù)func3。
圖17是表示語法解析部104生成的解析信息106的一例的圖。在圖5的S203的處理中,語法解析部104對各函數(shù)的每個全局變量檢驗(yàn)有無讀寫。
例如,在函數(shù)func2執(zhí)行對全局變量y的數(shù)據(jù)寫入和、從全局變量x讀取數(shù)據(jù),在函數(shù)func3執(zhí)行對全局變量z的數(shù)據(jù)寫入和、從全局變量y讀取數(shù)據(jù),所以解析信息106成為圖17那樣。另外,語法解析部104對函數(shù)func1也進(jìn)行相同處理,生成解析信息106。
下面說明錯誤檢驗(yàn)部105執(zhí)行的處理。
圖18是錯誤檢驗(yàn)部105執(zhí)行的處理的流程圖。錯誤檢驗(yàn)部105對程序101中包含的各全局變量重復(fù)以下處理。如圖15所示,程序101包含3個全局變量x、y以及z。
錯誤檢驗(yàn)部105判斷附加到關(guān)注的全局變量中的提示信息是什么(S501)。在對該全局變量附加的提示信息是編譯指示[#pragma_start_from_write]時(在S501中#pragma_start_from_write),錯誤檢驗(yàn)部105利用解析信息106,檢查在該編譯指示的設(shè)置位置以后是否有對該全局變量的數(shù)據(jù)寫入(S502)。檢查結(jié)果,若提供給該全局變量的編譯指示[#pragma_start_from_write]與實(shí)際對該全局變量的數(shù)據(jù)寫入的信息矛盾(S503中的“否”),則錯誤檢驗(yàn)部105作為錯誤信息在未圖示的顯示部顯示檢驗(yàn)結(jié)果103(S504)。
例如,對于全局變量x,在func1內(nèi)附加有由編譯指示[#pragma_start_from_write]決定的提示信息。因此,在S502的處理中,錯誤檢驗(yàn)部105檢驗(yàn)對該編譯指示位置之后的全局變量x的數(shù)據(jù)寫入。在程序101中,在該編譯指示之后存在函數(shù)func2的調(diào)用,但根據(jù)解析信息106,在函數(shù)func2內(nèi)部存在從全局變量x讀取數(shù)據(jù)。因此,該編譯指示與對實(shí)際全局變量x的寫入的信息之間存在矛盾(在S503中的“否”)。因此,錯誤檢驗(yàn)部105作為錯誤信息顯示圖19所示的檢驗(yàn)結(jié)果103(S504)。即,錯誤檢驗(yàn)部105顯示編譯指示[#pragma_start_from_write x]的描述有誤。
同樣,錯誤檢驗(yàn)部105對全局變量z檢驗(yàn)在函數(shù)func1內(nèi)附加的編譯指示[#pragma_start_from_write]。這樣,從解析信息106可知在該編譯指示之后馬上調(diào)用的函數(shù)func3只進(jìn)行從全局變量z讀取數(shù)據(jù)。因此,編譯指示與實(shí)際的對全局變量的寫入信息之間沒有矛盾。因此,錯誤檢驗(yàn)部105不進(jìn)行錯誤輸出等。
如上所述,根據(jù)本實(shí)施例,可以檢驗(yàn)與從變量讀取數(shù)據(jù)或?qū)ψ兞康臄?shù)據(jù)寫入有關(guān)的提示信息在邏輯上是否矛盾。
本實(shí)施例說明檢驗(yàn)有關(guān)靜態(tài)頻度的提示信息的邏輯性矛盾的程序處理裝置。有關(guān)靜態(tài)頻度的提示信息例如有下面的信息。
(1)表示分支條件的成立頻度大的提示信息;(2)表示分支條件的不成立頻度大的提示信息。
說明程序處理裝置102執(zhí)行包含這些提示信息的程序101的處理。
圖20是表示包含有關(guān)靜態(tài)頻度的提示信息的程序的一例的圖。在程序101包含函數(shù)func1和函數(shù)func2。
作為上述的第1個提示信息的一種的編譯指示[#pragma_likely_true],表示緊接在此之后的if文的條件式成立的(條件式成為true)頻度大。通過用戶表示,在程序101中,作為if文的條件式的[i%5==0]成立的頻度大。
編譯器按照該編譯指示,進(jìn)行在if文的條件式成立時執(zhí)行的命令串、比if文不成立時執(zhí)行的命令串即由eles文指定的命令串優(yōu)先執(zhí)行那樣的機(jī)器語言命令設(shè)置的最佳化。這樣,可以提高執(zhí)行機(jī)器語言程序時的處理時間。
作為上述的第2個提示信息的一種的編譯指示[#pragma_likely_false],表示緊接在此之后的if文的條件式不成立的(條件式成為false)頻度大。
編譯器按照該編譯指示,進(jìn)行在if文的條件式不成立時執(zhí)行的命令串即由else文指定的命令串比if文成立時執(zhí)行的命令串優(yōu)先執(zhí)行那樣的機(jī)器語言命令設(shè)置的最佳化。這樣,可以提高執(zhí)行機(jī)器語言程序時的處理時間。
說明將包含這些提示信息的程序101作為輸入時的語法解析部104和錯誤檢驗(yàn)部105執(zhí)行的處理。
語法解析部104執(zhí)行與圖5所示的流程圖相同的處理。但是,在S203的處理中解析的對象不同。即,語法解析部104對各函數(shù)的虛變量和全局變量進(jìn)行值的頻度解析。
圖21是表示基于圖20所示的程序101,由語法解析部104生成的調(diào)用流程圖表的一例的圖。根據(jù)該調(diào)用流程圖表107可知,函數(shù)func1調(diào)用函數(shù)func2。
圖22是表示語法解析部104生成的解析信息106的一例的圖。如上所述,在圖5的S203的處理中,語法解析部104對各函數(shù)的虛變量和全局變量分別進(jìn)行值的頻度解析。
例如,若解析函數(shù)func2的虛變量i的頻度,則函數(shù)func2有被函數(shù)func1總計(jì)調(diào)用17次的可能性,作為解析信息106示出此時的虛變量i值的頻度。例如,虛變量i成為0的次數(shù)為2次。因此,表示虛變量i成為0的概率是2/17。
下面說明錯誤檢驗(yàn)部105執(zhí)行的處理。
圖23是錯誤檢驗(yàn)部105執(zhí)行的處理的流程圖。錯誤檢驗(yàn)部105對各if文重復(fù)以下處理。如圖20所示,在程序101中包含[if(i%5==0)]這樣的if文。
錯誤檢驗(yàn)部105判斷對關(guān)注的if文附加的提示信息是什么(S601)。在附加的提示信息是編譯指示[#pragma_likely_true]或編譯指示[#pragma_likely_false]時(在S601中#pragma_likely_true/false),錯誤檢驗(yàn)部105利用解析信息106分別檢查該if文的條件式的成立或不成立的頻度(S602)。其結(jié)果,若提示信息與實(shí)際頻度矛盾(在S603中的“否”),則錯誤檢驗(yàn)部105作為錯誤信息在未圖示的顯示部顯示檢驗(yàn)結(jié)果103(S604)。
例如,在if文[if(i%5==0)]附加有編譯指示[#pragma_likely_true]。因此,錯誤檢驗(yàn)部105基于解析信息106檢查該if文的條件式[i%5==0]的成立頻度(S602)。即,條件式[i%5==0]成立是虛變量i是5的倍數(shù)的時候,虛變量i成為5的倍數(shù)的概率是4/17(虛變量i成為0的概率2/17和虛變量i成為5的概率2/17之和)。因此,該條件式成立的頻度小于一半,判斷出該條件式不成立的頻度更大。因此,錯誤檢驗(yàn)部105判斷出編譯指示[#pragma_likely_true]和if文的條件式[i%5==0]成立的頻度之間產(chǎn)生矛盾(在S603中“否”),顯示圖24所示的檢驗(yàn)結(jié)果103。
如上所述,根據(jù)本實(shí)施例,可以檢驗(yàn)有關(guān)靜態(tài)頻度(分支條件成立的頻度)的提示信息在邏輯上是否矛盾。
本實(shí)施例說明檢驗(yàn)對編譯器直接指定最佳化方法的提示信息的邏輯矛盾的程序處理裝置。作為對編譯器直接指定最佳化方法的提示信息,例如有指定循環(huán)展開的提示信息。
說明程序處理裝置102執(zhí)行包含該提示信息的程序101的處理。
圖25是表示包含有關(guān)循環(huán)展開的提示信息的程序一個例子的圖。程序101中包含函數(shù)func1和函數(shù)func2。
作為指定循環(huán)展開的提示信息的一種的編譯指示[#pragma_loop_unrolling],是對之后馬上進(jìn)行的循環(huán)處理(for,while,do)進(jìn)行利用循環(huán)展開的最佳化的、用戶對編譯器的指示。例如,在程序101的函數(shù)func1內(nèi)描述有編譯指示[#pragma_loop_unrolling],通過用戶作出對緊接在此之后的for循環(huán)處理進(jìn)行循環(huán)展開的指示。在此,展開的重復(fù)次數(shù)是2次。
編譯器以該編譯指示為契機(jī),利用循環(huán)展開對該for循環(huán)處理進(jìn)行最佳化。這樣,可以提速for循環(huán)處理的執(zhí)行速度。
說明將包含該提示信息的程序101作為輸入時的語法解析部104和錯誤檢驗(yàn)部105執(zhí)行的處理。
語法解析部104執(zhí)行與圖5所示的流程圖相同的處理。圖26是表示圖5的S202的處理結(jié)果所生成的調(diào)用流程圖表的圖。從調(diào)用流程圖表107可知函數(shù)func2調(diào)用func1。
圖27是表示圖5的S203和S204的處理結(jié)果生成的解析信息的圖。根據(jù)解析信息106,函數(shù)func1的虛變量x的最大值和最小值都是[3],不能取偶數(shù)值,只能取奇數(shù)值。由于解析信息106的生成處理與實(shí)施例1相同,所以在此不再作具體說明。
圖28是錯誤檢驗(yàn)部105執(zhí)行的處理的流程圖。錯誤檢驗(yàn)部105對程序101中包含的各循環(huán)處理重復(fù)以下處理。
錯誤檢驗(yàn)部105判斷對循環(huán)處理附加的提示信息是什么(S701)。例如,在圖25的程序101中包含的for循環(huán)處理附加有編譯指示[#pragma_loop_unrolling]。
該提示信息是編譯指示[#pragma_loop_unrolling]時(在S701中#pragma_loop_unrolling),錯誤檢驗(yàn)部105還利用解析信息106,檢驗(yàn)該循環(huán)處理的重復(fù)次數(shù)的可能性(S702)。例如,程序101的for循環(huán)處理的重復(fù)次數(shù)由虛變量x的值規(guī)定。從而,從解析信息106可知for循環(huán)處理的重復(fù)次數(shù)僅為3次,只能取奇數(shù)次。
錯誤檢驗(yàn)部105判斷關(guān)注的循環(huán)處理的重復(fù)次數(shù)大于2次并且該重復(fù)次數(shù)是否只能取奇數(shù)次或偶數(shù)次(S703)。在不滿足該條件時(在S703中的“否”),不能進(jìn)行展開的重復(fù)次數(shù)為2次的、利用循環(huán)展開的循環(huán)處理的最佳化。因此,在這樣的情況下,錯誤檢驗(yàn)部105作為錯誤信息在未圖示的顯示部顯示檢驗(yàn)結(jié)果103(S704)。
在滿足該條件時(在S703中的“是”),或者進(jìn)行了錯誤顯示(S704)之后,錯誤檢驗(yàn)部105對下一循環(huán)處理進(jìn)行與上述處理相同的處理(S701~S704)。另外,在上述的for循環(huán)處理的情況下,滿足該條件。
如上所述,根據(jù)本實(shí)施例,可以檢驗(yàn)直接對編譯器指示利用循環(huán)展開的最佳化的提示信息在邏輯上是否矛盾。
本實(shí)施例說明檢驗(yàn)對編譯器直接指定最佳化方法的提示信息的邏輯性矛盾的另一程序處理裝置。作為對編譯器直接指定最佳化方法的提示信息,例如有指定軟件流水線技術(shù)的提示信息。
圖29是表示包含有關(guān)軟件流水線技術(shù)的提示信息的程序一個例子的圖。程序101中包含有函數(shù)func1和函數(shù)func2。
作為指定軟件流水線技術(shù)的提示信息的一種的編譯指示[#pragma_software_pipelining],是對緊接在此之后的循環(huán)處理(for,while,do)利用軟件流水線技術(shù)進(jìn)行最佳化的、用戶對編譯器的指示。例如,在程序101的函數(shù)func1內(nèi)描述有編譯指示[#pragma_software_pipelining],用戶進(jìn)行了對緊接在此之后的for循環(huán)處理利用軟件流水線技術(shù)實(shí)施最佳化的指示。另外,軟件流水線技術(shù)是同時執(zhí)行幾個不同的循環(huán)處理的技術(shù),所以循環(huán)處理的重復(fù)次數(shù)需要大于同時執(zhí)行的最小循環(huán)處理次數(shù),在此是2次。
編譯器將該編譯指示作為契機(jī),對該for循環(huán)處理利用軟件流水線技術(shù)進(jìn)行最佳化。這樣,可以提高for循環(huán)處理的執(zhí)行速度。
說明將包含該提示信息的程序101作為輸入時的語法解析部104和錯誤檢驗(yàn)部105所執(zhí)行的處理。
語法解析部104執(zhí)行與圖5所示的流程圖相同的處理。但是,在S203的處理中,不同點(diǎn)是調(diào)用全局變量或各函數(shù)時僅解析虛變量的最小值。
圖30是表示圖5的S202的處理結(jié)果生成的調(diào)用流程圖表的圖。從調(diào)用流程圖表可知函數(shù)func1調(diào)用函數(shù)func2。
圖31是表示圖5的S203和S204處理的結(jié)果生成的解析信息的圖。根據(jù)解析信息106,示出函數(shù)func1的虛變量x的最小值為[2]。由于解析信息106的生成處理與實(shí)施例1相同,所以在此不再作具體說明。
圖32是錯誤檢驗(yàn)部105執(zhí)行的處理的流程圖。錯誤檢驗(yàn)部105對程序101中包含的各循環(huán)處理重復(fù)以下處理。
錯誤檢驗(yàn)部105判斷對循環(huán)處理附加的提示信息是什么(S801)。例如,對圖29的程序101中包含的for循環(huán)處理附加有編譯指示[#pragma_software_pipelining]。
在該提示信息是編譯指示[#pragma_software_pipelining]時(在S801中#pragma_software_pipelining),錯誤檢驗(yàn)部105還利用解析信息106,檢驗(yàn)該循環(huán)處理的重復(fù)次數(shù)的可能性(S802)。例如,程序101的for循環(huán)處理的重復(fù)次數(shù)由虛變量x規(guī)定。從而,從解析信息106可知for循環(huán)處理的重復(fù)次數(shù)為最小2次。
錯誤檢驗(yàn)部105判斷關(guān)注的循環(huán)處理的重復(fù)次數(shù)是否大于2次(S803)。在不滿足該條件時(在S803中的“否”),不能進(jìn)行利用軟件流水線技術(shù)的循環(huán)處理的最佳化。因此,在這種情況下,錯誤檢驗(yàn)部105作為錯誤信息在未圖示的顯示部顯示檢驗(yàn)結(jié)果103(S804)。
在滿足該條件時(在S803中的“是”),或進(jìn)行了錯誤顯示(S804)之后,對下一循環(huán)處理進(jìn)行與上述相同的處理(S801~804)。另外,在上述for循環(huán)處理的情況下,滿足該條件。
如上所述,根據(jù)本實(shí)施例,可以檢驗(yàn)對編譯器直接指示利用軟件流水線技術(shù)的最佳化的提示信息在邏輯上是否矛盾。
本實(shí)施例說明檢驗(yàn)對編譯器直接指定最佳化方法的提示信息的邏輯性矛盾的再另一程序處理裝置。作為對編譯器直接指定最佳化方法的提示信息,例如有指定配對命令的輸出的提示信息。
圖33是表示包含有關(guān)配對命令的提示信息的程序一個例子的圖。在程序101中包含函數(shù)func1和函數(shù)func2。
作為有關(guān)配對命令的提示信息的一種的編譯指示[#pragma_pair_ins p],是發(fā)行從存儲器一次性加載指定排列p的多個要素、或向存儲器一次性寫入指定排列p的多個要素的配對命令,并進(jìn)行最佳化的、用戶對編譯器的指示。例如,在程序101的函數(shù)func2內(nèi)描述有編譯指示[#pragma_pair_inst a],通過用戶作出對排列a發(fā)行配對命令的指示。另外,為了發(fā)行配對命令,排列p的要素的調(diào)整值,必須是排列p的要素的通常類型的2倍以上。
編譯器實(shí)施將該編譯指示作為契機(jī)、對排列p發(fā)行配對命令的最佳化。這樣,可以減少訪問存儲器的次數(shù),可以使處理高速化。
說明將包含該提示信息的程序101作為輸入時的語法解析部104和錯誤檢驗(yàn)部105執(zhí)行的處理。
語法解析部104執(zhí)行與圖5所示的流程圖相同的處理。但是,在S203處理中,不同點(diǎn)是解析函數(shù)的虛變量所指的排列要素的調(diào)整值。另外,調(diào)整值的解析方法與實(shí)施例2所示相同。因此,在此不再作具體說明。
圖34是表示圖5的S202處理的結(jié)果生成的調(diào)用流程圖表的圖。從調(diào)用流程圖表107可知函數(shù)func1調(diào)用函數(shù)func2。
圖35是表示圖5的S203和S204處理的結(jié)果生成的解析信息的圖。根據(jù)解析信息106可知,函數(shù)func2的虛變量a指示的區(qū)域的數(shù)據(jù),即排列a的各要素以4字節(jié)單位被調(diào)整。
圖36是錯誤檢驗(yàn)部105執(zhí)行的處理的流程圖。錯誤檢驗(yàn)部105對程序101中包含的各排列重復(fù)以下處理。
錯誤檢驗(yàn)部105判斷對關(guān)注的排列附加的提示信息是什么(S901)。例如,對圖33的程序101中包含的排列a的起始要素的指針,附加有編譯指示[#pragma_pair_inst](在程序中描述成編譯指示[#pragma_pair_inst a])。
在該提示信息是編譯指示[#pragma_pair_inst]時(在S901中#pragma_pair_inst),錯誤檢驗(yàn)部105還利用解析信息106,檢驗(yàn)該排列要素的調(diào)整值(S902)。在此,從解析信息106可知排列a的要素的調(diào)整值為4。
錯誤檢驗(yàn)部105判斷檢驗(yàn)的排列要素的調(diào)整值是否是大于該排列要素的通常類型的2倍(S903)。在不滿足該條件時(在S903中的“否”),編譯器不能對排列實(shí)施發(fā)行配對命令的最佳化。因此,在這樣的情況下,錯誤檢驗(yàn)部105作為錯誤信息在未圖示的顯示部顯示檢驗(yàn)結(jié)果103(S904)。
在滿足該條件時(在步驟S903中的“是”),或者進(jìn)行了錯誤顯示(S904)之后,對下一排列進(jìn)行與上述相同的處理(S901~S904)。另外,程序101中包含的排列a的要素按4字節(jié)調(diào)整,并且排列a的要素是短型。由于短型的數(shù)據(jù)是2字節(jié),該排列a滿足上述條件。
如上所述,根據(jù)本實(shí)施例,可以檢驗(yàn)對編譯器直接指示配對命令的輸出的提示信息在邏輯上是否矛盾。
本實(shí)施例說明檢驗(yàn)對編譯器直接指定最佳化方法的提示信息的邏輯性矛盾的再另一程序處理裝置。作為對編譯器直接指定最佳化方法的提示信息,例如有由指示緩沖存儲器等的控制處理的內(nèi)部函數(shù)決定的提示信息。
圖37是表示包含由指示緩沖存儲器等的控制處理的內(nèi)部函數(shù)決定的提示信息的程序一個例子的圖。在程序101包含函數(shù)func1和函數(shù)func2。
作為指示緩沖存儲器等的控制處理的提示信息的一種的內(nèi)部函數(shù)reserve_region,是僅僅在緩沖存儲器上確保用于存儲由該內(nèi)部函數(shù)的實(shí)變量指定的變量值的區(qū)域、并且執(zhí)行從主存儲器向緩沖存儲器不傳送(預(yù)取)該變量值的處理的內(nèi)部函數(shù)。這樣,可以減少訪問存儲器的時間??梢赃M(jìn)行這樣的處理是因?yàn)?,用戶保證在描述了內(nèi)部函數(shù)reserve_region的位置之后的、對由該內(nèi)部函數(shù)reserve_region的實(shí)變量指定的變量訪問是從數(shù)據(jù)寫入開始。
說明將包含該提示信息的程序101作為輸入時的語法解析部104和錯誤檢驗(yàn)部105執(zhí)行的處理。
語法解析部104執(zhí)行與圖5所示的流程圖相同的處理。但是,在S203的處理中與實(shí)施例3同樣,對各函數(shù)進(jìn)行是否存在從全局變量讀取數(shù)據(jù)、以及對全局變量寫入數(shù)據(jù)的解析。
圖38是表示圖5的S202處理結(jié)果生成的調(diào)用流程圖表的圖。從調(diào)用流程圖表107可知,函數(shù)func1調(diào)用函數(shù)func2。
圖39是表示圖5的S203和S204的處理結(jié)果生成的解析信息的圖。根據(jù)解析信息106可知,例如在函數(shù)func2內(nèi)進(jìn)行從全局變量x的讀取和對全局變量y的寫入。
圖40是錯誤檢驗(yàn)部105執(zhí)行的處理的流程圖。錯誤檢驗(yàn)部105對程序101中包含的各全局變量重復(fù)以下處理。
錯誤檢驗(yàn)部105判斷對關(guān)注的全局變量附加的提示信息是什么(S1001)。在對該全局變量附加的提示信息是內(nèi)部函數(shù)reserve_region時(在S1001中reserve_region()),錯誤檢驗(yàn)部105還利用解析信息106,檢查在該內(nèi)部函數(shù)的設(shè)置位置之后是否存在對該全局變量的數(shù)據(jù)寫入(S1002)。
錯誤檢驗(yàn)部105對關(guān)注的全局變量,檢查該內(nèi)部函數(shù)的設(shè)置位置之后的、對該全局變量的訪問是否是從數(shù)據(jù)寫入開始(S1003)。在不滿足該條件時(在S1003中的“否”),錯誤檢驗(yàn)部105作為錯誤信息在未圖示的顯示部顯示檢驗(yàn)結(jié)果103(S1004)。
例如,對全局變量x,在程序101的函數(shù)func1內(nèi)附加有由內(nèi)部函數(shù)reserve_region(x)決定的提示信息。因此,在S1002的處理中,錯誤檢驗(yàn)部105檢查該內(nèi)部函數(shù)的設(shè)置位置之后的對全局變量x的數(shù)據(jù)寫入。在程序101中,在該內(nèi)部函數(shù)之后馬上存在函數(shù)func2的調(diào)用,但根據(jù)解析信息106,在函數(shù)func2內(nèi)部存在從全局變量x的數(shù)據(jù)讀取,不存在對全局變量x的數(shù)據(jù)寫入。因此,對全局變量x的訪問,是在內(nèi)部函數(shù)reserve_region(x)的設(shè)置位置之后,從該全局變量x的數(shù)據(jù)讀取開始,不滿足上述條件(在S1003中的“否”)。從而,錯誤檢驗(yàn)部105作為錯誤信息顯示圖41所示的檢驗(yàn)結(jié)果103(S1004)。
在滿足上述條件時(在S1003中的“是”),或者進(jìn)行了錯誤顯示(S1004)之后,錯誤檢驗(yàn)部105對下一全局變量進(jìn)行與上述處理相同的處理(S1001~S1004)。
如上所述,根據(jù)本實(shí)施例,可以檢驗(yàn)由指示緩沖存儲器等的控制處理的內(nèi)部函數(shù)決定的提示信息在邏輯上是否矛盾。
根據(jù)上述實(shí)施例1~8,可以進(jìn)行編譯指示所代表的提示信息的檢驗(yàn),以便編譯器不會生成錯誤的機(jī)器語言程序。因此,可以進(jìn)行提示信息的檢驗(yàn),以便即使用戶對編譯器積極提供編譯指示所代表的提示信息,也可以進(jìn)行良好的最佳化。另外,在這樣的提示信息中包含對編譯器直接進(jìn)行有關(guān)某個最佳化的指示的提示信息、和通過對編譯器示出整個程序的靜態(tài)信息而支持利用編譯器的最佳化的提示信息。
以上,基于實(shí)施例說明了本發(fā)明的程序處理裝置,但本發(fā)明不限于該實(shí)施例。
例如,在提供了圖42所示的程序101時,錯誤檢驗(yàn)部105與上述實(shí)施例同樣,也可以是取代顯示表示圖43所示的提示信息的錯誤信息的檢驗(yàn)結(jié)果,而在知道怎樣糾正提示信息好的情況下,顯示圖44所示的包含糾正信息的檢驗(yàn)結(jié)果103。在圖44的檢驗(yàn)結(jié)果103示出的是表示糾正信息的檢驗(yàn)結(jié)果103的一例的圖,是應(yīng)當(dāng)將程序101的第2行的編譯指示[#pragma_min_iteration=5]糾正為[#pragma_min_iteration=2]的糾正信息。
另外,在提供了圖45所示的程序101時,為了編譯指示[#pragma_align_pointer=8a]在邏輯上不矛盾,以8字節(jié)單位調(diào)整排列a的要素即可。因此,例如若在程序101的第2行插入編譯指示[#pragma_align_pointer=8a],則編譯指示[#pragma_align_pointer=8a]在邏輯上不矛盾。圖46是表示包含這樣的糾正信息的檢驗(yàn)結(jié)果103的一例的圖。另外,也可以是這樣的糾正信息不需要以編譯指示形式提供,而是以編譯選項(xiàng)的形式提供。例如,圖47是表示包含由編譯選項(xiàng)決定的糾正信息的檢驗(yàn)結(jié)果103的一例的圖。另外,[編譯選項(xiàng)]是在啟動編譯器時指定成為編譯對象的程序101、同時用戶可以任意指定的對編譯器的指示。例如,用戶編譯程序101[foo.c]時,采用命令[cc],在計(jì)算機(jī)的命令行上可以輸入cc-falign-all-array=8foo.c。
另外,在提供了圖48所示的程序101的情況下,規(guī)定for循環(huán)處理的重復(fù)次數(shù)的main函數(shù)的虛變量x是在執(zhí)行機(jī)器語言程序時確定。因此,for循環(huán)處理的重復(fù)次數(shù)在編譯時不確定。從而,不能判斷程序101中包含的編譯指示[#pragma_min_iteration=5]在邏輯上是否矛盾。因此,也可以顯示圖49所示的、包含表示不能判斷該編譯指示是否有誤的不確定信息的檢驗(yàn)結(jié)果103。另外,也可以顯示如圖50所示的、包含表示該編譯指示有可能有誤的警告信息的檢驗(yàn)結(jié)果103。
另外,代替圖3所示的程序處理裝置102,也可以采用圖51所示的程序處理裝置202。程序處理裝置202是接受包含提示信息的程序101和對該程序101的解析信息106,判斷程序101中的提示信息的邏輯匹配性的裝置,具有語法解析部104和錯誤檢驗(yàn)部105。語法解析部204是接受程序101(101a、101b),對程序101(101a、101b)進(jìn)行在編譯器等中使用的通常的語法解析處理的處理部。另外,解析信息106是對與在語法解析部204語法解析的程序101(101a、101b)不同的程序101(101a、101b)的解析結(jié)果。例如,在程序101由程序101a和程序101b構(gòu)成的情況下,解析信息106是對程序101a的解析信息106,輸入到語法解析部204的程序是如程序101b。
錯誤檢驗(yàn)部105的結(jié)構(gòu)由于與上述實(shí)施例相同,所以在此不再作具體說明。圖52表示輸入到程序處理裝置202的程序101的一例,圖53表示輸入到程序處理裝置202的解析信息106的一例。其結(jié)果,從程序處理裝置202可以得到與圖9所示相同的檢驗(yàn)結(jié)果103。
另外,以C語言描述的源程序說明了程序101,但也可以是用此外的C++語言等高級語言描述的源程序,也可以是目標(biāo)程序、用中間語言描述的程序、用匯編語言描述的程序。
另外,上述實(shí)施例中作為提示信息主要以編譯指示為例進(jìn)行了說明,但提示信息不限于編譯指示,也可以是內(nèi)部函數(shù)、編譯選項(xiàng)和編程語言的約定語等。
另外,在循環(huán)展開中展開的重復(fù)次數(shù)不限于2次,即使比該次數(shù)多的次數(shù),也通過進(jìn)行基于同樣意旨的處理,可以進(jìn)行提示信息的檢驗(yàn)。
另外,在軟件流水線技術(shù)中同時執(zhí)行的循環(huán)處理次數(shù)不限于2次,即使比該2次多的次數(shù),也可以通過進(jìn)行基于同樣意旨的處理,可以進(jìn)行提示信息的檢驗(yàn)。
產(chǎn)業(yè)上的可用性本發(fā)明可以用于檢驗(yàn)用戶對編譯器提供的提示信息的邏輯矛盾的程序處理裝置等,特別是可以用作從程序中預(yù)先排除提示信息的邏輯矛盾的預(yù)處理器等。
權(quán)利要求
1.一種程序處理裝置,其特征在于接受包含用戶提供給編譯器的提示信息的程序,檢驗(yàn)包含上述提示信息的程序中的上述提示信息的邏輯匹配性。
2.如權(quán)利要求1所述的程序處理裝置,其特征在于,具有語法解析單元,解析包含上述提示信息的程序的語法,生成解析信息;和檢驗(yàn)單元,基于上述解析信息,檢驗(yàn)包含上述提示信息的程序中的上述提示信息的邏輯匹配性。
3.如權(quán)利要求2所述的程序處理裝置,其特征在于上述提示信息是可通過程序的靜態(tài)解析得到的靜態(tài)信息,上述語法解析單元對包含上述提示信息的程序的語法進(jìn)行靜態(tài)解析,生成上述解析信息。
4.如權(quán)利要求3所述的程序處理裝置,其特征在于上述語法解析單元對包含上述提示信息的程序中的函數(shù)間信息進(jìn)行靜態(tài)解析,生成上述解析信息。
5.如權(quán)利要求3所述的程序處理裝置,其特征在于上述提示信息是有關(guān)循環(huán)處理的重復(fù)次數(shù)的信息,上述語法解析單元解析包含上述提示信息的程序中所包含的循環(huán)處理的重復(fù)次數(shù),生成包含該重復(fù)次數(shù)的上述解析信息。
6.如權(quán)利要求5所述的程序處理裝置,其特征在于上述提示信息是指定循環(huán)處理的重復(fù)進(jìn)行規(guī)定次數(shù)以上的信息,上述檢驗(yàn)單元基于上述解析信息,檢驗(yàn)與上述提示信息對應(yīng)的循環(huán)處理的重復(fù)是否進(jìn)行了上述規(guī)定次數(shù)以上。
7.如權(quán)利要求5所述的程序處理裝置,其特征在于上述提示信息是指定循環(huán)處理的重復(fù)僅進(jìn)行規(guī)定次數(shù)以下的信息,上述檢驗(yàn)單元基于上述解析信息,檢驗(yàn)與上述提示信息對應(yīng)的循環(huán)處理的重復(fù)是否僅進(jìn)行上述規(guī)定次數(shù)以下。
8.如權(quán)利要求5所述的程序處理裝置,其特征在于上述提示信息是指定循環(huán)處理的重復(fù)次數(shù)一定為偶數(shù)的信息,上述檢驗(yàn)單元基于上述解析信息,檢驗(yàn)與上述提示信息對應(yīng)的循環(huán)處理的重復(fù)次數(shù)是否一定為偶數(shù)。
9.如權(quán)利要求5所述的程序處理裝置,其特征在于上述提示信息是指定循環(huán)處理的重復(fù)次數(shù)一定為奇數(shù)的信息,上述檢驗(yàn)單元基于上述解析信息,檢驗(yàn)與上述提示信息對應(yīng)的循環(huán)處理的重復(fù)次數(shù)是否一定為奇數(shù)。
10.如權(quán)利要求3所述的程序處理裝置,其特征在于上述提示信息是與數(shù)據(jù)的設(shè)置位置有關(guān)的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的數(shù)據(jù)的設(shè)置位置,生成包含該數(shù)據(jù)的設(shè)置位置的上述解析信息。
11.如權(quán)利要求10所述的程序處理裝置,其特征在于上述提示信息是指定數(shù)據(jù)和、該數(shù)據(jù)以規(guī)定值被調(diào)整的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的數(shù)據(jù)的調(diào)整值,生成含有解析結(jié)果的上述解析信息,上述檢驗(yàn)單元基于上述解析信息,檢驗(yàn)由上述提示信息指定的數(shù)據(jù)的調(diào)整值是否與由上述提示信息指定的上述規(guī)定值一致。
12.如權(quán)利要求3所述的程序處理裝置,其特征在于上述提示信息是與指針變量訪問的區(qū)域有關(guān)的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的指針變量訪問的區(qū)域,生成包含解析結(jié)果的上述解析信息。
13.如權(quán)利要求12所述的程序處理裝置,其特征在于上述提示信息是指定指針變量和、該指針變量訪問的區(qū)域與其他指針變量訪問的區(qū)域之間不具有重復(fù)區(qū)域的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的指針變量訪問的區(qū)域與其他指針變量訪問的區(qū)域之間是否具有重復(fù)區(qū)域,并生成含有解析結(jié)果的上述解析信息,上述檢驗(yàn)單元基于上述解析信息,檢驗(yàn)由上述提示信息指定的指針變量與其他指針變量訪問的區(qū)域之間是否具有重復(fù)區(qū)域。
14.如權(quán)利要求3所述的程序處理裝置,其特征在于上述提示信息是與從變量的數(shù)據(jù)讀取和對變量的數(shù)據(jù)寫入有關(guān)的信息,上述語法解析單元解析從含有上述提示信息的程序中所包含的變量的數(shù)據(jù)讀取或者對該變量的數(shù)據(jù)寫入,生成包含解析結(jié)果的上述解析信息。
15.如權(quán)利要求14所述的程序處理裝置,其特征在于上述提示信息是指定變量和、在描述該提示信息的位置之后對該變量的訪問是從數(shù)據(jù)寫入開始的信息,上述檢驗(yàn)單元基于上述解析信息,檢驗(yàn)由上述提示信息指定的變量,在描述該提示信息的位置之后對該變量的訪問是否從數(shù)據(jù)寫入開始。
16.如權(quán)利要求3所述的程序處理裝置,其特征在于上述提示信息是與分支條件的成立頻度有關(guān)的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的分支條件的靜態(tài)成立頻度,生成包含解析結(jié)果的上述解析信息。
17.如權(quán)利要求16所述的程序處理裝置,其特征在于上述提示信息是表示分支條件成立的可能性大的信息,上述檢驗(yàn)單元基于上述語法解析單元,檢驗(yàn)與上述提示信息對應(yīng)的分支條件成立的可能性是否大。
18.如權(quán)利要求2所述的程序處理裝置,其特征在于上述提示信息是指示利用編譯器的程序的最佳化處理方法的信息,上述檢驗(yàn)單元基于上述解析信息,檢驗(yàn)由上述提示信息指示的上述最佳化處理方法能否實(shí)現(xiàn)。
19.如權(quán)利要求18所述的程序處理裝置,其特征在于上述提示信息是指示利用循環(huán)展開的循環(huán)處理最佳化的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的循環(huán)處理的重復(fù)次數(shù),生成包含該重復(fù)次數(shù)的解析信息,上述檢驗(yàn)單元基于上述解析信息,對與上述提示信息對應(yīng)的循環(huán)處理檢驗(yàn)?zāi)芊襁M(jìn)行利用循環(huán)展開的最佳化。
20.如權(quán)利要求19所述的程序處理裝置,其特征在于,上述檢驗(yàn)單元具有條件判斷部,在循環(huán)展開時展開的重復(fù)次數(shù)為2時,基于上述解析信息,判斷是否滿足與上述提示信息對應(yīng)的循環(huán)處理的重復(fù)次數(shù)大于等于2次、且只是奇數(shù)次或偶數(shù)次的條件;循環(huán)展開可否判斷部,在滿足上述條件時,判斷為對與上述提示信息對應(yīng)的循環(huán)處理是否可以進(jìn)行利用循環(huán)展開的最佳化。
21.如權(quán)利要求18所述的程序處理裝置,其特征在于上述提示信息是指示利用軟件流水線技術(shù)的循環(huán)處理最佳化的信息,上述語法解析單元解析含有上述提示信息的程序中所包含的循環(huán)處理的重復(fù)次數(shù),生成包含該重復(fù)次數(shù)的解析信息,上述檢驗(yàn)單元基于上述解析信息,判斷對與上述提示信息對應(yīng)的循環(huán)處理可否進(jìn)行利用軟件流水線技術(shù)的最佳化。
22.如權(quán)利要求21所述的程序處理裝置,其特征在于,上述檢驗(yàn)單元具有重復(fù)次數(shù)判斷部,在同時執(zhí)行的重復(fù)次數(shù)為n次時,基于上述解析信息,判斷與上述提示信息對應(yīng)的循環(huán)處理的重復(fù)次數(shù)是否大于等于n;軟件流水線技術(shù)可否判斷部,若與上述提示信息對應(yīng)的上述循環(huán)處理的上述重復(fù)次數(shù)大于等于n次,則判斷為對該循環(huán)處理可以進(jìn)行利用軟件流水線技術(shù)的最佳化;其中,n為大于等于2的整數(shù)。
23.如權(quán)利要求18所述的程序處理裝置,其特征在于,上述提示信息是指示多個數(shù)據(jù)和、利用對該多個數(shù)據(jù)的配對命令的生成而進(jìn)行的數(shù)據(jù)訪問最佳化的信息;上述語法解析單元解析含有上述提示信息的程序中所包含的數(shù)據(jù)的調(diào)整值,生成包含解析結(jié)果的上述解析信息;上述檢驗(yàn)單元具有條件判斷部,基于上述解析單元,判斷由上述提示信息指定的上述多個數(shù)據(jù)的調(diào)整值是否滿足上述多個數(shù)據(jù)類型大小的2倍以上的條件;配對命令生成可否判斷部,在滿足上述條件時,對由上述提示信息指定的上述多個數(shù)據(jù)判斷為可以進(jìn)行利用生成配對命令而進(jìn)行的數(shù)據(jù)訪問的最佳化。
24.如權(quán)利要求18所述的程序處理裝置,其特征在于上述提示信息是指示變量和、緩沖存儲器的控制處理的最佳化的信息。
25.如權(quán)利要求24所述的程序處理裝置,其特征在于上述提示信息是指示變量和、在上述緩沖存儲器上確保用于存儲該變量值的區(qū)域的信息;上述語法解析單元解析從包含上述提示信息的程序中所含的變量的數(shù)據(jù)讀取或?qū)υ撟兞康臄?shù)據(jù)寫入,生成包含解析結(jié)果的上述解析信息;上述檢驗(yàn)單元具有條件判斷部,基于上述解析單元,判斷由上述提示信息指定的上述變量是否滿足在描述該提示信息的位置之后對該變量的訪問是從數(shù)據(jù)寫入開始的條件;緩沖存儲器最佳化可否判斷部,在滿足上述條件時,判斷是否可以通過在緩沖存儲器上確保用于存儲由上述提示信息指定的上述變量值的區(qū)域來進(jìn)行上述緩沖存儲器的最佳化。
26.如權(quán)利要求2所述的程序處理裝置,其特征在于,還具有錯誤信息輸出單元,在上述檢驗(yàn)單元判斷為上述提示信息沒有邏輯匹配性時,輸出錯誤信息。
27.如權(quán)利要求26所述的程序處理裝置,其特征在于在上述檢驗(yàn)單元判斷為上述提示信息沒有邏輯匹配性時,上述錯誤信息輸出單元輸出該提示信息的糾正方法。
28.如權(quán)利要求26所述的程序處理裝置,其特征在于在上述檢驗(yàn)單元判斷為上述提示信息沒有邏輯匹配性時,上述錯誤信息輸出單元輸出不足的提示信息。
29.如權(quán)利要求26所述的程序處理裝置,其特征在于在上述檢驗(yàn)單元判斷為上述提示信息沒有邏輯匹配性時,啟動編譯器時,上述錯誤信息輸出單元輸出用戶對包含成為編譯對象的上述提示信息的程序指定的編譯選項(xiàng)。
30.如權(quán)利要求2所述的程序處理裝置,其特征在于,還具有錯誤信息輸出單元,在上述檢驗(yàn)單元不能判斷上述提示信息是否有邏輯匹配性時,輸出表示不能判斷上述提示信息是否有邏輯匹配性的錯誤信息。
31.如權(quán)利要求1所述的程序處理裝置,其特征在于,上述程序是用C語言或C++語言描述,上述提示信息是用戶可在上述程序中描述的對編譯器的指示,即編譯指示描述。
全文摘要
提供一種程序處理裝置,為了使編譯器不會生成錯誤的機(jī)器語言程序,可以對編譯指示所代表的提示信息進(jìn)行檢驗(yàn)。該程序處理裝置具有語法解析單元(104),解析包含用戶對編譯器提供的提示信息的程序(101)的語法,生成解析信息(106);和錯誤檢驗(yàn)部(105),基于上述解析信息(106),檢驗(yàn)包含上述提示信息的程序(101)中的上述提示信息的邏輯匹配性。
文檔編號G06F9/45GK1758222SQ200510108608
公開日2006年4月12日 申請日期2005年10月8日 優(yōu)先權(quán)日2004年10月8日
發(fā)明者小川一, 坂田俊幸, 瓶子岳人 申請人:松下電器產(chǎn)業(yè)株式會社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
资阳市| 曲阜市| 东兴市| 山西省| 宜春市| 邹平县| 恩施市| 开化县| 克什克腾旗| 信阳市| 金坛市| 曲水县| 东山县| 肃北| 大埔区| 察雅县| 万全县| 丽江市| 河北区| 抚宁县| 杭锦后旗| 平南县| 江西省| 无极县| 海南省| 大理市| 郴州市| 屯昌县| 兴和县| 远安县| 社会| 栾城县| 牡丹江市| 合水县| 亳州市| 南召县| 武义县| 新河县| 永兴县| 佛学| 汝南县|