mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Add target-dependent versions of addAttribute/removeAttribute to AttrBuilder.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174356 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ca531fd486
commit
ea59f896a6
@ -20,6 +20,7 @@
|
||||
#include "llvm/ADT/DenseSet.h"
|
||||
#include "llvm/ADT/FoldingSet.h"
|
||||
#include <cassert>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
namespace llvm {
|
||||
@ -341,6 +342,7 @@ template<> struct DenseMapInfo<Attribute::AttrKind> {
|
||||
/// equality, presence of attributes, etc.
|
||||
class AttrBuilder {
|
||||
DenseSet<Attribute::AttrKind> Attrs;
|
||||
std::map<std::string, std::string> TargetDepAttrs;
|
||||
uint64_t Alignment;
|
||||
uint64_t StackAlignment;
|
||||
public:
|
||||
@ -361,12 +363,18 @@ public:
|
||||
/// \brief Add the Attribute object to the builder.
|
||||
AttrBuilder &addAttribute(Attribute A);
|
||||
|
||||
/// \brief Add the target-dependent attribute to the builder.
|
||||
AttrBuilder &addAttribute(StringRef A, StringRef V);
|
||||
|
||||
/// \brief Remove an attribute from the builder.
|
||||
AttrBuilder &removeAttribute(Attribute::AttrKind Val);
|
||||
|
||||
/// \brief Remove the attributes from the builder.
|
||||
AttrBuilder &removeAttributes(AttributeSet A, uint64_t Index);
|
||||
|
||||
/// \brief Remove the target-dependent attribute to the builder.
|
||||
AttrBuilder &removeAttribute(StringRef A);
|
||||
|
||||
/// \brief Return true if the builder has the specified attribute.
|
||||
bool contains(Attribute::AttrKind A) const;
|
||||
|
||||
|
@ -46,7 +46,7 @@ Attribute Attribute::get(LLVMContext &Context, Constant *Kind, Constant *Val) {
|
||||
pImpl->AttrsSet.InsertNode(PA, InsertPoint);
|
||||
}
|
||||
|
||||
// Return the AttributesList that we found or created.
|
||||
// Return the Attribute that we found or created.
|
||||
return Attribute(PA);
|
||||
}
|
||||
|
||||
@ -826,6 +826,11 @@ AttrBuilder &AttrBuilder::addAttribute(Attribute Attr) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
AttrBuilder &AttrBuilder::addAttribute(StringRef A, StringRef V) {
|
||||
TargetDepAttrs[A] = V;
|
||||
return *this;
|
||||
}
|
||||
|
||||
AttrBuilder &AttrBuilder::removeAttribute(Attribute::AttrKind Val) {
|
||||
Attrs.erase(Val);
|
||||
|
||||
@ -861,6 +866,13 @@ AttrBuilder &AttrBuilder::removeAttributes(AttributeSet A, uint64_t Index) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
AttrBuilder &AttrBuilder::removeAttribute(StringRef A) {
|
||||
std::map<std::string, std::string>::iterator I = TargetDepAttrs.find(A);
|
||||
if (I != TargetDepAttrs.end())
|
||||
TargetDepAttrs.erase(I);
|
||||
return *this;
|
||||
}
|
||||
|
||||
AttrBuilder &AttrBuilder::addAlignmentAttr(unsigned Align) {
|
||||
if (Align == 0) return *this;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user