gcc/libgomp/testsuite/libgomp.c/switch-conversion.c
Tom de Vries 46dbeb4085 Fix switch conversion in offloading functions
2018-03-26  Tom de Vries  <tom@codesourcery.com>

	PR tree-optimization/85063
	* omp-general.c (offloading_function_p): New function.  Factor out
	of ...
	* omp-offload.c (pass_omp_target_link::gate): ... here.
	* omp-general.h (offloading_function_p): Declare.
	* tree-switch-conversion.c (build_one_array): Mark CSWTCH.x variable
	with attribute omp declare target for offloading functions.

	* testsuite/libgomp.c/switch-conversion-2.c: New test.
	* testsuite/libgomp.c/switch-conversion.c: New test.
	* testsuite/libgomp.oacc-c-c++-common/switch-conversion-2.c: New test.
	* testsuite/libgomp.oacc-c-c++-common/switch-conversion.c: New test.

From-SVN: r258852
2018-03-26 09:45:49 +00:00

37 lines
491 B
C

/* PR tree-optimization/85063 */
/* { dg-additional-options "-ftree-switch-conversion" } */
#include <stdlib.h>
#pragma omp declare target
static int __attribute__((noinline)) foo (int n)
{
switch (n & 3)
{
case 0: return 4;
case 1: return 3;
case 2: return 2;
default:
return 1;
}
}
#pragma omp end declare target
int
main (void)
{
int n[1];
n[0] = 4;
#pragma omp target
{
n[0] = foo (n[0]);
}
if (n[0] != 4)
abort ();
return 0;
}