; This test makes sure that mul instructions are properly eliminated. ; ; RUN: as < %s | opt -instcombine | dis | not grep mul implementation int %test1(int %A) { %B = mul int %A, 1 ret int %B } int %test2(int %A) { %B = mul int %A, 2 ; Should convert to an add instruction ret int %B } int %test3(int %A) { %B = mul int %A, 0 ; This should disappear entirely ret int %B } double %test4(double %A) { %B = mul double 1.0, %A ; This is safe for FP ret double %B } int %test5(int %A) { %B = mul int %A, 8 ret int %B } ubyte %test6(ubyte %A) { %B = mul ubyte %A, 8 %C = mul ubyte %B, 8 ret ubyte %C } int %test7(int %i) { %tmp = mul int %i, -1 ; %tmp = sub 0, %i ret int %tmp } ulong %test8(ulong %i) { %j = mul ulong %i, 18446744073709551615 ; tmp = sub 0, %i ret ulong %j }