Allow folding several instructions into casts, which can simplify a lot
authorChris Lattner <sabre@nondot.org>
Thu, 24 Jul 2003 17:35:25 +0000 (17:35 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 24 Jul 2003 17:35:25 +0000 (17:35 +0000)
commit24c8e38455539103a3f5e48564fce8acb62550f6
treee33d31305c2bd9d72c536cdbfe5b332cd3cbc33d
parent8baa92ef0bc7a412c166a5d2ca0c7d31a2f0bd9a
Allow folding several instructions into casts, which can simplify a lot
of codes.  For example,
short kernel (short t1) {
  t1 >>= 8; t1 <<= 8;
  return t1;
}

became:

short %kernel(short %t1.1) {
        %tmp.3 = shr short %t1.1, ubyte 8               ; <short> [#uses=1]
        %tmp.5 = cast short %tmp.3 to int               ; <int> [#uses=1]
        %tmp.7 = shl int %tmp.5, ubyte 8                ; <int> [#uses=1]
        %tmp.8 = cast int %tmp.7 to short               ; <short> [#uses=1]
        ret short %tmp.8
}

before, now it becomes:
short %kernel(short %t1.1) {
        %tmp.3 = shr short %t1.1, ubyte 8               ; <short> [#uses=1]
        %tmp.8 = shl short %tmp.3, ubyte 8              ; <short> [#uses=1]
        ret short %tmp.8
}

which will become:
short %kernel(short %t1.1) {
        %tmp.3 = and short %t1.1, 0xFF00
        ret short %tmp.3
}

This implements cast-set.ll:test4 and test5

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7290 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/InstructionCombining.cpp