# Copyright (C) 2023-2024 Free Software Foundation, Inc. # Copyright (C) 2023-2024 Advanced Micro Devices, Inc. All rights reserved. # This file is part of GDB. # 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 . # This test checks the format and value of AMDGPU specific convenience # variables. load_lib rocm.exp require allow_hip_tests # The debug behavior this test checks (inspecting device locals # and/or single-stepping) is not reliable on optimized device # code, so skip it for optimized builds. require no_optimized_code standard_testfile .cpp if {[prepare_for_testing "failed to prepare ${testfile}" \ $testfile $srcfile {debug hip}]} { return -1 } with_rocm_gpu_lock { if ![runto_main] { fail "can't run to main" return -1 } # Set a breakpoint in device code, and set a condition to select a wave # with coordinates != (0, 0, 0). set bp_line [gdb_get_line_number "Break here."] gdb_breakpoint \ [concat "$bp_line if " \ "thread_idx_x == 7 && thread_idx_y == 3 && thread_idx_z == 1 " \ "&& group_idx_x == 2 && group_idx_y == 1 && group_idx_z == 3" ] \ "allow-pending" gdb_continue_to_breakpoint "kern" set lane_num [get_integer_valueof lane_num INVALID] set wave_in_group [get_integer_valueof wave_in_group INVALID] gdb_test "p \$_dispatch_pos" \ "\\\$$::decimal = \"\\(2,1,3\\)/$wave_in_group\"" gdb_test "p \$_thread_workgroup_pos" "\\\$$::decimal = \"$wave_in_group\"" gdb_test "p \$_lane_workgroup_pos" "\\\$$::decimal = \"\\\[7,3,1\\\]\"" gdb_test "p \$_lane" "\\\$$::decimal = $lane_num" gdb_continue_to_end "continue to end" "continue" 1 }