brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · 10c36a8 Raw
284 lines · bash
1#!/bin/bash2 3if [ -z $1 ]; then4  echo "Path to clang required!"5  echo "Usage: update_memprof_inputs.sh /path/to/updated/clang"6  exit 17else8  CLANG=$19fi10 11# Allows the script to be invoked from other directories.12OUTDIR=$(dirname $(realpath -s $0))13 14read -r -d '' BASIC << EOF15#include <stdlib.h>16#include <string.h>17int main(int argc, char **argv) {18  char *x = (char *)malloc(10);19  memset(x, 0, 10);20  free(x);21  x = (char *)malloc(10);22  memset(x, 0, 10);23  free(x);24  return 0;25}26EOF27 28read -r -d '' INLINE << EOF29#include <stdlib.h>30#include <string.h>31 32__attribute__((always_inline))33void qux(int x) {34  char *ptr = (char*) malloc(x);35  memset(ptr, 0, x);36  free(ptr);37}38 39__attribute__((noinline))40void foo(int x){ qux(x); }41 42__attribute__((noinline))43void bar(int x) { foo(x); }44 45int main(int argc, char **argv) {46  bar(argc);47  return 0;48}49EOF50 51read -r -d '' MULTI << EOF52#include <sanitizer/memprof_interface.h>53#include <stdlib.h>54#include <string.h>55int main(int argc, char **argv) {56  char *x = (char *)malloc(10);57  memset(x, 0, 10);58  free(x);59  __memprof_profile_dump();60  x = (char *)malloc(10);61  memset(x, 0, 10);62  free(x);63  return 0;64}65EOF66 67read -r -d '' BASIC_HISTOGRAM << EOF68struct A {69  long int a;70  long int b;71  long int c;72  long int d;73  long int e;74  long int f;75  long int g;76  long int h;77  A() {};78};79 80void foo() {81  long int acc = 0;82  A *a = new A();83  acc += a->a;84  acc += a->b;85  acc += a->c;86  acc += a->d;87  acc += a->e;88  acc += a->f;89  acc += a->g;90  acc += a->h;91  delete a;92}93void bar() {94  long int acc = 0;95  A *a = new A();96  acc += a->a;97  acc += a->a;98  acc += a->a;99  acc += a->a;100  acc += a->a;101  acc += a->a;102  acc += a->a;103  acc += a->a;104  acc += a->b;105  acc += a->b;106  acc += a->b;107  acc += a->b;108  acc += a->b;109  acc += a->b;110  acc += a->b;111  acc += a->c;112  acc += a->c;113  acc += a->c;114  acc += a->c;115  acc += a->c;116  acc += a->c;117  acc += a->d;118  acc += a->d;119  acc += a->d;120  acc += a->d;121  acc += a->d;122  acc += a->e;123  acc += a->e;124  acc += a->e;125  acc += a->e;126  acc += a->f;127  acc += a->f;128  acc += a->f;129  acc += a->g;130  acc += a->g;131  acc += a->h;132 133  delete a;134}135 136int main(int argc, char **argv) {137  long int acc = 0;138  A *a = new A();139  acc += a->a;140  acc += a->b;141  acc += a->c;142  acc += a->d;143  acc += a->e;144  acc += a->f;145  acc += a->g;146  acc += a->h;147 148  delete a;149 150  A *b = new A();151  acc += b->a;152  acc += b->a;153  acc += b->a;154  acc += b->a;155  acc += b->a;156  acc += b->a;157  acc += b->a;158  acc += b->a;159  acc += b->b;160  acc += b->b;161  acc += b->b;162  acc += b->b;163  acc += b->b;164  acc += b->b;165  acc += b->b;166  acc += b->c;167  acc += b->c;168  acc += b->c;169  acc += b->c;170  acc += b->c;171  acc += b->c;172  acc += b->d;173  acc += b->d;174  acc += b->d;175  acc += b->d;176  acc += b->d;177  acc += b->e;178  acc += b->e;179  acc += b->e;180  acc += b->e;181  acc += b->f;182  acc += b->f;183  acc += b->f;184  acc += b->g;185  acc += b->g;186  acc += b->h;187 188  delete b;189 190  A *c = new A();191  acc += c->a;192 193  for (int i = 0; i < 21; ++i) {194 195    foo();196  }197 198  for (int i = 0; i < 21; ++i) {199 200    bar();201  }202 203  return 0;204}205EOF206 207read -r -d '' PADDING_HISTOGRAM << EOF208struct A {209  char a;210  char b;211  long int c;212  char d;213  int e;214  A() {};215};216 217struct B {218  double x;219  double y;220  B() {};221};222 223struct C {224  A a;225  char z;226  B b;227  C() {};228};229 230int main(int argc, char **argv) {231  long int acc = 0;232 233  A *a = new A();234  acc += a->a;235  acc += a->b;236  acc += a->c;237  acc += a->d;238  acc += a->e;239 240  C *c = new C();241  acc += c->a.a;242  acc += c->a.a;243  acc += c->b.x;244  acc += c->b.y;245 246  return 0;247}248EOF249 250 251DEFAULT_MEMPROF_FLAGS="-fuse-ld=lld -Wl,--no-rosegment -gmlt -fdebug-info-for-profiling -fmemory-profile -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -m64 -Wl,-build-id -no-pie"252 253# Map each test to their source and any additional flags separated by ; 254declare -A INPUTS255INPUTS["basic"]="BASIC"256INPUTS["inline"]="INLINE"257INPUTS["multi"]="MULTI"258INPUTS["pic"]="BASIC;-pie"259INPUTS["buildid"]="BASIC;-Wl,-build-id=sha1"260 261for name in "${!INPUTS[@]}"; do262  IFS=";" read -r src flags <<< "${INPUTS[$name]}"263  echo "${!src}" > ${OUTDIR}/${name}.c264  ${CLANG} ${DEFAULT_MEMPROF_FLAGS} ${flags} ${OUTDIR}/${name}.c -o ${OUTDIR}/${name}.memprofexe265  env MEMPROF_OPTIONS=log_path=stdout ${OUTDIR}/${name}.memprofexe > ${OUTDIR}/${name}.memprofraw266  rm ${OUTDIR}/${name}.c267done268 269 270DEFAULT_HIST_FLAGS="${DEFAULT_MEMPROF_FLAGS} -mllvm -memprof-use-callbacks=true -mllvm -memprof-histogram"271 272 273# Map each test to their source and any additional flags separated by ; 274declare -A HISTOGRAM_INPUTS275HISTOGRAM_INPUTS["basic-histogram"]="BASIC_HISTOGRAM"276HISTOGRAM_INPUTS["padding-histogram"]="PADDING_HISTOGRAM"277 278for name in "${!HISTOGRAM_INPUTS[@]}"; do279  IFS=";" read -r src flags <<< "${HISTOGRAM_INPUTS[$name]}"280  echo "${!src}" > ${OUTDIR}/${name}.c281  ${CLANG} ${DEFAULT_HIST_FLAGS} ${flags} ${OUTDIR}/${name}.c -o ${OUTDIR}/${name}.memprofexe282  env MEMPROF_OPTIONS=log_path=stdout ${OUTDIR}/${name}.memprofexe > ${OUTDIR}/${name}.memprofraw283  rm ${OUTDIR}/${name}.c284done