  Program developers spend significant time on optimizing and tuning programs.
During this iterative process, they apply optimizations, analyze the resulting
code, and modify the compilation until they are satisfied. Understanding what
the compiler did with the code is crucial to this process but is very
time-consuming and labor-intensive. Users need to navigate through thousands of
lines of binary code and correlate it to source code concepts to understand the
results of the compilation and to identify optimizations. We present a design
study in collaboration with program developers and performance analysts. Our
collaborators work with various artifacts related to the program such as binary
code, source code, control flow graphs, and call graphs. Through interviews,
feedback, and pair-analytics sessions, we analyzed their tasks and workflow.
Based on this task analysis and through a human-centric design process, we
designed a visual analytics system Compilation Navigator (CcNav) to aid
exploration of the effects of compiler optimizations on the program. CcNav
provides a streamlined workflow and a unified context that integrates disparate
artifacts. CcNav supports consistent interactions across all the artifacts
making it easy to correlate binary code with source code concepts. CcNav
enables users to navigate and filter large binary code to identify and
summarize optimizations such as inlining, vectorization, loop unrolling, and
code hoisting. We evaluate CcNav through guided sessions and semi-structured
interviews. We reflect on our design process, particularly the immersive
elements, and on the transferability of design studies through our experience
with a previous design study on program analysis.
