brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · e19d991 Raw
161 lines · plain
1; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/artificial-branch.perfscript --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t  --skip-symbolization --use-offset=02; RUN: FileCheck %s --input-file %t --check-prefix=CHECK-EXT-ADDR3; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/inline-noprobe2.perfscript --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t  --skip-symbolization --use-offset=04; RUN: FileCheck %s --input-file %t --check-prefix=CHECK-RAW-PROFILE5; RUN: llvm-profgen --format=text --unsymbolized-profile=%t --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t1 --use-offset=06; RUN: FileCheck %s --input-file %t1 --check-prefix=CHECK7 8; RUN: llvm-profgen --format=extbinary --perfscript=%S/Inputs/inline-noprobe2.perfscript --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t --populate-profile-symbol-list=19; RUN: llvm-profdata show -show-prof-sym-list -sample %t | FileCheck %s --check-prefix=CHECK-SYM-LIST10 11; CHECK-EXT-ADDR:      212; CHECK-EXT-ADDR-NEXT: 400870-400870:213; CHECK-EXT-ADDR-NEXT: 400875-4008bf:114; CHECK-EXT-ADDR-NEXT: 215; Value 1 is external address16; CHECK-EXT-ADDR-NEXT: 1->400875:117; CHECK-EXT-ADDR-NEXT: 4008bf->400870:218 19 20; CHECK-SYM-LIST: Dump profile symbol list21; CHECK-SYM-LIST: main22; CHECK-SYM-LIST: partition_pivot_first23; CHECK-SYM-LIST: partition_pivot_last24; CHECK-SYM-LIST: quick_sort25; CHECK-SYM-LIST: swap26 27 28;CHECK-RAW-PROFILE-NOT: 7f7448e889e429;CHECK-RAW-PROFILE-NOT: 7f7448e8882630 31;CHECK: partition_pivot_first:3022:532;CHECK:  0: 533;CHECK:  1: 534;CHECK:  2: 535;CHECK:  3: 536;CHECK:  3.1: 8337;CHECK:  4: 8238;CHECK:  4.1: 2639;CHECK:  4.2: 2540;CHECK:  4.3: 2641;CHECK:  5: 642;CHECK:  6: 643;CHECK:  65516: 544;CHECK:  4.2: swap:30045;CHECK:   1: 2546;CHECK:   2: 2547;CHECK:   3: 2548;CHECK:  5: swap:10249;CHECK:   1: 650;CHECK:   2: 651;CHECK:   3: 652;CHECK: main:1362:053;CHECK:  0: 054;CHECK:  3: 055;CHECK:  4.1: 056;CHECK:  4.3: 057;CHECK:  5.1: 1758;CHECK:  5.3: 1759;CHECK:  6: 1760;CHECK:  6.1: 1761;CHECK:  6.3: 1762;CHECK:  7: 063;CHECK:  8: 1 quick_sort:164;CHECK:  9: 065;CHECK:  11: 066;CHECK:  14: 067;CHECK:  65499: 068;CHECK: partition_pivot_last:1210:769;CHECK:  1: 670;CHECK:  2: 671;CHECK:  3: 672 73;w/o duplication factor :  3.1: 1874;w/o duplication factor :  3.3: 1875;w/o duplication factor :  4: 1976;w/o duplication factor :  5: 977 78;CHECK:  3.1: 3679;CHECK:  3.3: 3680;CHECK:  4: 3881;CHECK:  5: 1882;CHECK:  6: 583;CHECK:  7: 584;CHECK:  65526: 285;CHECK:  5: swap:24786 87;w/o duplication factor :  1: 988;w/o duplication factor :  2: 989;w/o duplication factor :  3: 990 91;CHECK:   1: 1892;CHECK:   2: 1893;CHECK:   3: 1894;CHECK:  6: swap:8595;CHECK:   1: 596;CHECK:   2: 597;CHECK:   3: 598;CHECK: quick_sort:903:2599;CHECK:  1: 24100;CHECK:  2: 12 partition_pivot_last:7 partition_pivot_first:5101;CHECK:  3: 12 quick_sort:12102;CHECK:  4: 12 quick_sort:12103;CHECK:  6: 24104;CHECK:  65507: 12105 106 107 108; original code:109; clang -O3 -g -fno-optimize-sibling-calls -fdebug-info-for-profiling qsort.c -o a.out110#include <stdio.h>111#include <stdlib.h>112 113void swap(int *a, int *b) {114	int t = *a;115	*a = *b;116	*b = t;117}118 119int partition_pivot_last(int* array, int low, int high) {120	int pivot = array[high];121	int i = low - 1;122	for (int j = low; j < high; j++)123		if (array[j] < pivot)124			swap(&array[++i], &array[j]);125	swap(&array[i + 1], &array[high]);126	return (i + 1);127}128 129int partition_pivot_first(int* array, int low, int high) {130	int pivot = array[low];131	int i = low + 1;132	for (int j = low + 1; j <= high; j++)133		if (array[j] < pivot) { if (j != i) swap(&array[i], &array[j]); i++;}134	swap(&array[i - 1], &array[low]);135	return i - 1;136}137 138void quick_sort(int* array, int low, int high, int (*partition_func)(int *, int, int)) {139	if (low < high) {140		int pi = (*partition_func)(array, low, high);141		quick_sort(array, low, pi - 1, partition_func);142		quick_sort(array, pi + 1, high, partition_func);143	}144}145 146int main() {147	const int size = 200;148	int sum = 0;149	int *array = malloc(size * sizeof(int));150	for(int i = 0; i < 100 * 1000; i++) {151		for(int j = 0; j < size; j++)152			array[j] = j % 10 ? rand() % size: j;153		int (*fptr)(int *, int, int) = i % 3 ? partition_pivot_last : partition_pivot_first;154		quick_sort(array, 0, size - 1, fptr);155		sum += array[i % size];156	}157	printf("sum=%d\n", sum);158 159	return 0;160}161