llvm-project/compiler-rt/test/profile/instrprof-bufferio.c
Xinliang David Li 609fae3893 [profile] Eliminate dynamic memory allocation for buffered writer
With this change, dynamic memory allocation is only used
for testing purpose. This change is one of the many steps to
make instrument profiler dynamic allocation free.

llvm-svn: 269453
2016-05-13 18:26:26 +00:00

130 lines
4.6 KiB
C

// RUN: %clang_profgen -O3 -o %t %s
// RUN: %run %t %t.out.1 %t.out.2 %t.out.3 %t.out.4
// RUN: cat %t.out.1 | FileCheck %s
// RUN: diff %t.out.1 %t.out.2
// RUN: diff %t.out.2 %t.out.3
// RUN: diff %t.out.3 %t.out.4
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct ProfBufferIO ProfBufferIO;
ProfBufferIO *lprofCreateBufferIOInternal(void *File, uint32_t BufferSz);
void lprofDeleteBufferIO(ProfBufferIO *BufferIO);
int lprofBufferIOWrite(ProfBufferIO *BufferIO, const char *Data, uint32_t Size);
int lprofBufferIOFlush(ProfBufferIO *BufferIO);
int __llvm_profile_runtime = 0;
const char *SmallData = "ABC\n";
const char *MediumData =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\n";
char LargeData[10 * 1024];
int main(int argc, const char *argv[]) {
ProfBufferIO *BufferIO;
FILE *File[4];
uint32_t IOBufferSize[4] = {8, 128, 8 * 1024, 11 * 1024};
int I, J;
if (argc < 5)
return 1;
for (I = 0; I < 10 * 1024 - 2; I++)
LargeData[I] = 'A';
LargeData[I++] = '\n';
LargeData[I++] = '\0';
for (J = 0; J < 4; J++) {
File[J] = fopen(argv[1 + J], "w");
if (!File[J])
return 1;
BufferIO = lprofCreateBufferIOInternal(File[J], IOBufferSize[J]);
lprofBufferIOWrite(BufferIO, "Short Strings:\n",
strlen("Short Strings:\n"));
for (I = 0; I < 1024; I++) {
lprofBufferIOWrite(BufferIO, SmallData, strlen(SmallData));
}
lprofBufferIOWrite(BufferIO, "Long Strings:\n", strlen("Long Strings:\n"));
for (I = 0; I < 1024; I++) {
lprofBufferIOWrite(BufferIO, MediumData, strlen(MediumData));
}
lprofBufferIOWrite(BufferIO, "Extra Long Strings:\n",
strlen("Extra Long Strings:\n"));
for (I = 0; I < 10; I++) {
lprofBufferIOWrite(BufferIO, LargeData, strlen(LargeData));
}
lprofBufferIOWrite(BufferIO, "Mixed Strings:\n", strlen("Mixed Strings:\n"));
for (I = 0; I < 1024; I++) {
lprofBufferIOWrite(BufferIO, MediumData, strlen(MediumData));
lprofBufferIOWrite(BufferIO, SmallData, strlen(SmallData));
}
lprofBufferIOWrite(BufferIO, "Endings:\n", strlen("Endings:\n"));
lprofBufferIOWrite(BufferIO, "END\n", strlen("END\n"));
lprofBufferIOWrite(BufferIO, "ENDEND\n", strlen("ENDEND\n"));
lprofBufferIOWrite(BufferIO, "ENDENDEND\n", strlen("ENDENDEND\n"));
lprofBufferIOWrite(BufferIO, "ENDENDENDEND\n", strlen("ENDENDENDEND\n"));
lprofBufferIOFlush(BufferIO);
lprofDeleteBufferIO(BufferIO);
fclose(File[J]);
}
return 0;
}
// CHECK-LABEL: Short Strings:
// CHECK: ABC
// CHECK-NEXT: ABC
// CHECK-NEXT: ABC
// CHECK-NEXT: ABC
// CHECK-NEXT: ABC
// CHECK-NEXT: ABC
// CHECK-NEXT: ABC
// CHECK-NEXT: ABC
// CHECK-NEXT: ABC
// CHECK-NEXT: ABC
// CHECK-NEXT: ABC
// CHECK-NEXT: ABC
// CHECK-NEXT: ABC
// CHECK-NEXT: ABC
// CHECK-LABEL: Long Strings:
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-LABEL: Mixed Strings:
// CHECK: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABC
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABC
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABC
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABC
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABC
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABC
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABC
// CHECK-NEXT: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
// CHECK-NEXT: ABC
// CHECK-LABEL: Endings:
// CHECK: END
// CHECK-NEXT: ENDEND
// CHECK-NEXT: ENDENDEND
// CHECK-NEXT: ENDENDENDEND