[PATCH] D90471: Support: Avoid std::tie in Support/FileSystem/UniqueID.h, NFC
Duncan P. N. Exon Smith via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 30 08:39:32 PDT 2020
dexonsmith created this revision.
dexonsmith added a reviewer: rnk.
Herald added subscribers: ributzka, mgorny.
Herald added a project: LLVM.
dexonsmith requested review of this revision.
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 <https://reviews.llvm.org/rG23ed570af1cc165afea1b70a533a4a39d6656501> (suggested by Reid Kleckner).
Also drop the `<tuple>` include from FileSystem.h (which was vestigal
from before UniqueID.h was split out).
https://reviews.llvm.org/D90471
Files:
llvm/include/llvm/Support/FileSystem.h
llvm/include/llvm/Support/FileSystem/UniqueID.h
llvm/unittests/Support/CMakeLists.txt
llvm/unittests/Support/FSUniqueIDTest.cpp
Index: llvm/unittests/Support/FSUniqueIDTest.cpp
===================================================================
--- /dev/null
+++ 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
Index: llvm/unittests/Support/CMakeLists.txt
===================================================================
--- llvm/unittests/Support/CMakeLists.txt
+++ llvm/unittests/Support/CMakeLists.txt
@@ -37,6 +37,7 @@
FileOutputBufferTest.cpp
FileUtilitiesTest.cpp
FormatVariadicTest.cpp
+ FSUniqueIDTest.cpp
GlobPatternTest.cpp
Host.cpp
IndexedAccessorTest.cpp
Index: llvm/include/llvm/Support/FileSystem/UniqueID.h
===================================================================
--- llvm/include/llvm/Support/FileSystem/UniqueID.h
+++ 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 @@
}
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; }
Index: llvm/include/llvm/Support/FileSystem.h
===================================================================
--- llvm/include/llvm/Support/FileSystem.h
+++ 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90471.301914.patch
Type: text/x-patch
Size: 3060 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201030/12bfefac/attachment.bin>
More information about the llvm-commits
mailing list