diff --git a/dwarf/cold b/dwarf/cold new file mode 100755 index 0000000..d03b004 Binary files /dev/null and b/dwarf/cold differ diff --git a/dwarf/cold.cpp b/dwarf/cold.cpp new file mode 100644 index 0000000..1b43f63 --- /dev/null +++ b/dwarf/cold.cpp @@ -0,0 +1,40 @@ +/* Based on gcc/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c */ +/* foo is split into foo and foo.cold. bar is inlined in both cases. */ + +#define MAXITER 10000 +#define SIZE 10000 + +const char *sarr[SIZE]; +const char *buf_hot; +const char *buf_cold; + +struct Foo +{ + int a; + void foo(int path); + void bar(const char *s); +}; + +void Foo::bar(const char *s) { + int i; + for (i = 0; i < SIZE; i++) + sarr[i] = s; +} + +__attribute__((noinline)) +void Foo::foo(int path) { + if (path) + bar(buf_hot); + else + bar(buf_cold); +} + +int main(int argc, char *argv[]) { + Foo foo = {}; + int i; + buf_hot = "hello"; + buf_cold = "world"; + for (i = 0; i < MAXITER; i++) + foo.foo(argc); + return 0; +} diff --git a/dwarf/cold.sh b/dwarf/cold.sh new file mode 100644 index 0000000..d543b64 --- /dev/null +++ b/dwarf/cold.sh @@ -0,0 +1,4 @@ +CFLAGS="-fdebug-prefix-map=`pwd`=/object/testfiles/dwarf -O3" +g++-13 $CFLAGS cold.cpp -o cold -fprofile-generate +./cold +g++-13 $CFLAGS cold.cpp -o cold -fprofile-use -g