xref: /netbsd-src/sys/external/bsd/compiler_rt/dist/test/profile/instrprof-bufferio.c (revision ef84fd3bd8895f4e6be1e38baf19e6dc3255bc64)
1*ef84fd3bSjoerg // RUN: %clang_profgen -O3 -o %t %s
2*ef84fd3bSjoerg // RUN: %run %t %t.out.1 %t.out.2 %t.out.3 %t.out.4
3*ef84fd3bSjoerg // RUN: cat %t.out.1 | FileCheck %s
4*ef84fd3bSjoerg // RUN: diff %t.out.1 %t.out.2
5*ef84fd3bSjoerg // RUN: diff %t.out.2 %t.out.3
6*ef84fd3bSjoerg // RUN: diff %t.out.3 %t.out.4
7*ef84fd3bSjoerg 
8*ef84fd3bSjoerg #include <stdint.h>
9*ef84fd3bSjoerg #include <stdio.h>
10*ef84fd3bSjoerg #include <stdlib.h>
11*ef84fd3bSjoerg #include <string.h>
12*ef84fd3bSjoerg 
13*ef84fd3bSjoerg typedef struct ProfBufferIO ProfBufferIO;
14*ef84fd3bSjoerg ProfBufferIO *llvmCreateBufferIOInternal(FILE *File, uint32_t DefaultBufferSz);
15*ef84fd3bSjoerg void llvmDeleteBufferIO(ProfBufferIO *BufferIO);
16*ef84fd3bSjoerg 
17*ef84fd3bSjoerg int llvmBufferIOWrite(ProfBufferIO *BufferIO, const char *Data, uint32_t Size);
18*ef84fd3bSjoerg int llvmBufferIOFlush(ProfBufferIO *BufferIO);
19*ef84fd3bSjoerg 
20*ef84fd3bSjoerg int __llvm_profile_runtime = 0;
21*ef84fd3bSjoerg 
22*ef84fd3bSjoerg const char *SmallData = "ABC\n";
23*ef84fd3bSjoerg const char *MediumData =
24*ef84fd3bSjoerg     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\n";
25*ef84fd3bSjoerg char LargeData[10 * 1024];
main(int argc,const char * argv[])26*ef84fd3bSjoerg int main(int argc, const char *argv[]) {
27*ef84fd3bSjoerg   ProfBufferIO *BufferIO;
28*ef84fd3bSjoerg   FILE *File[4];
29*ef84fd3bSjoerg   uint32_t IOBufferSize[4] = {8, 128, 8 * 1024, 11 * 1024};
30*ef84fd3bSjoerg   int I, J;
31*ef84fd3bSjoerg   if (argc < 5)
32*ef84fd3bSjoerg     return 1;
33*ef84fd3bSjoerg 
34*ef84fd3bSjoerg   for (I = 0; I < 10 * 1024 - 2; I++)
35*ef84fd3bSjoerg     LargeData[I] = 'A';
36*ef84fd3bSjoerg 
37*ef84fd3bSjoerg   LargeData[I++] = '\n';
38*ef84fd3bSjoerg   LargeData[I++] = '\0';
39*ef84fd3bSjoerg 
40*ef84fd3bSjoerg   for (J = 0; J < 4; J++) {
41*ef84fd3bSjoerg     File[J] = fopen(argv[1 + J], "w");
42*ef84fd3bSjoerg     if (!File[J])
43*ef84fd3bSjoerg       return 1;
44*ef84fd3bSjoerg 
45*ef84fd3bSjoerg     BufferIO = llvmCreateBufferIOInternal(File[J], IOBufferSize[J]);
46*ef84fd3bSjoerg 
47*ef84fd3bSjoerg     llvmBufferIOWrite(BufferIO, "Short Strings:\n", strlen("Short Strings:\n"));
48*ef84fd3bSjoerg     for (I = 0; I < 1024; I++) {
49*ef84fd3bSjoerg       llvmBufferIOWrite(BufferIO, SmallData, strlen(SmallData));
50*ef84fd3bSjoerg     }
51*ef84fd3bSjoerg     llvmBufferIOWrite(BufferIO, "Long Strings:\n", strlen("Long Strings:\n"));
52*ef84fd3bSjoerg     for (I = 0; I < 1024; I++) {
53*ef84fd3bSjoerg       llvmBufferIOWrite(BufferIO, MediumData, strlen(MediumData));
54*ef84fd3bSjoerg     }
55*ef84fd3bSjoerg     llvmBufferIOWrite(BufferIO, "Extra Long Strings:\n",
56*ef84fd3bSjoerg                       strlen("Extra Long Strings:\n"));
57*ef84fd3bSjoerg     for (I = 0; I < 10; I++) {
58*ef84fd3bSjoerg       llvmBufferIOWrite(BufferIO, LargeData, strlen(LargeData));
59*ef84fd3bSjoerg     }
60*ef84fd3bSjoerg     llvmBufferIOWrite(BufferIO, "Mixed Strings:\n", strlen("Mixed Strings:\n"));
61*ef84fd3bSjoerg     for (I = 0; I < 1024; I++) {
62*ef84fd3bSjoerg       llvmBufferIOWrite(BufferIO, MediumData, strlen(MediumData));
63*ef84fd3bSjoerg       llvmBufferIOWrite(BufferIO, SmallData, strlen(SmallData));
64*ef84fd3bSjoerg     }
65*ef84fd3bSjoerg     llvmBufferIOWrite(BufferIO, "Endings:\n", strlen("Endings:\n"));
66*ef84fd3bSjoerg     llvmBufferIOWrite(BufferIO, "END\n", strlen("END\n"));
67*ef84fd3bSjoerg     llvmBufferIOWrite(BufferIO, "ENDEND\n", strlen("ENDEND\n"));
68*ef84fd3bSjoerg     llvmBufferIOWrite(BufferIO, "ENDENDEND\n", strlen("ENDENDEND\n"));
69*ef84fd3bSjoerg     llvmBufferIOWrite(BufferIO, "ENDENDENDEND\n", strlen("ENDENDENDEND\n"));
70*ef84fd3bSjoerg     llvmBufferIOFlush(BufferIO);
71*ef84fd3bSjoerg 
72*ef84fd3bSjoerg     llvmDeleteBufferIO(BufferIO);
73*ef84fd3bSjoerg 
74*ef84fd3bSjoerg     fclose(File[J]);
75*ef84fd3bSjoerg   }
76*ef84fd3bSjoerg   return 0;
77*ef84fd3bSjoerg }
78*ef84fd3bSjoerg 
79*ef84fd3bSjoerg // CHECK-LABEL: Short Strings:
80*ef84fd3bSjoerg // CHECK: ABC
81*ef84fd3bSjoerg // CHECK-NEXT: ABC
82*ef84fd3bSjoerg // CHECK-NEXT: ABC
83*ef84fd3bSjoerg // CHECK-NEXT: ABC
84*ef84fd3bSjoerg // CHECK-NEXT: ABC
85*ef84fd3bSjoerg // CHECK-NEXT: ABC
86*ef84fd3bSjoerg // CHECK-NEXT: ABC
87*ef84fd3bSjoerg // CHECK-NEXT: ABC
88*ef84fd3bSjoerg // CHECK-NEXT: ABC
89*ef84fd3bSjoerg // CHECK-NEXT: ABC
90*ef84fd3bSjoerg // CHECK-NEXT: ABC
91*ef84fd3bSjoerg // CHECK-NEXT: ABC
92*ef84fd3bSjoerg // CHECK-NEXT: ABC
93*ef84fd3bSjoerg // CHECK-NEXT: ABC
94*ef84fd3bSjoerg // CHECK-LABEL: Long Strings:
95*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
96*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
97*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
98*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
99*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
100*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
101*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
102*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
103*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
104*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
105*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
106*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
107*ef84fd3bSjoerg // CHECK-LABEL: Mixed Strings:
108*ef84fd3bSjoerg // CHECK: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
109*ef84fd3bSjoerg // CHECK-NEXT: ABC
110*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
111*ef84fd3bSjoerg // CHECK-NEXT: ABC
112*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
113*ef84fd3bSjoerg // CHECK-NEXT: ABC
114*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
115*ef84fd3bSjoerg // CHECK-NEXT: ABC
116*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
117*ef84fd3bSjoerg // CHECK-NEXT: ABC
118*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
119*ef84fd3bSjoerg // CHECK-NEXT: ABC
120*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
121*ef84fd3bSjoerg // CHECK-NEXT: ABC
122*ef84fd3bSjoerg // CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
123*ef84fd3bSjoerg // CHECK-NEXT: ABC
124*ef84fd3bSjoerg // CHECK-LABEL: Endings:
125*ef84fd3bSjoerg // CHECK: END
126*ef84fd3bSjoerg // CHECK-NEXT: ENDEND
127*ef84fd3bSjoerg // CHECK-NEXT: ENDENDEND
128*ef84fd3bSjoerg // CHECK-NEXT: ENDENDENDEND
129