--- /dev/null
+; RUN: llvm-as < %s | opt -instcombine | llvm-dis | egrep 'shl|lshr|ashr' | wc -l | grep 3
+
+int %test0(int %A, int %B, ubyte %C) {
+ %X = shl int %A, ubyte %C
+ %Y = shl int %B, ubyte %C
+ %Z = and int %X, %Y
+ ret int %Z
+}
+
+int %test1(int %A, int %B, ubyte %C) {
+ %X = lshr int %A, ubyte %C
+ %Y = lshr int %B, ubyte %C
+ %Z = or int %X, %Y
+ ret int %Z
+}
+
+int %test2(int %A, int %B, ubyte %C) {
+ %X = ashr int %A, ubyte %C
+ %Y = ashr int %B, ubyte %C
+ %Z = xor int %X, %Y
+ ret int %Z
+}