register.c 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /* GCC-StarPU
  2. Copyright (C) 2011 Institut National de Recherche en Informatique et Automatique
  3. GCC-StarPU is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 3 of the License, or
  6. (at your option) any later version.
  7. GCC-StarPU is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with GCC-StarPU. If not, see <http://www.gnu.org/licenses/>. */
  13. /* Test whether `#pragma starpu register ...' generates the right code. */
  14. #undef NDEBUG
  15. #include <lib.h>
  16. static void
  17. foo (void)
  18. {
  19. char x[] = { 1, 2, 3 };
  20. expected_register_arguments.pointer = x;
  21. expected_register_arguments.elements = sizeof x;
  22. expected_register_arguments.element_size = 1;
  23. #pragma starpu register x /* (warning "considered unsafe") */
  24. }
  25. int
  26. main (int argc, char *argv[])
  27. {
  28. #pragma starpu initialize
  29. int x[123];
  30. double *y;
  31. static char z[345];
  32. short w[] = { 1, 2, 3 };
  33. size_t y_size = 234;
  34. y = malloc (234 * sizeof *y);
  35. expected_register_arguments.pointer = x;
  36. expected_register_arguments.elements = 123;
  37. expected_register_arguments.element_size = sizeof x[0];
  38. #pragma starpu register x 123 /* (note "can be omitted") */
  39. expected_register_arguments.pointer = y;
  40. expected_register_arguments.elements = 234;
  41. expected_register_arguments.element_size = sizeof *y;
  42. #pragma starpu register y 234
  43. expected_register_arguments.pointer = y;
  44. expected_register_arguments.elements = y_size;
  45. expected_register_arguments.element_size = sizeof *y;
  46. #pragma starpu register y y_size
  47. expected_register_arguments.pointer = z;
  48. expected_register_arguments.elements = 345;
  49. expected_register_arguments.element_size = sizeof z[0];
  50. #pragma starpu register z
  51. expected_register_arguments.pointer = w;
  52. expected_register_arguments.elements = 3;
  53. expected_register_arguments.element_size = sizeof w[0];
  54. #pragma starpu register w
  55. expected_register_arguments.pointer = argv;
  56. expected_register_arguments.elements = 456;
  57. expected_register_arguments.element_size = sizeof argv[0];
  58. #pragma starpu register argv 456
  59. #define ARGV argv
  60. #define N 456
  61. expected_register_arguments.pointer = argv;
  62. expected_register_arguments.elements = N;
  63. expected_register_arguments.element_size = sizeof argv[0];
  64. #pragma starpu register ARGV /* hello, world! */ N
  65. #undef ARGV
  66. #undef N
  67. foo ();
  68. assert (data_register_calls == 8);
  69. free (y);
  70. return EXIT_SUCCESS;
  71. }