| //===--- 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; |
| } |