109 lines · plain
1# REQUIRES: aarch642 3# Generate a large test case and check that the output is deterministic.4 5# RUN: %python %s %t.s %t.proftext6 7# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %t.s -o %t.o8# RUN: llvm-profdata merge %t.proftext -o %t.profdata9 10# RUN: %no-fatal-warnings-lld -arch arm64 -lSystem -e _main --icf=all -o - %t.o --irpgo-profile-sort=%t.profdata --compression-sort-startup-functions --compression-sort=both | llvm-nm --numeric-sort --format=just-symbols - > %t.order1.txt11# RUN: %no-fatal-warnings-lld -arch arm64 -lSystem -e _main --icf=all -o - %t.o --irpgo-profile-sort=%t.profdata --compression-sort-startup-functions --compression-sort=both | llvm-nm --numeric-sort --format=just-symbols - > %t.order2.txt12# RUN: diff %t.order1.txt %t.order2.txt13 14# RUN: %lld -arch arm64 -lSystem -e _main --icf=all -o - %t.o --irpgo-profile=%t.profdata --bp-startup-sort=function --bp-compression-sort-startup-functions --bp-compression-sort=both | llvm-nm --numeric-sort --format=just-symbols - > %t.order1.txt15# RUN: %lld -arch arm64 -lSystem -e _main --icf=all -o - %t.o --irpgo-profile=%t.profdata --bp-startup-sort=function --bp-compression-sort-startup-functions --bp-compression-sort=both | llvm-nm --numeric-sort --format=just-symbols - > %t.order2.txt16# RUN: diff %t.order1.txt %t.order2.txt17import random18import sys19 20assembly_filepath = sys.argv[1]21proftext_filepath = sys.argv[2]22 23random.seed(1234)24num_functions = 100025num_data = 10026num_traces = 1027 28function_names = [f"f{n}" for n in range(num_functions)]29data_names = [f"d{n}" for n in range(num_data)]30profiled_functions = function_names[: int(num_functions / 2)]31 32function_contents = [33 f"""34{name}:35 add w0, w0, #{i % 4096}36 add w1, w1, #{i % 10}37 add w2, w0, #{i % 20}38 adrp x3, {name}@PAGE39 ret40"""41 for i, name in enumerate(function_names)42]43 44data_contents = [45 f"""46{name}:47 .ascii "s{i % 2}-{i % 3}-{i % 5}"48 .xword {name}49"""50 for i, name in enumerate(data_names)51]52 53trace_contents = [54 f"""55# Weight56157{", ".join(random.sample(profiled_functions, len(profiled_functions)))}58"""59 for i in range(num_traces)60]61 62profile_contents = [63 f"""64{name}65# Func Hash:66{i}67# Num Counters:68169# Counter Values:70171"""72 for i, name in enumerate(profiled_functions)73]74 75with open(assembly_filepath, "w") as f:76 f.write(77 f"""78.text79.globl _main80 81_main:82 ret83 84{"".join(function_contents)}85 86.data87{"".join(data_contents)}88 89.subsections_via_symbols90"""91 )92 93with open(proftext_filepath, "w") as f:94 f.write(95 f"""96:ir97:temporal_prof_traces98 99# Num Traces100{num_traces}101# Trace Stream Size:102{num_traces}103 104{"".join(trace_contents)}105 106{"".join(profile_contents)}107"""108 )109