2017-09-16 66 views
2

對於在PowerPC平臺上使用IBM XL C/C++ 012her的源文件,我們正在體驗bad code generation。它的表面作爲一個懸掛,它似乎是一個特定的循環沒有被打破。IBM XL C/C++相當於#pragma GCC優化

該問題僅在XL C/C++下出現。我們的測試機制表明源文件清除了未定義的行爲,內存錯誤和其他勘誤。我們也沒有從源文件的編譯器收到嚴格/不嚴格的警告。

我們想編譯源文件-O2而不是-O3。我們希望將源碼文件(如附註)添加到源文件中,以便編譯器可以對其進行適當的保護。該工具允許其他人連接Cmake和Autotools等其他構建系統,並且事情對他們來說「正常工作」。 (必要的信息在源代碼中可用,而不是在我們的makefile中)。

編譯器的IBM手冊位於IBM XL C/C++ for AIX, V13.1,但該死的如果我能找到選項。

什麼是IBM XL C/C++相當於#pragma GCC optimize?我們如何測試源代碼以告訴XL C/C++使用-O2而不是-O3

回答

2

您可用於編譯該源文件的IBM XL C/C++ for AIX V13.1選件-O2#pragma options optimize=2。有關它的信息可以在網上找到here或在PDF here。如果您想覆蓋已在命令行中指定的-O3,並在功能級別對其進行控制,則可以使用#pragma option_override(<your function name>, "opt(level, 2)")。有關它的信息可以在網上找到here或在PDF here。你也可以通過修改你的Makefile來達到同樣的效果,以便在-O2而不是-O3編譯一個源文件。

另外,您確定您報告的以tea.cpp:27:26開頭的錯誤消息來自IBM XL C/C++ for AIX V13.1嗎?它看起來不像該產品診斷信息的格式。

我們將繼續監視在堆棧溢出您的意見(與XLC標記可以幫助我們找到它),但你會發現,如果你對我們的http://ibm.biz/xl-power-compilers-forum其中IBM論壇,發表您的問題就可以得到更快的響應時間編譯器開發團隊更積極地監控。

+1

Thanks @trudeaun。我認爲你對編譯器診斷是正確的。它看起來像一個GCC消息。關於'-O2',我們發現了疼痛點。它在[問題503](https://github.com/weidai11/cryptopp/issues/503)被清除。我猜這就是*「As If」*規則C++規則 - 編譯器編寫者被允許將功能正常的程序變成無法運行的程序:) – jww

+1

關於堆棧溢出與IBM論壇,感謝您的監視。我沒有討論帳戶,我也不會加入另一個社交網絡,所以我無法使用該場所。如果IBM接受谷歌,Facebook等,那將會很不錯。但是我知道大多數公司都希望成爲收集信息的服務提供商;他們不想成爲必須放棄信息的依賴方。 – jww

+1

再次感謝@trudeaun。我看到手動參考發生了什麼。您指出的信息在手冊中。但是,我從另一端開始工作:我在第441頁的手冊中找到了'option_override',然後我開始尋找圍繞441-445頁的優化選項。問題是,'「opt(level,2)」'在手冊的這個區域沒有討論。其他優化如'unroll'和'nameroll',但不是'「opt(level,2)」'。我想我仍然在學習使用手冊。 – jww