diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Support/ModRef.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Support/ModRef.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/Support/ModRef.cpp b/contrib/llvm-project/llvm/lib/Support/ModRef.cpp new file mode 100644 index 000000000000..2bb9bc945bd2 --- /dev/null +++ b/contrib/llvm-project/llvm/lib/Support/ModRef.cpp @@ -0,0 +1,89 @@ +//===--- ModRef.cpp - Memory effect modeling --------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file implements ModRef and MemoryEffects misc functions. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Support/ModRef.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/StringExtras.h" + +using namespace llvm; + +raw_ostream &llvm::operator<<(raw_ostream &OS, ModRefInfo MR) { + switch (MR) { + case ModRefInfo::NoModRef: + OS << "NoModRef"; + break; + case ModRefInfo::Ref: + OS << "Ref"; + break; + case ModRefInfo::Mod: + OS << "Mod"; + break; + case ModRefInfo::ModRef: + OS << "ModRef"; + break; + } + return OS; +} + +raw_ostream &llvm::operator<<(raw_ostream &OS, MemoryEffects ME) { + interleaveComma(MemoryEffects::locations(), OS, [&](IRMemLocation Loc) { + switch (Loc) { + case IRMemLocation::ArgMem: + OS << "ArgMem: "; + break; + case IRMemLocation::InaccessibleMem: + OS << "InaccessibleMem: "; + break; + case IRMemLocation::ErrnoMem: + OS << "ErrnoMem: "; + break; + case IRMemLocation::Other: + OS << "Other: "; + break; + } + OS << ME.getModRef(Loc); + }); + return OS; +} + +raw_ostream &llvm::operator<<(raw_ostream &OS, CaptureComponents CC) { + if (capturesNothing(CC)) { + OS << "none"; + return OS; + } + + ListSeparator LS; + if (capturesAddressIsNullOnly(CC)) + OS << LS << "address_is_null"; + else if (capturesAddress(CC)) + OS << LS << "address"; + if (capturesReadProvenanceOnly(CC)) + OS << LS << "read_provenance"; + if (capturesFullProvenance(CC)) + OS << LS << "provenance"; + + return OS; +} + +raw_ostream &llvm::operator<<(raw_ostream &OS, CaptureInfo CI) { + ListSeparator LS; + CaptureComponents Other = CI.getOtherComponents(); + CaptureComponents Ret = CI.getRetComponents(); + + OS << "captures("; + if (!capturesNothing(Other) || Other == Ret) + OS << LS << Other; + if (Other != Ret) + OS << LS << "ret: " << Ret; + OS << ")"; + return OS; +} |
