diff options
author | Antonio Frighetto <me@antoniofrighetto.com> | 2025-02-10 15:30:35 +0100 |
---|---|---|
committer | Antonio Frighetto <me@antoniofrighetto.com> | 2025-02-13 12:13:39 +0100 |
commit | ff585feacf58b384d7525d2b1368298435132fb4 (patch) | |
tree | d23f040a7be7146e69ca7681449113b8a82cfe66 /llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | |
parent | eef02053459a0eb3076b0db76555f9836ac90b07 (diff) | |
download | llvm-ff585feacf58b384d7525d2b1368298435132fb4.zip llvm-ff585feacf58b384d7525d2b1368298435132fb4.tar.gz llvm-ff585feacf58b384d7525d2b1368298435132fb4.tar.bz2 |
[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.
Diffstat (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
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(); |