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