chore: update LLVM (#4959)

diff --git a/external.bzl b/external.bzl
index c0b1a9f..187beb4 100644
--- a/external.bzl
+++ b/external.bzl
@@ -70,10 +70,10 @@
         http_archive,
         name = "llvm-project-raw",
         build_file_content = "#empty",
-        sha256 = "512cc1b9e19981a1214a95b7f711ec2c12b78541866f1aaf00ea825bd3c2c70f",
-        strip_prefix = "llvm-project-0316f3e64972c919d8bfa2d15b9a4be858530f85",
+        sha256 = "e20dcfb060f7078124bf29d9c8dee8c5c56b4bebee33ab3b6fef2898262651f2",
+        strip_prefix = "llvm-project-82a3b606b01d2da23a40785222f3f7d15401dda0",
         urls = [
-            "https://github.com/llvm/llvm-project/archive/0316f3e64972c919d8bfa2d15b9a4be858530f85.zip",
+            "https://github.com/llvm/llvm-project/archive/82a3b606b01d2da23a40785222f3f7d15401dda0.zip",
         ],
     )
 
diff --git a/kythe/cxx/indexer/cxx/IndexerASTHooks.cc b/kythe/cxx/indexer/cxx/IndexerASTHooks.cc
index 8349ff0..f929d48 100644
--- a/kythe/cxx/indexer/cxx/IndexerASTHooks.cc
+++ b/kythe/cxx/indexer/cxx/IndexerASTHooks.cc
@@ -4280,7 +4280,7 @@
       return BuildNodeIdForSpecialTemplateArgument("nullptr");
     case TemplateArgument::Integral:
       return BuildNodeIdForSpecialTemplateArgument(
-          Arg.getAsIntegral().toString(10) + "i");
+          llvm::toString(Arg.getAsIntegral(), 10) + "i");
     case TemplateArgument::Template:
       return BuildNodeIdForTemplateName(Arg.getAsTemplate());
     case TemplateArgument::TemplateExpansion:
diff --git a/kythe/cxx/indexer/cxx/KytheGraphObserver.cc b/kythe/cxx/indexer/cxx/KytheGraphObserver.cc
index 135693c..0395011 100644
--- a/kythe/cxx/indexer/cxx/KytheGraphObserver.cc
+++ b/kythe/cxx/indexer/cxx/KytheGraphObserver.cc
@@ -901,7 +901,8 @@
                                                    const llvm::APSInt& Value) {
   VNameRef node_vname(VNameRefFromNodeId(node_id));
   recorder_->AddProperty(node_vname, NodeKindID::kConstant);
-  recorder_->AddProperty(node_vname, PropertyID::kText, Value.toString(10));
+  recorder_->AddProperty(node_vname, PropertyID::kText,
+                         llvm::toString(Value, 10));
 }
 
 void KytheGraphObserver::recordFunctionNode(
diff --git a/kythe/cxx/indexer/cxx/semantic_hash.cc b/kythe/cxx/indexer/cxx/semantic_hash.cc
index 06e8cc1..53d535b 100644
--- a/kythe/cxx/indexer/cxx/semantic_hash.cc
+++ b/kythe/cxx/indexer/cxx/semantic_hash.cc
@@ -73,7 +73,7 @@
       if (value.getMinSignedBits() <= sizeof(uint64_t) * CHAR_BIT) {
         return static_cast<uint64_t>(value.getExtValue());
       } else {
-        return std::hash<std::string>()(value.toString(10));
+        return std::hash<std::string>()(llvm::toString(value, 10));
       }
     }
     case TemplateArgument::Template:
diff --git a/kythe/cxx/indexer/cxx/semantic_hash.h b/kythe/cxx/indexer/cxx/semantic_hash.h
index 1f7dd4f..e3a11a8 100644
--- a/kythe/cxx/indexer/cxx/semantic_hash.h
+++ b/kythe/cxx/indexer/cxx/semantic_hash.h
@@ -21,6 +21,7 @@
 #include "clang/AST/Decl.h"
 #include "clang/AST/DeclTemplate.h"
 #include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/StringExtras.h"
 
 namespace kythe {
 
diff --git a/setup.bzl b/setup.bzl
index 4c5ca61..6dbc259 100644
--- a/setup.bzl
+++ b/setup.bzl
@@ -139,9 +139,9 @@
         name = "llvm-bazel",
         patch_args = ["-p2"],
         patches = ["@io_kythe//third_party:llvm-bazel-glob.patch"],
-        sha256 = "7f28107253563839a00705d328cd8a0c2ba94f3fbc3630148c770dc8a242ad1b",
-        strip_prefix = "llvm-bazel-7e975edbdfda63cdac85d64d63ff3b81982952b5/llvm-bazel",
+        sha256 = "1c54ed1c322cb96a64daab8d2d99e0178de17812e2992bf07f53756b13805822",
+        strip_prefix = "llvm-bazel-e3593b2e6eeb96e3972278073bc35ac8f4ea8f4b/llvm-bazel",
         urls = [
-            "https://github.com/google/llvm-bazel/archive/7e975edbdfda63cdac85d64d63ff3b81982952b5.zip",
+            "https://github.com/google/llvm-bazel/archive/e3593b2e6eeb96e3972278073bc35ac8f4ea8f4b.zip",
         ],
     )