<div dir="ltr">Thanks for doing this! I had a patch in tree for getting rid of this hack, but I didn't like it and wasn't confident that it was the right way to go.</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 22, 2015 at 10:46 AM, Rafael Espindola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rafael<br>
Date: Mon Jun 22 12:46:53 2015<br>
New Revision: 240300<br>
<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D240300-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=i66bOrzJCmXbogqMyv95xudGuok4_1Uxy65_1-9vGyM&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=240300&view=rev</a><br>
Log:<br>
Avoid a Symbol -> Name -> Symbol conversion.<br>
<br>
Before this we were producing a TargetExternalSymbol from a MCSymbol.<br>
That meant extracting the symbol name and fetching the symbol again<br>
down the pipeline.<br>
<br>
This patch adds a DAG.getMCSymbol that lets the MCSymbol pass unchanged on the<br>
DAG.<br>
<br>
Doing so removes the need for MO_NOPREFIX and fixes the root cause of pr23900,<br>
allowing r240130 to be committed again.<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/CodeGen/ISDOpcodes.h<br>
    llvm/trunk/include/llvm/CodeGen/MachineOperand.h<br>
    llvm/trunk/include/llvm/CodeGen/SelectionDAG.h<br>
    llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h<br>
    llvm/trunk/include/llvm/Target/TargetSelectionDAG.td<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.h<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp<br>
    llvm/trunk/lib/Target/X86/MCTargetDesc/X86BaseInfo.h<br>
    llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp<br>
    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp<br>
    llvm/trunk/lib/Target/X86/X86InstrCompiler.td<br>
    llvm/trunk/lib/Target/X86/X86MCInstLower.cpp<br>
    llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/CodeGen/ISDOpcodes.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_include_llvm_CodeGen_ISDOpcodes.h-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=ErOohai1k0wpGaDjKew9GlfNn5RGu60_inqxGUqNw5w&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/ISDOpcodes.h?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/CodeGen/ISDOpcodes.h (original)<br>
+++ llvm/trunk/include/llvm/CodeGen/ISDOpcodes.h Mon Jun 22 12:46:53 2015<br>
@@ -124,6 +124,8 @@ namespace ISD {<br>
     TargetExternalSymbol,<br>
     TargetBlockAddress,<br>
<br>
+    MCSymbol,<br>
+<br>
     /// TargetIndex - Like a constant pool entry, but with completely<br>
     /// target-dependent semantics. Holds target flags, a 32-bit index, and a<br>
     /// 64-bit index. Targets can use this however they like.<br>
<br>
Modified: llvm/trunk/include/llvm/CodeGen/MachineOperand.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_include_llvm_CodeGen_MachineOperand.h-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=0JSNx597dc9pD3iPqjlXDf2x9POUxyWdRQuU-OOyq9g&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineOperand.h?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/CodeGen/MachineOperand.h (original)<br>
+++ llvm/trunk/include/llvm/CodeGen/MachineOperand.h Mon Jun 22 12:46:53 2015<br>
@@ -450,11 +450,12 @@ public:<br>
     return Contents.CFIIndex;<br>
   }<br>
<br>
-  /// getOffset - Return the offset from the symbol in this operand. This always<br>
-  /// returns 0 for ExternalSymbol operands.<br>
+  /// Return the offset from the symbol in this operand. This always returns 0<br>
+  /// for ExternalSymbol operands.<br>
   int64_t getOffset() const {<br>
-    assert((isGlobal() || isSymbol() || isCPI() || isTargetIndex() ||<br>
-            isBlockAddress()) && "Wrong MachineOperand accessor");<br>
+    assert((isGlobal() || isSymbol() || isMCSymbol() || isCPI() ||<br>
+            isTargetIndex() || isBlockAddress()) &&<br>
+           "Wrong MachineOperand accessor");<br>
     return int64_t(uint64_t(Contents.OffsetedInfo.OffsetHi) << 32) |<br>
            SmallContents.OffsetLo;<br>
   }<br>
@@ -512,8 +513,9 @@ public:<br>
   }<br>
<br>
   void setOffset(int64_t Offset) {<br>
-    assert((isGlobal() || isSymbol() || isCPI() || isTargetIndex() ||<br>
-            isBlockAddress()) && "Wrong MachineOperand accessor");<br>
+    assert((isGlobal() || isSymbol() || isMCSymbol() || isCPI() ||<br>
+            isTargetIndex() || isBlockAddress()) &&<br>
+           "Wrong MachineOperand accessor");<br>
     SmallContents.OffsetLo = unsigned(Offset);<br>
     Contents.OffsetedInfo.OffsetHi = int(Offset >> 32);<br>
   }<br>
@@ -706,6 +708,7 @@ public:<br>
   static MachineOperand CreateMCSymbol(MCSymbol *Sym) {<br>
     MachineOperand Op(MachineOperand::MO_MCSymbol);<br>
     Op.Contents.Sym = Sym;<br>
+    Op.setOffset(0);<br>
     return Op;<br>
   }<br>
<br>
<br>
Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAG.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_include_llvm_CodeGen_SelectionDAG.h-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=pNcrmarBkQlGDAz2NFT88hpvo1TRcSCc5R735QrQ4Xw&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAG.h?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/CodeGen/SelectionDAG.h (original)<br>
+++ llvm/trunk/include/llvm/CodeGen/SelectionDAG.h Mon Jun 22 12:46:53 2015<br>
@@ -495,6 +495,8 @@ public:<br>
   SDValue getExternalSymbol(const char *Sym, SDLoc dl, EVT VT);<br>
   SDValue getTargetExternalSymbol(const char *Sym, EVT VT,<br>
                                   unsigned char TargetFlags = 0);<br>
+  SDValue getMCSymbol(MCSymbol *Sym, EVT VT);<br>
+<br>
   SDValue getValueType(EVT);<br>
   SDValue getRegister(unsigned Reg, EVT VT);<br>
   SDValue getRegisterMask(const uint32_t *RegMask);<br>
@@ -1278,6 +1280,7 @@ private:<br>
   StringMap<SDNode*> ExternalSymbols;<br>
<br>
   std::map<std::pair<std::string, unsigned char>,SDNode*> TargetExternalSymbols;<br>
+  DenseMap<MCSymbol *, SDNode *> MCSymbols;<br>
 };<br>
<br>
 template <> struct GraphTraits<SelectionDAG*> : public GraphTraits<SDNode*> {<br>
<br>
Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_include_llvm_CodeGen_SelectionDAGNodes.h-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=mGicyQc1ZKBd5t4M7XWoBUZj49e7r3G0D5eLte9_HFk&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h (original)<br>
+++ llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Mon Jun 22 12:46:53 2015<br>
@@ -1810,6 +1810,21 @@ public:<br>
   }<br>
 };<br>
<br>
+class MCSymbolSDNode : public SDNode {<br>
+  MCSymbol *Symbol;<br>
+<br>
+  friend class SelectionDAG;<br>
+  MCSymbolSDNode(MCSymbol *Symbol, EVT VT)<br>
+      : SDNode(ISD::MCSymbol, 0, DebugLoc(), getSDVTList(VT)), Symbol(Symbol) {}<br>
+<br>
+public:<br>
+  MCSymbol *getMCSymbol() const { return Symbol; }<br>
+<br>
+  static bool classof(const SDNode *N) {<br>
+    return N->getOpcode() == ISD::MCSymbol;<br>
+  }<br>
+};<br>
+<br>
 class CondCodeSDNode : public SDNode {<br>
   ISD::CondCode Condition;<br>
   friend class SelectionDAG;<br>
<br>
Modified: llvm/trunk/include/llvm/Target/TargetSelectionDAG.td<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_include_llvm_Target_TargetSelectionDAG.td-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=s9ALwpVhPfEqpU4enVQBwQPuRPlfrzZC2vMlALMp2QU&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetSelectionDAG.td?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/Target/TargetSelectionDAG.td (original)<br>
+++ llvm/trunk/include/llvm/Target/TargetSelectionDAG.td Mon Jun 22 12:46:53 2015<br>
@@ -341,6 +341,7 @@ def externalsym : SDNode<"ISD::ExternalS<br>
                          "ExternalSymbolSDNode">;<br>
 def texternalsym: SDNode<"ISD::TargetExternalSymbol", SDTPtrLeaf, [],<br>
                          "ExternalSymbolSDNode">;<br>
+def mcsym: SDNode<"ISD::MCSymbol", SDTPtrLeaf, [], "MCSymbolSDNode">;<br>
 def blockaddress : SDNode<"ISD::BlockAddress",        SDTPtrLeaf, [],<br>
                          "BlockAddressSDNode">;<br>
 def tblockaddress: SDNode<"ISD::TargetBlockAddress",  SDTPtrLeaf, [],<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_SelectionDAG_InstrEmitter.cpp-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=wSjvSv1F9RT6jz31D_IZP_3PrMFw48-5AnshtkCscoo&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp Mon Jun 22 12:46:53 2015<br>
@@ -422,6 +422,8 @@ void InstrEmitter::AddOperand(MachineIns<br>
     MIB.addConstantPoolIndex(Idx, Offset, CP->getTargetFlags());<br>
   } else if (ExternalSymbolSDNode *ES = dyn_cast<ExternalSymbolSDNode>(Op)) {<br>
     MIB.addExternalSymbol(ES->getSymbol(), ES->getTargetFlags());<br>
+  } else if (auto *SymNode = dyn_cast<MCSymbolSDNode>(Op)) {<br>
+    MIB.addSym(SymNode->getMCSymbol());<br>
   } else if (BlockAddressSDNode *BA = dyn_cast<BlockAddressSDNode>(Op)) {<br>
     MIB.addBlockAddress(BA->getBlockAddress(),<br>
                         BA->getOffset(),<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_SelectionDAG_ScheduleDAGSDNodes.h-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=7LkE5tqJUScz3SzMgfRjVsWOCzxMGXEuAe185jVmmnk&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.h?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.h (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.h Mon Jun 22 12:46:53 2015<br>
@@ -64,6 +64,7 @@ namespace llvm {<br>
       if (isa<TargetIndexSDNode>(Node))    return true;<br>
       if (isa<JumpTableSDNode>(Node))      return true;<br>
       if (isa<ExternalSymbolSDNode>(Node)) return true;<br>
+      if (isa<MCSymbolSDNode>(Node))       return true;<br>
       if (isa<BlockAddressSDNode>(Node))   return true;<br>
       if (Node->getOpcode() == ISD::EntryToken ||<br>
           isa<MDNodeSDNode>(Node)) return true;<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_SelectionDAG_SelectionDAG.cpp-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=lIfSL9HqIiywZIihMiESVV4oPKZFKYLJA_snxTG0_Ic&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Mon Jun 22 12:46:53 2015<br>
@@ -427,12 +427,12 @@ static void AddNodeIDNode(FoldingSetNode<br>
   AddNodeIDOperands(ID, OpList);<br>
 }<br>
<br>
-/// AddNodeIDCustom - If this is an SDNode with special info, add this info to<br>
-/// the NodeID data.<br>
+/// If this is an SDNode with special info, add this info to the NodeID data.<br>
 static void AddNodeIDCustom(FoldingSetNodeID &ID, const SDNode *N) {<br>
   switch (N->getOpcode()) {<br>
   case ISD::TargetExternalSymbol:<br>
   case ISD::ExternalSymbol:<br>
+  case ISD::MCSymbol:<br>
     llvm_unreachable("Should only be used on nodes with operands");<br>
   default: break;  // Normal nodes don't need extra info.<br>
   case ISD::TargetConstant:<br>
@@ -797,6 +797,11 @@ bool SelectionDAG::RemoveNodeFromCSEMaps<br>
                                                     ESN->getTargetFlags()));<br>
     break;<br>
   }<br>
+  case ISD::MCSymbol: {<br>
+    auto *MCSN = cast<MCSymbolSDNode>(N);<br>
+    Erased = MCSymbols.erase(MCSN->getMCSymbol());<br>
+    break;<br>
+  }<br>
   case ISD::VALUETYPE: {<br>
     EVT VT = cast<VTSDNode>(N)->getVT();<br>
     if (VT.isExtended()) {<br>
@@ -1014,6 +1019,7 @@ void SelectionDAG::clear() {<br>
   ExtendedValueTypeNodes.clear();<br>
   ExternalSymbols.clear();<br>
   TargetExternalSymbols.clear();<br>
+  MCSymbols.clear();<br>
   std::fill(CondCodeNodes.begin(), CondCodeNodes.end(),<br>
             static_cast<CondCodeSDNode*>(nullptr));<br>
   std::fill(ValueTypeNodes.begin(), ValueTypeNodes.end(),<br>
@@ -1468,6 +1474,15 @@ SDValue SelectionDAG::getExternalSymbol(<br>
   InsertNode(N);<br>
   return SDValue(N, 0);<br>
 }<br>
+<br>
+SDValue SelectionDAG::getMCSymbol(MCSymbol *Sym, EVT VT) {<br>
+  SDNode *&N = MCSymbols[Sym];<br>
+  if (N)<br>
+    return SDValue(N, 0);<br>
+  N = new (NodeAllocator) MCSymbolSDNode(Sym, VT);<br>
+  InsertNode(N);<br>
+  return SDValue(N, 0);<br>
+}<br>
<br>
 SDValue SelectionDAG::getTargetExternalSymbol(const char *Sym, EVT VT,<br>
                                               unsigned char TargetFlags) {<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_SelectionDAG_SelectionDAGBuilder.cpp-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=hncOkxnrUFOpzSCl39KVqMQ67KSNhZdGbExibpvArpw&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp Mon Jun 22 12:46:53 2015<br>
@@ -4976,11 +4976,9 @@ SelectionDAGBuilder::visitIntrinsicCall(<br>
         MF.getMMI().getContext().getOrCreateFrameAllocSymbol(<br>
             GlobalValue::getRealLinkageName(Fn->getName()), IdxVal);<br>
<br>
-    // Create a TargetExternalSymbol for the label to avoid any target lowering<br>
+    // Create a MCSymbol for the label to avoid any target lowering<br>
     // that would make this PC relative.<br>
-    StringRef Name = FrameAllocSym->getName();<br>
-    assert(Name.data()[Name.size()] == '\0' && "not null terminated");<br>
-    SDValue OffsetSym = DAG.getTargetExternalSymbol(Name.data(), PtrVT);<br>
+    SDValue OffsetSym = DAG.getMCSymbol(FrameAllocSym, PtrVT);<br>
     SDValue OffsetVal =<br>
         DAG.getNode(ISD::FRAME_ALLOC_RECOVER, sdl, PtrVT, OffsetSym);<br>
<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_SelectionDAG_SelectionDAGDumper.cpp-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=6JUqR40mRqP_N5DRNVcoMQjLNZ_gIigSdpfBd9UE6u4&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp Mon Jun 22 12:46:53 2015<br>
@@ -130,6 +130,7 @@ std::string SDNode::getOperationName(con<br>
   case ISD::TargetJumpTable:            return "TargetJumpTable";<br>
   case ISD::TargetConstantPool:         return "TargetConstantPool";<br>
   case ISD::TargetExternalSymbol:       return "TargetExternalSymbol";<br>
+  case ISD::MCSymbol:                   return "MCSymbol";<br>
   case ISD::TargetBlockAddress:         return "TargetBlockAddress";<br>
<br>
   case ISD::CopyToReg:                  return "CopyToReg";<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_SelectionDAG_SelectionDAGISel.cpp-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=tSdqZvdsBwtKaw90sbs2H5OefxUEqHxJyYbjuwNWK50&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Mon Jun 22 12:46:53 2015<br>
@@ -2562,6 +2562,7 @@ SelectCodeCommon(SDNode *NodeToMatch, co<br>
   case ISD::TargetConstantPool:<br>
   case ISD::TargetFrameIndex:<br>
   case ISD::TargetExternalSymbol:<br>
+  case ISD::MCSymbol:<br>
   case ISD::TargetBlockAddress:<br>
   case ISD::TargetJumpTable:<br>
   case ISD::TargetGlobalTLSAddress:<br>
<br>
Modified: llvm/trunk/lib/Target/X86/MCTargetDesc/X86BaseInfo.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_Target_X86_MCTargetDesc_X86BaseInfo.h-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=0lAaxalgrrxo9gQdpcKNT_YgQNHNWraxJU_JGY9pUis&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/MCTargetDesc/X86BaseInfo.h?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/X86/MCTargetDesc/X86BaseInfo.h (original)<br>
+++ llvm/trunk/lib/Target/X86/MCTargetDesc/X86BaseInfo.h Mon Jun 22 12:46:53 2015<br>
@@ -213,11 +213,7 @@ namespace X86II {<br>
     /// the offset from beginning of section.<br>
     ///<br>
     /// This is the TLS offset for the COFF/Windows TLS mechanism.<br>
-    MO_SECREL,<br>
-<br>
-    /// MO_NOPREFIX - On a symbol operand this indicates that the symbol should<br>
-    /// not be mangled with a prefix.<br>
-    MO_NOPREFIX,<br>
+    MO_SECREL<br>
   };<br>
<br>
   enum : uint64_t {<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_Target_X86_X86ISelDAGToDAG.cpp-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=PyReEo0HK-R7GeiPOgAoxgZ37x8R_-9Twz2LzVLKLVs&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp (original)<br>
+++ llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp Mon Jun 22 12:46:53 2015<br>
@@ -67,19 +67,19 @@ namespace {<br>
     const Constant *CP;<br>
     const BlockAddress *BlockAddr;<br>
     const char *ES;<br>
+    MCSymbol *MCSym;<br>
     int JT;<br>
     unsigned Align;    // CP alignment.<br>
     unsigned char SymbolFlags;  // X86II::MO_*<br>
<br>
     X86ISelAddressMode()<br>
-      : BaseType(RegBase), Base_FrameIndex(0), Scale(1), IndexReg(), Disp(0),<br>
-        Segment(), GV(nullptr), CP(nullptr), BlockAddr(nullptr), ES(nullptr),<br>
-        JT(-1), Align(0), SymbolFlags(X86II::MO_NO_FLAG) {<br>
-    }<br>
+        : BaseType(RegBase), Base_FrameIndex(0), Scale(1), IndexReg(), Disp(0),<br>
+          Segment(), GV(nullptr), CP(nullptr), BlockAddr(nullptr), ES(nullptr),<br>
+          MCSym(nullptr), JT(-1), Align(0), SymbolFlags(X86II::MO_NO_FLAG) {}<br>
<br>
     bool hasSymbolicDisplacement() const {<br>
       return GV != nullptr || CP != nullptr || ES != nullptr ||<br>
-             JT != -1 || BlockAddr != nullptr;<br>
+             MCSym != nullptr || JT != -1 || BlockAddr != nullptr;<br>
     }<br>
<br>
     bool hasBaseOrIndexReg() const {<br>
@@ -134,6 +134,11 @@ namespace {<br>
         dbgs() << ES;<br>
       else<br>
         dbgs() << "nul";<br>
+      dbgs() << " MCSym ";<br>
+      if (MCSym)<br>
+        dbgs() << MCSym;<br>
+      else<br>
+        dbgs() << "nul";<br>
       dbgs() << " JT" << JT << " Align" << Align << '\n';<br>
     }<br>
 #endif<br>
@@ -258,6 +263,10 @@ namespace {<br>
       else if (<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__AM.ES&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=V-5YvbeZSjeUb2NQOZ3tJ1FBRVZKAAmsRVQKGr3dwJU&e=" rel="noreferrer" target="_blank">AM.ES</a>) {<br>
         assert(!AM.Disp && "Non-zero displacement is ignored with ES.");<br>
         Disp = CurDAG->getTargetExternalSymbol(<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__AM.ES&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=V-5YvbeZSjeUb2NQOZ3tJ1FBRVZKAAmsRVQKGr3dwJU&e=" rel="noreferrer" target="_blank">AM.ES</a>, MVT::i32, AM.SymbolFlags);<br>
+      } else if (AM.MCSym) {<br>
+        assert(!AM.Disp && "Non-zero displacement is ignored with MCSym.");<br>
+        assert(AM.SymbolFlags == 0 && "oo");<br>
+        Disp = CurDAG->getMCSymbol(AM.MCSym, MVT::i32);<br>
       } else if (AM.JT != -1) {<br>
         assert(!AM.Disp && "Non-zero displacement is ignored with JT.");<br>
         Disp = CurDAG->getTargetJumpTable(AM.JT, MVT::i32, AM.SymbolFlags);<br>
@@ -604,7 +613,7 @@ static bool isDispSafeForFrameIndex(int6<br>
 bool X86DAGToDAGISel::FoldOffsetIntoAddress(uint64_t Offset,<br>
                                             X86ISelAddressMode &AM) {<br>
   // Cannot combine ExternalSymbol displacements with integer offsets.<br>
-  if (Offset != 0 && <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__AM.ES&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=V-5YvbeZSjeUb2NQOZ3tJ1FBRVZKAAmsRVQKGr3dwJU&e=" rel="noreferrer" target="_blank">AM.ES</a>)<br>
+  if (Offset != 0 && (<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__AM.ES&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=V-5YvbeZSjeUb2NQOZ3tJ1FBRVZKAAmsRVQKGr3dwJU&e=" rel="noreferrer" target="_blank">AM.ES</a> || AM.MCSym))<br>
     return true;<br>
   int64_t Val = AM.Disp + Offset;<br>
   CodeModel::Model M = TM.getCodeModel();<br>
@@ -690,6 +699,8 @@ bool X86DAGToDAGISel::MatchWrapper(SDVal<br>
     } else if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(N0)) {<br>
       <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__AM.ES&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=V-5YvbeZSjeUb2NQOZ3tJ1FBRVZKAAmsRVQKGr3dwJU&e=" rel="noreferrer" target="_blank">AM.ES</a> = S->getSymbol();<br>
       AM.SymbolFlags = S->getTargetFlags();<br>
+    } else if (auto *S = dyn_cast<MCSymbolSDNode>(N0)) {<br>
+      AM.MCSym = S->getMCSymbol();<br>
     } else if (JumpTableSDNode *J = dyn_cast<JumpTableSDNode>(N0)) {<br>
       AM.JT = J->getIndex();<br>
       AM.SymbolFlags = J->getTargetFlags();<br>
@@ -728,6 +739,8 @@ bool X86DAGToDAGISel::MatchWrapper(SDVal<br>
     } else if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(N0)) {<br>
       <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__AM.ES&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=V-5YvbeZSjeUb2NQOZ3tJ1FBRVZKAAmsRVQKGr3dwJU&e=" rel="noreferrer" target="_blank">AM.ES</a> = S->getSymbol();<br>
       AM.SymbolFlags = S->getTargetFlags();<br>
+    } else if (auto *S = dyn_cast<MCSymbolSDNode>(N0)) {<br>
+      AM.MCSym = S->getMCSymbol();<br>
     } else if (JumpTableSDNode *J = dyn_cast<JumpTableSDNode>(N0)) {<br>
       AM.JT = J->getIndex();<br>
       AM.SymbolFlags = J->getTargetFlags();<br>
@@ -1001,7 +1014,8 @@ bool X86DAGToDAGISel::MatchAddressRecurs<br>
     // FIXME: JumpTable and ExternalSymbol address currently don't like<br>
     // displacements.  It isn't very important, but this should be fixed for<br>
     // consistency.<br>
-    if (!<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__AM.ES&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=V-5YvbeZSjeUb2NQOZ3tJ1FBRVZKAAmsRVQKGr3dwJU&e=" rel="noreferrer" target="_blank">AM.ES</a> && AM.JT != -1) return true;<br>
+    if (!(<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__AM.ES&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=V-5YvbeZSjeUb2NQOZ3tJ1FBRVZKAAmsRVQKGr3dwJU&e=" rel="noreferrer" target="_blank">AM.ES</a> || AM.MCSym) && AM.JT != -1)<br>
+      return true;<br>
<br>
     if (ConstantSDNode *Cst = dyn_cast<ConstantSDNode>(N))<br>
       if (!FoldOffsetIntoAddress(Cst->getSExtValue(), AM))<br>
@@ -1013,13 +1027,11 @@ bool X86DAGToDAGISel::MatchAddressRecurs<br>
   default: break;<br>
   case ISD::FRAME_ALLOC_RECOVER: {<br>
     if (!AM.hasSymbolicDisplacement() && AM.Disp == 0)<br>
-      if (const auto *ESNode = dyn_cast<ExternalSymbolSDNode>(N.getOperand(0)))<br>
-        if (ESNode->getOpcode() == ISD::TargetExternalSymbol) {<br>
-          // Use the symbol and don't prefix it.<br>
-          <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__AM.ES&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=V-5YvbeZSjeUb2NQOZ3tJ1FBRVZKAAmsRVQKGr3dwJU&e=" rel="noreferrer" target="_blank">AM.ES</a> = ESNode->getSymbol();<br>
-          AM.SymbolFlags = X86II::MO_NOPREFIX;<br>
-          return false;<br>
-        }<br>
+      if (const auto *ESNode = dyn_cast<MCSymbolSDNode>(N.getOperand(0))) {<br>
+        // Use the symbol and don't prefix it.<br>
+        AM.MCSym = ESNode->getMCSymbol();<br>
+        return false;<br>
+      }<br>
     break;<br>
   }<br>
   case ISD::Constant: {<br>
@@ -1473,6 +1485,7 @@ bool X86DAGToDAGISel::SelectMOV64Imm32(S<br>
       N->getOpcode() != ISD::TargetJumpTable &&<br>
       N->getOpcode() != ISD::TargetGlobalAddress &&<br>
       N->getOpcode() != ISD::TargetExternalSymbol &&<br>
+      N->getOpcode() != ISD::MCSymbol &&<br>
       N->getOpcode() != ISD::TargetBlockAddress)<br>
     return false;<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_Target_X86_X86ISelLowering.cpp-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=qohG0Esad6Gx1t83VfhTYCUqZ83kc2ENr6zzyXurXbc&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)<br>
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Mon Jun 22 12:46:53 2015<br>
@@ -15409,13 +15409,10 @@ static SDValue LowerINTRINSIC_WO_CHAIN(S<br>
     auto *Fn = cast<Function>(cast<GlobalAddressSDNode>(Op1)->getGlobal());<br>
     MCSymbol *LSDASym = MF.getMMI().getContext().getOrCreateLSDASymbol(<br>
         GlobalValue::getRealLinkageName(Fn->getName()));<br>
-    StringRef Name = LSDASym->getName();<br>
-    assert(Name.data()[Name.size()] == '\0' && "not null terminated");<br>
<br>
     // Generate a simple absolute symbol reference. This intrinsic is only<br>
     // supported on 32-bit Windows, which isn't PIC.<br>
-    SDValue Result =<br>
-        DAG.getTargetExternalSymbol(Name.data(), VT, X86II::MO_NOPREFIX);<br>
+    SDValue Result = DAG.getMCSymbol(LSDASym, VT);<br>
     return DAG.getNode(X86ISD::Wrapper, dl, VT, Result);<br>
   }<br>
   }<br>
@@ -15615,13 +15612,11 @@ static SDValue LowerEXCEPTIONINFO(SDValu<br>
   MCSymbol *ParentFrameSym =<br>
       MF.getMMI().getContext().getOrCreateParentFrameOffsetSymbol(<br>
           GlobalValue::getRealLinkageName(Fn->getName()));<br>
-  StringRef Name = ParentFrameSym->getName();<br>
-  assert(Name.data()[Name.size()] == '\0' && "not null terminated");<br>
<br>
   // Create a TargetExternalSymbol for the label to avoid any target lowering<br>
   // that would make this PC relative.<br>
   MVT PtrVT = Op.getSimpleValueType();<br>
-  SDValue OffsetSym = DAG.getTargetExternalSymbol(Name.data(), PtrVT);<br>
+  SDValue OffsetSym = DAG.getMCSymbol(ParentFrameSym, PtrVT);<br>
   SDValue OffsetVal =<br>
       DAG.getNode(ISD::FRAME_ALLOC_RECOVER, dl, PtrVT, OffsetSym);<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86InstrCompiler.td<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_Target_X86_X86InstrCompiler.td-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=Bl6_fYupkiJC1FL_PB-Mon-xcGqDoF4r2qbryXc7KgI&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrCompiler.td?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86InstrCompiler.td (original)<br>
+++ llvm/trunk/lib/Target/X86/X86InstrCompiler.td Mon Jun 22 12:46:53 2015<br>
@@ -869,6 +869,7 @@ def : Pat<(i32 (X86Wrapper tjumptable  :<br>
 def : Pat<(i32 (X86Wrapper tglobaltlsaddr:$dst)),(MOV32ri tglobaltlsaddr:$dst)>;<br>
 def : Pat<(i32 (X86Wrapper tglobaladdr :$dst)), (MOV32ri tglobaladdr :$dst)>;<br>
 def : Pat<(i32 (X86Wrapper texternalsym:$dst)), (MOV32ri texternalsym:$dst)>;<br>
+def : Pat<(i32 (X86Wrapper mcsym:$dst)), (MOV32ri mcsym:$dst)>;<br>
 def : Pat<(i32 (X86Wrapper tblockaddress:$dst)), (MOV32ri tblockaddress:$dst)>;<br>
<br>
 def : Pat<(add GR32:$src1, (X86Wrapper tconstpool:$src2)),<br>
@@ -879,6 +880,8 @@ def : Pat<(add GR32:$src1, (X86Wrapper t<br>
           (ADD32ri GR32:$src1, tglobaladdr:$src2)>;<br>
 def : Pat<(add GR32:$src1, (X86Wrapper texternalsym:$src2)),<br>
           (ADD32ri GR32:$src1, texternalsym:$src2)>;<br>
+def : Pat<(add GR32:$src1, (X86Wrapper mcsym:$src2)),<br>
+          (ADD32ri GR32:$src1, mcsym:$src2)>;<br>
 def : Pat<(add GR32:$src1, (X86Wrapper tblockaddress:$src2)),<br>
           (ADD32ri GR32:$src1, tblockaddress:$src2)>;<br>
<br>
@@ -886,6 +889,8 @@ def : Pat<(store (i32 (X86Wrapper tgloba<br>
           (MOV32mi addr:$dst, tglobaladdr:$src)>;<br>
 def : Pat<(store (i32 (X86Wrapper texternalsym:$src)), addr:$dst),<br>
           (MOV32mi addr:$dst, texternalsym:$src)>;<br>
+def : Pat<(store (i32 (X86Wrapper mcsym:$src)), addr:$dst),<br>
+          (MOV32mi addr:$dst, mcsym:$src)>;<br>
 def : Pat<(store (i32 (X86Wrapper tblockaddress:$src)), addr:$dst),<br>
           (MOV32mi addr:$dst, tblockaddress:$src)>;<br>
<br>
@@ -900,6 +905,8 @@ def : Pat<(i64 (X86Wrapper tglobaladdr :<br>
           (MOV64ri tglobaladdr :$dst)>, Requires<[FarData]>;<br>
 def : Pat<(i64 (X86Wrapper texternalsym:$dst)),<br>
           (MOV64ri texternalsym:$dst)>, Requires<[FarData]>;<br>
+def : Pat<(i64 (X86Wrapper mcsym:$dst)),<br>
+          (MOV64ri mcsym:$dst)>, Requires<[FarData]>;<br>
 def : Pat<(i64 (X86Wrapper tblockaddress:$dst)),<br>
           (MOV64ri tblockaddress:$dst)>, Requires<[FarData]>;<br>
<br>
@@ -914,6 +921,8 @@ def : Pat<(i64 (X86Wrapper tglobaladdr :<br>
           (MOV64ri32 tglobaladdr :$dst)>, Requires<[KernelCode]>;<br>
 def : Pat<(i64 (X86Wrapper texternalsym:$dst)),<br>
           (MOV64ri32 texternalsym:$dst)>, Requires<[KernelCode]>;<br>
+def : Pat<(i64 (X86Wrapper mcsym:$dst)),<br>
+          (MOV64ri32 mcsym:$dst)>, Requires<[KernelCode]>;<br>
 def : Pat<(i64 (X86Wrapper tblockaddress:$dst)),<br>
           (MOV64ri32 tblockaddress:$dst)>, Requires<[KernelCode]>;<br>
<br>
@@ -932,12 +941,15 @@ def : Pat<(store (i64 (X86Wrapper tgloba<br>
 def : Pat<(store (i64 (X86Wrapper texternalsym:$src)), addr:$dst),<br>
           (MOV64mi32 addr:$dst, texternalsym:$src)>,<br>
           Requires<[NearData, IsStatic]>;<br>
+def : Pat<(store (i64 (X86Wrapper mcsym:$src)), addr:$dst),<br>
+          (MOV64mi32 addr:$dst, mcsym:$src)>,<br>
+          Requires<[NearData, IsStatic]>;<br>
 def : Pat<(store (i64 (X86Wrapper tblockaddress:$src)), addr:$dst),<br>
           (MOV64mi32 addr:$dst, tblockaddress:$src)>,<br>
           Requires<[NearData, IsStatic]>;<br>
<br>
-def : Pat<(i32 (X86RecoverFrameAlloc texternalsym:$dst)), (MOV32ri texternalsym:$dst)>;<br>
-def : Pat<(i64 (X86RecoverFrameAlloc texternalsym:$dst)), (MOV64ri texternalsym:$dst)>;<br>
+def : Pat<(i32 (X86RecoverFrameAlloc mcsym:$dst)), (MOV32ri mcsym:$dst)>;<br>
+def : Pat<(i64 (X86RecoverFrameAlloc mcsym:$dst)), (MOV64ri mcsym:$dst)>;<br>
<br>
 // Calls<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86MCInstLower.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_Target_X86_X86MCInstLower.cpp-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=7Pn7XIDV9DEnIKCIaW-MLIECJQ2lo_q4Q_CV4bxbupM&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86MCInstLower.cpp?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86MCInstLower.cpp (original)<br>
+++ llvm/trunk/lib/Target/X86/X86MCInstLower.cpp Mon Jun 22 12:46:53 2015<br>
@@ -159,10 +159,7 @@ GetSymbolFromOperand(const MachineOperan<br>
     const GlobalValue *GV = MO.getGlobal();<br>
     AsmPrinter.getNameWithPrefix(Name, GV);<br>
   } else if (MO.isSymbol()) {<br>
-    if (MO.getTargetFlags() == X86II::MO_NOPREFIX)<br>
-      Name += MO.getSymbolName();<br>
-    else<br>
-      getMang()->getNameWithPrefix(Name, MO.getSymbolName());<br>
+    getMang()->getNameWithPrefix(Name, MO.getSymbolName());<br>
   } else if (MO.isMBB()) {<br>
     assert(Suffix.empty());<br>
     Sym = MO.getMBB()->getSymbol();<br>
@@ -241,7 +238,6 @@ MCOperand X86MCInstLower::LowerSymbolOpe<br>
   case X86II::MO_DARWIN_NONLAZY:<br>
   case X86II::MO_DLLIMPORT:<br>
   case X86II::MO_DARWIN_STUB:<br>
-  case X86II::MO_NOPREFIX:<br>
     break;<br>
<br>
   case X86II::MO_TLVP:      RefKind = MCSymbolRefExpr::VK_TLVP; break;<br>
@@ -423,6 +419,8 @@ X86MCInstLower::LowerMachineOperand(cons<br>
   case MachineOperand::MO_GlobalAddress:<br>
   case MachineOperand::MO_ExternalSymbol:<br>
     return LowerSymbolOperand(MO, GetSymbolFromOperand(MO));<br>
+  case MachineOperand::MO_MCSymbol:<br>
+    return LowerSymbolOperand(MO, MO.getMCSymbol());<br>
   case MachineOperand::MO_JumpTableIndex:<br>
     return LowerSymbolOperand(MO, AsmPrinter.GetJTISymbol(MO.getIndex()));<br>
   case MachineOperand::MO_ConstantPoolIndex:<br>
<br>
Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_utils_TableGen_CodeGenDAGPatterns.cpp-3Frev-3D240300-26r1-3D240299-26r2-3D240300-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=4mgzUAWPMSiGthZTBa2KwtLDp9tEe1jg6KWLsRMoba4&s=z5wPvVBLN8BQ098Y3wcrSXASLku_oCDeUlNW9Kc64LE&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp?rev=240300&r1=240299&r2=240300&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp (original)<br>
+++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp Mon Jun 22 12:46:53 2015<br>
@@ -2143,7 +2143,8 @@ TreePatternNode *TreePattern::ParseTreeP<br>
         Operator->getName() != "tblockaddress" &&<br>
         Operator->getName() != "tglobaladdr" &&<br>
         Operator->getName() != "bb" &&<br>
-        Operator->getName() != "vt")<br>
+        Operator->getName() != "vt" &&<br>
+        Operator->getName() != "mcsym")<br>
       error("Cannot use '" + Operator->getName() + "' in an output pattern!");<br>
   }<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>