mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			146 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
| #include <assert.h>
 | |
| 
 | |
| #define s 100
 | |
| 
 | |
| #pragma omp declare target
 | |
| int
 | |
| switch1 (int a)
 | |
| {
 | |
|   switch (a)
 | |
|     {
 | |
|     case 1:
 | |
|       return 11;
 | |
|     case 33:
 | |
|       return 333;
 | |
|     case 55:
 | |
|       return 55;
 | |
|     default:
 | |
|       return -1;
 | |
|     }
 | |
| }
 | |
| 
 | |
| int
 | |
| switch2 (int a)
 | |
| {
 | |
|   switch (a)
 | |
|     {
 | |
|     case 1 ... 11:
 | |
|       return 11;
 | |
|       break;
 | |
|     case 33:
 | |
|       return 333;
 | |
|       break;
 | |
|     case 55:
 | |
|       return 55;
 | |
|       break;
 | |
|     default:
 | |
|       return -1;
 | |
|     }
 | |
| }
 | |
| 
 | |
| int
 | |
| switch3 (int a)
 | |
| {
 | |
|   switch (a)
 | |
|     {
 | |
|     case 1 ... 11:
 | |
|       return 11;
 | |
|     case 12 ... 22:
 | |
|       return 22;
 | |
|     case 23 ... 33:
 | |
|       return 33;
 | |
|     case 34 ... 44:
 | |
|       return 44;
 | |
|     default:
 | |
|       return 44;
 | |
|     }
 | |
| }
 | |
| 
 | |
| int
 | |
| switch4 (int a, int b)
 | |
| {
 | |
|   switch (a)
 | |
|     {
 | |
|     case 1 ... 11:
 | |
|       return a;
 | |
|     case 12 ... 22:
 | |
|       return b;
 | |
|     case 23 ... 33:
 | |
|       return a;
 | |
|     case 34 ... 44:
 | |
|       return b;
 | |
|     default:
 | |
|       return 12345;
 | |
|     }
 | |
| }
 | |
| 
 | |
| int
 | |
| switch5 (int a, int b)
 | |
| {
 | |
|   switch (a)
 | |
|     {
 | |
|     case 1 ... 2:
 | |
|       return 1;
 | |
|     case 3 ... 4:
 | |
|       return 2;
 | |
|     case 5 ... 6:
 | |
|       return 3;
 | |
|     case 7 ... 11:
 | |
|       return 4;
 | |
|     }
 | |
| 
 | |
|   return -1;
 | |
| }
 | |
| #pragma omp end declare target
 | |
| 
 | |
| int
 | |
| main (int argc)
 | |
| {
 | |
|   int array[s];
 | |
| 
 | |
| #pragma omp target map(tofrom : array[:s])
 | |
|   {
 | |
|     for (int i = 0; i < s; i++)
 | |
|       array[i] = switch1 (i);
 | |
|   }
 | |
| 
 | |
|   for (int i = 0; i < s; i++)
 | |
|     assert (array[i] == switch1 (i));
 | |
| 
 | |
| #pragma omp target map(tofrom : array[:s])
 | |
|   {
 | |
|     for (int i = 0; i < s; i++)
 | |
|       array[i] = switch2 (i);
 | |
|   }
 | |
| 
 | |
|   for (int i = 0; i < s; i++)
 | |
|     assert (array[i] == switch2 (i));
 | |
| 
 | |
| #pragma omp target map(tofrom : array[:s])
 | |
|   {
 | |
|     for (int i = 0; i < s; i++)
 | |
|       array[i] = switch3 (i);
 | |
|   }
 | |
| 
 | |
|   for (int i = 0; i < s; i++)
 | |
|     assert (array[i] == switch3 (i));
 | |
| 
 | |
| #pragma omp target map(tofrom : array[:s])
 | |
|   {
 | |
|     for (int i = 0; i < s; i++)
 | |
|       array[i] = switch4 (i, i + 1);
 | |
|   }
 | |
| 
 | |
|   for (int i = 0; i < s; i++)
 | |
|     assert (array[i] == switch4 (i, i + 1));
 | |
| 
 | |
| #pragma omp target map(tofrom : array[:s])
 | |
|   {
 | |
|     for (int i = 0; i < s; i++)
 | |
|       array[i] = switch5 (i, i + 1);
 | |
|   }
 | |
| 
 | |
|   for (int i = 0; i < s; i++)
 | |
|     assert (array[i] == switch5 (i, i + 1));
 | |
| }
 |