1 #include "automemcpy/CodeGen.h" 2 #include "automemcpy/RandomFunctionGenerator.h" 3 #include <optional> 4 #include <unordered_set> 5 6 namespace llvm { 7 namespace automemcpy { 8 generateFunctionDescriptors()9std::vector<FunctionDescriptor> generateFunctionDescriptors() { 10 std::unordered_set<FunctionDescriptor, FunctionDescriptor::Hasher> Seen; 11 std::vector<FunctionDescriptor> FunctionDescriptors; 12 RandomFunctionGenerator P; 13 while (std::optional<FunctionDescriptor> MaybeFD = P.next()) { 14 FunctionDescriptor FD = *MaybeFD; 15 if (Seen.count(FD)) // FIXME: Z3 sometimes returns twice the same object. 16 continue; 17 Seen.insert(FD); 18 FunctionDescriptors.push_back(std::move(FD)); 19 } 20 return FunctionDescriptors; 21 } 22 23 } // namespace automemcpy 24 } // namespace llvm 25 main(int,char **)26int main(int, char **) { 27 llvm::automemcpy::Serialize(llvm::outs(), 28 llvm::automemcpy::generateFunctionDescriptors()); 29 } 30