1 /* { dg-do compile } */ 2 /* { dg-options "-fgnu-tm -O -fdump-tree-tmmark" } */ 3 4 extern int test(void) __attribute__((transaction_safe)); 5 extern void *malloc (__SIZE_TYPE__) __attribute__((malloc,transaction_safe)); 6 7 struct large { int foo[500]; }; 8 f()9int f() 10 { 11 int *p1, *p2, *p3; 12 13 p1 = malloc (sizeof (*p1)*5000); 14 __transaction_atomic { 15 *p1 = 0; 16 17 p2 = malloc (sizeof (*p2)*6000); 18 *p2 = 1; 19 20 /* p3 = PHI (p1, p2) */ 21 if (test()) 22 p3 = p1; 23 else 24 p3 = p2; 25 26 /* Since both p1 and p2 are thread-private, we can inherit the 27 logging already done. No ITM_W* instrumentation necessary. */ 28 *p3 = 555; 29 } 30 return p3[something()]; 31 } 32 33 /* { dg-final { scan-tree-dump-times "ITM_WU" 0 "tmmark" } } */ 34 /* { dg-final { cleanup-tree-dump "tmmark" } } */ 35