2017-09-16 29 views
2

Nous rencontrons bad code generation pour un fichier source utilisant IBM XL C/C++ à -O3 sur les plates-formes PowerPC. Ses surfaces se bloquent et il semble qu'une boucle particulière ne soit pas cassée.IBM XL C/C++ équivalent à #pragma GCC optimiser

Le problème ne survient que sous XL C/C++. Notre régime de test indique que le fichier source est dépourvu de comportement indéfini, d'erreurs de mémoire et d'autres errata. Nous ne recevons pas non plus les avertissements strict/nostrict du compilateur pour le fichier source. Nous voulons compiler le fichier source à -O2 au lieu de -O3. Nous voulons ajouter des instruments, comme un pragma, au fichier source afin qu'il puisse être surveillé de manière appropriée pour le compilateur. L'instrumentation permet à d'autres de se connecter à d'autres systèmes de construction comme Cmake et Autotools et les choses vont «fonctionner» pour eux. (Les informations nécessaires sont disponibles dans la source et non dans notre makefile).

Le manuel IBM pour le compilateur est situé à IBM XL C/C++ for AIX, V13.1, mais bon sang si je peux trouver l'option.

Quel est l'équivalent d'IBM XL C/C++ à #pragma GCC optimize? Comment pouvons-nous instrumenter le code source pour indiquer à XL C/C++ d'utiliser -O2 au lieu de -O3?

Répondre

2

Une option IBM XL C/C++ pour AIX V13.1 que vous pouvez utiliser pour compiler ce fichier source à -O2 est #pragma options optimize=2. Les informations à ce sujet peuvent être trouvées en ligne here ou dans le PDF here. Si vous souhaitez remplacer -O3 qui a déjà été spécifié sur la ligne de commande et le contrôler au niveau d'une fonction, vous pouvez utiliser #pragma option_override(<your function name>, "opt(level, 2)"). Des informations à ce sujet peuvent être trouvées en ligne here ou dans le PDF here. Vous pouvez également obtenir la même chose en modifiant votre Makefile afin qu'un fichier source soit compilé à -O2 au lieu de -O3.

Etes-vous sûr que le message d'erreur que vous avez signalé en commençant par tea.cpp:27:26 provient d'IBM XL C/C++ pour AIX V13.1? Il ne semble pas que ce soit dans le format des messages de diagnostic de ce produit.

Nous continuerons à surveiller vos commentaires sur Stack Overflow (le marquage avec xlc nous aide à le trouver), mais vous pouvez trouver que vous pouvez obtenir un temps de réponse plus rapide si vous postez vos questions sur notre forum au http://ibm.biz/xl-power-compilers-forum, IBM L'équipe de développement du compilateur surveille plus activement.

+1

Merci @trudeaun. Je pense que vous avez raison sur le diagnostic du compilateur. Cela ressemble à un message GCC. En ce qui concerne «-O2», nous avons trouvé la plaie. Il a été autorisé à [numéro 503] (https://github.com/weidai11/cryptopp/issues/503). Je suppose que c'est la règle * "As If" * règle C++ - les rédacteurs de compilateur sont autorisés à transformer un programme en fonctionnement en un non-fonctionnement :) – jww

+1

En ce qui concerne Stack Overflow par rapport aux forums IBM, merci de surveiller. Je n'ai pas de compte de discussion et je ne vais pas rejoindre un autre réseau social, donc je ne peux pas utiliser le lieu. Ce serait bien si IBM acceptait Google, Facebook, etc. Mais je comprends que la plupart des entreprises veulent être le fournisseur de services pour collecter l'information; et ils ne veulent pas être la partie de confiance qui doit abandonner l'information. – jww

+1

Merci encore @trudeaun. Je vois ce qui s'est passé avec la référence manuelle. Les informations que vous avez indiquées sont dans le manuel. Cependant, je l'ai travaillé à partir de l'autre extrémité: j'ai trouvé 'option_override' dans le manuel de la page 441, puis je suis allé chercher des options d'optimisation autour des pages 441-445. Le problème est: "opt (level, 2)" n'est pas abordé dans cette partie du manuel. D'autres optimisations sont, comme 'unroll' et' nounroll', mais pas '" opt (niveau, 2) "'. Je suppose que j'apprends encore à utiliser le manuel. – jww