Forráskód Böngészése

modes.cocci : rewrote the script to fix several bugs.

Now simpler and cleaner.
Cyril Roelandt 13 éve
szülő
commit
a6a4bc8d5c
2 módosított fájl, 58 hozzáadás és 37 törlés
  1. 21 34
      tools/dev/experimental/modes.cocci
  2. 37 3
      tools/dev/experimental/modes_test.c

+ 21 - 34
tools/dev/experimental/modes.cocci

@@ -1,42 +1,29 @@
-@find_cl@
-identifier c;
-@@
-struct starpu_codelet c =
-{
-};
-
-@find_task depends on find_cl@
-identifier t;
-identifier find_cl.c;
-@@
-t->cl = &c; 
-
-
 /*
- * Remove task->buffers[id].mode = STARPU_{R,W,RW}
- * Replace task->buffers[id].handle = handle; by  
- *      task->handles[id] = handle;
+ * KNOWN BUGS :
+ *
+ * - Undefined behaviour if a codelet is used by more than one task
+ * - buffers[x].mode must be STARPU_{R,W,RW} : cant be a variable
  */
-@remove_task_mode depends on find_task@
-identifier find_task.t;
-expression E;
+@r@
+identifier c;
+identifier t;
+expression id;
+constant MODE;
 expression H;
-expression id; 
-identifier find_cl.c;
 @@
-(
+ t->cl = &c;
+<...
 - t->buffers[id].handle = H;
-++ t->handles[id] = H;
-|
-- t->buffers[id].mode = E;
-)
++ t->handles[id] = H;
+- t->buffers[id].mode = MODE;
+...>
 
-@has_modes depends on remove_task_mode@
-identifier find_cl.c;
-expression remove_task_mode.id;
-expression remove_task_mode.E;
+@s depends on r@
+identifier r.c;
+expression r.id;
+constant r.MODE;
 @@
-struct starpu_codelet c =
-{
-++	.modes[id] = E,
+struct starpu_codelet c = {
+++	.modes[id] = MODE,
 };
+

+ 37 - 3
tools/dev/experimental/modes_test.c

@@ -3,7 +3,7 @@ struct starpu_codelet cummy_cl =
 {
         .cpu_funcs = { foo, NULL },
         .nbuffers = 42
-}
+};
 
 /* Now, there is some work to do */
 struct starpu_codelet cl1 = 
@@ -12,11 +12,11 @@ struct starpu_codelet cl1 =
         .nbuffers = 2,
 };
 
+
 int
 foo(void)
 {
-        struct starpu_task *task;
-        task = starpu_task_create();
+        struct starpu_task *task = starpu_task_create();
         task->cl = &cl1;
         task->buffers[0].handle = handle1;
         task->buffers[0].mode = STARPU_R;
@@ -24,3 +24,37 @@ foo(void)
         task->buffers[1].handle = handles[1];
         task->buffers[1].mode = STARPU_W;
 }
+
+struct starpu_codelet cl2 = 
+{
+	.cpu_funcs = {foo, NULL},
+	.nbuffers = 1
+};
+
+
+static void
+bar(void)
+{
+	struct starpu_task *task = starpu_task_create();
+	task->cl = &cl2;
+	task->buffers[0].handle = h;
+	task->buffers[0].mode = STARPU_RW;
+
+	task->buffers[1].handle = h;
+	task->buffers[1].mode = random_mode();
+}
+
+struct starpu_codelet cl3 = 
+{
+	.cpu_funcs = { bar, baz, NULL },
+	.nbuffers = 1
+};
+
+static void
+baz(void)
+{
+	struct starpu_task *blah;
+	blah->cl = &cl3;
+	blah->buffers[0].handle = some_handle;
+	blah->buffers[0].mode = STARPU_RW;
+}