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