: b fun main ( vararg args : String ) { println ( coalesce ( "one" , "two" )) println ( coalesce ( null , "two" )) } With the SSA IR, R8 is able to determine that both conditionals are useless after the inlining of coalesce and remove the dead branches. So while the data flow analysis really shines when optimizations like inlining are being applied by R8, if constant conditionals and dead code are present directly from source they'll still be eliminated by D8.