mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-27 13:30:05 +00:00
Revert "Introduce a string_ostream string builder facilty"
Temporarily back out commits r211749, r211752 and r211754. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211814 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
eca517deaa
commit
8dd8d5c2b2
@ -36,7 +36,9 @@ struct DOTGraphTraits<const Function*> : public DefaultDOTGraphTraits {
|
||||
if (!Node->getName().empty())
|
||||
return Node->getName().str();
|
||||
|
||||
string_ostream OS;
|
||||
std::string Str;
|
||||
raw_string_ostream OS(Str);
|
||||
|
||||
Node->printAsOperand(OS, false);
|
||||
return OS.str();
|
||||
}
|
||||
@ -44,7 +46,8 @@ struct DOTGraphTraits<const Function*> : public DefaultDOTGraphTraits {
|
||||
static std::string getCompleteNodeLabel(const BasicBlock *Node,
|
||||
const Function *) {
|
||||
enum { MaxColumns = 80 };
|
||||
string_ostream OS;
|
||||
std::string Str;
|
||||
raw_string_ostream OS(Str);
|
||||
|
||||
if (Node->getName().empty()) {
|
||||
Node->printAsOperand(OS, false);
|
||||
@ -106,7 +109,8 @@ struct DOTGraphTraits<const Function*> : public DefaultDOTGraphTraits {
|
||||
|
||||
if (SuccNo == 0) return "def";
|
||||
|
||||
string_ostream OS;
|
||||
std::string Str;
|
||||
raw_string_ostream OS(Str);
|
||||
SwitchInst::ConstCaseIt Case =
|
||||
SwitchInst::ConstCaseIt::fromSuccessorIndex(SI, SuccNo);
|
||||
OS << Case.getCaseValue()->getValue();
|
||||
|
@ -58,18 +58,23 @@ protected:
|
||||
class ObjectBufferStream : public ObjectBuffer {
|
||||
void anchor() override;
|
||||
public:
|
||||
ObjectBufferStream() {}
|
||||
ObjectBufferStream() : OS(SV) {}
|
||||
virtual ~ObjectBufferStream() {}
|
||||
|
||||
raw_ostream &getOStream() { return OS; }
|
||||
void flush()
|
||||
{
|
||||
OS.flush();
|
||||
|
||||
// Make the data accessible via the ObjectBuffer::Buffer
|
||||
Buffer.reset(MemoryBuffer::getMemBuffer(OS.str(), "", false));
|
||||
Buffer.reset(MemoryBuffer::getMemBuffer(StringRef(SV.data(), SV.size()),
|
||||
"",
|
||||
false));
|
||||
}
|
||||
|
||||
protected:
|
||||
small_string_ostream<4096> OS; // Working buffer into which we JIT.
|
||||
SmallVector<char, 4096> SV; // Working buffer into which we JIT.
|
||||
raw_svector_ostream OS; // streaming wrapper
|
||||
};
|
||||
|
||||
} // namespace llvm
|
||||
|
@ -184,7 +184,8 @@ public:
|
||||
O << "|" << DOT::EscapeString(NodeDesc);
|
||||
}
|
||||
|
||||
string_ostream EdgeSourceLabels;
|
||||
std::string edgeSourceLabels;
|
||||
raw_string_ostream EdgeSourceLabels(edgeSourceLabels);
|
||||
bool hasEdgeSourceLabels = getEdgeSourceLabels(EdgeSourceLabels, Node);
|
||||
|
||||
if (hasEdgeSourceLabels) {
|
||||
|
@ -612,7 +612,8 @@ template<typename T>
|
||||
typename std::enable_if<has_ScalarTraits<T>::value,void>::type
|
||||
yamlize(IO &io, T &Val, bool) {
|
||||
if ( io.outputting() ) {
|
||||
llvm::string_ostream Buffer;
|
||||
std::string Storage;
|
||||
llvm::raw_string_ostream Buffer(Storage);
|
||||
ScalarTraits<T>::output(Val, io.getContext(), Buffer);
|
||||
StringRef Str = Buffer.str();
|
||||
io.scalarString(Str, ScalarTraits<T>::mustQuote(Str));
|
||||
|
@ -15,12 +15,13 @@
|
||||
#define LLVM_SUPPORT_RAW_OSTREAM_H
|
||||
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
namespace llvm {
|
||||
class format_object_base;
|
||||
template <typename T>
|
||||
class SmallVectorImpl;
|
||||
|
||||
namespace sys {
|
||||
namespace fs {
|
||||
@ -460,14 +461,6 @@ class raw_svector_ostream : public raw_ostream {
|
||||
/// current_pos - Return the current position within the stream, not
|
||||
/// counting the bytes currently in the buffer.
|
||||
uint64_t current_pos() const override;
|
||||
|
||||
protected:
|
||||
// This constructor is specified not to access \p O provided for storage as it
|
||||
// may not yet be initialized at construction time.
|
||||
explicit raw_svector_ostream(SmallVectorImpl<char> &O, std::nullptr_t)
|
||||
: OS(O){};
|
||||
void init();
|
||||
|
||||
public:
|
||||
/// Construct a new raw_svector_ostream.
|
||||
///
|
||||
@ -500,25 +493,6 @@ public:
|
||||
~raw_null_ostream();
|
||||
};
|
||||
|
||||
/// string_ostream - A raw_ostream that builds a string. This is a
|
||||
/// raw_svector_ostream with storage.
|
||||
template <unsigned InternalLen>
|
||||
class small_string_ostream : public raw_svector_ostream {
|
||||
SmallVector<char, InternalLen> Buffer;
|
||||
// There's no need to flush explicitly.
|
||||
using raw_svector_ostream::flush;
|
||||
|
||||
public:
|
||||
small_string_ostream() : raw_svector_ostream(Buffer, nullptr) { init(); }
|
||||
|
||||
void clear() {
|
||||
flush();
|
||||
Buffer.clear();
|
||||
}
|
||||
};
|
||||
|
||||
typedef small_string_ostream<128> string_ostream;
|
||||
|
||||
} // end llvm namespace
|
||||
|
||||
#endif
|
||||
|
@ -42,8 +42,8 @@ public:
|
||||
|
||||
void EmitString(raw_ostream &O) {
|
||||
// Escape the string.
|
||||
small_string_ostream<256> Str;
|
||||
Str.write_escaped(AggregateString);
|
||||
SmallString<256> Str;
|
||||
raw_svector_ostream(Str).write_escaped(AggregateString);
|
||||
AggregateString = Str.str();
|
||||
|
||||
O << " \"";
|
||||
|
@ -75,7 +75,8 @@ void LLVMInitializeAnalysis(LLVMPassRegistryRef R) {
|
||||
LLVMBool LLVMVerifyModule(LLVMModuleRef M, LLVMVerifierFailureAction Action,
|
||||
char **OutMessages) {
|
||||
raw_ostream *DebugOS = Action != LLVMReturnStatusAction ? &errs() : nullptr;
|
||||
string_ostream MsgsOS;
|
||||
std::string Messages;
|
||||
raw_string_ostream MsgsOS(Messages);
|
||||
|
||||
LLVMBool Result = verifyModule(*unwrap(M), OutMessages ? &MsgsOS : DebugOS);
|
||||
|
||||
@ -86,10 +87,8 @@ LLVMBool LLVMVerifyModule(LLVMModuleRef M, LLVMVerifierFailureAction Action,
|
||||
if (Action == LLVMAbortProcessAction && Result)
|
||||
report_fatal_error("Broken module found, compilation aborted!");
|
||||
|
||||
if (OutMessages) {
|
||||
MsgsOS << '\0';
|
||||
*OutMessages = strdup(MsgsOS.str().data());
|
||||
}
|
||||
if (OutMessages)
|
||||
*OutMessages = strdup(MsgsOS.str().c_str());
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
@ -82,9 +82,10 @@ struct DOTGraphTraits<BlockFrequencyInfo*> : public DefaultDOTGraphTraits {
|
||||
|
||||
std::string getNodeLabel(const BasicBlock *Node,
|
||||
const BlockFrequencyInfo *Graph) {
|
||||
string_ostream OS;
|
||||
std::string Result;
|
||||
raw_string_ostream OS(Result);
|
||||
|
||||
OS << Node->getName() << ":";
|
||||
OS << Node->getName().str() << ":";
|
||||
switch (ViewBlockFreqPropagationDAG) {
|
||||
case GVDT_Fraction:
|
||||
Graph->printBlockFreq(OS, Node);
|
||||
@ -97,7 +98,7 @@ struct DOTGraphTraits<BlockFrequencyInfo*> : public DefaultDOTGraphTraits {
|
||||
"never reach this point.");
|
||||
}
|
||||
|
||||
return OS.str();
|
||||
return Result;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -105,10 +105,11 @@ namespace {
|
||||
const DataLayout *DL;
|
||||
TargetLibraryInfo *TLI;
|
||||
|
||||
string_ostream MessagesStr;
|
||||
std::string Messages;
|
||||
raw_string_ostream MessagesStr;
|
||||
|
||||
static char ID; // Pass identification, replacement for typeid
|
||||
Lint() : FunctionPass(ID) {
|
||||
Lint() : FunctionPass(ID), MessagesStr(Messages) {
|
||||
initializeLintPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
|
||||
@ -180,7 +181,7 @@ bool Lint::runOnFunction(Function &F) {
|
||||
TLI = &getAnalysis<TargetLibraryInfo>();
|
||||
visit(F);
|
||||
dbgs() << MessagesStr.str();
|
||||
MessagesStr.clear();
|
||||
Messages.clear();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -28,9 +28,10 @@
|
||||
using namespace llvm;
|
||||
|
||||
static std::string getTypeString(Type *T) {
|
||||
string_ostream Result;
|
||||
Result << *T;
|
||||
return Result.str();
|
||||
std::string Result;
|
||||
raw_string_ostream Tmp(Result);
|
||||
Tmp << *T;
|
||||
return Tmp.str();
|
||||
}
|
||||
|
||||
/// Run: module ::= toplevelentity*
|
||||
|
@ -1585,7 +1585,8 @@ static const MCExpr *lowerConstant(const Constant *CV, AsmPrinter &AP) {
|
||||
|
||||
// Otherwise report the problem to the user.
|
||||
{
|
||||
string_ostream OS;
|
||||
std::string S;
|
||||
raw_string_ostream OS(S);
|
||||
OS << "Unsupported expression in static initializer: ";
|
||||
CE->printAsOperand(OS, /*PrintType=*/false,
|
||||
!AP.MF ? nullptr : AP.MF->getFunction()->getParent());
|
||||
|
@ -241,7 +241,8 @@ static void EmitMSInlineAsmStr(const char *AsmStr, const MachineInstr *MI,
|
||||
}
|
||||
}
|
||||
if (Error) {
|
||||
string_ostream Msg;
|
||||
std::string msg;
|
||||
raw_string_ostream Msg(msg);
|
||||
Msg << "invalid operand in inline asm: '" << AsmStr << "'";
|
||||
MMI->getModule()->getContext().emitError(LocCookie, Msg.str());
|
||||
}
|
||||
@ -412,7 +413,8 @@ static void EmitGCCInlineAsmStr(const char *AsmStr, const MachineInstr *MI,
|
||||
}
|
||||
}
|
||||
if (Error) {
|
||||
string_ostream Msg;
|
||||
std::string msg;
|
||||
raw_string_ostream Msg(msg);
|
||||
Msg << "invalid operand in inline asm: '" << AsmStr << "'";
|
||||
MMI->getModule()->getContext().emitError(LocCookie, Msg.str());
|
||||
}
|
||||
@ -469,7 +471,8 @@ void AsmPrinter::EmitInlineAsm(const MachineInstr *MI) const {
|
||||
|
||||
// Emit the inline asm to a temporary string so we can emit it through
|
||||
// EmitInlineAsm.
|
||||
small_string_ostream<256> OS;
|
||||
SmallString<256> StringData;
|
||||
raw_svector_ostream OS(StringData);
|
||||
|
||||
// The variant of the current asmprinter.
|
||||
int AsmPrinterVariant = MAI->getAssemblerDialect();
|
||||
@ -514,7 +517,8 @@ void AsmPrinter::PrintSpecial(const MachineInstr *MI, raw_ostream &OS,
|
||||
}
|
||||
OS << Counter;
|
||||
} else {
|
||||
string_ostream Msg;
|
||||
std::string msg;
|
||||
raw_string_ostream Msg(msg);
|
||||
Msg << "Unknown special formatter '" << Code
|
||||
<< "' for machine instr: " << *MI;
|
||||
report_fatal_error(Msg.str());
|
||||
|
@ -89,9 +89,10 @@ struct DOTGraphTraits<MachineBlockFrequencyInfo*> :
|
||||
|
||||
std::string getNodeLabel(const MachineBasicBlock *Node,
|
||||
const MachineBlockFrequencyInfo *Graph) {
|
||||
string_ostream OS;
|
||||
std::string Result;
|
||||
raw_string_ostream OS(Result);
|
||||
|
||||
OS << Node->getName() << ":";
|
||||
OS << Node->getName().str() << ":";
|
||||
switch (ViewMachineBlockFreqPropagationDAG) {
|
||||
case GVDT_Fraction:
|
||||
Graph->printBlockFreq(OS, Node);
|
||||
@ -104,7 +105,7 @@ struct DOTGraphTraits<MachineBlockFrequencyInfo*> :
|
||||
"never reach this point.");
|
||||
}
|
||||
|
||||
return OS.str();
|
||||
return Result;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -264,19 +264,23 @@ INITIALIZE_PASS_END(MachineBlockPlacement, "block-placement2",
|
||||
///
|
||||
/// Only used by debug logging.
|
||||
static std::string getBlockName(MachineBasicBlock *BB) {
|
||||
string_ostream OS;
|
||||
std::string Result;
|
||||
raw_string_ostream OS(Result);
|
||||
OS << "BB#" << BB->getNumber()
|
||||
<< " (derived from LLVM BB '" << BB->getName() << "')";
|
||||
return OS.str();
|
||||
OS.flush();
|
||||
return Result;
|
||||
}
|
||||
|
||||
/// \brief Helper to print the number of a MBB.
|
||||
///
|
||||
/// Only used by debug logging.
|
||||
static std::string getBlockNum(MachineBasicBlock *BB) {
|
||||
string_ostream OS;
|
||||
std::string Result;
|
||||
raw_string_ostream OS(Result);
|
||||
OS << "BB#" << BB->getNumber();
|
||||
return OS.str();
|
||||
OS.flush();
|
||||
return Result;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -465,8 +465,9 @@ MCSymbol *MachineFunction::getJTISymbol(unsigned JTI, MCContext &Ctx,
|
||||
|
||||
const char *Prefix = isLinkerPrivate ? DL->getLinkerPrivateGlobalPrefix() :
|
||||
DL->getPrivateGlobalPrefix();
|
||||
small_string_ostream<60> Name;
|
||||
Name << Prefix << "JTI" << getFunctionNumber() << '_' << JTI;
|
||||
SmallString<60> Name;
|
||||
raw_svector_ostream(Name)
|
||||
<< Prefix << "JTI" << getFunctionNumber() << '_' << JTI;
|
||||
return Ctx.GetOrCreateSymbol(Name.str());
|
||||
}
|
||||
|
||||
|
@ -3235,7 +3235,8 @@ struct DOTGraphTraits<ScheduleDAGMI*> : public DefaultDOTGraphTraits {
|
||||
}
|
||||
|
||||
static std::string getNodeLabel(const SUnit *SU, const ScheduleDAG *G) {
|
||||
string_ostream SS;
|
||||
std::string Str;
|
||||
raw_string_ostream SS(Str);
|
||||
const ScheduleDAGMI *DAG = static_cast<const ScheduleDAGMI*>(G);
|
||||
const SchedDFSResult *DFS = DAG->hasVRegLiveness() ?
|
||||
static_cast<const ScheduleDAGMILive*>(G)->getDFSResult() : nullptr;
|
||||
|
@ -1197,7 +1197,8 @@ void ScheduleDAGInstrs::dumpNode(const SUnit *SU) const {
|
||||
}
|
||||
|
||||
std::string ScheduleDAGInstrs::getGraphNodeLabel(const SUnit *SU) const {
|
||||
string_ostream oss;
|
||||
std::string s;
|
||||
raw_string_ostream oss(s);
|
||||
if (SU == &EntrySU)
|
||||
oss << "<entry>";
|
||||
else if (SU == &ExitSU)
|
||||
|
@ -3245,7 +3245,8 @@ SelectCodeCommon(SDNode *NodeToMatch, const unsigned char *MatcherTable,
|
||||
|
||||
|
||||
void SelectionDAGISel::CannotYetSelect(SDNode *N) {
|
||||
string_ostream Msg;
|
||||
std::string msg;
|
||||
raw_string_ostream Msg(msg);
|
||||
Msg << "Cannot select: ";
|
||||
|
||||
if (N->getOpcode() != ISD::INTRINSIC_W_CHAIN &&
|
||||
|
@ -268,7 +268,8 @@ void SelectionDAG::setSubgraphColor(SDNode *N, const char *Color) {
|
||||
}
|
||||
|
||||
std::string ScheduleDAGSDNodes::getGraphNodeLabel(const SUnit *SU) const {
|
||||
string_ostream O;
|
||||
std::string s;
|
||||
raw_string_ostream O(s);
|
||||
O << "SU(" << SU->NodeNum << "): ";
|
||||
if (SU->getNode()) {
|
||||
SmallVector<SDNode *, 4> GluedNodes;
|
||||
|
@ -212,10 +212,11 @@ unsigned TargetSchedModel::computeOperandLatency(
|
||||
if (SCDesc->isValid() && !DefMI->getOperand(DefOperIdx).isImplicit()
|
||||
&& !DefMI->getDesc().OpInfo[DefOperIdx].isOptionalDef()
|
||||
&& SchedModel.isComplete()) {
|
||||
string_ostream Err;
|
||||
Err << "DefIdx " << DefIdx << " exceeds machine model writes for "
|
||||
<< *DefMI;
|
||||
report_fatal_error(Err.str());
|
||||
std::string Err;
|
||||
raw_string_ostream ss(Err);
|
||||
ss << "DefIdx " << DefIdx << " exceeds machine model writes for "
|
||||
<< *DefMI;
|
||||
report_fatal_error(ss.str());
|
||||
}
|
||||
#endif
|
||||
// FIXME: Automatically giving all implicit defs defaultDefLatency is
|
||||
|
@ -353,9 +353,10 @@ void DWARFDebugFrame::parse(DataExtractor Data) {
|
||||
Entries.back()->parseInstructions(Data, &Offset, EndStructureOffset);
|
||||
|
||||
if (Offset != EndStructureOffset) {
|
||||
string_ostream Str;
|
||||
Str << format("Parsing entry instructions at %lx failed", StartOffset);
|
||||
report_fatal_error(Str.str());
|
||||
std::string Str;
|
||||
raw_string_ostream OS(Str);
|
||||
OS << format("Parsing entry instructions at %lx failed", StartOffset);
|
||||
report_fatal_error(Str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -62,11 +62,6 @@ void LLVMShutdown() {
|
||||
|
||||
/*===-- Error handling ----------------------------------------------------===*/
|
||||
|
||||
static char *LLVMCreateMessage(string_ostream &OS) {
|
||||
OS << '\0';
|
||||
return strdup(OS.str().data());
|
||||
}
|
||||
|
||||
char *LLVMCreateMessage(const char *Message) {
|
||||
return strdup(Message);
|
||||
}
|
||||
@ -115,10 +110,14 @@ unsigned LLVMGetMDKindID(const char* Name, unsigned SLen) {
|
||||
}
|
||||
|
||||
char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI) {
|
||||
string_ostream Msg;
|
||||
DiagnosticPrinterRawOStream DP(Msg);
|
||||
std::string MsgStorage;
|
||||
raw_string_ostream Stream(MsgStorage);
|
||||
DiagnosticPrinterRawOStream DP(Stream);
|
||||
|
||||
unwrap(DI)->print(DP);
|
||||
return LLVMCreateMessage(Msg);
|
||||
Stream.flush();
|
||||
|
||||
return LLVMCreateMessage(MsgStorage.c_str());
|
||||
}
|
||||
|
||||
LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI){
|
||||
@ -202,9 +201,13 @@ LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
|
||||
}
|
||||
|
||||
char *LLVMPrintModuleToString(LLVMModuleRef M) {
|
||||
string_ostream os;
|
||||
std::string buf;
|
||||
raw_string_ostream os(buf);
|
||||
|
||||
unwrap(M)->print(os, nullptr);
|
||||
return LLVMCreateMessage(os);
|
||||
os.flush();
|
||||
|
||||
return strdup(buf.c_str());
|
||||
}
|
||||
|
||||
/*--.. Operations on inline assembler ......................................--*/
|
||||
@ -275,14 +278,17 @@ void LLVMDumpType(LLVMTypeRef Ty) {
|
||||
}
|
||||
|
||||
char *LLVMPrintTypeToString(LLVMTypeRef Ty) {
|
||||
string_ostream os;
|
||||
std::string buf;
|
||||
raw_string_ostream os(buf);
|
||||
|
||||
if (unwrap(Ty))
|
||||
unwrap(Ty)->print(os);
|
||||
else
|
||||
os << "Printing <null> Type";
|
||||
|
||||
return LLVMCreateMessage(os);
|
||||
os.flush();
|
||||
|
||||
return strdup(buf.c_str());
|
||||
}
|
||||
|
||||
/*--.. Operations on integer types .........................................--*/
|
||||
@ -526,14 +532,17 @@ void LLVMDumpValue(LLVMValueRef Val) {
|
||||
}
|
||||
|
||||
char* LLVMPrintValueToString(LLVMValueRef Val) {
|
||||
string_ostream os;
|
||||
std::string buf;
|
||||
raw_string_ostream os(buf);
|
||||
|
||||
if (unwrap(Val))
|
||||
unwrap(Val)->print(os);
|
||||
else
|
||||
os << "Printing <null> Value";
|
||||
|
||||
return LLVMCreateMessage(os);
|
||||
os.flush();
|
||||
|
||||
return strdup(buf.c_str());
|
||||
}
|
||||
|
||||
void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal) {
|
||||
|
@ -519,7 +519,8 @@ const StructLayout *DataLayout::getStructLayout(StructType *Ty) const {
|
||||
}
|
||||
|
||||
std::string DataLayout::getStringRepresentation() const {
|
||||
string_ostream OS;
|
||||
std::string Result;
|
||||
raw_string_ostream OS(Result);
|
||||
|
||||
OS << (LittleEndian ? "e" : "E");
|
||||
|
||||
|
@ -164,22 +164,23 @@ void LLVMContext::diagnose(const DiagnosticInfo &DI) {
|
||||
}
|
||||
|
||||
// Otherwise, print the message with a prefix based on the severity.
|
||||
string_ostream Msg;
|
||||
DiagnosticPrinterRawOStream DP(Msg);
|
||||
std::string MsgStorage;
|
||||
raw_string_ostream Stream(MsgStorage);
|
||||
DiagnosticPrinterRawOStream DP(Stream);
|
||||
DI.print(DP);
|
||||
|
||||
Stream.flush();
|
||||
switch (DI.getSeverity()) {
|
||||
case DS_Error:
|
||||
errs() << "error: " << Msg.str() << "\n";
|
||||
errs() << "error: " << MsgStorage << "\n";
|
||||
exit(1);
|
||||
case DS_Warning:
|
||||
errs() << "warning: " << Msg.str() << "\n";
|
||||
errs() << "warning: " << MsgStorage << "\n";
|
||||
break;
|
||||
case DS_Remark:
|
||||
errs() << "remark: " << Msg.str() << "\n";
|
||||
errs() << "remark: " << MsgStorage << "\n";
|
||||
break;
|
||||
case DS_Note:
|
||||
errs() << "note: " << Msg.str() << "\n";
|
||||
errs() << "note: " << MsgStorage << "\n";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -108,10 +108,13 @@ LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef,
|
||||
|
||||
if(!*OutM) {
|
||||
if (OutMessage) {
|
||||
string_ostream os;
|
||||
std::string buf;
|
||||
raw_string_ostream os(buf);
|
||||
|
||||
Diag.print(nullptr, os, false);
|
||||
os << '\0';
|
||||
*OutMessage = strdup(os.str().data());
|
||||
os.flush();
|
||||
|
||||
*OutMessage = strdup(buf.c_str());
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -549,17 +549,16 @@ void LTOCodeGenerator::DiagnosticHandler2(const DiagnosticInfo &DI) {
|
||||
break;
|
||||
}
|
||||
// Create the string that will be reported to the external diagnostic handler.
|
||||
string_ostream Msg;
|
||||
DiagnosticPrinterRawOStream DP(Msg);
|
||||
std::string MsgStorage;
|
||||
raw_string_ostream Stream(MsgStorage);
|
||||
DiagnosticPrinterRawOStream DP(Stream);
|
||||
DI.print(DP);
|
||||
|
||||
// Null-terminate the C string.
|
||||
Msg << '\0';
|
||||
Stream.flush();
|
||||
|
||||
// If this method has been called it means someone has set up an external
|
||||
// diagnostic handler. Assert on that.
|
||||
assert(DiagHandler && "Invalid diagnostic handler");
|
||||
(*DiagHandler)(Severity, Msg.str().data(), DiagContext);
|
||||
(*DiagHandler)(Severity, MsgStorage.c_str(), DiagContext);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1175,10 +1175,9 @@ void MCAsmStreamer::AddEncodingComment(const MCInst &Inst,
|
||||
raw_ostream &OS = GetCommentOS();
|
||||
SmallString<256> Code;
|
||||
SmallVector<MCFixup, 4> Fixups;
|
||||
{
|
||||
raw_svector_ostream VecOS(Code);
|
||||
Emitter->EncodeInstruction(Inst, VecOS, Fixups, STI);
|
||||
}
|
||||
raw_svector_ostream VecOS(Code);
|
||||
Emitter->EncodeInstruction(Inst, VecOS, Fixups, STI);
|
||||
VecOS.flush();
|
||||
|
||||
// If we are showing fixups, create symbolic markers in the encoded
|
||||
// representation. We do this by making a per-bit map to the fixup item index,
|
||||
|
@ -140,15 +140,17 @@ MCSymbol *MCContext::GetOrCreateSymbol(const Twine &Name) {
|
||||
}
|
||||
|
||||
MCSymbol *MCContext::CreateLinkerPrivateTempSymbol() {
|
||||
small_string_ostream<128> NameSV;
|
||||
NameSV << MAI->getLinkerPrivateGlobalPrefix() << "tmp" << NextUniqueID++;
|
||||
return CreateSymbol(NameSV.str());
|
||||
SmallString<128> NameSV;
|
||||
raw_svector_ostream(NameSV)
|
||||
<< MAI->getLinkerPrivateGlobalPrefix() << "tmp" << NextUniqueID++;
|
||||
return CreateSymbol(NameSV);
|
||||
}
|
||||
|
||||
MCSymbol *MCContext::CreateTempSymbol() {
|
||||
small_string_ostream<128> NameSV;
|
||||
NameSV << MAI->getPrivateGlobalPrefix() << "tmp" << NextUniqueID++;
|
||||
return CreateSymbol(NameSV.str());
|
||||
SmallString<128> NameSV;
|
||||
raw_svector_ostream(NameSV)
|
||||
<< MAI->getPrivateGlobalPrefix() << "tmp" << NextUniqueID++;
|
||||
return CreateSymbol(NameSV);
|
||||
}
|
||||
|
||||
unsigned MCContext::NextInstance(unsigned LocalLabelVal) {
|
||||
|
@ -270,7 +270,8 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes,
|
||||
const MCDisassembler *DisAsm = DC->getDisAsm();
|
||||
MCInstPrinter *IP = DC->getIP();
|
||||
MCDisassembler::DecodeStatus S;
|
||||
small_string_ostream<64> Annotations;
|
||||
SmallVector<char, 64> InsnStr;
|
||||
raw_svector_ostream Annotations(InsnStr);
|
||||
S = DisAsm->getInstruction(Inst, Size, MemoryObject, PC,
|
||||
/*REMOVE*/ nulls(), Annotations);
|
||||
switch (S) {
|
||||
@ -280,10 +281,13 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes,
|
||||
return 0;
|
||||
|
||||
case MCDisassembler::Success: {
|
||||
Annotations.flush();
|
||||
StringRef AnnotationsStr = Annotations.str();
|
||||
|
||||
SmallVector<char, 64> InsnStr;
|
||||
raw_svector_ostream OS(InsnStr);
|
||||
formatted_raw_ostream FormattedOS(OS);
|
||||
IP->printInst(&Inst, FormattedOS, Annotations.str());
|
||||
IP->printInst(&Inst, FormattedOS, AnnotationsStr);
|
||||
|
||||
if (DC->getOptions() & LLVMDisassembler_Option_PrintLatency)
|
||||
emitLatency(DC, Inst);
|
||||
|
@ -420,7 +420,8 @@ unsigned MCDwarfLineTableHeader::getFile(StringRef &Directory,
|
||||
void MCDwarfLineAddr::Emit(MCStreamer *MCOS, int64_t LineDelta,
|
||||
uint64_t AddrDelta) {
|
||||
MCContext &Context = MCOS->getContext();
|
||||
small_string_ostream<256> OS;
|
||||
SmallString<256> Tmp;
|
||||
raw_svector_ostream OS(Tmp);
|
||||
MCDwarfLineAddr::Encode(Context, LineDelta, AddrDelta, OS);
|
||||
MCOS->EmitBytes(OS.str());
|
||||
}
|
||||
@ -1646,7 +1647,8 @@ void MCDwarfFrameEmitter::Emit(MCObjectStreamer &Streamer, MCAsmBackend *MAB,
|
||||
void MCDwarfFrameEmitter::EmitAdvanceLoc(MCObjectStreamer &Streamer,
|
||||
uint64_t AddrDelta) {
|
||||
MCContext &Context = Streamer.getContext();
|
||||
small_string_ostream<256> OS;
|
||||
SmallString<256> Tmp;
|
||||
raw_svector_ostream OS(Tmp);
|
||||
MCDwarfFrameEmitter::EncodeAdvanceLoc(Context, AddrDelta, OS);
|
||||
Streamer.EmitBytes(OS.str());
|
||||
}
|
||||
|
@ -4580,7 +4580,8 @@ bool AsmParser::parseMSInlineAsm(
|
||||
}
|
||||
|
||||
// Build the IR assembly string.
|
||||
string_ostream OS;
|
||||
std::string AsmStringIR;
|
||||
raw_string_ostream OS(AsmStringIR);
|
||||
const char *AsmStart = SrcMgr.getMemoryBuffer(0)->getBufferStart();
|
||||
const char *AsmEnd = SrcMgr.getMemoryBuffer(0)->getBufferEnd();
|
||||
array_pod_sort(AsmStrRewrites.begin(), AsmStrRewrites.end(), rewritesSort);
|
||||
@ -4645,7 +4646,8 @@ bool AsmParser::parseMSInlineAsm(
|
||||
}
|
||||
case AOK_DotOperator:
|
||||
// Insert the dot if the user omitted it.
|
||||
if (OS.str().back() != '.')
|
||||
OS.flush();
|
||||
if (AsmStringIR.back() != '.')
|
||||
OS << '.';
|
||||
OS << AR.Val;
|
||||
break;
|
||||
|
@ -301,7 +301,7 @@ static unsigned getCPUType(const MachOObjectFile *O) {
|
||||
|
||||
static void printRelocationTargetName(const MachOObjectFile *O,
|
||||
const MachO::any_relocation_info &RE,
|
||||
raw_ostream &fmt) {
|
||||
raw_string_ostream &fmt) {
|
||||
bool IsScattered = O->isRelocationScattered(RE);
|
||||
|
||||
// Target of a scattered relocation is an address. In the interest of
|
||||
@ -1010,7 +1010,8 @@ MachOObjectFile::getRelocationValueString(DataRefImpl Rel,
|
||||
|
||||
unsigned Arch = this->getArch();
|
||||
|
||||
string_ostream fmt;
|
||||
std::string fmtbuf;
|
||||
raw_string_ostream fmt(fmtbuf);
|
||||
unsigned Type = this->getAnyRelocationType(RE);
|
||||
bool IsPCRel = this->getAnyRelocationPCRel(RE);
|
||||
|
||||
@ -1173,7 +1174,7 @@ MachOObjectFile::getRelocationValueString(DataRefImpl Rel,
|
||||
} else
|
||||
printRelocationTargetName(this, RE, fmt);
|
||||
|
||||
StringRef fmtbuf = fmt.str();
|
||||
fmt.flush();
|
||||
Result.append(fmtbuf.begin(), fmtbuf.end());
|
||||
return object_error::success;
|
||||
}
|
||||
|
@ -62,7 +62,8 @@ void Arg::dump() const {
|
||||
}
|
||||
|
||||
std::string Arg::getAsString(const ArgList &Args) const {
|
||||
small_string_ostream<256> OS;
|
||||
SmallString<256> Res;
|
||||
llvm::raw_svector_ostream OS(Res);
|
||||
|
||||
ArgStringList ASL;
|
||||
render(Args, ASL);
|
||||
@ -94,7 +95,8 @@ void Arg::render(const ArgList &Args, ArgStringList &Output) const {
|
||||
break;
|
||||
|
||||
case Option::RenderCommaJoinedStyle: {
|
||||
small_string_ostream<256> OS;
|
||||
SmallString<256> Res;
|
||||
llvm::raw_svector_ostream OS(Res);
|
||||
OS << getSpelling();
|
||||
for (unsigned i = 0, e = getNumValues(); i != e; ++i) {
|
||||
if (i) OS << ',';
|
||||
|
@ -1342,21 +1342,25 @@ printGenericOptionDiff(const Option &O, const GenericOptionValue &Value,
|
||||
|
||||
// printOptionDiff - Specializations for printing basic value types.
|
||||
//
|
||||
#define PRINT_OPT_DIFF(T) \
|
||||
void parser<T>::printOptionDiff(const Option &O, T V, OptionValue<T> D, \
|
||||
size_t GlobalWidth) const { \
|
||||
printOptionName(O, GlobalWidth); \
|
||||
string_ostream SS; \
|
||||
SS << V; \
|
||||
outs() << "= " << SS.str(); \
|
||||
size_t NumSpaces = MaxOptWidth > SS.tell() ? MaxOptWidth - SS.tell() : 0; \
|
||||
outs().indent(NumSpaces) << " (default: "; \
|
||||
if (D.hasValue()) \
|
||||
outs() << D.getValue(); \
|
||||
else \
|
||||
outs() << "*no default*"; \
|
||||
outs() << ")\n"; \
|
||||
}
|
||||
#define PRINT_OPT_DIFF(T) \
|
||||
void parser<T>:: \
|
||||
printOptionDiff(const Option &O, T V, OptionValue<T> D, \
|
||||
size_t GlobalWidth) const { \
|
||||
printOptionName(O, GlobalWidth); \
|
||||
std::string Str; \
|
||||
{ \
|
||||
raw_string_ostream SS(Str); \
|
||||
SS << V; \
|
||||
} \
|
||||
outs() << "= " << Str; \
|
||||
size_t NumSpaces = MaxOptWidth > Str.size() ? MaxOptWidth - Str.size() : 0;\
|
||||
outs().indent(NumSpaces) << " (default: "; \
|
||||
if (D.hasValue()) \
|
||||
outs() << D.getValue(); \
|
||||
else \
|
||||
outs() << "*no default*"; \
|
||||
outs() << ")\n"; \
|
||||
} \
|
||||
|
||||
PRINT_OPT_DIFF(bool)
|
||||
PRINT_OPT_DIFF(boolOrDefault)
|
||||
|
@ -704,10 +704,6 @@ void raw_string_ostream::write_impl(const char *Ptr, size_t Size) {
|
||||
// and we only need to set the vector size when the data is flushed.
|
||||
|
||||
raw_svector_ostream::raw_svector_ostream(SmallVectorImpl<char> &O) : OS(O) {
|
||||
init();
|
||||
}
|
||||
|
||||
void raw_svector_ostream::init() {
|
||||
// Set up the initial external buffer. We make sure that the buffer has at
|
||||
// least 128 bytes free; raw_ostream itself only requires 64, but we want to
|
||||
// make sure that we don't grow the buffer unnecessarily on destruction (when
|
||||
|
@ -209,12 +209,13 @@ struct SequenceOp : public SetTheory::Operator {
|
||||
break;
|
||||
else if (Step < 0 && From < To)
|
||||
break;
|
||||
string_ostream Name;
|
||||
Name << format(Format.c_str(), unsigned(From));
|
||||
Record *Rec = Records.getDef(Name.str());
|
||||
std::string Name;
|
||||
raw_string_ostream OS(Name);
|
||||
OS << format(Format.c_str(), unsigned(From));
|
||||
Record *Rec = Records.getDef(OS.str());
|
||||
if (!Rec)
|
||||
PrintFatalError(Loc, "No def named '" + Name.str() + "': " +
|
||||
Expr->getAsString());
|
||||
PrintFatalError(Loc, "No def named '" + Name + "': " +
|
||||
Expr->getAsString());
|
||||
// Try to reevaluate Rec in case it is a set.
|
||||
if (const RecVec *Result = ST.expand(Rec))
|
||||
Elts.insert(Result->begin(), Result->end());
|
||||
|
@ -1307,7 +1307,8 @@ Init *TGParser::ParseSimpleValue(Record *CurRec, RecTy *ItemType,
|
||||
if (ItemType) {
|
||||
ListRecTy *ListType = dyn_cast<ListRecTy>(ItemType);
|
||||
if (!ListType) {
|
||||
string_ostream ss;
|
||||
std::string s;
|
||||
raw_string_ostream ss(s);
|
||||
ss << "Type mismatch for list, expected list type, got "
|
||||
<< ItemType->getAsString();
|
||||
TokError(ss.str());
|
||||
|
@ -146,7 +146,8 @@ const MCExpr *nvptx::LowerConstant(const Constant *CV, AsmPrinter &AP) {
|
||||
|
||||
// Otherwise report the problem to the user.
|
||||
{
|
||||
string_ostream OS;
|
||||
std::string S;
|
||||
raw_string_ostream OS(S);
|
||||
OS << "Unsupported expression in static initializer: ";
|
||||
CE->printAsOperand(OS, /*PrintType=*/ false,
|
||||
!AP.MF ? nullptr : AP.MF->getFunction()->getParent());
|
||||
|
@ -237,13 +237,15 @@ LLVMBool LLVMTargetMachineEmitToFile(LLVMTargetMachineRef T, LLVMModuleRef M,
|
||||
LLVMBool LLVMTargetMachineEmitToMemoryBuffer(LLVMTargetMachineRef T,
|
||||
LLVMModuleRef M, LLVMCodeGenFileType codegen, char** ErrorMessage,
|
||||
LLVMMemoryBufferRef *OutMemBuf) {
|
||||
string_ostream Code;
|
||||
formatted_raw_ostream Out(Code);
|
||||
std::string CodeString;
|
||||
raw_string_ostream OStream(CodeString);
|
||||
formatted_raw_ostream Out(OStream);
|
||||
bool Result = LLVMTargetMachineEmit(T, M, Out, codegen, ErrorMessage);
|
||||
OStream.flush();
|
||||
|
||||
StringRef Buffer = Code.str();
|
||||
*OutMemBuf = LLVMCreateMemoryBufferWithMemoryRangeCopy(Buffer.data(),
|
||||
Buffer.size(), "");
|
||||
std::string &Data = OStream.str();
|
||||
*OutMemBuf = LLVMCreateMemoryBufferWithMemoryRangeCopy(Data.c_str(),
|
||||
Data.length(), "");
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
@ -2412,7 +2412,8 @@ bool X86AsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
|
||||
if (Match3 == Match_Success) MatchChars[NumMatches++] = Suffixes[2];
|
||||
if (Match4 == Match_Success) MatchChars[NumMatches++] = Suffixes[3];
|
||||
|
||||
small_string_ostream<128> OS;
|
||||
SmallString<126> Msg;
|
||||
raw_svector_ostream OS(Msg);
|
||||
OS << "ambiguous instructions require an explicit suffix (could be ";
|
||||
for (unsigned i = 0; i != NumMatches; ++i) {
|
||||
if (i != 0)
|
||||
|
@ -281,7 +281,8 @@ void X86AsmBackend::relaxInstruction(const MCInst &Inst, MCInst &Res) const {
|
||||
unsigned RelaxedOp = getRelaxedOpcode(Inst.getOpcode());
|
||||
|
||||
if (RelaxedOp == Inst.getOpcode()) {
|
||||
small_string_ostream<256> OS;
|
||||
SmallString<256> Tmp;
|
||||
raw_svector_ostream OS(Tmp);
|
||||
Inst.dump_pretty(OS);
|
||||
OS << "\n";
|
||||
report_fatal_error("unexpected instruction to relax: " + OS.str());
|
||||
|
@ -550,7 +550,8 @@ emitNonLazySymbolPointer(MCStreamer &OutStreamer, MCSymbol *StubLabel,
|
||||
}
|
||||
|
||||
void X86AsmPrinter::GenerateExportDirective(const MCSymbol *Sym, bool IsData) {
|
||||
small_string_ostream<128> OS;
|
||||
SmallString<128> Directive;
|
||||
raw_svector_ostream OS(Directive);
|
||||
StringRef Name = Sym->getName();
|
||||
|
||||
if (Subtarget->isTargetKnownWindowsMSVC())
|
||||
@ -571,7 +572,8 @@ void X86AsmPrinter::GenerateExportDirective(const MCSymbol *Sym, bool IsData) {
|
||||
OS << ",data";
|
||||
}
|
||||
|
||||
OutStreamer.EmitBytes(OS.str());
|
||||
OS.flush();
|
||||
OutStreamer.EmitBytes(Directive);
|
||||
}
|
||||
|
||||
void X86AsmPrinter::EmitEndOfAsmFile(Module &M) {
|
||||
|
@ -267,7 +267,8 @@ PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum,
|
||||
}
|
||||
|
||||
void XCoreAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
small_string_ostream<128> O;
|
||||
SmallString<128> Str;
|
||||
raw_svector_ostream O(Str);
|
||||
|
||||
switch (MI->getOpcode()) {
|
||||
case XCore::DBG_VALUE:
|
||||
|
@ -352,12 +352,14 @@ private:
|
||||
}
|
||||
|
||||
std::string getTypeName(Type *T) {
|
||||
string_ostream OS;
|
||||
std::string TypeName;
|
||||
raw_string_ostream TypeStream(TypeName);
|
||||
if (T)
|
||||
T->print(OS);
|
||||
T->print(TypeStream);
|
||||
else
|
||||
OS << "Printing <null> Type";
|
||||
return OS.str();
|
||||
TypeStream << "Printing <null> Type";
|
||||
TypeStream.flush();
|
||||
return TypeName;
|
||||
}
|
||||
|
||||
/// Returns the MDNode that represents type T if it is already created, or 0
|
||||
|
@ -316,9 +316,11 @@ namespace {
|
||||
}
|
||||
ReturnBlock = new GCOVBlock(i++, os);
|
||||
|
||||
string_ostream FnNameLine;
|
||||
FnNameLine << getFunctionName(SP) << SP.getLineNumber();
|
||||
FuncChecksum = hash_value(FnNameLine.str());
|
||||
std::string FunctionNameAndLine;
|
||||
raw_string_ostream FNLOS(FunctionNameAndLine);
|
||||
FNLOS << getFunctionName(SP) << SP.getLineNumber();
|
||||
FNLOS.flush();
|
||||
FuncChecksum = hash_value(FunctionNameAndLine);
|
||||
}
|
||||
|
||||
~GCOVFunction() {
|
||||
@ -335,14 +337,15 @@ namespace {
|
||||
}
|
||||
|
||||
std::string getEdgeDestinations() {
|
||||
string_ostream EdgeDestinations;
|
||||
std::string EdgeDestinations;
|
||||
raw_string_ostream EDOS(EdgeDestinations);
|
||||
Function *F = Blocks.begin()->first->getParent();
|
||||
for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I) {
|
||||
GCOVBlock &Block = *Blocks[I];
|
||||
for (int i = 0, e = Block.OutEdges.size(); i != e; ++i)
|
||||
EdgeDestinations << Block.OutEdges[i]->Number;
|
||||
EDOS << Block.OutEdges[i]->Number;
|
||||
}
|
||||
return EdgeDestinations.str();
|
||||
return EdgeDestinations;
|
||||
}
|
||||
|
||||
uint32_t getFuncChecksum() {
|
||||
|
@ -2424,7 +2424,8 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
|
||||
if (PoisonStack && MS.TrackOrigins) {
|
||||
setOrigin(&I, getCleanOrigin());
|
||||
small_string_ostream<2048> StackDescription;
|
||||
SmallString<2048> StackDescriptionStorage;
|
||||
raw_svector_ostream StackDescription(StackDescriptionStorage);
|
||||
// We create a string with a description of the stack allocation and
|
||||
// pass it into __msan_set_alloca_origin.
|
||||
// It will be printed by the run-time if stack-originated UMR is found.
|
||||
|
@ -835,7 +835,8 @@ static MDString *AppendMDNodeToSourcePtr(unsigned NodeId,
|
||||
// of line at the module level and to provide a very simple format
|
||||
// encoding the information herein. Both of these makes it simpler to
|
||||
// parse the annotations by a simple external program.
|
||||
string_ostream os;
|
||||
std::string Str;
|
||||
raw_string_ostream os(Str);
|
||||
os << "(" << Inst->getParent()->getParent()->getName() << ",%"
|
||||
<< Inst->getName() << ")";
|
||||
|
||||
@ -848,7 +849,8 @@ static MDString *AppendMDNodeToSourcePtr(unsigned NodeId,
|
||||
Hash = cast<MDString>(Node->getOperand(0));
|
||||
}
|
||||
} else if (Argument *Arg = dyn_cast<Argument>(Ptr)) {
|
||||
string_ostream os;
|
||||
std::string str;
|
||||
raw_string_ostream os(str);
|
||||
os << "(" << Arg->getParent()->getName() << ",%" << Arg->getName()
|
||||
<< ")";
|
||||
Hash = MDString::get(Arg->getContext(), os.str());
|
||||
@ -858,7 +860,8 @@ static MDString *AppendMDNodeToSourcePtr(unsigned NodeId,
|
||||
}
|
||||
|
||||
static std::string SequenceToString(Sequence A) {
|
||||
string_ostream os;
|
||||
std::string str;
|
||||
raw_string_ostream os(str);
|
||||
os << A;
|
||||
return os.str();
|
||||
}
|
||||
|
@ -65,7 +65,8 @@ ComputeASanStackFrameLayout(SmallVectorImpl<ASanStackVariableDescription> &Vars,
|
||||
Vars[i].Alignment = std::max(Vars[i].Alignment, kMinAlignment);
|
||||
|
||||
std::stable_sort(Vars.begin(), Vars.end(), CompareVars);
|
||||
small_string_ostream<2048> StackDescription;
|
||||
SmallString<2048> StackDescriptionStorage;
|
||||
raw_svector_ostream StackDescription(StackDescriptionStorage);
|
||||
StackDescription << NumVars;
|
||||
Layout->FrameAlignment = std::max(Granularity, Vars[0].Alignment);
|
||||
SmallVector<uint8_t, 64> &SB(Layout->ShadowBytes);
|
||||
|
@ -212,23 +212,24 @@ class LoopVectorizationCostModel;
|
||||
/// Optimization analysis message produced during vectorization. Messages inform
|
||||
/// the user why vectorization did not occur.
|
||||
class Report {
|
||||
string_ostream Message;
|
||||
std::string Message;
|
||||
raw_string_ostream Out;
|
||||
Instruction *Instr;
|
||||
|
||||
public:
|
||||
Report(Instruction *I = nullptr) : Instr(I) {
|
||||
Message << "loop not vectorized: ";
|
||||
Report(Instruction *I = nullptr) : Out(Message), Instr(I) {
|
||||
Out << "loop not vectorized: ";
|
||||
}
|
||||
|
||||
template <typename A> Report &operator<<(const A &Value) {
|
||||
Message << Value;
|
||||
Out << Value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Instruction *getInstr() { return Instr; }
|
||||
|
||||
StringRef str() { return Message.str(); }
|
||||
operator Twine() { return Message.str(); }
|
||||
std::string &str() { return Out.str(); }
|
||||
operator Twine() { return Out.str(); }
|
||||
};
|
||||
|
||||
/// InnerLoopVectorizer vectorizes loops which contain only one basic
|
||||
@ -502,17 +503,18 @@ static void setDebugLocFromInst(IRBuilder<> &B, const Value *Ptr) {
|
||||
#ifndef NDEBUG
|
||||
/// \return string containing a file name and a line # for the given loop.
|
||||
static std::string getDebugLocString(const Loop *L) {
|
||||
if (!L)
|
||||
return std::string();
|
||||
|
||||
string_ostream OS;
|
||||
const DebugLoc LoopDbgLoc = L->getStartLoc();
|
||||
if (!LoopDbgLoc.isUnknown())
|
||||
LoopDbgLoc.print(L->getHeader()->getContext(), OS);
|
||||
else
|
||||
// Just print the module name.
|
||||
OS << L->getHeader()->getParent()->getParent()->getModuleIdentifier();
|
||||
return OS.str();
|
||||
std::string Result;
|
||||
if (L) {
|
||||
raw_string_ostream OS(Result);
|
||||
const DebugLoc LoopDbgLoc = L->getStartLoc();
|
||||
if (!LoopDbgLoc.isUnknown())
|
||||
LoopDbgLoc.print(L->getHeader()->getContext(), OS);
|
||||
else
|
||||
// Just print the module name.
|
||||
OS << L->getHeader()->getParent()->getParent()->getModuleIdentifier();
|
||||
OS.flush();
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -689,7 +689,8 @@ writeSymbolTable(raw_fd_ostream &Out, ArrayRef<NewArchiveIterator> Members,
|
||||
std::vector<std::pair<unsigned, unsigned>> &MemberOffsetRefs) {
|
||||
unsigned StartOffset = 0;
|
||||
unsigned MemberNum = 0;
|
||||
string_ostream NameOS;
|
||||
std::string NameBuf;
|
||||
raw_string_ostream NameOS(NameBuf);
|
||||
unsigned NumSyms = 0;
|
||||
LLVMContext &Context = getGlobalContext();
|
||||
for (ArrayRef<NewArchiveIterator>::iterator I = Members.begin(),
|
||||
|
@ -222,7 +222,8 @@ static void emitDOTFile(const char *FileName, const MCFunction &f,
|
||||
Out << "<o>";
|
||||
|
||||
// Escape special chars and print the instruction in mnemonic form.
|
||||
string_ostream OS;
|
||||
std::string Str;
|
||||
raw_string_ostream OS(Str);
|
||||
IP->printInst(&(*i)->getInsts()->at(ii).Inst, OS, "");
|
||||
Out << DOT::EscapeString(OS.str());
|
||||
}
|
||||
@ -472,7 +473,9 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
|
||||
if (Symbols.empty())
|
||||
Symbols.push_back(std::make_pair(0, name));
|
||||
|
||||
small_string_ostream<40> Comments;
|
||||
|
||||
SmallString<40> Comments;
|
||||
raw_svector_ostream CommentStream(Comments);
|
||||
|
||||
StringRef Bytes;
|
||||
if (error(Section.getContents(Bytes)))
|
||||
@ -510,14 +513,15 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
|
||||
MCInst Inst;
|
||||
|
||||
if (DisAsm->getInstruction(Inst, Size, memoryObject,
|
||||
SectionAddr + Index, DebugOut, Comments)) {
|
||||
SectionAddr + Index,
|
||||
DebugOut, CommentStream)) {
|
||||
outs() << format("%8" PRIx64 ":", SectionAddr + Index);
|
||||
if (!NoShowRawInsn) {
|
||||
outs() << "\t";
|
||||
DumpBytes(StringRef(Bytes.data() + Index, Size));
|
||||
}
|
||||
IP->printInst(&Inst, outs(), "");
|
||||
outs() << Comments.str();
|
||||
outs() << CommentStream.str();
|
||||
Comments.clear();
|
||||
outs() << "\n";
|
||||
} else {
|
||||
|
@ -95,7 +95,8 @@ raw_ostream &operator<<(raw_ostream &OS, const ARM::WinEH::ReturnType &RT) {
|
||||
|
||||
static std::string formatSymbol(StringRef Name, uint64_t Address,
|
||||
uint64_t Offset = 0) {
|
||||
string_ostream OS;
|
||||
std::string Buffer;
|
||||
raw_string_ostream OS(Buffer);
|
||||
|
||||
if (!Name.empty())
|
||||
OS << Name << " ";
|
||||
|
@ -115,7 +115,8 @@ static unsigned getNumUsedSlots(const UnwindCode &UnwindCode) {
|
||||
static std::string formatSymbol(const Dumper::Context &Ctx,
|
||||
const coff_section *Section, uint64_t Offset,
|
||||
uint32_t Displacement) {
|
||||
string_ostream OS;
|
||||
std::string Buffer;
|
||||
raw_string_ostream OS(Buffer);
|
||||
|
||||
StringRef Name;
|
||||
SymbolRef Symbol;
|
||||
@ -130,7 +131,6 @@ static std::string formatSymbol(const Dumper::Context &Ctx,
|
||||
OS << format(" +0x%X (0x%" PRIX64 ")", Displacement, Offset);
|
||||
else
|
||||
OS << format(" (0x%" PRIX64 ")", Offset);
|
||||
|
||||
return OS.str();
|
||||
}
|
||||
|
||||
|
@ -70,9 +70,9 @@ Function *makeReturnGlobal(std::string Name, GlobalVariable *G, Module *M) {
|
||||
}
|
||||
|
||||
std::string DumpFunction(const Function *F) {
|
||||
string_ostream Result;
|
||||
Result << "" << *F;
|
||||
return Result.str();
|
||||
std::string Result;
|
||||
raw_string_ostream(Result) << "" << *F;
|
||||
return Result;
|
||||
}
|
||||
|
||||
class RecordingJITMemoryManager : public JITMemoryManager {
|
||||
@ -170,9 +170,10 @@ bool LoadAssemblyInto(Module *M, const char *assembly) {
|
||||
SMDiagnostic Error;
|
||||
bool success =
|
||||
nullptr != ParseAssemblyString(assembly, M, Error, M->getContext());
|
||||
string_ostream errMsg;
|
||||
Error.print("", errMsg);
|
||||
EXPECT_TRUE(success) << errMsg.str();
|
||||
std::string errMsg;
|
||||
raw_string_ostream os(errMsg);
|
||||
Error.print("", os);
|
||||
EXPECT_TRUE(success) << os.str();
|
||||
return success;
|
||||
}
|
||||
|
||||
|
@ -458,7 +458,8 @@ void Pattern::PrintFailureInfo(const SourceMgr &SM, StringRef Buffer,
|
||||
// variable values.
|
||||
if (!VariableUses.empty()) {
|
||||
for (unsigned i = 0, e = VariableUses.size(); i != e; ++i) {
|
||||
small_string_ostream<256> OS;
|
||||
SmallString<256> Msg;
|
||||
raw_svector_ostream OS(Msg);
|
||||
StringRef Var = VariableUses[i].first;
|
||||
if (Var[0] == '@') {
|
||||
std::string Value;
|
||||
|
@ -319,7 +319,8 @@ void CodeEmitterGen::run(raw_ostream &o) {
|
||||
|
||||
// Default case: unhandled opcode
|
||||
o << " default:\n"
|
||||
<< " string_ostream Msg;\n"
|
||||
<< " std::string msg;\n"
|
||||
<< " raw_string_ostream Msg(msg);\n"
|
||||
<< " Msg << \"Not supported instr: \" << MI;\n"
|
||||
<< " report_fatal_error(Msg.str());\n"
|
||||
<< " }\n"
|
||||
|
@ -166,21 +166,23 @@ static void benchmark( llvm::TimerGroup &Group
|
||||
}
|
||||
|
||||
static std::string createJSONText(size_t MemoryMB, unsigned ValueSize) {
|
||||
llvm::string_ostream OS;
|
||||
OS << "[\n";
|
||||
std::string JSONText;
|
||||
llvm::raw_string_ostream Stream(JSONText);
|
||||
Stream << "[\n";
|
||||
size_t MemoryBytes = MemoryMB * 1024 * 1024;
|
||||
while (OS.tell() < MemoryBytes) {
|
||||
OS << " {\n"
|
||||
<< " \"key1\": \"" << std::string(ValueSize, '*') << "\",\n"
|
||||
<< " \"key2\": \"" << std::string(ValueSize, '*') << "\",\n"
|
||||
<< " \"key3\": \"" << std::string(ValueSize, '*') << "\"\n"
|
||||
<< " }";
|
||||
if (OS.tell() < MemoryBytes)
|
||||
OS << ",";
|
||||
OS << "\n";
|
||||
while (JSONText.size() < MemoryBytes) {
|
||||
Stream << " {\n"
|
||||
<< " \"key1\": \"" << std::string(ValueSize, '*') << "\",\n"
|
||||
<< " \"key2\": \"" << std::string(ValueSize, '*') << "\",\n"
|
||||
<< " \"key3\": \"" << std::string(ValueSize, '*') << "\"\n"
|
||||
<< " }";
|
||||
Stream.flush();
|
||||
if (JSONText.size() < MemoryBytes) Stream << ",";
|
||||
Stream << "\n";
|
||||
}
|
||||
OS << "]\n";
|
||||
return OS.str();
|
||||
Stream << "]\n";
|
||||
Stream.flush();
|
||||
return JSONText;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
Loading…
Reference in New Issue
Block a user