1 /* Test invalid calls to routines. */ 2 3 #pragma acc routine gang 4 int gang()5gang () /* { dg-message "declared here" "3" } */ 6 { 7 #pragma acc loop gang worker vector 8 for (int i = 0; i < 10; i++) 9 { 10 } 11 12 return 1; 13 } 14 15 #pragma acc routine worker 16 int worker()17worker () /* { dg-message "declared here" "2" } */ 18 { 19 #pragma acc loop worker vector 20 for (int i = 0; i < 10; i++) 21 { 22 } 23 24 return 1; 25 } 26 27 #pragma acc routine vector 28 int vector()29vector () /* { dg-message "declared here" } */ 30 { 31 #pragma acc loop vector 32 for (int i = 0; i < 10; i++) 33 { 34 } 35 36 return 1; 37 } 38 39 #pragma acc routine seq 40 int seq()41seq () 42 { 43 return 1; 44 } 45 46 int main()47main () 48 { 49 int red = 0; 50 #pragma acc parallel copy (red) 51 { 52 /* Independent/seq loop tests. */ 53 #pragma acc loop reduction (+:red) // { dg-warning "insufficient partitioning" } 54 for (int i = 0; i < 10; i++) 55 red += gang (); 56 57 #pragma acc loop reduction (+:red) 58 for (int i = 0; i < 10; i++) 59 red += worker (); 60 61 #pragma acc loop reduction (+:red) 62 for (int i = 0; i < 10; i++) 63 red += vector (); 64 65 /* Gang routine tests. */ 66 #pragma acc loop gang reduction (+:red) /* { dg-message "containing loop" } */ 67 for (int i = 0; i < 10; i++) 68 red += gang (); // { dg-error "routine call uses same" } 69 70 #pragma acc loop worker reduction (+:red) /* { dg-message "containing loop" } */ 71 for (int i = 0; i < 10; i++) 72 red += gang (); // { dg-error "routine call uses same" } 73 74 #pragma acc loop vector reduction (+:red) /* { dg-message "containing loop" } */ 75 for (int i = 0; i < 10; i++) 76 red += gang (); // { dg-error "routine call uses same" } 77 78 /* Worker routine tests. */ 79 #pragma acc loop gang reduction (+:red) 80 for (int i = 0; i < 10; i++) 81 red += worker (); 82 83 #pragma acc loop worker reduction (+:red) /* { dg-message "containing loop" } */ 84 for (int i = 0; i < 10; i++) 85 red += worker (); // { dg-error "routine call uses same" } 86 87 #pragma acc loop vector reduction (+:red) /* { dg-message "containing loop" } */ 88 for (int i = 0; i < 10; i++) 89 red += worker (); // { dg-error "routine call uses same" } 90 91 /* Vector routine tests. */ 92 #pragma acc loop gang reduction (+:red) 93 for (int i = 0; i < 10; i++) 94 red += vector (); 95 96 #pragma acc loop worker reduction (+:red) 97 for (int i = 0; i < 10; i++) 98 red += vector (); 99 100 #pragma acc loop vector reduction (+:red) /* { dg-message "containing loop" } */ 101 for (int i = 0; i < 10; i++) 102 red += vector (); // { dg-error "routine call uses same" } 103 104 /* Seq routine tests. */ 105 #pragma acc loop gang reduction (+:red) 106 for (int i = 0; i < 10; i++) 107 red += seq (); 108 109 #pragma acc loop worker reduction (+:red) 110 for (int i = 0; i < 10; i++) 111 red += seq (); 112 113 #pragma acc loop vector reduction (+:red) 114 for (int i = 0; i < 10; i++) 115 red += seq (); 116 } 117 118 return 0; 119 } 120