# Copyright 2010-2022 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . */ # # Contributed by Ken Werner . # # Tests GDBs support for OpenCL type conversions and casts. load_lib opencl.exp if { [skip_opencl_tests] } { unsupported "OpenCL support not detected" return 0 } set testfile "convs_casts" set clprogram [remote_download target ${srcdir}/${subdir}/${testfile}.cl] # Compile the generic OpenCL host app if { [gdb_compile_opencl_hostapp "${clprogram}" "${testfile}" "" ] != "" } { untested "failed to compile" return -1 } # Load the OpenCL app clean_restart ${testfile} # Set breakpoint at the OpenCL kernel gdb_test "tbreak testkernel" \ "" \ "Set pending breakpoint" \ ".*Function \"testkernel\" not defined.*Make breakpoint pending.*y or \\\[n\\\]. $" \ "y" gdb_run_cmd gdb_test "" ".*reakpoint.*1.*testkernel.*" "run" # Continue to the marker gdb_breakpoint [gdb_get_line_number "marker" "${clprogram}"] gdb_continue_to_breakpoint "marker" # Retrieve some information about availability of OpenCL extensions set have_cl_khr_fp64 [get_integer_valueof "have_cl_khr_fp64" 0] set have_cl_khr_fp16 [get_integer_valueof "have_cl_khr_fp16" 0] proc vec_casts { name } { global have_cl_khr_fp16 have_cl_khr_fp64 set types {"char" "uchar" "short" "ushort" "int" "uint" "long" "ulong" "half" "float" "double"} set len [llength ${types}] for {set i 0} {$i < ${len}} {incr i} { set type [lindex ${types} $i] gdb_test "print/d (${type}2)${name}" " = \\{123, 123\\}" gdb_test "print/d (${type}3)${name}" " = \\{123, 123, 123\\}" gdb_test "print/d (${type}4)${name}" " = \\{123, 123, 123, 123\\}" gdb_test "print/d (${type}8)${name}" " = \\{123, 123, 123, 123, 123, 123, 123, 123\\}" gdb_test "print/d (${type}16)${name}" " = \\{123 \\}" gdb_test "ptype (${type}2)${name}" "${type}2" gdb_test "ptype (${type}3)${name}" "${type}3" gdb_test "ptype (${type}4)${name}" "${type}4" gdb_test "ptype (${type}8)${name}" "${type}8" gdb_test "ptype (${type}16)${name}" "${type}16" } } vec_casts "c" vec_casts "uc" vec_casts "s" vec_casts "us" vec_casts "i" vec_casts "ui" vec_casts "l" vec_casts "ul" if { ${have_cl_khr_fp16} } { vec_casts "h" } vec_casts "f" if { ${have_cl_khr_fp64} } { vec_casts "d" } # Delete the OpenCL program source remote_file target delete ${clprogram}