Skip to content

Commit 7512b21

Browse files
Address review comments about tests and names
This patch is removing the keyworkd and token inaccessibleWrite and inaccessibleRead. It is using Read and Write to set the Target Memory Location. Adding "aarch64" in front of the target specific memory locations
1 parent d568c2b commit 7512b21

File tree

12 files changed

+77
-128
lines changed

12 files changed

+77
-128
lines changed

llvm/include/llvm/AsmParser/LLToken.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,15 +202,13 @@ enum Kind {
202202
kw_readwrite,
203203
kw_argmem,
204204
kw_inaccessiblemem,
205-
kw_fpmr,
206-
kw_za,
205+
kw_aarch64_fpmr,
206+
kw_aarch64_za,
207207
kw_errnomem,
208208

209209
// Legacy attributes:
210210
kw_argmemonly,
211211
kw_inaccessiblememonly,
212-
kw_inaccessiblereadmemonly,
213-
kw_inaccessiblewritememonly,
214212
kw_inaccessiblemem_or_argmemonly,
215213
kw_nocapture,
216214

llvm/include/llvm/Support/ModRef.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -147,18 +147,6 @@ template <typename LocationEnum> class MemoryEffectsBase {
147147
return MemoryEffectsBase(Location::InaccessibleMem, MR);
148148
}
149149

150-
/// Create MemoryEffectsBase that can only read inaccessible memory.
151-
static MemoryEffectsBase
152-
inaccessibleReadMemOnly(Location Loc = Location::InaccessibleMem) {
153-
return MemoryEffectsBase(Loc, ModRefInfo::Ref);
154-
}
155-
156-
/// Create MemoryEffectsBase that can only write inaccessible memory.
157-
static MemoryEffectsBase
158-
inaccessibleWriteMemOnly(Location Loc = Location::InaccessibleMem) {
159-
return MemoryEffectsBase(Loc, ModRefInfo::Mod);
160-
}
161-
162150
/// Create MemoryEffectsBase that can only access errno memory.
163151
static MemoryEffectsBase errnoMemOnly(ModRefInfo MR = ModRefInfo::ModRef) {
164152
return MemoryEffectsBase(Location::ErrnoMem, MR);

llvm/lib/AsmParser/LLLexer.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -701,14 +701,12 @@ lltok::Kind LLLexer::LexIdentifier() {
701701
KEYWORD(write);
702702
KEYWORD(readwrite);
703703
KEYWORD(argmem);
704-
KEYWORD(fpmr);
705-
KEYWORD(za);
704+
KEYWORD(aarch64_fpmr);
705+
KEYWORD(aarch64_za);
706706
KEYWORD(inaccessiblemem);
707707
KEYWORD(errnomem);
708708
KEYWORD(argmemonly);
709709
KEYWORD(inaccessiblememonly);
710-
KEYWORD(inaccessiblewritememonly);
711-
KEYWORD(inaccessiblereadmemonly);
712710
KEYWORD(inaccessiblemem_or_argmemonly);
713711
KEYWORD(nocapture);
714712
KEYWORD(address_is_null);

llvm/lib/AsmParser/LLParser.cpp

Lines changed: 2 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1674,40 +1674,17 @@ static std::optional<MemoryEffects::Location> keywordToLoc(lltok::Kind Tok) {
16741674
return IRMemLocation::InaccessibleMem;
16751675
case lltok::kw_errnomem:
16761676
return IRMemLocation::ErrnoMem;
1677-
case lltok::kw_fpmr:
1677+
case lltok::kw_aarch64_fpmr:
16781678
return static_cast<IRMemLocation>(
16791679
llvm::InaccessibleTargetMemLocation::AARCH64_FPMR);
1680-
case lltok::kw_za:
1680+
case lltok::kw_aarch64_za:
16811681
return static_cast<IRMemLocation>(
16821682
llvm::InaccessibleTargetMemLocation::AARCH64_ZA);
16831683
default:
16841684
return std::nullopt;
16851685
}
16861686
}
16871687

1688-
bool LLParser::parseInaccessibleMemLocation(IRMemLocation &MemLoc) {
1689-
// It does not have location
1690-
if (Lex.getKind() != llvm::lltok::lparen)
1691-
return false;
1692-
1693-
Lex.Lex(); // eat '('
1694-
1695-
std::optional<IRMemLocation> LocOpt = keywordToLoc(Lex.getKind());
1696-
if (!LocOpt)
1697-
return tokError("invalid memory location keyword");
1698-
1699-
MemLoc = *LocOpt;
1700-
1701-
Lex.Lex(); // eat the keyword (e.g., 'fpmr', 'za')
1702-
1703-
if (Lex.getKind() != llvm::lltok::rparen)
1704-
return tokError("expected ')' after memory location");
1705-
1706-
Lex.Lex(); // eat ')'
1707-
1708-
return true; // success
1709-
}
1710-
17111688
/// parseFnAttributeValuePairs
17121689
/// ::= <attr> | <attr> '=' <value>
17131690
bool LLParser::parseFnAttributeValuePairs(AttrBuilder &B,
@@ -1718,11 +1695,6 @@ bool LLParser::parseFnAttributeValuePairs(AttrBuilder &B,
17181695
B.clear();
17191696

17201697
MemoryEffects ME = MemoryEffects::unknown();
1721-
// Memory effects can span multiple locations, so we initialize a base
1722-
// MemoryEffects object once with default state, and then incrementally
1723-
// populate or combine effects for individual locations. This avoids
1724-
// rebuilding the full Data structure on each addition.
1725-
bool FirstME = true;
17261698
while (true) {
17271699
lltok::Kind Token = Lex.getKind();
17281700
if (Token == lltok::rbrace)
@@ -1759,36 +1731,6 @@ bool LLParser::parseFnAttributeValuePairs(AttrBuilder &B,
17591731
continue;
17601732
}
17611733

1762-
if (Token == lltok::kw_inaccessiblereadmemonly) {
1763-
Lex.Lex(); // eat the keyword
1764-
1765-
IRMemLocation MemLoc;
1766-
if (parseInaccessibleMemLocation(MemLoc)) {
1767-
if (!FirstME)
1768-
ME = ME.getWithModRef(MemLoc, ModRefInfo::Ref);
1769-
else
1770-
ME &= MemoryEffects::inaccessibleReadMemOnly(MemLoc);
1771-
} else
1772-
ME = MemoryEffects::inaccessibleReadMemOnly();
1773-
FirstME = false;
1774-
continue;
1775-
}
1776-
1777-
if (Token == lltok::kw_inaccessiblewritememonly) {
1778-
Lex.Lex(); // eat the keyword
1779-
1780-
IRMemLocation MemLoc;
1781-
if (parseInaccessibleMemLocation(MemLoc)) {
1782-
if (!FirstME)
1783-
ME = ME.getWithModRef(MemLoc, ModRefInfo::Mod);
1784-
else
1785-
ME &= MemoryEffects::inaccessibleWriteMemOnly(MemLoc);
1786-
} else
1787-
ME &= MemoryEffects::inaccessibleWriteMemOnly();
1788-
FirstME = false;
1789-
continue;
1790-
}
1791-
17921734
Attribute::AttrKind Attr = tokenToAttribute(Token);
17931735
if (Attr == Attribute::None) {
17941736
if (!InAttrGrp)
@@ -2597,10 +2539,6 @@ static std::optional<ModRefInfo> keywordToModRef(lltok::Kind Tok) {
25972539
return ModRefInfo::Mod;
25982540
case lltok::kw_readwrite:
25992541
return ModRefInfo::ModRef;
2600-
case lltok::kw_inaccessiblewritememonly:
2601-
return ModRefInfo::Mod;
2602-
case lltok::kw_inaccessiblereadmemonly:
2603-
return ModRefInfo::Ref;
26042542
default:
26052543
return std::nullopt;
26062544
}

llvm/lib/IR/Attributes.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -664,9 +664,9 @@ std::string Attribute::getAsString(bool InAttrGrp) const {
664664
InaccessibleTargetMemLocation TargetLoc =
665665
static_cast<InaccessibleTargetMemLocation>(Loc);
666666
if (TargetLoc == InaccessibleTargetMemLocation::AARCH64_FPMR)
667-
OS << "fpmr: ";
667+
OS << "aarch64_fpmr: ";
668668
if (TargetLoc == InaccessibleTargetMemLocation::AARCH64_ZA)
669-
OS << "za: ";
669+
OS << "aarch64_za: ";
670670
break;
671671
}
672672
}

llvm/lib/Support/ModRef.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ raw_ostream &llvm::operator<<(raw_ostream &OS, MemoryEffects ME) {
5353
InaccessibleTargetMemLocation TargetLoc =
5454
static_cast<InaccessibleTargetMemLocation>(Loc);
5555
if (TargetLoc == InaccessibleTargetMemLocation::AARCH64_FPMR)
56-
OS << "FPMR: ";
56+
OS << "AARCH64_FPMR: ";
5757
if (TargetLoc == InaccessibleTargetMemLocation::AARCH64_ZA)
58-
OS << "ZA: ";
58+
OS << "AARCH64_ZA: ";
5959
break;
6060
}
6161
}

llvm/lib/TableGen/Record.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3108,7 +3108,7 @@ llvm::IRMemLocation Record::getLocationTypeAsInt(StringRef FieldName) const {
31083108
if (Name == "AArch64_FPMR")
31093109
return static_cast<IRMemLocation>(
31103110
llvm::InaccessibleTargetMemLocation::AARCH64_FPMR);
3111-
else if (Name == "ZA")
3111+
else if (Name == "AArch64_ZA")
31123112
return static_cast<IRMemLocation>(
31133113
llvm::InaccessibleTargetMemLocation::AARCH64_ZA);
31143114
else if (Name == "InaccessibleMem")

llvm/test/Assembler/memory-attribute.ll

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -79,23 +79,27 @@ declare void @fn_argmem_read_inaccessiblemem_write()
7979
declare void @fn_argmem_read_inaccessiblemem_write_reordered()
8080
memory(inaccessiblemem: write, argmem: read)
8181

82-
; CHECK: Function Attrs: memory(za: write)
83-
; CHECK: @fn_argmem_read_inaccessiblemem_write_za()
84-
declare void @fn_argmem_read_inaccessiblemem_write_za()
85-
memory(za: inaccessiblewritememonly)
86-
87-
; CHECK: Function Attrs: memory(za: read)
88-
; CHECK: @fn_argmem_read_inaccessiblemem_read_za()
89-
declare void @fn_argmem_read_inaccessiblemem_read_za()
90-
memory(za: inaccessiblereadmemonly)
91-
92-
; CHECK: Function Attrs: memory(fpmr: write)
93-
; CHECK: @fn_argmem_read_inaccessiblemem_write_fpmr()
94-
declare void @fn_argmem_read_inaccessiblemem_write_fpmr()
95-
memory(fpmr: inaccessiblewritememonly)
96-
97-
; CHECK: Function Attrs: memory(fpmr: read)
98-
; CHECK: @fn_argmem_read_inaccessiblemem_read_fpmr()
99-
declare void @fn_argmem_read_inaccessiblemem_read_fpmr()
100-
memory(fpmr: inaccessiblereadmemonly)
101-
82+
; CHECK: Function Attrs: memory(aarch64_za: write)
83+
; CHECK: @fn_inaccessiblemem_write_aarch64_za()
84+
declare void @fn_inaccessiblemem_write_aarch64_za()
85+
memory(aarch64_za: write)
86+
87+
; CHECK: Function Attrs: memory(aarch64_za: read)
88+
; CHECK: @fn_inaccessiblemem_read_aarch64_za()
89+
declare void @fn_inaccessiblemem_read_aarch64_za()
90+
memory(aarch64_za: read)
91+
92+
; CHECK: Function Attrs: memory(aarch64_fpmr: write)
93+
; CHECK: @fn_inaccessiblemem_write_aarch64_fpmr()
94+
declare void @fn_inaccessiblemem_write_aarch64_fpmr()
95+
memory(aarch64_fpmr: write)
96+
97+
; CHECK: Function Attrs: memory(aarch64_fpmr: read)
98+
; CHECK: @fn_inaccessiblemem_read_aarch64_fpmr()
99+
declare void @fn_inaccessiblemem_read_aarch64_fpmr()
100+
memory(aarch64_fpmr: read)
101+
102+
; CHECK: Function Attrs: memory(aarch64_fpmr: read, aarch64_za: write)
103+
; CHECK: @fn_inaccessiblemem_read_aarch64_fpmr_write_aarch64_za()
104+
declare void @fn_inaccessiblemem_read_aarch64_fpmr_write_aarch64_za()
105+
memory(aarch64_fpmr: read, aarch64_za: write)

llvm/test/Bitcode/attributes.ll

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,6 @@ define void @za_read_write_fpmr() inaccessiblereadmemonly(za) inaccessiblewritem
608608
ret void
609609
}
610610

611-
612611
; CHECK: attributes #0 = { noreturn }
613612
; CHECK: attributes #1 = { nounwind }
614613
; CHECK: attributes #2 = { memory(none) }
@@ -668,11 +667,4 @@ define void @za_read_write_fpmr() inaccessiblereadmemonly(za) inaccessiblewritem
668667
; CHECK: attributes [[SKIPPROFILE]] = { skipprofile }
669668
; CHECK: attributes [[OPTDEBUG]] = { optdebug }
670669
; CHECK: attributes [[NODIVERGENCESOURCE]] = { nodivergencesource }
671-
; CHECK: attributes [[ATTR59]] = { memory(fpmr: write) }
672-
; CHECK: attributes [[ATTR60]] = { memory(fpmr: read) }
673-
; CHECK: attributes [[ATTR61]] = { memory(za: write) }
674-
; CHECK: attributes [[ATTR62]] = { memory(za: read) }
675-
; CHECK: attributes [[ATTR63]] = { memory(inaccessiblemem: read) }
676-
; CHECK: attributes [[ATTR64]] = { memory(inaccessiblemem: write) }
677-
; CHECK: attributes [[ATTR65]] = { memory(fpmr: write, za: read) }
678670
; CHECK: attributes #[[NOBUILTIN]] = { nobuiltin }

llvm/test/TableGen/intrinsic-attrs-fp8.td

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,51 @@ include "llvm/IR/Intrinsics.td"
44

55
def int_aarch64_set_fpmr_2 : DefaultAttrsIntrinsic<[], [llvm_i64_ty], [IntrInaccessibleWriteMemOnly<AArch64_FPMR>]>;
66

7-
// CHECK: static constexpr unsigned IntrinsicNameOffsetTable[] = {
8-
// CHECK-NEXT: 1, // not_intrinsic
9-
// CHECK-NEXT: 15, // llvm.aarch64.set.fpmr.2
7+
def int_aarch64_get_za_2 : DefaultAttrsIntrinsic<[], [llvm_i64_ty], [IntrInaccessibleReadMemOnly<AArch64_ZA>]>;
108

9+
def int_aarch64_get_fpmr_set_za : DefaultAttrsIntrinsic<[], [llvm_i64_ty], [IntrInaccessibleReadMemOnly<AArch64_FPMR>, IntrInaccessibleWriteMemOnly<AArch64_ZA>]>;
1110

12-
// CHECK: static AttributeSet getIntrinsicFnAttributeSet(LLVMContext &C, unsigned ID) {
13-
// CHECK-NEXT: switch (ID) {
14-
// CHECK-NEXT: default: llvm_unreachable("Invalid attribute set number");
11+
// CHECK: static constexpr unsigned IntrinsicNameOffsetTable[] = {
12+
// CHECK-NEXT: 1, // not_intrinsic
13+
// CHECK-NEXT: 15, // llvm.aarch64.get.fpmr.set.za
14+
// CHECK-NEXT: 44, // llvm.aarch64.get.za.2
15+
// CHECK-NEXT: 66, // llvm.aarch64.set.fpmr.2
16+
17+
// CHECK: static AttributeSet getIntrinsicFnAttributeSet(LLVMContext &C, unsigned ID) {
18+
// CHECK-NEXT: switch (ID) {
19+
// CHECK-NEXT: default: llvm_unreachable("Invalid attribute set number");
1520
// CHECK-NEXT: case 0:
1621
// CHECK-NEXT: return AttributeSet::get(C, {
1722
// CHECK-NEXT: Attribute::get(C, Attribute::NoUnwind),
1823
// CHECK-NEXT: Attribute::get(C, Attribute::NoCallback),
1924
// CHECK-NEXT: Attribute::get(C, Attribute::NoSync),
2025
// CHECK-NEXT: Attribute::get(C, Attribute::NoFree),
2126
// CHECK-NEXT: Attribute::get(C, Attribute::WillReturn),
22-
// CHECK-NEXT: // ArgMem: NoModRef, InaccessibleMem: NoModRef, ErrnoMem: NoModRef, FPMR: Mod, ZA: NoModRef, Other: NoModRef
23-
// CHECK-NEXT: Attribute::getWithMemoryEffects(C, MemoryEffects::createFromIntValue(128)),
27+
// CHECK-NEXT: // ArgMem: ModRef, InaccessibleMem: ModRef, ErrnoMem: ModRef, AARCH64_FPMR: Ref, AARCH64_ZA: Mod, Other: ModRef
28+
// CHECK-NEXT: Attribute::getWithMemoryEffects(C, MemoryEffects::createFromIntValue(3711)),
29+
// CHECK-NEXT: });
30+
// CHECK-NEXT: case 1:
31+
// CHECK-NEXT: return AttributeSet::get(C, {
32+
// CHECK-NEXT: Attribute::get(C, Attribute::NoUnwind),
33+
// CHECK-NEXT: Attribute::get(C, Attribute::NoCallback),
34+
// CHECK-NEXT: Attribute::get(C, Attribute::NoSync),
35+
// CHECK-NEXT: Attribute::get(C, Attribute::NoFree),
36+
// CHECK-NEXT: Attribute::get(C, Attribute::WillReturn),
37+
// CHECK-NEXT: // ArgMem: ModRef, InaccessibleMem: ModRef, ErrnoMem: ModRef, AARCH64_FPMR: ModRef, AARCH64_ZA: Ref, Other: ModRef
38+
// CHECK-NEXT: Attribute::getWithMemoryEffects(C, MemoryEffects::createFromIntValue(3583)),
2439
// CHECK-NEXT: });
40+
// CHECK-NEXT: case 2:
41+
// CHECK-NEXT: return AttributeSet::get(C, {
42+
// CHECK-NEXT: Attribute::get(C, Attribute::NoUnwind),
43+
// CHECK-NEXT: Attribute::get(C, Attribute::NoCallback),
44+
// CHECK-NEXT: Attribute::get(C, Attribute::NoSync),
45+
// CHECK-NEXT: Attribute::get(C, Attribute::NoFree),
46+
// CHECK-NEXT: Attribute::get(C, Attribute::WillReturn),
47+
// CHECK-NEXT: // ArgMem: ModRef, InaccessibleMem: ModRef, ErrnoMem: ModRef, AARCH64_FPMR: Mod, AARCH64_ZA: ModRef, Other: ModRef
48+
// CHECK-NEXT: Attribute::getWithMemoryEffects(C, MemoryEffects::createFromIntValue(4031)),
49+
50+
// CHECK: static constexpr uint16_t IntrinsicsToAttributesMap[] = {
51+
// CHECK-NEXT: 0 << 8 | 0, // llvm.aarch64.get.fpmr.set.za
52+
// CHECK-NEXT: 1 << 8 | 0, // llvm.aarch64.get.za.2
53+
// CHECK-NEXT: 2 << 8 | 0, // llvm.aarch64.set.fpmr.2
54+
// CHECK-NEXT:};

0 commit comments

Comments
 (0)