I just noticed there is a statement "MEM_VOLATILE_P(operands[0]=1" for mfence pattern in gcc/config/i386/sync.md:
I think that is why __builtin_ia32_mfence and __builtin_ia32_pause *do* generate a barrier in dw's experiment.
Aha!This is not only exactly what I wanted to know, it's exactly the answer I was hoping for.
Thank you for your help. dw