| Index: lib/CodeGen/TargetInfo.h
|
| diff --git a/lib/CodeGen/TargetInfo.h b/lib/CodeGen/TargetInfo.h
|
| index a682c183f010bb3b0e252b55ed54c0649197e6cd..a122e882e2fb277cff972ed1c487cb8937463231 100644
|
| --- a/lib/CodeGen/TargetInfo.h
|
| +++ b/lib/CodeGen/TargetInfo.h
|
| @@ -171,6 +171,28 @@ namespace clang {
|
| /// that unprototyped calls to varargs functions still succeed.
|
| virtual bool isNoProtoCallVariadic(const CodeGen::CallArgList &args,
|
| const FunctionNoProtoType *fnType) const;
|
| +
|
| + // @LOCALMOD-START
|
| + /// Determine whether the sequentially consistent fence generated for
|
| + /// the legacy GCC-style ``__sync_synchronize()`` builtin should be
|
| + /// surrounded by empty assembly directives which touch all of
|
| + /// memory. This allows platforms which aim for portability to
|
| + /// isolate themselves from changes in sequentially consistent
|
| + /// fence's semantics, since its intent is to represent the
|
| + /// C11/C++11 memory model which only orders atomic memory accesses.
|
| + /// This won't guarantee that all accesses (e.g. those to
|
| + /// non-escaping objects) will not be reordered.
|
| + virtual bool addAsmMemoryAroundSyncSynchronize() const {
|
| + return false;
|
| + }
|
| +
|
| + /// Determine whether a full sequentially consistent fence should be
|
| + /// emitted when ``asm("":::"memory")`` is encountered, treating it
|
| + /// like ``__sync_synchronize()``.
|
| + virtual bool asmMemoryIsFence() const {
|
| + return false;
|
| + }
|
| + // @LOCALMOD-END
|
| };
|
| }
|
|
|
|
|