Skip to content
  • Xavier Leroy's avatar
    If-conversion optimization · 8e3a7344
    Xavier Leroy authored
    Extends the instruction selection pass with an if-conversion optimization:
    some if/then/else statements are converted into "select" operations,
    which in turn can be compiled down to branchless instruction sequences
    if the target architecture supports them.
    
    The statements that are converted are of the form
    
            if (cond) { x = a1; } else { x = a2; }
            if (cond) { x = a1; }
            if (cond) { /*skip*/; } else { x = a2; }
    
    where a1, a2 are "safe" expressions, containing no operations that can
    fail at run-time, such as memory loads or integer divisions.
    
    A heuristic in backend/Selectionaux.ml controls when the optimization occurs,
    depending on command-line flags and the complexity of the "then" and "else"
    branches.
    8e3a7344