#!/bin/bash # Script to generate llvm/test/CodeGen/X86/heterogeneous-debug.test # shellcheck disable=SC2154 set -u # This is independent of the test we are in, and is not reset in reset_per_test_state idx=0 inc_idx() { ((idx+=1)); } # Every other counter/accumulator is per-test and gets reset and the start of a new one reset_per_test_state() { declare -g ir_funcs='' ir_metadata='' mir_funcs='' di_version='' mdid=0 declare_mdid unit declare_mdid file declare_mdid dwarf_version declare_mdid info_version } declare_mdid() { ((mdid+=1)) declare -g "$1=$mdid" } cat_generic() { declare -g "$1=${!1}$(cat)"$'\n'; } cat_ir_funcs() { cat_generic ir_funcs; } cat_ir_metadata() { cat_generic ir_metadata; } cat_mir_funcs() { cat_generic mir_funcs; } print_ir_module() { cat <", directory: ".") !$dwarf_version = !{i32 7, !"Dwarf Version", i32 5} !$info_version = !{i32 2, !"Debug Info Version", i32 $di_version} $ir_metadata EOF } # Some read-only helper variables bit_size_to_byte_size() { printf '%d\n' "$((($1 + 8 - 1) / 8))"; } readonly scalar_tys=(i1 i4 i8 i16 i17 i32 i64 i128 half bfloat float double fp128) readonly scalar_ty_bit_sizes=(1 4 8 16 17 32 64 128 16 16 32 64 128) readonly scalar_ty_byte_sizes=($(for sz in ${scalar_ty_bit_sizes[@]}; do bit_size_to_byte_size $sz done)) readonly scalar_ty_pow2_byte_sizes=($(for sz in ${scalar_ty_bit_sizes[@]}; do next_pow2=1 while [[ $sz -gt $next_pow2 ]]; do next_pow2=$(($next_pow2 * 2)) done bit_size_to_byte_size $next_pow2 done)) readonly scalar_ty_bit_masks=($(for sz in ${scalar_ty_bit_sizes[@]}; do if (($sz % 8)); then printf '%d\n' "$(((1 << $sz) - 1))" else printf '0\n' fi done)) # Test generation functions declare_one_var_metadata() { declare_mdid sub declare_mdid sub_type declare_mdid sub_type_types declare_mdid ret declare_mdid var declare_mdid var_type declare_mdid loc # FIXME: is the size field never considered? it seems to be irrelevant what it # is set to as far as the expression is concerned cat_ir_metadata < llvm/test/CodeGen/X86/heterogeneous-debug.test # RUN: split-file %s %t EOF # BEGIN ir tests reset_per_test_state di_version=3 for i in "${!scalar_tys[@]}"; do add_checks_ir "DW_AT_location (DW_OP_fbreg -${scalar_ty_pow2_byte_sizes[$i]})" gencase_ir_one_alloca "${scalar_tys[$i]}" '' add_checks_ir "DW_AT_location (DW_OP_fbreg -${scalar_ty_pow2_byte_sizes[$i]}, DW_OP_deref)" gencase_ir_one_alloca "${scalar_tys[$i]}" 'DW_OP_deref' done cat <