#include "automemcpy/CodeGen.h"
#include "automemcpy/RandomFunctionGenerator.h"
#include <optional>
#include <unordered_set>
namespace llvm {
namespace automemcpy {
std::vector<FunctionDescriptor> generateFunctionDescriptors() {
std::unordered_set<FunctionDescriptor, FunctionDescriptor::Hasher> Seen;
std::vector<FunctionDescriptor> FunctionDescriptors;
RandomFunctionGenerator P;
while (std::optional<FunctionDescriptor> MaybeFD = P.next()) {
FunctionDescriptor FD = *MaybeFD;
if (Seen.count(FD)) // FIXME: Z3 sometimes returns twice the same object.
continue;
Seen.insert(FD);
FunctionDescriptors.push_back(std::move(FD));
}
return FunctionDescriptors;
}
} // namespace automemcpy
} // namespace llvm
int main(int, char **) {
llvm::automemcpy::Serialize(llvm::outs(),
llvm::automemcpy::generateFunctionDescriptors());
}