gimple.h (CASE_GIMPLE_OMP): New.
* gimple.h (CASE_GIMPLE_OMP): New. (is_gimple_omp): Use it. * tree-cfg.c (is_ctrl_altering_stmt): Likewise. (verify_gimple_debug): Likewise. From-SVN: r151565
This commit is contained in:
parent
4056c2c6ed
commit
8b9db065c6
|
@ -1,3 +1,10 @@
|
|||
2009-09-09 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* gimple.h (CASE_GIMPLE_OMP): New.
|
||||
(is_gimple_omp): Use it.
|
||||
* tree-cfg.c (is_ctrl_altering_stmt): Likewise.
|
||||
(verify_gimple_debug): Likewise.
|
||||
|
||||
2009-09-09 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/41101
|
||||
|
|
37
gcc/gimple.h
37
gcc/gimple.h
|
@ -4190,23 +4190,32 @@ gimple_return_set_retval (gimple gs, tree retval)
|
|||
|
||||
/* Returns true when the gimple statment STMT is any of the OpenMP types. */
|
||||
|
||||
#define CASE_GIMPLE_OMP \
|
||||
case GIMPLE_OMP_PARALLEL: \
|
||||
case GIMPLE_OMP_TASK: \
|
||||
case GIMPLE_OMP_FOR: \
|
||||
case GIMPLE_OMP_SECTIONS: \
|
||||
case GIMPLE_OMP_SECTIONS_SWITCH: \
|
||||
case GIMPLE_OMP_SINGLE: \
|
||||
case GIMPLE_OMP_SECTION: \
|
||||
case GIMPLE_OMP_MASTER: \
|
||||
case GIMPLE_OMP_ORDERED: \
|
||||
case GIMPLE_OMP_CRITICAL: \
|
||||
case GIMPLE_OMP_RETURN: \
|
||||
case GIMPLE_OMP_ATOMIC_LOAD: \
|
||||
case GIMPLE_OMP_ATOMIC_STORE: \
|
||||
case GIMPLE_OMP_CONTINUE
|
||||
|
||||
static inline bool
|
||||
is_gimple_omp (const_gimple stmt)
|
||||
{
|
||||
return (gimple_code (stmt) == GIMPLE_OMP_PARALLEL
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_TASK
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_FOR
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_SECTIONS
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_SECTIONS_SWITCH
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_SINGLE
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_SECTION
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_MASTER
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_ORDERED
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_CRITICAL
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_RETURN
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_ATOMIC_LOAD
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_ATOMIC_STORE
|
||||
|| gimple_code (stmt) == GIMPLE_OMP_CONTINUE);
|
||||
switch (gimple_code (stmt))
|
||||
{
|
||||
CASE_GIMPLE_OMP:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -2748,25 +2748,31 @@ is_ctrl_altering_stmt (gimple t)
|
|||
{
|
||||
gcc_assert (t);
|
||||
|
||||
if (is_gimple_call (t))
|
||||
switch (gimple_code (t))
|
||||
{
|
||||
int flags = gimple_call_flags (t);
|
||||
case GIMPLE_CALL:
|
||||
{
|
||||
int flags = gimple_call_flags (t);
|
||||
|
||||
/* A non-pure/const call alters flow control if the current
|
||||
function has nonlocal labels. */
|
||||
if (!(flags & (ECF_CONST | ECF_PURE))
|
||||
&& cfun->has_nonlocal_label)
|
||||
return true;
|
||||
/* A non-pure/const call alters flow control if the current
|
||||
function has nonlocal labels. */
|
||||
if (!(flags & (ECF_CONST | ECF_PURE)) && cfun->has_nonlocal_label)
|
||||
return true;
|
||||
|
||||
/* A call also alters control flow if it does not return. */
|
||||
if (gimple_call_flags (t) & ECF_NORETURN)
|
||||
return true;
|
||||
/* A call also alters control flow if it does not return. */
|
||||
if (gimple_call_flags (t) & ECF_NORETURN)
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
CASE_GIMPLE_OMP:
|
||||
/* OpenMP directives alter control flow. */
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* OpenMP directives alter control flow. */
|
||||
if (is_gimple_omp (t))
|
||||
return true;
|
||||
|
||||
/* If a statement can throw, it alters control flow. */
|
||||
return stmt_can_throw_internal (t);
|
||||
}
|
||||
|
@ -4196,17 +4202,6 @@ verify_gimple_debug (gimple stmt ATTRIBUTE_UNUSED)
|
|||
static bool
|
||||
verify_types_in_gimple_stmt (gimple stmt)
|
||||
{
|
||||
if (is_gimple_omp (stmt))
|
||||
{
|
||||
/* OpenMP directives are validated by the FE and never operated
|
||||
on by the optimizers. Furthermore, GIMPLE_OMP_FOR may contain
|
||||
non-gimple expressions when the main index variable has had
|
||||
its address taken. This does not affect the loop itself
|
||||
because the header of an GIMPLE_OMP_FOR is merely used to determine
|
||||
how to setup the parallel iteration. */
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (gimple_code (stmt))
|
||||
{
|
||||
case GIMPLE_ASSIGN:
|
||||
|
@ -4244,6 +4239,15 @@ verify_types_in_gimple_stmt (gimple stmt)
|
|||
case GIMPLE_PREDICT:
|
||||
return false;
|
||||
|
||||
CASE_GIMPLE_OMP:
|
||||
/* OpenMP directives are validated by the FE and never operated
|
||||
on by the optimizers. Furthermore, GIMPLE_OMP_FOR may contain
|
||||
non-gimple expressions when the main index variable has had
|
||||
its address taken. This does not affect the loop itself
|
||||
because the header of an GIMPLE_OMP_FOR is merely used to determine
|
||||
how to setup the parallel iteration. */
|
||||
return false;
|
||||
|
||||
case GIMPLE_DEBUG:
|
||||
return verify_gimple_debug (stmt);
|
||||
|
||||
|
|
Loading…
Reference in New Issue