This patch teaches ConstantFolding to constant fold
both scalar and vector variants of llvm.smul.fix and
llvm.smul.fix.sat.
As described in the LangRef rounding is unspecified for
these instrinsics. If the result cannot be represented
exactly the default behavior in ConstantFolding is to
round down towards negative infinity. If a target has a
preferred rounding that is different some kind of target
hook would be needed (same strategy as used by the
SelectionDAG legalizer).
As a possible follow-up cleanup, this can be merged into the fshl/fshr code below. The smul_fix case could bail out if C0, C1 or C2 are null (or handle them, if there is interest to support undef operands).