1*38fd1498Szrj /* Copyright (C) 2005-2018 Free Software Foundation, Inc. 2*38fd1498Szrj Contributed by Richard Henderson <rth@redhat.com>. 3*38fd1498Szrj 4*38fd1498Szrj This file is part of the GNU Offloading and Multi Processing Library 5*38fd1498Szrj (libgomp). 6*38fd1498Szrj 7*38fd1498Szrj Libgomp is free software; you can redistribute it and/or modify it 8*38fd1498Szrj under the terms of the GNU General Public License as published by 9*38fd1498Szrj the Free Software Foundation; either version 3, or (at your option) 10*38fd1498Szrj any later version. 11*38fd1498Szrj 12*38fd1498Szrj Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY 13*38fd1498Szrj WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 14*38fd1498Szrj FOR A PARTICULAR PURPOSE. See the GNU General Public License for 15*38fd1498Szrj more details. 16*38fd1498Szrj 17*38fd1498Szrj Under Section 7 of GPL version 3, you are granted additional 18*38fd1498Szrj permissions described in the GCC Runtime Library Exception, version 19*38fd1498Szrj 3.1, as published by the Free Software Foundation. 20*38fd1498Szrj 21*38fd1498Szrj You should have received a copy of the GNU General Public License and 22*38fd1498Szrj a copy of the GCC Runtime Library Exception along with this program; 23*38fd1498Szrj see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24*38fd1498Szrj <http://www.gnu.org/licenses/>. */ 25*38fd1498Szrj 26*38fd1498Szrj /* This file handles the BARRIER construct. */ 27*38fd1498Szrj 28*38fd1498Szrj #include "libgomp.h" 29*38fd1498Szrj 30*38fd1498Szrj 31*38fd1498Szrj void GOMP_barrier(void)32*38fd1498SzrjGOMP_barrier (void) 33*38fd1498Szrj { 34*38fd1498Szrj struct gomp_thread *thr = gomp_thread (); 35*38fd1498Szrj struct gomp_team *team = thr->ts.team; 36*38fd1498Szrj 37*38fd1498Szrj /* It is legal to have orphaned barriers. */ 38*38fd1498Szrj if (team == NULL) 39*38fd1498Szrj return; 40*38fd1498Szrj 41*38fd1498Szrj gomp_team_barrier_wait (&team->barrier); 42*38fd1498Szrj } 43*38fd1498Szrj 44*38fd1498Szrj bool GOMP_barrier_cancel(void)45*38fd1498SzrjGOMP_barrier_cancel (void) 46*38fd1498Szrj { 47*38fd1498Szrj struct gomp_thread *thr = gomp_thread (); 48*38fd1498Szrj struct gomp_team *team = thr->ts.team; 49*38fd1498Szrj 50*38fd1498Szrj /* The compiler transforms to barrier_cancel when it sees that the 51*38fd1498Szrj barrier is within a construct that can cancel. Thus we should 52*38fd1498Szrj never have an orphaned cancellable barrier. */ 53*38fd1498Szrj return gomp_team_barrier_wait_cancel (&team->barrier); 54*38fd1498Szrj } 55