-
Notifications
You must be signed in to change notification settings - Fork 10.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[llvm] Move AttributeMask to a separate header
Move `AttributeMask` out of `llvm/IR/Attributes.h` to a new file `llvm/IR/AttributeMask.h`. After doing this we can remove the `#include <bitset>` and `#include <set>` directives from `Attributes.h`. Since there are many headers including `Attributes.h`, but not needing the definition of `AttributeMask`, this causes unnecessary bloating of the translation units and slows down compilation. This commit adds in the include directive for `llvm/IR/AttributeMask.h` to the handful of source files that need to see the definition. This reduces the total number of preprocessing tokens across the LLVM source files in lib from (roughly) 1,917,509,187 to 1,902,982,273 - a reduction of ~0.76%. This should result in a small improvement in compilation time. Differential Revision: https://reviews.llvm.org/D153728
- Loading branch information
1 parent
1d699bf
commit f0fa2d7
Showing
23 changed files
with
108 additions
and
63 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
//===- llvm/AttributeMask.h - Mask for Attributes ---------------*- C++ -*-===// | ||
// | ||
// 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 | ||
// | ||
//===----------------------------------------------------------------------===// | ||
// | ||
/// \file | ||
// This file declares the AttributeMask class. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef LLVM_IR_ATTRIBUTEMASK_H | ||
#define LLVM_IR_ATTRIBUTEMASK_H | ||
|
||
#include "llvm/ADT/SmallString.h" | ||
#include "llvm/IR/Attributes.h" | ||
#include <bitset> | ||
#include <cassert> | ||
#include <set> | ||
|
||
namespace llvm { | ||
|
||
//===----------------------------------------------------------------------===// | ||
/// \class | ||
/// This class stores enough information to efficiently remove some attributes | ||
/// from an existing AttrBuilder, AttributeSet or AttributeList. | ||
class AttributeMask { | ||
std::bitset<Attribute::EndAttrKinds> Attrs; | ||
std::set<SmallString<32>, std::less<>> TargetDepAttrs; | ||
|
||
public: | ||
AttributeMask() = default; | ||
AttributeMask(const AttributeMask &) = delete; | ||
AttributeMask(AttributeMask &&) = default; | ||
|
||
AttributeMask(AttributeSet AS) { | ||
for (Attribute A : AS) | ||
addAttribute(A); | ||
} | ||
|
||
/// Add an attribute to the mask. | ||
AttributeMask &addAttribute(Attribute::AttrKind Val) { | ||
assert((unsigned)Val < Attribute::EndAttrKinds && | ||
"Attribute out of range!"); | ||
Attrs[Val] = true; | ||
return *this; | ||
} | ||
|
||
/// Add the Attribute object to the builder. | ||
AttributeMask &addAttribute(Attribute A) { | ||
if (A.isStringAttribute()) | ||
addAttribute(A.getKindAsString()); | ||
else | ||
addAttribute(A.getKindAsEnum()); | ||
return *this; | ||
} | ||
|
||
/// Add the target-dependent attribute to the builder. | ||
AttributeMask &addAttribute(StringRef A) { | ||
TargetDepAttrs.insert(A); | ||
return *this; | ||
} | ||
|
||
/// Return true if the builder has the specified attribute. | ||
bool contains(Attribute::AttrKind A) const { | ||
assert((unsigned)A < Attribute::EndAttrKinds && "Attribute out of range!"); | ||
return Attrs[A]; | ||
} | ||
|
||
/// Return true if the builder has the specified target-dependent | ||
/// attribute. | ||
bool contains(StringRef A) const { return TargetDepAttrs.count(A); } | ||
|
||
/// Return true if the mask contains the specified attribute. | ||
bool contains(Attribute A) const { | ||
if (A.isStringAttribute()) | ||
return contains(A.getKindAsString()); | ||
return contains(A.getKindAsEnum()); | ||
} | ||
}; | ||
|
||
} // end namespace llvm | ||
|
||
#endif // LLVM_IR_ATTRIBUTEMASK_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters