Skip to content
  • Dan Gohman's avatar
    Teach IndVarSimplify to optimize code using the C "int" type for · eb6be650
    Dan Gohman authored
    loop induction on LP64 targets. When the induction variable is
    used in addressing, IndVars now is usually able to inserst a
    64-bit induction variable and eliminates the sign-extending cast.
    This is also useful for code using C "short" types for
    induction variables on targets with 32-bit addressing.
    
    Inserting a wider induction variable is easy; the tricky part is
    determining when trunc(sext(i)) expressions are no-ops. This
    requires range analysis of the loop trip count. A common case is
    when the original loop iteration starts at 0 and exits when the
    induction variable is signed-less-than a fixed value; this case
    is now handled.
    
    This replaces IndVarSimplify's OptimizeCanonicalIVType. It was
    doing the same optimization, but it was limited to loops with
    constant trip counts, because it was running after the loop
    rewrite, and the information about the original induction
    variable is lost by that point.
    
    Rename ScalarEvolution's executesAtLeastOnce to
    isLoopGuardedByCond, generalize it to be able to test for
    ICMP_NE conditions, and move it to be a public function so that
    IndVars can use it.
    
    llvm-svn: 64407
    eb6be650
Loading