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