[llvm] r339274 - revert '[CodeGen] emit inline asm clobber list warnings for reserved'
Ties Stuij via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 8 10:11:54 PDT 2018
Author: stuij
Date: Wed Aug 8 10:11:54 2018
New Revision: 339274
URL: http://llvm.org/viewvc/llvm-project?rev=339274&view=rev
Log:
revert '[CodeGen] emit inline asm clobber list warnings for reserved'
Modified:
llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=339274&r1=339273&r2=339274&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original)
+++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Wed Aug 8 10:11:54 2018
@@ -631,11 +631,6 @@ private:
/// inline asm.
void EmitInlineAsm(const MachineInstr *MI) const;
- /// Add inline assembly info to the diagnostics machinery, so we can
- /// emit file and position info. Returns SrcMgr memory buffer position.
- unsigned addInlineAsmDiagBuffer(StringRef AsmStr,
- const MDNode *LocMDNode) const;
-
//===------------------------------------------------------------------===//
// Internal Implementation Details
//===------------------------------------------------------------------===//
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp?rev=339274&r1=339273&r2=339274&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp Wed Aug 8 10:11:54 2018
@@ -71,42 +71,6 @@ static void srcMgrDiagHandler(const SMDi
DiagInfo->DiagHandler(Diag, DiagInfo->DiagContext, LocCookie);
}
-unsigned AsmPrinter::addInlineAsmDiagBuffer(StringRef AsmStr,
- const MDNode *LocMDNode) const {
- if (!DiagInfo) {
- DiagInfo = make_unique<SrcMgrDiagInfo>();
-
- MCContext &Context = MMI->getContext();
- Context.setInlineSourceManager(&DiagInfo->SrcMgr);
-
- LLVMContext &LLVMCtx = MMI->getModule()->getContext();
- if (LLVMCtx.getInlineAsmDiagnosticHandler()) {
- DiagInfo->DiagHandler = LLVMCtx.getInlineAsmDiagnosticHandler();
- DiagInfo->DiagContext = LLVMCtx.getInlineAsmDiagnosticContext();
- DiagInfo->SrcMgr.setDiagHandler(srcMgrDiagHandler, DiagInfo.get());
- }
- }
-
- SourceMgr &SrcMgr = DiagInfo->SrcMgr;
-
- std::unique_ptr<MemoryBuffer> Buffer;
- // The inline asm source manager will outlive AsmStr, so make a copy of the
- // string for SourceMgr to own.
- Buffer = MemoryBuffer::getMemBufferCopy(AsmStr, "<inline asm>");
-
- // Tell SrcMgr about this buffer, it takes ownership of the buffer.
- unsigned BufNum = SrcMgr.AddNewSourceBuffer(std::move(Buffer), SMLoc());
-
- // Store LocMDNode in DiagInfo, using BufNum as an identifier.
- if (LocMDNode) {
- DiagInfo->LocInfos.resize(BufNum);
- DiagInfo->LocInfos[BufNum - 1] = LocMDNode;
- }
-
- return BufNum;
-}
-
-
/// EmitInlineAsm - Emit a blob of inline asm to the output streamer.
void AsmPrinter::EmitInlineAsm(StringRef Str, const MCSubtargetInfo &STI,
const MCTargetOptions &MCOptions,
@@ -134,11 +98,39 @@ void AsmPrinter::EmitInlineAsm(StringRef
return;
}
- unsigned BufNum = addInlineAsmDiagBuffer(Str, LocMDNode);
- DiagInfo->SrcMgr.setIncludeDirs(MCOptions.IASSearchPaths);
+ if (!DiagInfo) {
+ DiagInfo = make_unique<SrcMgrDiagInfo>();
- std::unique_ptr<MCAsmParser> Parser(createMCAsmParser(
- DiagInfo->SrcMgr, OutContext, *OutStreamer, *MAI, BufNum));
+ MCContext &Context = MMI->getContext();
+ Context.setInlineSourceManager(&DiagInfo->SrcMgr);
+
+ LLVMContext &LLVMCtx = MMI->getModule()->getContext();
+ if (LLVMCtx.getInlineAsmDiagnosticHandler()) {
+ DiagInfo->DiagHandler = LLVMCtx.getInlineAsmDiagnosticHandler();
+ DiagInfo->DiagContext = LLVMCtx.getInlineAsmDiagnosticContext();
+ DiagInfo->SrcMgr.setDiagHandler(srcMgrDiagHandler, DiagInfo.get());
+ }
+ }
+
+ SourceMgr &SrcMgr = DiagInfo->SrcMgr;
+ SrcMgr.setIncludeDirs(MCOptions.IASSearchPaths);
+
+ std::unique_ptr<MemoryBuffer> Buffer;
+ // The inline asm source manager will outlive Str, so make a copy of the
+ // string for SourceMgr to own.
+ Buffer = MemoryBuffer::getMemBufferCopy(Str, "<inline asm>");
+
+ // Tell SrcMgr about this buffer, it takes ownership of the buffer.
+ unsigned BufNum = SrcMgr.AddNewSourceBuffer(std::move(Buffer), SMLoc());
+
+ // Store LocMDNode in DiagInfo, using BufNum as an identifier.
+ if (LocMDNode) {
+ DiagInfo->LocInfos.resize(BufNum);
+ DiagInfo->LocInfos[BufNum-1] = LocMDNode;
+ }
+
+ std::unique_ptr<MCAsmParser> Parser(
+ createMCAsmParser(SrcMgr, OutContext, *OutStreamer, *MAI, BufNum));
// Do not use assembler-level information for parsing inline assembly.
OutStreamer->setUseAssemblerInfoForParsing(false);
@@ -527,44 +519,6 @@ void AsmPrinter::EmitInlineAsm(const Mac
MCOptions.SanitizeAddress =
MF->getFunction().hasFnAttribute(Attribute::SanitizeAddress);
- // Emit warnings if we use reserved registers on the clobber list, as
- // that might give surprising results.
- std::vector<std::string> RestrRegs;
- // Start with the first operand descriptor, and iterate over them.
- for (unsigned I = InlineAsm::MIOp_FirstOperand, NumOps = MI->getNumOperands();
- I < NumOps; ++I) {
- const MachineOperand &MO = MI->getOperand(I);
- if (MO.isImm()) {
- unsigned Flags = MO.getImm();
- if (InlineAsm::getKind(Flags) == InlineAsm::Kind_Clobber &&
- MF->getRegInfo().isReserved(MI->getOperand(I + 1).getReg())) {
- const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();
- RestrRegs.push_back(TRI->getName(MI->getOperand(I + 1).getReg()));
- }
- // Skip to one before the next operand descriptor, if it exists.
- I += InlineAsm::getNumOperandRegisters(Flags);
- }
- }
-
- if (!RestrRegs.empty()) {
- unsigned BufNum = addInlineAsmDiagBuffer(OS.str(), LocMD);
- auto &SrcMgr = DiagInfo->SrcMgr;
- SMLoc Loc = SMLoc::getFromPointer(
- SrcMgr.getMemoryBuffer(BufNum)->getBuffer().begin());
-
- std::string Msg = "inline asm clobber list contains reserved registers: ";
- for (auto I = RestrRegs.begin(), E = RestrRegs.end(); I != E; I++) {
- if(I != RestrRegs.begin())
- Msg += ", ";
- Msg += *I;
- }
- std::string Note = "Reserved registers on the clobber list may not be "
- "preserved across the asm statement, and clobbering them may "
- "lead to undefined behaviour.";
- SrcMgr.PrintMessage(Loc, SourceMgr::DK_Warning, Msg);
- SrcMgr.PrintMessage(Loc, SourceMgr::DK_Note, Note);
- }
-
EmitInlineAsm(OS.str(), getSubtargetInfo(), MCOptions, LocMD,
MI->getInlineAsmDialect());
More information about the llvm-commits
mailing list