#include <string.h>
void (*f0)();
void (*f1)();
void (*f2)();
char dst[200];
char src[200];
volatile int n;
__attribute__((noinline)) void foo() {}
__attribute__((noinline)) void bar() {
f0 = foo;
f1 = foo;
f2 = foo;
n = 4;
}
int main(int argc, char *argv[]) {
int i;
bar();
if (argc == 1) {
f0();
for (i = 0; i < 9; i++)
f1();
for (i = 0; i < 99; i++)
f2();
} else {
memcpy((void *)dst, (void *)src, n);
for (i = 0; i < 6; i++)
memcpy((void *)(dst + 2), (void *)src, n + 1);
for (i = 0; i < 66; i++)
memcpy((void *)(dst + 9), (void *)src, n + 2);
}
}
// CHECK: Counters:
// CHECK-NEXT: main:
// CHECK-NEXT: Hash: 0x0a9bd81e87ab6e87
// CHECK-NEXT: Counters: 6
// CHECK-NEXT: Indirect Call Site Count: 3
// CHECK-NEXT: Number of Memory Intrinsics Calls: 3
// CHECK-NEXT: Block counts: [27, 297, 12, 132, 3, 2]
// CHECK-NEXT: Indirect Target Results:
// CHECK-NEXT: [ 0, foo, 3 ]
// CHECK-NEXT: [ 1, foo, 27 ]
// CHECK-NEXT: [ 2, foo, 297 ]
// CHECK-NEXT: Memory Intrinsic Size Results:
// CHECK-NEXT: [ 0, 4, 2 ]
// CHECK-NEXT: [ 1, 5, 12 ]
// CHECK-NEXT: [ 2, 6, 132 ]
// CHECK-NEXT: Instrumentation level: IR entry_first = 0
// CHECK-NEXT: Functions shown: 1
// CHECK-NEXT: Total functions: 3
// CHECK-NEXT: Maximum function count: 327
// CHECK-NEXT: Maximum internal block count: 297
// CHECK-NEXT: Statistics for indirect call sites profile:
// CHECK-NEXT: Total number of sites: 3
// CHECK-NEXT: Total number of sites with values: 3
// CHECK-NEXT: Total number of profiled values: 3
// CHECK-NEXT: Value sites histogram:
// CHECK-NEXT: NumTargets, SiteCount
// CHECK-NEXT: 1, 3
// CHECK-NEXT: Statistics for memory intrinsic calls sizes profile:
// CHECK-NEXT: Total number of sites: 3
// CHECK-NEXT: Total number of sites with values: 3
// CHECK-NEXT: Total number of profiled values: 3
// CHECK-NEXT: Value sites histogram:
// CHECK-NEXT: NumTargets, SiteCount
// CHECK-NEXT: 1, 3