Revert "InstCombine: Clean up weird code that talks about a modulus that's long gone."

This causes crashes during the build of compiler-rt during selfhost. Add a
testcase for coverage.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173279 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/InstCombine/InstructionCombining.cpp b/lib/Transforms/InstCombine/InstructionCombining.cpp
index e9e05ce..dc7fe5c 100644
--- a/lib/Transforms/InstCombine/InstructionCombining.cpp
+++ b/lib/Transforms/InstCombine/InstructionCombining.cpp
@@ -758,7 +758,12 @@
     FirstIdx = Offset/TySize;
     Offset -= FirstIdx*TySize;
 
-    assert(Offset >= 0 && "Offset should never be negative!");
+    // Handle hosts where % returns negative instead of values [0..TySize).
+    if (Offset < 0) {
+      --FirstIdx;
+      Offset += TySize;
+      assert(Offset >= 0);
+    }
     assert((uint64_t)Offset < (uint64_t)TySize && "Out of range offset");
   }