randomized stress testing of link time optimizers
play

Randomized Stress-Testing of Link-Time Optimizers Vu Le, Chengnian - PowerPoint PPT Presentation

Randomized Stress-Testing of Link-Time Optimizers Vu Le, Chengnian Sun , Zhendong Su University of California, Davis 1 7/15/2015 General Software Build Process Compiler Linker 2 7/15/2015 General Software Build Process Compiler


  1. Randomized Stress-Testing of Link-Time Optimizers Vu Le, Chengnian Sun , Zhendong Su University of California, Davis 1 7/15/2015

  2. General Software Build Process Compiler Linker 2 7/15/2015

  3. General Software Build Process Compiler  Compiler Optimizations  Intra-procedural, within a function Linker  Inter-procedural, across functions  Whole-program, over all the functions  Optimizing a translation unit (*.c),  Intra-procedural  Inter-procedural? Limited to the unit  Whole-program? Usually NO . 3 7/15/2015

  4. General Software Build Process Compiler  How to perform  More aggressive inter-procedural opts? Linker  Or even whole-program opts? 4 7/15/2015

  5. General Software Build Process Compiler  How to perform  More aggressive inter-procedural opts? Linker  Or even whole-program opts? ( LTO )Link-Time Optimizer 5 7/15/2015

  6. General Software Build Process Compiler Linker 6 7/15/2015

  7. Software Build Process with LTO ( -flto ) Compiler -flto save intermediate representation (IR) to *.obj Linker -flto read all IR back and optimize 7 7/15/2015

  8. Motivation – Stress Testing LTO  LTO is increasingly important [1,2]  Reduce code size by 15-20%  Increase speed by 5-15%  No effort yet on stress testing LTO  Csmith [3] and Orion [4] focus on classical optimizers [1] B. Anckaert, F. Vandeputte, B. Bus, B. Sutter, and K. Bosschere. Link-Time Optimization of IA64 Binaries. In M. Danelutto, M. Vanneschi, and D. Laforenza, editors, Euro-Par 2004 Parallel Processing [2] B. De Sutter, L. Van Put, D. Chanet, B. De Bus, and K. De Bosschere. Link-Time Compaction and Optimization of Arm Executables. ACM Trans. Embed. Comput. Syst 2007 [3] X. Yang, Y. Chen, E. Eide, and J. Regehr. Finding and understanding bugs in C compilers. PLDI 2011 [4] V. Le, M. Afshari, and Z. Su. Compiler validation via equivalence modulo inputs. PLDI 2014 8 7/15/2015

  9. Challenges  How to generate LTO-relevant test programs?  Csmith and Orion generate single-file test programs  How to reduce bug-triggering test programs?  Delta and Creduce, designed for single-file tests 9 7/15/2015

  10. Overall Framework – Differential Testing Random Split Build Program Files Config. Compile Compile Compile (no LTO) (LTO) (LTO) Execute Execute Execute Compare Reduce 10 7/15/2015

  11. Overall Framework – Differential Testing Random Split Build Program Files Config. Compile Compile Compile (no LTO) (LTO) (LTO) Execute Execute Execute Compare Reduce 11 7/15/2015

  12. Overall Framework – Differential Testing Random Split Build Program Files Config. Compile Compile Compile (no LTO) (LTO) (LTO) Execute Execute Execute Compare Reduce 12 7/15/2015

  13. Overall Framework – Differential Testing Random Split Build Program Files Config. Compile Compile Compile (no LTO) (LTO) (LTO) Execute Execute Execute Compare Reduce 13 7/15/2015

  14. Overall Framework – Differential Testing Random Split Build Program Files Config. Compile Compile Compile (no LTO) (LTO) (LTO) Execute Execute Execute Compare Reduce 14 7/15/2015

  15. Challenge I – Program Generation  Leverage existing program generators  Convert a sin ingle le -file test to mult ltiple iple files  Maximize the dependencies between source files 15 7/15/2015

  16. Challenge I – Program Generation (1) Csmith: Generate a random single-file program with Csmith Prog 16 7/15/2015

  17. Challenge I – Program Generation (2) Csmith: Generate a random single-file program with Csmith Orion: Inject arbitrary function calls into dead code regions, to complicate inter-dependencies Prog Orion Prog’ 17 7/15/2015

  18. Challenge I – Program Generation (3) Csmith: Generate a random single-file program with Csmith Orion: Inject arbitrary function calls into dead code regions, to complicate inter-dependencies Prog Split: Split the single-file program into multiple files, each file containing one function Orion Compiler -flto Linker -flto Prog’ Split 18 7/15/2015

  19. Challenge I – Build Configurations  Describe at which optimization level  a translation unit should be compiled  all object files should be linked  Random configurations can further exercise LTO  Opt as obfuscators Compiler -flto Linker -flto 19 7/15/2015

  20. Challenge I – An Example expected output: 0 20 7/15/2015

  21. Challenge I – An Example expected output: 0 21 7/15/2015

  22. Challenge I – An Example expected output: 0 22 7/15/2015

  23. Challenge I – An Example expected output: 0 23 7/15/2015

  24. Challenge I – An Example expected output: 0 24 7/15/2015

  25. Challenge I – An Example expected output: 0 real output : 1 25 7/15/2015

  26. Challenge II – Reducing Test Programs  Reducing multiple files is challenging  Interdependencies between translation units  Avoiding undefined behaviors (CompCert) Delta/Creduce 26 7/15/2015

  27. Challenge II – Reducing Test Programs  Reducing multiple files is challenging  Interdependencies between translation units  Avoiding introducing undefined behaviors  Instead, we reduce the single-file test program Prog’ Compiler -flto Linker -flto Split 27 7/15/2015

  28. Evaluation  Two multi-core Ubuntu machines  February 2014 – Janurary 2015  37 valid bug reports to GCC and LLVM (11 fixed) 28 7/15/2015

  29. Bug Classification GCC LLVM Total Wrong code 6 (5 fixed) 22 (0 fixed) 28 Crash 5 (5 fixed) 0 5 Linker Error 1 (1 fixed) 3 (0 fixed) 4 29 7/15/2015

  30. Conclusion  the first effort to stress-test LTO  transformation way to generate test programs  an effective technique to reduce LTO bugs  11 months, 37 valid bugs in GCC and LLVM 30 7/15/2015

  31. Overall Framework – Differential Testing Challenge I – Program Generation (3) Csmith: Generate a random single-file program Random Split Build with Csmith Program Files Config. Orion: Inject arbitrary function calls into dead code regions, to complicate inter-dependencies Prog Split: Split the single-file program into multiple files, Compile Compile Compile each file containing one function (no LTO) (LTO) (LTO) Orion Compiler -flto Execute Execute Execute Linker -flto Prog’ Compare Split Reduce 10 7/13/2015 18 7/13/2015 Challenge II – Reducing Test Programs Bug Classification  Reducing multiple files is challenging  Interdependencies between translation units  Avoiding introducing undefined behaviors  Instead, we reduce the single-file test program GCC LLVM Total Prog’ Wrong code 6 (5 fixed) 22 (0 fixed) 28 Compiler -flto Crash 5 (5 fixed) 0 5 Linker Error 1 (1 fixed) 3 (0 fixed) 4 Linker -flto Split 31 7/15/2015 27 7/13/2015 29 7/15/2015

Recommend


More recommend