diff -u -r -N llvm-3.3.src/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp llvm-3.3/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
--- llvm-3.3.src/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp	2013-01-02 06:36:10.000000000 -0500
+++ llvm-3.3/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp	2014-06-18 23:11:49.000000000 -0400
@@ -754,7 +754,7 @@
       ComputeMaskedBits(I->getOperand(0), LHSKnownZero, LHSKnownOne, Depth+1);
       // If it's known zero, our sign bit is also zero.
       if (LHSKnownZero.isNegative())
-        KnownZero |= LHSKnownZero;
+        KnownZero.setBit(KnownZero.getBitWidth() - 1);
     }
     break;
   case Instruction::URem: {
