xref: /llvm-project/compiler-rt/test/profile/Inputs/instrprof-merge-match-lib.c (revision d4312d8af09c6e345ac5c270b0d37b3cfab7815a)
131f251f1SXinliang David Li #include <stdint.h>
231f251f1SXinliang David Li #include <stdio.h>
331f251f1SXinliang David Li #include <stdlib.h>
431f251f1SXinliang David Li 
531f251f1SXinliang David Li int __llvm_profile_runtime = 0;
631f251f1SXinliang David Li uint64_t __llvm_profile_get_size_for_buffer(void);
731f251f1SXinliang David Li int __llvm_profile_write_buffer(char *);
831f251f1SXinliang David Li void __llvm_profile_reset_counters(void);
931f251f1SXinliang David Li int __llvm_profile_check_compatibility(const char *, uint64_t);
1031f251f1SXinliang David Li 
1131f251f1SXinliang David Li int gg = 0;
bar(char c)1231f251f1SXinliang David Li void bar(char c) {
1331f251f1SXinliang David Li   if (c == '1')
1431f251f1SXinliang David Li     gg++;
1531f251f1SXinliang David Li   else
1631f251f1SXinliang David Li     gg--;
1731f251f1SXinliang David Li }
1831f251f1SXinliang David Li 
1931f251f1SXinliang David Li /* Returns 0 (size) when an error occurs. */
libEntry(char * Buffer,uint64_t MaxSize)2031f251f1SXinliang David Li uint64_t libEntry(char *Buffer, uint64_t MaxSize) {
2131f251f1SXinliang David Li 
2231f251f1SXinliang David Li   uint64_t Size = __llvm_profile_get_size_for_buffer();
2331f251f1SXinliang David Li   if (Size > MaxSize)
24*d4312d8aSXinliang David Li     return 0;
2531f251f1SXinliang David Li 
2631f251f1SXinliang David Li   __llvm_profile_reset_counters();
2731f251f1SXinliang David Li 
2831f251f1SXinliang David Li   bar('1');
2931f251f1SXinliang David Li 
3031f251f1SXinliang David Li   if (__llvm_profile_write_buffer(Buffer))
3131f251f1SXinliang David Li     return 0;
3231f251f1SXinliang David Li 
3331f251f1SXinliang David Li   /* Now check compatibility. Should return 0.  */
3431f251f1SXinliang David Li   if (__llvm_profile_check_compatibility(Buffer, Size))
3531f251f1SXinliang David Li     return 0;
3631f251f1SXinliang David Li 
3731f251f1SXinliang David Li   return Size;
3831f251f1SXinliang David Li }
3931f251f1SXinliang David Li 
40