@techreport{oai:ipsj.ixsq.nii.ac.jp:00185138, author = {田中, 健司 and 石浦, 菜岐佐 and 西村, 啓成 and 福井, 昭也 and Kenji, Tanaka and Nagisa, Ishiura and Masanari, Nishimura and Akiya, Fukui}, issue = {29}, month = {Jan}, note = {本稿では,既存のテストプログラムから自動生成した機能等価なミュータントにより,コンパイラ基盤 LLVM のバックエンドの最適化性能をテストする手法を提案する.LLVM のバックエンドはコード生成のための変換に加えて,ターゲット依存の最適化や各種ピープホール最適化を行うため,生成されているコードの正誤だけでなく,意図通りの最適化が行われているかのテスト (性能テスト) が必要になる.最適化の性能テストは,主としてコンパイラ開発者が手動で作成したテストプログラムによって行われるため,テストプログラムのバリエーションが限られてしまう.本稿の手法では,開発者が特定の最適化機能を対象に作成したテストプログラムからミュータントを自動生成することによって,バックエンドの性能テストを強化する.本手法のミューテーション操作は元プログラムの実行結果を変化させないものに限定するため,意図通りの最適化ができているかどうかの判定はアセンブリコードの機械的な比較により行える.提案手法に基づくツールを Perl 5 を用いて実装しテストを行った結果,LLVM 6.0.0 の x86_64 用バックエンドにおいて,バックエンドの性能向上の参考になると考えられるテストケースを 2 件検出した., This article presents a method of testing optimization capability of LLVM back-ends by generating functionally equivalent test mutants from existing test programs. Since the LLVM back-ends perform various target dependent and peephole optimization as well as transformations for code generation, it is necessary to test if optimization is properly done as designed to enhance performance, not to mention if generated codes are correct. Test programs for the performance test are usually developed manually by compiler designers, which do not always provide enough variation to cover corner cases. The method in this article attempts to augment test cases by generating mutants from existing test programs. The mutation in our method is designed not to change the functionality of the original test programs, so that insufficient optimization is detected by mechanical comparison of assembly codes. In a preliminary experiment on the LLVM 6.0.0 back-end for x86_64, a tool based on the proposed method has found two interesting cases which might contribute toward performance improvement of the back-end.}, title = {LLVMバックエンドの最適化性能テストのミュータント生成}, year = {2018} }