aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2024-08-10 21:03:27 +0000
committerDimitry Andric <dim@FreeBSD.org>2024-08-10 21:03:27 +0000
commit7a8d05ba19b7762596c0ff22e668e4d50bac81cf (patch)
tree15cbc6b778376f535d2b4881bdc64c1d7f89a6fa /contrib
parentaea9dba46b81abc5c0fd4c42d3ac762d3bc1de37 (diff)
downloadsrc-7a8d05ba19b7762596c0ff22e668e4d50bac81cf.tar.gz
src-7a8d05ba19b7762596c0ff22e668e4d50bac81cf.zip
Merge commit d2353ae00c3b from llvm git (by Argyrios Kyrtzidis):
[utils/TableGen/X86CompressEVEXTablesEmitter.cpp] Make sure the tablegen output for the `checkPredicate` function is deterministic (#84533) The output for the `checkPredicate` function was depending on a `std::map` iteration that was non-deterministic from run to run, because the keys were pointer values. Make a change so that the keys are `StringRef`s so the ordering is stable. This avoids non-determinism in llvm-tblgen output, which could cause differences in the generated X86GenCompressEVEXTables.inc file. Although these differences are not influencing the meaning of the generated code, they still change a few bytes in libllvm. This in turn influences all the binaries linked with libllvm, such as clang, ld.lld, etc. Reported by: cperciva MFC after: 3 days
Diffstat (limited to 'contrib')
-rw-r--r--contrib/llvm-project/llvm/utils/TableGen/X86CompressEVEXTablesEmitter.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/contrib/llvm-project/llvm/utils/TableGen/X86CompressEVEXTablesEmitter.cpp b/contrib/llvm-project/llvm/utils/TableGen/X86CompressEVEXTablesEmitter.cpp
index fef8dc7236f5..ee0a96ee5b53 100644
--- a/contrib/llvm-project/llvm/utils/TableGen/X86CompressEVEXTablesEmitter.cpp
+++ b/contrib/llvm-project/llvm/utils/TableGen/X86CompressEVEXTablesEmitter.cpp
@@ -46,7 +46,7 @@ class X86CompressEVEXTablesEmitter {
typedef std::pair<const CodeGenInstruction *, const CodeGenInstruction *>
Entry;
- typedef std::map<const Record *, std::vector<const CodeGenInstruction *>>
+ typedef std::map<StringRef, std::vector<const CodeGenInstruction *>>
PredicateInstMap;
std::vector<Entry> Table;
@@ -89,7 +89,7 @@ void X86CompressEVEXTablesEmitter::printCheckPredicate(
for (const auto &[Key, Val] : PredicateInsts) {
for (const auto &Inst : Val)
OS << " case X86::" << Inst->TheDef->getName() << ":\n";
- OS << " return " << Key->getValueAsString("CondString") << ";\n";
+ OS << " return " << Key << ";\n";
}
OS << " }\n";
@@ -226,7 +226,7 @@ void X86CompressEVEXTablesEmitter::run(raw_ostream &OS) {
Name == "HasAVXIFMA";
});
if(It!= Predicates.end())
- PredicateInsts[*It].push_back(NewInst);
+ PredicateInsts[(*It)->getValueAsString("CondString")].push_back(NewInst);
}
printTable(Table, OS);