From ff585feacf58b384d7525d2b1368298435132fb4 Mon Sep 17 00:00:00 2001 From: Antonio Frighetto Date: Mon, 10 Feb 2025 15:30:35 +0100 Subject: [IR][ModRef] Introduce `errno` memory location Model C/C++ `errno` macro by adding a corresponding `errno` memory location kind to the IR. Preliminary work to separate `errno` writes from other memory accesses, to the benefit of alias analyses and optimization correctness. Previous discussion: https://discourse.llvm.org/t/rfc-modelling-errno-memory-effects/82972. --- llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp') diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index 7ca63c2..450b806 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -977,8 +977,15 @@ void ModuleBitcodeWriter::writeAttributeGroupTable() { Record.push_back(getAttrKindEncoding(Attr.getKindAsEnum())); } else if (Attr.isIntAttribute()) { Record.push_back(1); - Record.push_back(getAttrKindEncoding(Attr.getKindAsEnum())); - Record.push_back(Attr.getValueAsInt()); + Attribute::AttrKind Kind = Attr.getKindAsEnum(); + Record.push_back(getAttrKindEncoding(Kind)); + if (Kind == Attribute::Memory) { + // Version field for upgrading old memory effects. + const uint64_t Version = 1; + Record.push_back((Version << 56) | Attr.getValueAsInt()); + } else { + Record.push_back(Attr.getValueAsInt()); + } } else if (Attr.isStringAttribute()) { StringRef Kind = Attr.getKindAsString(); StringRef Val = Attr.getValueAsString(); -- cgit v1.1