[llvm] c17da86 - Support: Avoid std::tie in Support/FileSystem/UniqueID.h, NFC

Duncan P. N. Exon Smith via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 2 10:32:10 PST 2020


Author: Duncan P. N. Exon Smith
Date: 2020-11-02T13:26:15-05:00
New Revision: c17da8676a0ccdf3039b37d9fabb7062ab98070c

URL: https://github.com/llvm/llvm-project/commit/c17da8676a0ccdf3039b37d9fabb7062ab98070c
DIFF: https://github.com/llvm/llvm-project/commit/c17da8676a0ccdf3039b37d9fabb7062ab98070c.diff

LOG: Support: Avoid std::tie in Support/FileSystem/UniqueID.h, NFC

Running `-fsyntax-only` on UniqueID.h is 2x faster with this patch
(which avoids calling `std::tie` for `operator<`).  Since the transitive
includers of this file will go up as `FileEntryRef` gets used in more
places, avoid that compile-time hit.  This is a follow-up to
23ed570af1cc165afea1b70a533a4a39d6656501 (suggested by Reid Kleckner).

Also drop the `<tuple>` include from FileSystem.h (which was vestigal
from before UniqueID.h was split out).

Differential Revision: https://reviews.llvm.org/D90471

Added: 
    llvm/unittests/Support/FSUniqueIDTest.cpp

Modified: 
    llvm/include/llvm/Support/FileSystem.h
    llvm/include/llvm/Support/FileSystem/UniqueID.h
    llvm/unittests/Support/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/Support/FileSystem.h b/llvm/include/llvm/Support/FileSystem.h
index b1fb54ef47e8..2483aae046f5 100644
--- a/llvm/include/llvm/Support/FileSystem.h
+++ b/llvm/include/llvm/Support/FileSystem.h
@@ -43,7 +43,6 @@
 #include <stack>
 #include <string>
 #include <system_error>
-#include <tuple>
 #include <vector>
 
 #ifdef HAVE_SYS_STAT_H

diff  --git a/llvm/include/llvm/Support/FileSystem/UniqueID.h b/llvm/include/llvm/Support/FileSystem/UniqueID.h
index 1b79d4aad8e0..229410c8292e 100644
--- a/llvm/include/llvm/Support/FileSystem/UniqueID.h
+++ b/llvm/include/llvm/Support/FileSystem/UniqueID.h
@@ -15,7 +15,6 @@
 #define LLVM_SUPPORT_FILESYSTEM_UNIQUEID_H
 
 #include <cstdint>
-#include <tuple>
 
 namespace llvm {
 namespace sys {
@@ -34,7 +33,12 @@ class UniqueID {
   }
   bool operator!=(const UniqueID &Other) const { return !(*this == Other); }
   bool operator<(const UniqueID &Other) const {
-    return std::tie(Device, File) < std::tie(Other.Device, Other.File);
+    /// Don't use std::tie since it bloats the compile time of this header.
+    if (Device < Other.Device)
+      return true;
+    if (Other.Device < Device)
+      return false;
+    return File < Other.File;
   }
 
   uint64_t getDevice() const { return Device; }

diff  --git a/llvm/unittests/Support/CMakeLists.txt b/llvm/unittests/Support/CMakeLists.txt
index a1086e8b514b..0fb636a11a8f 100644
--- a/llvm/unittests/Support/CMakeLists.txt
+++ b/llvm/unittests/Support/CMakeLists.txt
@@ -37,6 +37,7 @@ add_llvm_unittest(SupportTests
   FileOutputBufferTest.cpp
   FileUtilitiesTest.cpp
   FormatVariadicTest.cpp
+  FSUniqueIDTest.cpp
   GlobPatternTest.cpp
   Host.cpp
   IndexedAccessorTest.cpp

diff  --git a/llvm/unittests/Support/FSUniqueIDTest.cpp b/llvm/unittests/Support/FSUniqueIDTest.cpp
new file mode 100644
index 000000000000..6c794730e39d
--- /dev/null
+++ b/llvm/unittests/Support/FSUniqueIDTest.cpp
@@ -0,0 +1,38 @@
+//===- llvm/unittest/Support/FSUniqueIDTest.cpp - Test sys::fs::UniqueID --===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Support/FileSystem/UniqueID.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+using namespace llvm::sys::fs;
+
+namespace {
+
+TEST(FSUniqueIDTest, construct) {
+  EXPECT_EQ(20u, UniqueID(20, 10).getDevice());
+  EXPECT_EQ(10u, UniqueID(20, 10).getFile());
+}
+
+TEST(FSUniqueIDTest, equals) {
+  EXPECT_TRUE(UniqueID(20, 10) == UniqueID(20, 10));
+  EXPECT_FALSE(UniqueID(20, 20) == UniqueID(20, 10));
+  EXPECT_FALSE(UniqueID(10, 10) == UniqueID(20, 10));
+}
+
+TEST(FSUniqueIDTest, less) {
+  EXPECT_FALSE(UniqueID(20, 2) < UniqueID(20, 2));
+  EXPECT_FALSE(UniqueID(20, 3) < UniqueID(20, 2));
+  EXPECT_FALSE(UniqueID(30, 2) < UniqueID(20, 2));
+  EXPECT_FALSE(UniqueID(30, 2) < UniqueID(20, 40));
+  EXPECT_TRUE(UniqueID(20, 2) < UniqueID(20, 3));
+  EXPECT_TRUE(UniqueID(20, 2) < UniqueID(30, 2));
+  EXPECT_TRUE(UniqueID(20, 40) < UniqueID(30, 2));
+}
+
+} // anonymous namespace


        


More information about the llvm-commits mailing list