1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

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
This commit is contained in:
Duncan P. N. Exon Smith 2020-10-30 11:13:37 -04:00
parent f7fe395a92
commit 538ee6c38c
4 changed files with 45 additions and 3 deletions

View File

@ -43,7 +43,6 @@
#include <stack> #include <stack>
#include <string> #include <string>
#include <system_error> #include <system_error>
#include <tuple>
#include <vector> #include <vector>
#ifdef HAVE_SYS_STAT_H #ifdef HAVE_SYS_STAT_H

View File

@ -15,7 +15,6 @@
#define LLVM_SUPPORT_FILESYSTEM_UNIQUEID_H #define LLVM_SUPPORT_FILESYSTEM_UNIQUEID_H
#include <cstdint> #include <cstdint>
#include <tuple>
namespace llvm { namespace llvm {
namespace sys { namespace sys {
@ -34,7 +33,12 @@ public:
} }
bool operator!=(const UniqueID &Other) const { return !(*this == Other); } bool operator!=(const UniqueID &Other) const { return !(*this == Other); }
bool operator<(const UniqueID &Other) const { 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; } uint64_t getDevice() const { return Device; }

View File

@ -37,6 +37,7 @@ add_llvm_unittest(SupportTests
FileOutputBufferTest.cpp FileOutputBufferTest.cpp
FileUtilitiesTest.cpp FileUtilitiesTest.cpp
FormatVariadicTest.cpp FormatVariadicTest.cpp
FSUniqueIDTest.cpp
GlobPatternTest.cpp GlobPatternTest.cpp
Host.cpp Host.cpp
IndexedAccessorTest.cpp IndexedAccessorTest.cpp

View File

@ -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