diff --git a/llvm/unittests/ADT/StringSwitchTest.cpp b/llvm/unittests/ADT/StringSwitchTest.cpp
index 9f69bc3..1a51629 100644
--- a/llvm/unittests/ADT/StringSwitchTest.cpp
+++ b/llvm/unittests/ADT/StringSwitchTest.cpp
@@ -41,6 +41,36 @@
   EXPECT_EQ(-1, Translate("Test"));
 }
 
+TEST(StringSwitchTest, CaseLower) {
+  auto Translate = [](StringRef S) {
+    return llvm::StringSwitch<int>(S)
+        .Case("0", 0)
+        .Case("1", 1)
+        .Case("2", 2)
+        .Case("3", 3)
+        .Case("4", 4)
+        .Case("5", 5)
+        .Case("6", 6)
+        .Case("7", 7)
+        .Case("8", 8)
+        .Case("9", 9)
+        .CaseLower("A", 10)
+        .CaseLower("B", 11)
+        .CaseLower("C", 12)
+        .CaseLower("D", 13)
+        .CaseLower("E", 14)
+        .CaseLower("F", 15)
+        .Default(-1);
+  };
+  EXPECT_EQ(1, Translate("1"));
+  EXPECT_EQ(2, Translate("2"));
+  EXPECT_EQ(11, Translate("B"));
+  EXPECT_EQ(11, Translate("b"));
+
+  EXPECT_EQ(-1, Translate(""));
+  EXPECT_EQ(-1, Translate("Test"));
+}
+
 TEST(StringSwitchTest, StartsWith) {
   auto Translate = [](StringRef S) {
     return llvm::StringSwitch<std::function<int(int, int)>>(S)
@@ -60,6 +90,29 @@
   EXPECT_EQ(0, Translate("ADDER")(10, 5));
 }
 
+TEST(StringSwitchTest, StartsWithLower) {
+  auto Translate = [](StringRef S) {
+    return llvm::StringSwitch<std::function<int(int, int)>>(S)
+        .StartsWithLower("add", [](int X, int Y) { return X + Y; })
+        .StartsWithLower("sub", [](int X, int Y) { return X - Y; })
+        .StartsWithLower("mul", [](int X, int Y) { return X * Y; })
+        .StartsWithLower("div", [](int X, int Y) { return X / Y; })
+        .Default([](int X, int Y) { return 0; });
+  };
+
+  EXPECT_EQ(15, Translate("adder")(10, 5));
+  EXPECT_EQ(5, Translate("subtracter")(10, 5));
+  EXPECT_EQ(50, Translate("multiplier")(10, 5));
+  EXPECT_EQ(2, Translate("divider")(10, 5));
+
+  EXPECT_EQ(15, Translate("AdDeR")(10, 5));
+  EXPECT_EQ(5, Translate("SuBtRaCtEr")(10, 5));
+  EXPECT_EQ(50, Translate("MuLtIpLiEr")(10, 5));
+  EXPECT_EQ(2, Translate("DiViDeR")(10, 5));
+
+  EXPECT_EQ(0, Translate("nothing")(10, 5));
+}
+
 TEST(StringSwitchTest, EndsWith) {
   enum class Suffix { Possible, PastTense, Process, InProgressAction, Unknown };
 
@@ -80,6 +133,26 @@
   EXPECT_EQ(Suffix::Unknown, Translate("OPTIMIZABLE"));
 }
 
+TEST(StringSwitchTest, EndsWithLower) {
+  enum class Suffix { Possible, PastTense, Process, InProgressAction, Unknown };
+
+  auto Translate = [](StringRef S) {
+    return llvm::StringSwitch<Suffix>(S)
+        .EndsWithLower("able", Suffix::Possible)
+        .EndsWithLower("ed", Suffix::PastTense)
+        .EndsWithLower("ation", Suffix::Process)
+        .EndsWithLower("ing", Suffix::InProgressAction)
+        .Default(Suffix::Unknown);
+  };
+
+  EXPECT_EQ(Suffix::Possible, Translate("optimizable"));
+  EXPECT_EQ(Suffix::Possible, Translate("OPTIMIZABLE"));
+  EXPECT_EQ(Suffix::PastTense, Translate("optimized"));
+  EXPECT_EQ(Suffix::Process, Translate("optimization"));
+  EXPECT_EQ(Suffix::InProgressAction, Translate("optimizing"));
+  EXPECT_EQ(Suffix::Unknown, Translate("optimizer"));
+}
+
 TEST(StringSwitchTest, Cases) {
   enum class OSType { Windows, Linux, Unknown };
 
@@ -105,3 +178,29 @@
   EXPECT_EQ(OSType::Unknown, Translate("Windows"));
   EXPECT_EQ(OSType::Unknown, Translate(""));
 }
+
+TEST(StringSwitchTest, CasesLower) {
+  enum class OSType { Windows, Linux, Unknown };
+
+  auto Translate = [](StringRef S) {
+    return llvm::StringSwitch<OSType>(S)
+        .CasesLower("wind\0ws", "win32", "winnt", OSType::Windows)
+        .CasesLower("linux", "unix", "*nix", "posix", OSType::Linux)
+        .Default(OSType::Unknown);
+  };
+
+  EXPECT_EQ(OSType::Windows, Translate(llvm::StringRef("WIND\0WS", 7)));
+  EXPECT_EQ(OSType::Windows, Translate("WIN32"));
+  EXPECT_EQ(OSType::Windows, Translate("WINNT"));
+
+  EXPECT_EQ(OSType::Linux, Translate("LINUX"));
+  EXPECT_EQ(OSType::Linux, Translate("UNIX"));
+  EXPECT_EQ(OSType::Linux, Translate("*NIX"));
+  EXPECT_EQ(OSType::Linux, Translate("POSIX"));
+
+  EXPECT_EQ(OSType::Windows, Translate(llvm::StringRef("wind\0ws", 7)));
+  EXPECT_EQ(OSType::Linux, Translate("linux"));
+
+  EXPECT_EQ(OSType::Unknown, Translate("wind"));
+  EXPECT_EQ(OSType::Unknown, Translate(""));
+}
