From 909f6a035fb4088a4e3ead661d8ec7b9941eba82 Mon Sep 17 00:00:00 2001 From: Chad Rosier Date: Tue, 30 Oct 2012 20:39:19 +0000 Subject: [PATCH] [inline asm] Get the mayLoad/mayStore directly from the MIOp_ExtraInfo operand. llvm-svn: 167050 --- llvm/include/llvm/CodeGen/MachineInstr.h | 18 +++++++++++++----- llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp | 10 ++-------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/llvm/include/llvm/CodeGen/MachineInstr.h b/llvm/include/llvm/CodeGen/MachineInstr.h index 4270901..7eb03a9 100644 --- a/llvm/include/llvm/CodeGen/MachineInstr.h +++ b/llvm/include/llvm/CodeGen/MachineInstr.h @@ -58,10 +58,8 @@ public: NoFlags = 0, FrameSetup = 1 << 0, // Instruction is used as a part of // function frame setup code. - InsideBundle = 1 << 1, // Instruction is inside a bundle (not + InsideBundle = 1 << 1 // Instruction is inside a bundle (not // the first MI in a bundle) - MayLoad = 1 << 2, // Instruction could possibly read memory. - MayStore = 1 << 3 // Instruction could possibly modify memory. }; private: const MCInstrDesc *MCID; // Instruction descriptor. @@ -447,7 +445,12 @@ public: /// Instructions with this flag set are not necessarily simple load /// instructions, they may load a value and modify it, for example. bool mayLoad(QueryType Type = AnyInBundle) const { - return hasProperty(MCID::MayLoad, Type) || (Flags & MayLoad); + if (isInlineAsm()) { + unsigned ExtraInfo = getOperand(InlineAsm::MIOp_ExtraInfo).getImm(); + if (ExtraInfo & InlineAsm::Extra_MayLoad) + return true; + } + return hasProperty(MCID::MayLoad, Type); } @@ -456,7 +459,12 @@ public: /// instructions, they may store a modified value based on their operands, or /// may not actually modify anything, for example. bool mayStore(QueryType Type = AnyInBundle) const { - return hasProperty(MCID::MayStore, Type) || (Flags & MayStore); + if (isInlineAsm()) { + unsigned ExtraInfo = getOperand(InlineAsm::MIOp_ExtraInfo).getImm(); + if (ExtraInfo & InlineAsm::Extra_MayStore) + return true; + } + return hasProperty(MCID::MayStore, Type); } //===--------------------------------------------------------------------===// diff --git a/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp b/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp index 5fc71cc..a8381b2 100644 --- a/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp @@ -897,19 +897,13 @@ EmitSpecialNode(SDNode *Node, bool IsClone, bool IsCloned, const char *AsmStr = cast(AsmStrV)->getSymbol(); MI->addOperand(MachineOperand::CreateES(AsmStr)); - // Add the HasSideEffect and isAlignStack bits. + // Add the HasSideEffect, isAlignStack, AsmDialect, MayLoad and MayStore + // bits. int64_t ExtraInfo = cast(Node->getOperand(InlineAsm::Op_ExtraInfo))-> getZExtValue(); MI->addOperand(MachineOperand::CreateImm(ExtraInfo)); - // Set the MayLoad and MayStore flags. - if (ExtraInfo & InlineAsm::Extra_MayLoad) - MI->setFlag(MachineInstr::MayLoad); - - if (ExtraInfo & InlineAsm::Extra_MayStore) - MI->setFlag(MachineInstr::MayStore); - // Remember to operand index of the group flags. SmallVector GroupIdx; -- 2.7.4