Lacking this pattern means the builtin __sync_synchronize() on powerpc is just an asm with a memory clobber (see builtins.c), which is hardly a "full memory barrier" as extend.texi says it should be. This patch fixes multiple libgomp testsuite failures. Bootstrapped and regression tested powerpc-linux. OK for mainline?
* config/rs6000/sync.md: Duplicate hwsync as memory_barrier. Index: gcc/config/rs6000/sync.md =================================================================== --- gcc/config/rs6000/sync.md (revision 181425) +++ gcc/config/rs6000/sync.md (working copy) @@ -53,6 +53,15 @@ (define_expand "mem_thread_fence" DONE; }) +(define_expand "memory_barrier" + [(set (match_dup 0) + (unspec:BLK [(match_dup 0)] UNSPEC_SYNC))] + "" +{ + operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode)); + MEM_VOLATILE_P (operands[0]) = 1; +}) + (define_expand "hwsync" [(set (match_dup 0) (unspec:BLK [(match_dup 0)] UNSPEC_SYNC))] -- Alan Modra Australia Development Lab, IBM