<div dir="ltr">This patch introduced memory leaks and "left shift of negative value -1"<br><div><a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/2579">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/2579</a><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Feb 6, 2017 at 11:47 AM Krzysztof Parzyszek via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: kparzysz<br class="gmail_msg">
Date: Mon Feb  6 13:35:46 2017<br class="gmail_msg">
New Revision: 294226<br class="gmail_msg">
<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=294226&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=294226&view=rev</a><br class="gmail_msg">
Log:<br class="gmail_msg">
[Hexagon] Update MCTargetDesc<br class="gmail_msg">
<br class="gmail_msg">
Changes include:<br class="gmail_msg">
- Updates to the instruction descriptor flags.<br class="gmail_msg">
- Improvements to the packet shuffler and checker.<br class="gmail_msg">
- Updates to the handling of certain relocations.<br class="gmail_msg">
- Better handling of duplex instructions.<br class="gmail_msg">
<br class="gmail_msg">
Added:<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/common-redeclare.s<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/dcfetch-symbol.s<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/equ.s<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/extended_relocations.ll<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/missing_label.s<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/non-relocatable.s<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/not-over.s<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/not_found.s<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/offset.s<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/operand-range.s<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/reg_altnames.s<br class="gmail_msg">
Modified:<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/Hexagon.td<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/HexagonInstrFormats.td<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/HexagonInstrFormatsV4.td<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.h<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCCompound.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.h<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCExpr.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.h<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCShuffler.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCShuffler.h<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.h<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonShuffler.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonShuffler.h<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/dis-duplex-p0.s<br class="gmail_msg">
    llvm/trunk/test/MC/Hexagon/relocations.s<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/Hexagon.td<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/Hexagon.td?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/Hexagon.td?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/Hexagon.td (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/Hexagon.td Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -27,9 +27,9 @@ def ArchV5:  SubtargetFeature<"v5",  "He<br class="gmail_msg">
 def ArchV55: SubtargetFeature<"v55", "HexagonArchVersion", "V55", "Hexagon V55">;<br class="gmail_msg">
 def ArchV60: SubtargetFeature<"v60", "HexagonArchVersion", "V60", "Hexagon V60">;<br class="gmail_msg">
<br class="gmail_msg">
-def FeatureHVX: SubtargetFeature<"hvx", "UseHVXOps", "true",<br class="gmail_msg">
+def ExtensionHVX: SubtargetFeature<"hvx", "UseHVXOps", "true",<br class="gmail_msg">
       "Hexagon HVX instructions">;<br class="gmail_msg">
-def FeatureHVXDbl: SubtargetFeature<"hvx-double", "UseHVXDblOps", "true",<br class="gmail_msg">
+def ExtensionHVXDbl: SubtargetFeature<"hvx-double", "UseHVXDblOps", "true",<br class="gmail_msg">
       "Hexagon HVX Double instructions">;<br class="gmail_msg">
 def FeatureLongCalls: SubtargetFeature<"long-calls", "UseLongCalls", "true",<br class="gmail_msg">
       "Use constant-extended calls">;<br class="gmail_msg">
@@ -46,10 +46,10 @@ def HasV60T            : Predicate<"HST-<br class="gmail_msg">
 def UseMEMOP           : Predicate<"HST->useMemOps()">;<br class="gmail_msg">
 def IEEERndNearV5T     : Predicate<"HST->modeIEEERndNear()">;<br class="gmail_msg">
 def UseHVXDbl          : Predicate<"HST->useHVXDblOps()">,<br class="gmail_msg">
-                         AssemblerPredicate<"FeatureHVXDbl">;<br class="gmail_msg">
+                         AssemblerPredicate<"ExtensionHVXDbl">;<br class="gmail_msg">
 def UseHVXSgl          : Predicate<"HST->useHVXSglOps()">;<br class="gmail_msg">
 def UseHVX             : Predicate<"HST->useHVXSglOps() ||HST->useHVXDblOps()">,<br class="gmail_msg">
-                         AssemblerPredicate<"FeatureHVX">;<br class="gmail_msg">
+                         AssemblerPredicate<"ExtensionHVX">;<br class="gmail_msg">
<br class="gmail_msg">
 //===----------------------------------------------------------------------===//<br class="gmail_msg">
 // Classes used for relation maps.<br class="gmail_msg">
@@ -271,7 +271,7 @@ def : Proc<"hexagonv5",  HexagonModelV4,<br class="gmail_msg">
 def : Proc<"hexagonv55", HexagonModelV55,<br class="gmail_msg">
            [ArchV4, ArchV5, ArchV55]>;<br class="gmail_msg">
 def : Proc<"hexagonv60", HexagonModelV60,<br class="gmail_msg">
-           [ArchV4, ArchV5, ArchV55, ArchV60, FeatureHVX]>;<br class="gmail_msg">
+           [ArchV4, ArchV5, ArchV55, ArchV60, ExtensionHVX]>;<br class="gmail_msg">
<br class="gmail_msg">
 //===----------------------------------------------------------------------===//<br class="gmail_msg">
 // Declare the target which we are implementing<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/HexagonInstrFormats.td<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrFormats.td?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrFormats.td?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/HexagonInstrFormats.td (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/HexagonInstrFormats.td Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -13,8 +13,8 @@<br class="gmail_msg">
 //                    *** Must match HexagonBaseInfo.h ***<br class="gmail_msg">
 //===----------------------------------------------------------------------===//<br class="gmail_msg">
<br class="gmail_msg">
-class IType<bits<5> t> {<br class="gmail_msg">
-  bits<5> Value = t;<br class="gmail_msg">
+class IType<bits<6> t> {<br class="gmail_msg">
+  bits<6> Value = t;<br class="gmail_msg">
 }<br class="gmail_msg">
 def TypePSEUDO : IType<0>;<br class="gmail_msg">
 def TypeALU32  : IType<1>;<br class="gmail_msg">
@@ -99,85 +99,85 @@ class InstHexagon<dag outs, dag ins, str<br class="gmail_msg">
<br class="gmail_msg">
   // Instruction type according to the ISA.<br class="gmail_msg">
   IType Type = type;<br class="gmail_msg">
-  let TSFlags{4-0} = Type.Value;<br class="gmail_msg">
+  let TSFlags{5-0} = Type.Value;<br class="gmail_msg">
<br class="gmail_msg">
   // Solo instructions, i.e., those that cannot be in a packet with others.<br class="gmail_msg">
   bits<1> isSolo = 0;<br class="gmail_msg">
-  let TSFlags{5} = isSolo;<br class="gmail_msg">
+  let TSFlags{6} = isSolo;<br class="gmail_msg">
   // Packed only with A or X-type instructions.<br class="gmail_msg">
   bits<1> isSoloAX = 0;<br class="gmail_msg">
-  let TSFlags{6} = isSoloAX;<br class="gmail_msg">
+  let TSFlags{7} = isSoloAX;<br class="gmail_msg">
   // Only A-type instruction in first slot or nothing.<br class="gmail_msg">
   bits<1> isSoloAin1 = 0;<br class="gmail_msg">
-  let TSFlags{7} = isSoloAin1;<br class="gmail_msg">
+  let TSFlags{8} = isSoloAin1;<br class="gmail_msg">
<br class="gmail_msg">
   // Predicated instructions.<br class="gmail_msg">
   bits<1> isPredicated = 0;<br class="gmail_msg">
-  let TSFlags{8} = isPredicated;<br class="gmail_msg">
+  let TSFlags{9} = isPredicated;<br class="gmail_msg">
   bits<1> isPredicatedFalse = 0;<br class="gmail_msg">
-  let TSFlags{9} = isPredicatedFalse;<br class="gmail_msg">
+  let TSFlags{10} = isPredicatedFalse;<br class="gmail_msg">
   bits<1> isPredicatedNew = 0;<br class="gmail_msg">
-  let TSFlags{10} = isPredicatedNew;<br class="gmail_msg">
+  let TSFlags{11} = isPredicatedNew;<br class="gmail_msg">
   bits<1> isPredicateLate = 0;<br class="gmail_msg">
-  let TSFlags{11} = isPredicateLate; // Late predicate producer insn.<br class="gmail_msg">
+  let TSFlags{12} = isPredicateLate; // Late predicate producer insn.<br class="gmail_msg">
<br class="gmail_msg">
   // New-value insn helper fields.<br class="gmail_msg">
   bits<1> isNewValue = 0;<br class="gmail_msg">
-  let TSFlags{12} = isNewValue; // New-value consumer insn.<br class="gmail_msg">
+  let TSFlags{13} = isNewValue; // New-value consumer insn.<br class="gmail_msg">
   bits<1> hasNewValue = 0;<br class="gmail_msg">
-  let TSFlags{13} = hasNewValue; // New-value producer insn.<br class="gmail_msg">
+  let TSFlags{14} = hasNewValue; // New-value producer insn.<br class="gmail_msg">
   bits<3> opNewValue = 0;<br class="gmail_msg">
-  let TSFlags{16-14} = opNewValue; // New-value produced operand.<br class="gmail_msg">
+  let TSFlags{17-15} = opNewValue; // New-value produced operand.<br class="gmail_msg">
   bits<1> isNVStorable = 0;<br class="gmail_msg">
-  let TSFlags{17} = isNVStorable; // Store that can become new-value store.<br class="gmail_msg">
+  let TSFlags{18} = isNVStorable; // Store that can become new-value store.<br class="gmail_msg">
   bits<1> isNVStore = 0;<br class="gmail_msg">
-  let TSFlags{18} = isNVStore; // New-value store insn.<br class="gmail_msg">
+  let TSFlags{19} = isNVStore; // New-value store insn.<br class="gmail_msg">
   bits<1> isCVLoadable = 0;<br class="gmail_msg">
-  let TSFlags{19} = isCVLoadable; // Load that can become cur-value load.<br class="gmail_msg">
+  let TSFlags{20} = isCVLoadable; // Load that can become cur-value load.<br class="gmail_msg">
   bits<1> isCVLoad = 0;<br class="gmail_msg">
-  let TSFlags{20} = isCVLoad; // Cur-value load insn.<br class="gmail_msg">
+  let TSFlags{21} = isCVLoad; // Cur-value load insn.<br class="gmail_msg">
<br class="gmail_msg">
   // Immediate extender helper fields.<br class="gmail_msg">
   bits<1> isExtendable = 0;<br class="gmail_msg">
-  let TSFlags{21} = isExtendable; // Insn may be extended.<br class="gmail_msg">
+  let TSFlags{22} = isExtendable; // Insn may be extended.<br class="gmail_msg">
   bits<1> isExtended = 0;<br class="gmail_msg">
-  let TSFlags{22} = isExtended; // Insn must be extended.<br class="gmail_msg">
+  let TSFlags{23} = isExtended; // Insn must be extended.<br class="gmail_msg">
   bits<3> opExtendable = 0;<br class="gmail_msg">
-  let TSFlags{25-23} = opExtendable; // Which operand may be extended.<br class="gmail_msg">
+  let TSFlags{26-24} = opExtendable; // Which operand may be extended.<br class="gmail_msg">
   bits<1> isExtentSigned = 0;<br class="gmail_msg">
-  let TSFlags{26} = isExtentSigned; // Signed or unsigned range.<br class="gmail_msg">
+  let TSFlags{27} = isExtentSigned; // Signed or unsigned range.<br class="gmail_msg">
   bits<5> opExtentBits = 0;<br class="gmail_msg">
-  let TSFlags{31-27} = opExtentBits; //Number of bits of range before extending.<br class="gmail_msg">
+  let TSFlags{32-28} = opExtentBits; //Number of bits of range before extending.<br class="gmail_msg">
   bits<2> opExtentAlign = 0;<br class="gmail_msg">
-  let TSFlags{33-32} = opExtentAlign; // Alignment exponent before extending.<br class="gmail_msg">
+  let TSFlags{34-33} = opExtentAlign; // Alignment exponent before extending.<br class="gmail_msg">
<br class="gmail_msg">
   // If an instruction is valid on a subtarget, set the corresponding<br class="gmail_msg">
   // bit from validSubTargets.<br class="gmail_msg">
   // By default, instruction is valid on all subtargets.<br class="gmail_msg">
   SubTarget validSubTargets = HasAnySubT;<br class="gmail_msg">
-  let TSFlags{39-34} = validSubTargets.Value;<br class="gmail_msg">
+  let TSFlags{40-35} = validSubTargets.Value;<br class="gmail_msg">
<br class="gmail_msg">
   // Addressing mode for load/store instructions.<br class="gmail_msg">
   AddrModeType addrMode = NoAddrMode;<br class="gmail_msg">
-  let TSFlags{42-40} = addrMode.Value;<br class="gmail_msg">
+  let TSFlags{43-41} = addrMode.Value;<br class="gmail_msg">
<br class="gmail_msg">
   // Memory access size for mem access instructions (load/store)<br class="gmail_msg">
   MemAccessSize accessSize = NoMemAccess;<br class="gmail_msg">
-  let TSFlags{46-43} = accessSize.Value;<br class="gmail_msg">
+  let TSFlags{47-44} = accessSize.Value;<br class="gmail_msg">
<br class="gmail_msg">
   bits<1> isTaken = 0;<br class="gmail_msg">
-  let TSFlags {47} = isTaken; // Branch prediction.<br class="gmail_msg">
+  let TSFlags {48} = isTaken; // Branch prediction.<br class="gmail_msg">
<br class="gmail_msg">
   bits<1> isFP = 0;<br class="gmail_msg">
-  let TSFlags {48} = isFP; // Floating-point.<br class="gmail_msg">
+  let TSFlags {49} = isFP; // Floating-point.<br class="gmail_msg">
<br class="gmail_msg">
   bits<1> hasNewValue2 = 0;<br class="gmail_msg">
-  let TSFlags{50} = hasNewValue2; // Second New-value producer insn.<br class="gmail_msg">
+  let TSFlags{51} = hasNewValue2; // Second New-value producer insn.<br class="gmail_msg">
   bits<3> opNewValue2 = 0;<br class="gmail_msg">
-  let TSFlags{53-51} = opNewValue2; // Second New-value produced operand.<br class="gmail_msg">
+  let TSFlags{54-52} = opNewValue2; // Second New-value produced operand.<br class="gmail_msg">
<br class="gmail_msg">
   bits<1> isAccumulator = 0;<br class="gmail_msg">
-  let TSFlags{54} = isAccumulator;<br class="gmail_msg">
+  let TSFlags{55} = isAccumulator;<br class="gmail_msg">
<br class="gmail_msg">
   bit cofMax1 = 0;<br class="gmail_msg">
   let TSFlags{60} = cofMax1;<br class="gmail_msg">
@@ -200,6 +200,7 @@ class InstHexagon<dag outs, dag ins, str<br class="gmail_msg">
   let NValueST = !if(isNVStore, "true", "false");<br class="gmail_msg">
   let isNT = !if(isNonTemporal, "true", "false");<br class="gmail_msg">
<br class="gmail_msg">
+  let hasSideEffects = 0;<br class="gmail_msg">
   // *** Must match MCTargetDesc/HexagonBaseInfo.h ***<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/HexagonInstrFormatsV4.td<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrFormatsV4.td?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrFormatsV4.td?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/HexagonInstrFormatsV4.td (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/HexagonInstrFormatsV4.td Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -18,7 +18,7 @@<br class="gmail_msg">
 //----------------------------------------------------------------------------//<br class="gmail_msg">
<br class="gmail_msg">
 def TypeV4LDST   : IType<9>;<br class="gmail_msg">
-def TypeNV       : IType<10>;<br class="gmail_msg">
+def TypeNCJ      : IType<10>;<br class="gmail_msg">
 def TypeDUPLEX   : IType<11>;<br class="gmail_msg">
 def TypeCJ       : IType<12>;<br class="gmail_msg">
 def TypeEXTENDER   : IType<30>;<br class="gmail_msg">
@@ -61,7 +61,7 @@ class InstDuplex<bits<4> iClass, list<da<br class="gmail_msg">
<br class="gmail_msg">
   // *** Must match MCTargetDesc/HexagonBaseInfo.h ***<br class="gmail_msg">
<br class="gmail_msg">
-  let TSFlags{4-0} = Type.Value;<br class="gmail_msg">
+  let TSFlags{5-0} = Type.Value;<br class="gmail_msg">
<br class="gmail_msg">
   // Predicated instructions.<br class="gmail_msg">
   bits<1> isPredicated = 0;<br class="gmail_msg">
@@ -107,7 +107,7 @@ class InstDuplex<bits<4> iClass, list<da<br class="gmail_msg">
 //<br class="gmail_msg">
 class NVInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],<br class="gmail_msg">
              string cstr = "", InstrItinClass itin = NCJ_tc_3or4stall_SLOT0><br class="gmail_msg">
-  : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeNV>, OpcodeHexagon;<br class="gmail_msg">
+  : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeNCJ>, OpcodeHexagon;<br class="gmail_msg">
<br class="gmail_msg">
 class NVInst_V4<dag outs, dag ins, string asmstr, list<dag> pattern = [],<br class="gmail_msg">
                 string cstr = "", InstrItinClass itin = NCJ_tc_3or4stall_SLOT0><br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -9,10 +9,10 @@<br class="gmail_msg">
<br class="gmail_msg">
 #include "Hexagon.h"<br class="gmail_msg">
 #include "HexagonFixupKinds.h"<br class="gmail_msg">
-#include "HexagonMCTargetDesc.h"<br class="gmail_msg">
 #include "MCTargetDesc/HexagonBaseInfo.h"<br class="gmail_msg">
 #include "MCTargetDesc/HexagonMCChecker.h"<br class="gmail_msg">
 #include "MCTargetDesc/HexagonMCCodeEmitter.h"<br class="gmail_msg">
+#include "MCTargetDesc/HexagonMCTargetDesc.h"<br class="gmail_msg">
 #include "MCTargetDesc/HexagonMCInstrInfo.h"<br class="gmail_msg">
 #include "MCTargetDesc/HexagonMCShuffler.h"<br class="gmail_msg">
 #include "llvm/MC/MCAsmBackend.h"<br class="gmail_msg">
@@ -59,9 +59,10 @@ class HexagonAsmBackend : public MCAsmBa<br class="gmail_msg">
     RF.getFixups() = Fixups;<br class="gmail_msg">
   }<br class="gmail_msg">
 public:<br class="gmail_msg">
-  HexagonAsmBackend(const Target &T, uint8_t OSABI, StringRef CPU) :<br class="gmail_msg">
-    OSABI(OSABI), MCII (T.createMCInstrInfo()), RelaxTarget(new MCInst *),<br class="gmail_msg">
-    Extender(nullptr) {}<br class="gmail_msg">
+  HexagonAsmBackend(const Target &T, const Triple &TT, uint8_t OSABI,<br class="gmail_msg">
+      StringRef CPU) :<br class="gmail_msg">
+      OSABI(OSABI), CPU(CPU), MCII(T.createMCInstrInfo()),<br class="gmail_msg">
+      RelaxTarget(new MCInst *), Extender(nullptr) {}<br class="gmail_msg">
<br class="gmail_msg">
   MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {<br class="gmail_msg">
     return createHexagonELFObjectWriter(OS, OSABI, CPU);<br class="gmail_msg">
@@ -88,101 +89,101 @@ public:<br class="gmail_msg">
       // This table *must* be in same the order of fixup_* kinds in<br class="gmail_msg">
       // HexagonFixupKinds.h.<br class="gmail_msg">
       //<br class="gmail_msg">
-      // namei                          offset  bits  flags<br class="gmail_msg">
-      { "fixup_Hexagon_B22_PCREL",        0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_B15_PCREL",        0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_B7_PCREL",         0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_LO16",             0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_HI16",             0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_32",               0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_16",               0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_8",                0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GPREL16_0",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GPREL16_1",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GPREL16_2",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GPREL16_3",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_HL16",             0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_B13_PCREL",        0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_B9_PCREL",         0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_B32_PCREL_X",      0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_32_6_X",           0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_B22_PCREL_X",      0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_B15_PCREL_X",      0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_B13_PCREL_X",      0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_B9_PCREL_X",       0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_B7_PCREL_X",       0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_16_X",             0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_12_X",             0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_11_X",             0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_10_X",             0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_9_X",              0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_8_X",              0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_7_X",              0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_6_X",              0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_32_PCREL",         0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_COPY",             0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GLOB_DAT",         0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_JMP_SLOT",         0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_RELATIVE",         0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_PLT_B22_PCREL",    0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_GOTREL_LO16",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GOTREL_HI16",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GOTREL_32",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GOT_LO16",         0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GOT_HI16",         0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GOT_32",           0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GOT_16",           0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_DTPMOD_32",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_DTPREL_LO16",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_DTPREL_HI16",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_DTPREL_32",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_DTPREL_16",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GD_PLT_B22_PCREL", 0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_LD_PLT_B22_PCREL", 0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_GD_GOT_LO16",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GD_GOT_HI16",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GD_GOT_32",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GD_GOT_16",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_LD_GOT_LO16",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_LD_GOT_HI16",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_LD_GOT_32",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_LD_GOT_16",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_LO16",          0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_HI16",          0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_32",            0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_16",            0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_GOT_LO16",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_GOT_HI16",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_GOT_32",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_GOT_16",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_TPREL_LO16",       0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_TPREL_HI16",       0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_TPREL_32",         0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_TPREL_16",         0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_6_PCREL_X",        0,    32,   MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
-      { "fixup_Hexagon_GOTREL_32_6_X",    0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GOTREL_16_X",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GOTREL_11_X",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GOT_32_6_X",       0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GOT_16_X",         0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GOT_11_X",         0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_DTPREL_32_6_X",    0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_DTPREL_16_X",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_DTPREL_11_X",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GD_GOT_32_6_X",    0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GD_GOT_16_X",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_GD_GOT_11_X",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_LD_GOT_32_6_X",    0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_LD_GOT_16_X",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_LD_GOT_11_X",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_32_6_X",        0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_16_X",          0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_GOT_32_6_X",    0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_GOT_16_X",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_IE_GOT_11_X",      0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_TPREL_32_6_X",     0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_TPREL_16_X",       0,    32,   0 },<br class="gmail_msg">
-      { "fixup_Hexagon_TPREL_11_X",       0,    32,   0 }<br class="gmail_msg">
+      // namei                          offset  bits    flags<br class="gmail_msg">
+      { "fixup_Hexagon_B22_PCREL",      0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_B15_PCREL",      0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_B7_PCREL",       0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_LO16",           0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_HI16",           0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_32",             0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_16",             0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_8",              0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GPREL16_0",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GPREL16_1",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GPREL16_2",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GPREL16_3",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_HL16",           0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_B13_PCREL",      0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_B9_PCREL",       0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_B32_PCREL_X",    0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_32_6_X",         0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_B22_PCREL_X",    0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_B15_PCREL_X",    0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_B13_PCREL_X",    0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_B9_PCREL_X",     0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_B7_PCREL_X",     0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_16_X",           0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_12_X",           0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_11_X",           0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_10_X",           0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_9_X",            0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_8_X",            0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_7_X",            0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_6_X",            0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_32_PCREL",       0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_COPY",           0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GLOB_DAT",       0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_JMP_SLOT",       0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_RELATIVE",       0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_PLT_B22_PCREL",  0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_GOTREL_LO16",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GOTREL_HI16",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GOTREL_32",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GOT_LO16",       0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GOT_HI16",       0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GOT_32",         0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GOT_16",         0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_DTPMOD_32",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_DTPREL_LO16",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_DTPREL_HI16",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_DTPREL_32",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_DTPREL_16",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GD_PLT_B22_PCREL",0,     32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_LD_PLT_B22_PCREL",0,     32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_GD_GOT_LO16",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GD_GOT_HI16",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GD_GOT_32",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GD_GOT_16",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_LD_GOT_LO16",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_LD_GOT_HI16",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_LD_GOT_32",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_LD_GOT_16",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_LO16",        0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_HI16",        0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_32",          0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_16",          0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_GOT_LO16",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_GOT_HI16",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_GOT_32",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_GOT_16",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_TPREL_LO16",     0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_TPREL_HI16",     0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_TPREL_32",       0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_TPREL_16",       0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_6_PCREL_X",      0,      32,     MCFixupKindInfo::FKF_IsPCRel },<br class="gmail_msg">
+      { "fixup_Hexagon_GOTREL_32_6_X",  0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GOTREL_16_X",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GOTREL_11_X",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GOT_32_6_X",     0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GOT_16_X",       0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GOT_11_X",       0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_DTPREL_32_6_X",  0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_DTPREL_16_X",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_DTPREL_11_X",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GD_GOT_32_6_X",  0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GD_GOT_16_X",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_GD_GOT_11_X",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_LD_GOT_32_6_X",  0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_LD_GOT_16_X",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_LD_GOT_11_X",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_32_6_X",      0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_16_X",        0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_GOT_32_6_X",  0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_GOT_16_X",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_IE_GOT_11_X",    0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_TPREL_32_6_X",   0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_TPREL_16_X",     0,      32,     0 },<br class="gmail_msg">
+      { "fixup_Hexagon_TPREL_11_X",     0,      32,     0 }<br class="gmail_msg">
     };<br class="gmail_msg">
<br class="gmail_msg">
     if (Kind < FirstTargetFixupKind)<br class="gmail_msg">
@@ -526,7 +527,7 @@ public:<br class="gmail_msg">
     if (llvm::HexagonMCInstrInfo::getType(*MCII, HMI) == HexagonII::TypeJ ||<br class="gmail_msg">
         (llvm::HexagonMCInstrInfo::getType(*MCII, HMI) == HexagonII::TypeCJ &&<br class="gmail_msg">
          MCID.isBranch()) ||<br class="gmail_msg">
-        (llvm::HexagonMCInstrInfo::getType(*MCII, HMI) == HexagonII::TypeNV &&<br class="gmail_msg">
+        (llvm::HexagonMCInstrInfo::getType(*MCII, HMI) == HexagonII::TypeNCJ &&<br class="gmail_msg">
          MCID.isBranch()) ||<br class="gmail_msg">
         (llvm::HexagonMCInstrInfo::getType(*MCII, HMI) == HexagonII::TypeCR &&<br class="gmail_msg">
          HMI.getOpcode() != Hexagon::C4_addipc))<br class="gmail_msg">
@@ -723,7 +724,8 @@ public:<br class="gmail_msg">
                   Size = 0;<br class="gmail_msg">
                 }<br class="gmail_msg">
               }<br class="gmail_msg">
-              bool Error = HexagonMCShuffle(*MCII, RF.getSubtargetInfo(), Inst);<br class="gmail_msg">
+              bool Error = HexagonMCShuffle(true, *MCII, RF.getSubtargetInfo(),<br class="gmail_msg">
+                                            Inst);<br class="gmail_msg">
               //assert(!Error);<br class="gmail_msg">
               (void)Error;<br class="gmail_msg">
               ReplaceInstruction(Asm.getEmitter(), RF, Inst);<br class="gmail_msg">
@@ -738,15 +740,17 @@ public:<br class="gmail_msg">
       }<br class="gmail_msg">
     }<br class="gmail_msg">
   }<br class="gmail_msg">
-};<br class="gmail_msg">
-} // end anonymous namespace<br class="gmail_msg">
+}; // class HexagonAsmBackend<br class="gmail_msg">
<br class="gmail_msg">
-namespace llvm {<br class="gmail_msg">
-MCAsmBackend *createHexagonAsmBackend(Target const &T,<br class="gmail_msg">
+} // namespace<br class="gmail_msg">
+<br class="gmail_msg">
+// MCAsmBackend<br class="gmail_msg">
+MCAsmBackend *llvm::createHexagonAsmBackend(Target const &T,<br class="gmail_msg">
                                       MCRegisterInfo const & /*MRI*/,<br class="gmail_msg">
                                       const Triple &TT, StringRef CPU,<br class="gmail_msg">
                                       const MCTargetOptions &Options) {<br class="gmail_msg">
   uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT.getOS());<br class="gmail_msg">
-  return new HexagonAsmBackend(T, OSABI, CPU);<br class="gmail_msg">
-}<br class="gmail_msg">
+<br class="gmail_msg">
+  StringRef CPUString = Hexagon_MC::selectHexagonCPU(TT, CPU);<br class="gmail_msg">
+  return new HexagonAsmBackend(T, TT, OSABI, CPUString);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -42,7 +42,7 @@ namespace HexagonII {<br class="gmail_msg">
     TypeSYSTEM  = 7,<br class="gmail_msg">
     TypeXTYPE   = 8,<br class="gmail_msg">
     TypeV4LDST  = 9,<br class="gmail_msg">
-    TypeNV      = 10,<br class="gmail_msg">
+    TypeNCJ     = 10,<br class="gmail_msg">
     TypeDUPLEX  = 11,<br class="gmail_msg">
     TypeCJ      = 12,<br class="gmail_msg">
     TypeCVI_FIRST     = 13,<br class="gmail_msg">
@@ -68,16 +68,10 @@ namespace HexagonII {<br class="gmail_msg">
   };<br class="gmail_msg">
<br class="gmail_msg">
   enum SubTarget {<br class="gmail_msg">
-    HasV2SubT     = 0xf,<br class="gmail_msg">
-    HasV2SubTOnly = 0x1,<br class="gmail_msg">
-    NoV2SubT      = 0x0,<br class="gmail_msg">
-    HasV3SubT     = 0xe,<br class="gmail_msg">
-    HasV3SubTOnly = 0x2,<br class="gmail_msg">
-    NoV3SubT      = 0x1,<br class="gmail_msg">
-    HasV4SubT     = 0xc,<br class="gmail_msg">
-    NoV4SubT      = 0x3,<br class="gmail_msg">
-    HasV5SubT     = 0x8,<br class="gmail_msg">
-    NoV5SubT      = 0x7<br class="gmail_msg">
+    HasV4SubT     = 0x3f,<br class="gmail_msg">
+    HasV5SubT     = 0x3e,<br class="gmail_msg">
+    HasV55SubT    = 0x3c,<br class="gmail_msg">
+    HasV60SubT    = 0x38,<br class="gmail_msg">
   };<br class="gmail_msg">
<br class="gmail_msg">
   enum AddrMode {<br class="gmail_msg">
@@ -107,102 +101,101 @@ namespace HexagonII {<br class="gmail_msg">
   enum {<br class="gmail_msg">
     // This 5-bit field describes the insn type.<br class="gmail_msg">
     TypePos  = 0,<br class="gmail_msg">
-    TypeMask = 0x1f,<br class="gmail_msg">
+    TypeMask = 0x3f,<br class="gmail_msg">
<br class="gmail_msg">
     // Solo instructions.<br class="gmail_msg">
-    SoloPos  = 5,<br class="gmail_msg">
+    SoloPos  = 6,<br class="gmail_msg">
     SoloMask = 0x1,<br class="gmail_msg">
     // Packed only with A or X-type instructions.<br class="gmail_msg">
-    SoloAXPos  = 6,<br class="gmail_msg">
+    SoloAXPos  = 7,<br class="gmail_msg">
     SoloAXMask = 0x1,<br class="gmail_msg">
     // Only A-type instruction in first slot or nothing.<br class="gmail_msg">
-    SoloAin1Pos  = 7,<br class="gmail_msg">
+    SoloAin1Pos  = 8,<br class="gmail_msg">
     SoloAin1Mask = 0x1,<br class="gmail_msg">
<br class="gmail_msg">
     // Predicated instructions.<br class="gmail_msg">
-    PredicatedPos  = 8,<br class="gmail_msg">
+    PredicatedPos  = 9,<br class="gmail_msg">
     PredicatedMask = 0x1,<br class="gmail_msg">
-    PredicatedFalsePos  = 9,<br class="gmail_msg">
+    PredicatedFalsePos  = 10,<br class="gmail_msg">
     PredicatedFalseMask = 0x1,<br class="gmail_msg">
-    PredicatedNewPos  = 10,<br class="gmail_msg">
+    PredicatedNewPos  = 11,<br class="gmail_msg">
     PredicatedNewMask = 0x1,<br class="gmail_msg">
-    PredicateLatePos  = 11,<br class="gmail_msg">
+    PredicateLatePos  = 12,<br class="gmail_msg">
     PredicateLateMask = 0x1,<br class="gmail_msg">
<br class="gmail_msg">
     // New-Value consumer instructions.<br class="gmail_msg">
-    NewValuePos  = 12,<br class="gmail_msg">
+    NewValuePos  = 13,<br class="gmail_msg">
     NewValueMask = 0x1,<br class="gmail_msg">
     // New-Value producer instructions.<br class="gmail_msg">
-    hasNewValuePos  = 13,<br class="gmail_msg">
+    hasNewValuePos  = 14,<br class="gmail_msg">
     hasNewValueMask = 0x1,<br class="gmail_msg">
     // Which operand consumes or produces a new value.<br class="gmail_msg">
-    NewValueOpPos  = 14,<br class="gmail_msg">
+    NewValueOpPos  = 15,<br class="gmail_msg">
     NewValueOpMask = 0x7,<br class="gmail_msg">
     // Stores that can become new-value stores.<br class="gmail_msg">
-    mayNVStorePos  = 17,<br class="gmail_msg">
+    mayNVStorePos  = 18,<br class="gmail_msg">
     mayNVStoreMask = 0x1,<br class="gmail_msg">
     // New-value store instructions.<br class="gmail_msg">
-    NVStorePos  = 18,<br class="gmail_msg">
+    NVStorePos  = 19,<br class="gmail_msg">
     NVStoreMask = 0x1,<br class="gmail_msg">
     // Loads that can become current-value loads.<br class="gmail_msg">
-    mayCVLoadPos  = 19,<br class="gmail_msg">
+    mayCVLoadPos  = 20,<br class="gmail_msg">
     mayCVLoadMask = 0x1,<br class="gmail_msg">
     // Current-value load instructions.<br class="gmail_msg">
-    CVLoadPos  = 20,<br class="gmail_msg">
+    CVLoadPos  = 21,<br class="gmail_msg">
     CVLoadMask = 0x1,<br class="gmail_msg">
<br class="gmail_msg">
     // Extendable insns.<br class="gmail_msg">
-    ExtendablePos  = 21,<br class="gmail_msg">
+    ExtendablePos  = 22,<br class="gmail_msg">
     ExtendableMask = 0x1,<br class="gmail_msg">
     // Insns must be extended.<br class="gmail_msg">
-    ExtendedPos  = 22,<br class="gmail_msg">
+    ExtendedPos  = 23,<br class="gmail_msg">
     ExtendedMask = 0x1,<br class="gmail_msg">
     // Which operand may be extended.<br class="gmail_msg">
-    ExtendableOpPos  = 23,<br class="gmail_msg">
+    ExtendableOpPos  = 24,<br class="gmail_msg">
     ExtendableOpMask = 0x7,<br class="gmail_msg">
     // Signed or unsigned range.<br class="gmail_msg">
-    ExtentSignedPos  = 26,<br class="gmail_msg">
+    ExtentSignedPos  = 27,<br class="gmail_msg">
     ExtentSignedMask = 0x1,<br class="gmail_msg">
     // Number of bits of range before extending operand.<br class="gmail_msg">
-    ExtentBitsPos  = 27,<br class="gmail_msg">
+    ExtentBitsPos  = 28,<br class="gmail_msg">
     ExtentBitsMask = 0x1f,<br class="gmail_msg">
     // Alignment power-of-two before extending operand.<br class="gmail_msg">
-    ExtentAlignPos  = 32,<br class="gmail_msg">
+    ExtentAlignPos  = 33,<br class="gmail_msg">
     ExtentAlignMask = 0x3,<br class="gmail_msg">
<br class="gmail_msg">
     // Valid subtargets<br class="gmail_msg">
-    validSubTargetPos  = 34,<br class="gmail_msg">
-    validSubTargetMask = 0xf,<br class="gmail_msg">
+    validSubTargetPos  = 35,<br class="gmail_msg">
+    validSubTargetMask = 0x3f,<br class="gmail_msg">
<br class="gmail_msg">
     // Addressing mode for load/store instructions.<br class="gmail_msg">
-    AddrModePos  = 40,<br class="gmail_msg">
+    AddrModePos  = 41,<br class="gmail_msg">
     AddrModeMask = 0x7,<br class="gmail_msg">
     // Access size for load/store instructions.<br class="gmail_msg">
-    MemAccessSizePos = 43,<br class="gmail_msg">
+    MemAccessSizePos = 44,<br class="gmail_msg">
     MemAccesSizeMask = 0xf,<br class="gmail_msg">
<br class="gmail_msg">
     // Branch predicted taken.<br class="gmail_msg">
-    TakenPos = 47,<br class="gmail_msg">
+    TakenPos = 48,<br class="gmail_msg">
     TakenMask = 0x1,<br class="gmail_msg">
<br class="gmail_msg">
     // Floating-point instructions.<br class="gmail_msg">
-    FPPos  = 48,<br class="gmail_msg">
+    FPPos  = 49,<br class="gmail_msg">
     FPMask = 0x1,<br class="gmail_msg">
<br class="gmail_msg">
     // New-Value producer-2 instructions.<br class="gmail_msg">
-    hasNewValuePos2  = 50,<br class="gmail_msg">
+    hasNewValuePos2  = 51,<br class="gmail_msg">
     hasNewValueMask2 = 0x1,<br class="gmail_msg">
-<br class="gmail_msg">
     // Which operand consumes or produces a new value.<br class="gmail_msg">
-    NewValueOpPos2  = 51,<br class="gmail_msg">
+    NewValueOpPos2  = 52,<br class="gmail_msg">
     NewValueOpMask2 = 0x7,<br class="gmail_msg">
<br class="gmail_msg">
     // Accumulator instructions.<br class="gmail_msg">
-    AccumulatorPos = 54,<br class="gmail_msg">
+    AccumulatorPos = 55,<br class="gmail_msg">
     AccumulatorMask = 0x1,<br class="gmail_msg">
<br class="gmail_msg">
     // Complex XU, prevent xu competition by preferring slot3<br class="gmail_msg">
-    PrefersSlot3Pos = 55,<br class="gmail_msg">
+    PrefersSlot3Pos = 56,<br class="gmail_msg">
     PrefersSlot3Mask = 0x1,<br class="gmail_msg">
<br class="gmail_msg">
     CofMax1Pos = 60,<br class="gmail_msg">
@@ -217,8 +210,6 @@ namespace HexagonII {<br class="gmail_msg">
     // Hexagon Specific MachineOperand flags.<br class="gmail_msg">
     MO_NO_FLAG,<br class="gmail_msg">
<br class="gmail_msg">
-    HMOTF_ConstExtended = 1,<br class="gmail_msg">
-<br class="gmail_msg">
     /// MO_PCREL - On a symbol operand, indicates a PC-relative relocation<br class="gmail_msg">
     /// Used for computing a global address for PIC compilations<br class="gmail_msg">
     MO_PCREL,<br class="gmail_msg">
@@ -250,7 +241,13 @@ namespace HexagonII {<br class="gmail_msg">
<br class="gmail_msg">
     // MO_TPREL - indicates relocation for TLS<br class="gmail_msg">
     // local Executable method<br class="gmail_msg">
-    MO_TPREL<br class="gmail_msg">
+    MO_TPREL,<br class="gmail_msg">
+<br class="gmail_msg">
+    // HMOTF_ConstExtended<br class="gmail_msg">
+    // Addendum to abovem, indicates a const extended op<br class="gmail_msg">
+    // Can be used as a mask.<br class="gmail_msg">
+    HMOTF_ConstExtended = 0x80<br class="gmail_msg">
+<br class="gmail_msg">
   };<br class="gmail_msg">
<br class="gmail_msg">
   // Hexagon Sub-instruction classes.<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.cpp?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.cpp?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.cpp (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.cpp Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -23,6 +23,7 @@ HexagonMCAsmInfo::HexagonMCAsmInfo(const<br class="gmail_msg">
   Data32bitsDirective = "\t.word\t";<br class="gmail_msg">
   Data64bitsDirective = nullptr;  // .xword is only supported by V9.<br class="gmail_msg">
   CommentString = "//";<br class="gmail_msg">
+  SupportsDebugInformation = true;<br class="gmail_msg">
<br class="gmail_msg">
   LCOMMDirectiveAlignmentType = LCOMM::ByteAlignment;<br class="gmail_msg">
   InlineAsmStart = "# InlineAsm Start";<br class="gmail_msg">
@@ -30,8 +31,8 @@ HexagonMCAsmInfo::HexagonMCAsmInfo(const<br class="gmail_msg">
   ZeroDirective = "\t.space\t";<br class="gmail_msg">
   AscizDirective = "\t.string\t";<br class="gmail_msg">
<br class="gmail_msg">
-  SupportsDebugInformation = true;<br class="gmail_msg">
   MinInstAlignment = 4;<br class="gmail_msg">
   UsesELFSectionDirectiveForBSS  = true;<br class="gmail_msg">
   ExceptionsType = ExceptionHandling::DwarfCFI;<br class="gmail_msg">
+  UseLogicalShr = false;<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.cpp?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.cpp?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.cpp (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.cpp Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -47,12 +47,40 @@ void HexagonMCChecker::init() {<br class="gmail_msg">
   if (HexagonMCInstrInfo::isBundle(MCB))<br class="gmail_msg">
     // Unfurl a bundle.<br class="gmail_msg">
     for (auto const&I : HexagonMCInstrInfo::bundleInstructions(MCB)) {<br class="gmail_msg">
-      init(*I.getInst());<br class="gmail_msg">
+      MCInst const &Inst = *I.getInst();<br class="gmail_msg">
+      if (HexagonMCInstrInfo::isDuplex(MCII, Inst)) {<br class="gmail_msg">
+        init(*Inst.getOperand(0).getInst());<br class="gmail_msg">
+        init(*Inst.getOperand(1).getInst());<br class="gmail_msg">
+      }<br class="gmail_msg">
+      else<br class="gmail_msg">
+        init(Inst);<br class="gmail_msg">
     }<br class="gmail_msg">
   else<br class="gmail_msg">
     init(MCB);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
+void HexagonMCChecker::initReg(MCInst const &MCI, unsigned R, unsigned &PredReg,<br class="gmail_msg">
+                               bool &isTrue) {<br class="gmail_msg">
+  if (HexagonMCInstrInfo::isPredicated(MCII, MCI) && isPredicateRegister(R)) {<br class="gmail_msg">
+    // Note an used predicate register.<br class="gmail_msg">
+    PredReg = R;<br class="gmail_msg">
+    isTrue = HexagonMCInstrInfo::isPredicatedTrue(MCII, MCI);<br class="gmail_msg">
+<br class="gmail_msg">
+    // Note use of new predicate register.<br class="gmail_msg">
+    if (HexagonMCInstrInfo::isPredicatedNew(MCII, MCI))<br class="gmail_msg">
+      NewPreds.insert(PredReg);<br class="gmail_msg">
+  }<br class="gmail_msg">
+  else<br class="gmail_msg">
+    // Note register use.  Super-registers are not tracked directly,<br class="gmail_msg">
+    // but their components.<br class="gmail_msg">
+    for(MCRegAliasIterator SRI(R, &RI, !MCSubRegIterator(R, &RI).isValid());<br class="gmail_msg">
+        SRI.isValid();<br class="gmail_msg">
+        ++SRI)<br class="gmail_msg">
+      if (!MCSubRegIterator(*SRI, &RI).isValid())<br class="gmail_msg">
+        // Skip super-registers used indirectly.<br class="gmail_msg">
+        Uses.insert(*SRI);<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
 void HexagonMCChecker::init(MCInst const& MCI) {<br class="gmail_msg">
   const MCInstrDesc& MCID = HexagonMCInstrInfo::getDesc(MCII, MCI);<br class="gmail_msg">
   unsigned PredReg = Hexagon::NoRegister;<br class="gmail_msg">
@@ -60,28 +88,10 @@ void HexagonMCChecker::init(MCInst const<br class="gmail_msg">
<br class="gmail_msg">
   // Get used registers.<br class="gmail_msg">
   for (unsigned i = MCID.getNumDefs(); i < MCID.getNumOperands(); ++i)<br class="gmail_msg">
-    if (MCI.getOperand(i).isReg()) {<br class="gmail_msg">
-      unsigned R = MCI.getOperand(i).getReg();<br class="gmail_msg">
-<br class="gmail_msg">
-      if (HexagonMCInstrInfo::isPredicated(MCII, MCI) && isPredicateRegister(R)) {<br class="gmail_msg">
-        // Note an used predicate register.<br class="gmail_msg">
-        PredReg = R;<br class="gmail_msg">
-        isTrue = HexagonMCInstrInfo::isPredicatedTrue(MCII, MCI);<br class="gmail_msg">
-<br class="gmail_msg">
-        // Note use of new predicate register.<br class="gmail_msg">
-        if (HexagonMCInstrInfo::isPredicatedNew(MCII, MCI))<br class="gmail_msg">
-          NewPreds.insert(PredReg);<br class="gmail_msg">
-      }<br class="gmail_msg">
-      else<br class="gmail_msg">
-        // Note register use.  Super-registers are not tracked directly,<br class="gmail_msg">
-        // but their components.<br class="gmail_msg">
-        for(MCRegAliasIterator SRI(R, &RI, !MCSubRegIterator(R, &RI).isValid());<br class="gmail_msg">
-           SRI.isValid();<br class="gmail_msg">
-           ++SRI)<br class="gmail_msg">
-         if (!MCSubRegIterator(*SRI, &RI).isValid())<br class="gmail_msg">
-           // Skip super-registers used indirectly.<br class="gmail_msg">
-           Uses.insert(*SRI);<br class="gmail_msg">
-    }<br class="gmail_msg">
+    if (MCI.getOperand(i).isReg())<br class="gmail_msg">
+      initReg(MCI, MCI.getOperand(i).getReg(), PredReg, isTrue);<br class="gmail_msg">
+  for (unsigned i = 0; i < MCID.getNumImplicitUses(); ++i)<br class="gmail_msg">
+    initReg(MCI, MCID.getImplicitUses()[i], PredReg, isTrue);<br class="gmail_msg">
<br class="gmail_msg">
   // Get implicit register definitions.<br class="gmail_msg">
   if (const MCPhysReg *ImpDef = MCID.getImplicitDefs())<br class="gmail_msg">
@@ -216,9 +226,11 @@ void HexagonMCChecker::init(MCInst const<br class="gmail_msg">
     if (!MCSubRegIterator(N, &RI).isValid()) {<br class="gmail_msg">
       // Super-registers cannot use new values.<br class="gmail_msg">
       if (MCID.isBranch())<br class="gmail_msg">
-        NewUses[N] = NewSense::Jmp(llvm::HexagonMCInstrInfo::getType(MCII, MCI) == HexagonII::TypeNV);<br class="gmail_msg">
+        NewUses[N] = NewSense::Jmp(<br class="gmail_msg">
+          llvm::HexagonMCInstrInfo::getType(MCII, MCI) == HexagonII::TypeNCJ);<br class="gmail_msg">
       else<br class="gmail_msg">
-        NewUses[N] = NewSense::Use(PredReg, HexagonMCInstrInfo::isPredicatedTrue(MCII, MCI));<br class="gmail_msg">
+        NewUses[N] = NewSense::Use(<br class="gmail_msg">
+          PredReg, HexagonMCInstrInfo::isPredicatedTrue(MCII, MCI));<br class="gmail_msg">
     }<br class="gmail_msg">
   }<br class="gmail_msg">
 }<br class="gmail_msg">
@@ -230,14 +242,18 @@ HexagonMCChecker::HexagonMCChecker(MCIns<br class="gmail_msg">
   init();<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
-bool HexagonMCChecker::check() {<br class="gmail_msg">
+bool HexagonMCChecker::check(bool FullCheck) {<br class="gmail_msg">
   bool chkB = checkBranches();<br class="gmail_msg">
   bool chkP = checkPredicates();<br class="gmail_msg">
   bool chkNV = checkNewValues();<br class="gmail_msg">
   bool chkR = checkRegisters();<br class="gmail_msg">
   bool chkS = checkSolo();<br class="gmail_msg">
-  bool chkSh = checkShuffle();<br class="gmail_msg">
-  bool chkSl = checkSlots();<br class="gmail_msg">
+  bool chkSh = true;<br class="gmail_msg">
+  if (FullCheck)<br class="gmail_msg">
+   chkSh = checkShuffle();<br class="gmail_msg">
+  bool chkSl = true;<br class="gmail_msg">
+  if (FullCheck)<br class="gmail_msg">
+   chkSl = checkSlots();<br class="gmail_msg">
   bool chk = chkB && chkP && chkNV && chkR && chkS && chkSh && chkSl;<br class="gmail_msg">
<br class="gmail_msg">
   return chk;<br class="gmail_msg">
@@ -504,7 +520,7 @@ bool HexagonMCChecker::checkShuffle() {<br class="gmail_msg">
   HexagonMCErrInfo errInfo;<br class="gmail_msg">
   // Branch info is lost when duplexing. The unduplexed insns must be<br class="gmail_msg">
   // checked and only branch errors matter for this case.<br class="gmail_msg">
-  HexagonMCShuffler MCS(MCII, STI, MCB);<br class="gmail_msg">
+  HexagonMCShuffler MCS(true, MCII, STI, MCB);<br class="gmail_msg">
   if (!MCS.check()) {<br class="gmail_msg">
     if (MCS.getError() == HexagonShuffler::SHUFFLE_ERROR_BRANCHES) {<br class="gmail_msg">
       errInfo.setError(HexagonMCErrInfo::CHECK_ERROR_SHUFFLE);<br class="gmail_msg">
@@ -513,7 +529,7 @@ bool HexagonMCChecker::checkShuffle() {<br class="gmail_msg">
       return false;<br class="gmail_msg">
     }<br class="gmail_msg">
   }<br class="gmail_msg">
-  HexagonMCShuffler MCSDX(MCII, STI, MCBDX);<br class="gmail_msg">
+  HexagonMCShuffler MCSDX(true, MCII, STI, MCBDX);<br class="gmail_msg">
   if (!MCSDX.check()) {<br class="gmail_msg">
     errInfo.setError(HexagonMCErrInfo::CHECK_ERROR_SHUFFLE);<br class="gmail_msg">
     errInfo.setShuffleError(MCSDX.getError());<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.h<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.h?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.h?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.h (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.h Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -168,6 +168,7 @@ class HexagonMCChecker {<br class="gmail_msg">
<br class="gmail_msg">
   void init();<br class="gmail_msg">
   void init(MCInst const&);<br class="gmail_msg">
+  void initReg(MCInst const &, unsigned, unsigned &PredReg, bool &isTrue);<br class="gmail_msg">
<br class="gmail_msg">
   // Checks performed.<br class="gmail_msg">
   bool checkBranches();<br class="gmail_msg">
@@ -177,6 +178,7 @@ class HexagonMCChecker {<br class="gmail_msg">
   bool checkSolo();<br class="gmail_msg">
   bool checkShuffle();<br class="gmail_msg">
   bool checkSlots();<br class="gmail_msg">
+  bool checkSize();<br class="gmail_msg">
<br class="gmail_msg">
   static void compoundRegisterMap(unsigned&);<br class="gmail_msg">
<br class="gmail_msg">
@@ -196,7 +198,7 @@ class HexagonMCChecker {<br class="gmail_msg">
   explicit HexagonMCChecker(MCInstrInfo const &MCII, MCSubtargetInfo const &STI, MCInst& mcb, MCInst &mcbdx,<br class="gmail_msg">
                             const MCRegisterInfo& ri);<br class="gmail_msg">
<br class="gmail_msg">
-  bool check();<br class="gmail_msg">
+  bool check(bool FullCheck = true);<br class="gmail_msg">
<br class="gmail_msg">
   /// add a new error/warning<br class="gmail_msg">
   void addErrInfo(HexagonMCErrInfo &err) { ErrInfoQ.push(err.s); };<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -65,9 +65,10 @@ uint32_t HexagonMCCodeEmitter::parseBits<br class="gmail_msg">
   return HexagonII::INST_PARSE_NOT_END;<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
-void HexagonMCCodeEmitter::encodeInstruction(MCInst const &MI, raw_ostream &OS,<br class="gmail_msg">
+/// EncodeInstruction - Emit the bundle<br class="gmail_msg">
+void HexagonMCCodeEmitter::encodeInstruction(const MCInst &MI, raw_ostream &OS,<br class="gmail_msg">
                                              SmallVectorImpl<MCFixup> &Fixups,<br class="gmail_msg">
-                                             MCSubtargetInfo const &STI) const {<br class="gmail_msg">
+                                             const MCSubtargetInfo &STI) const {<br class="gmail_msg">
   MCInst &HMB = const_cast<MCInst &>(MI);<br class="gmail_msg">
<br class="gmail_msg">
   assert(HexagonMCInstrInfo::isBundle(HMB));<br class="gmail_msg">
@@ -137,60 +138,7 @@ void HexagonMCCodeEmitter::EncodeSingleI<br class="gmail_msg">
       MI.getOpcode() <= Hexagon::DuplexIClassF) {<br class="gmail_msg">
     assert(Parse == HexagonII::INST_PARSE_DUPLEX &&<br class="gmail_msg">
            "Emitting duplex without duplex parse bits");<br class="gmail_msg">
-    unsigned dupIClass;<br class="gmail_msg">
-    switch (MI.getOpcode()) {<br class="gmail_msg">
-    case Hexagon::DuplexIClass0:<br class="gmail_msg">
-      dupIClass = 0;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClass1:<br class="gmail_msg">
-      dupIClass = 1;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClass2:<br class="gmail_msg">
-      dupIClass = 2;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClass3:<br class="gmail_msg">
-      dupIClass = 3;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClass4:<br class="gmail_msg">
-      dupIClass = 4;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClass5:<br class="gmail_msg">
-      dupIClass = 5;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClass6:<br class="gmail_msg">
-      dupIClass = 6;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClass7:<br class="gmail_msg">
-      dupIClass = 7;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClass8:<br class="gmail_msg">
-      dupIClass = 8;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClass9:<br class="gmail_msg">
-      dupIClass = 9;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClassA:<br class="gmail_msg">
-      dupIClass = 10;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClassB:<br class="gmail_msg">
-      dupIClass = 11;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClassC:<br class="gmail_msg">
-      dupIClass = 12;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClassD:<br class="gmail_msg">
-      dupIClass = 13;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClassE:<br class="gmail_msg">
-      dupIClass = 14;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    case Hexagon::DuplexIClassF:<br class="gmail_msg">
-      dupIClass = 15;<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    default:<br class="gmail_msg">
-      llvm_unreachable("Unimplemented DuplexIClass");<br class="gmail_msg">
-      break;<br class="gmail_msg">
-    }<br class="gmail_msg">
+    unsigned dupIClass = MI.getOpcode() - Hexagon::DuplexIClass0;<br class="gmail_msg">
     // 29 is the bit position.<br class="gmail_msg">
     // 0b1110 =0xE bits are masked off and down shifted by 1 bit.<br class="gmail_msg">
     // Last bit is moved to bit position 13<br class="gmail_msg">
@@ -390,7 +338,8 @@ unsigned HexagonMCCodeEmitter::getExprOp<br class="gmail_msg">
   int64_t Value;<br class="gmail_msg">
   if (ME->evaluateAsAbsolute(Value))<br class="gmail_msg">
     return Value;<br class="gmail_msg">
-  assert(ME->getKind() == MCExpr::SymbolRef || ME->getKind() == MCExpr::Binary);<br class="gmail_msg">
+  assert(ME->getKind() == MCExpr::SymbolRef ||<br class="gmail_msg">
+         ME->getKind() == MCExpr::Binary);<br class="gmail_msg">
   if (ME->getKind() == MCExpr::Binary) {<br class="gmail_msg">
     MCBinaryExpr const *Binary = cast<MCBinaryExpr>(ME);<br class="gmail_msg">
     getExprOpValue(MI, MO, Binary->getLHS(), Fixups, STI);<br class="gmail_msg">
@@ -523,7 +472,7 @@ unsigned HexagonMCCodeEmitter::getExprOp<br class="gmail_msg">
         else<br class="gmail_msg">
           if (MCID.mayStore() || MCID.mayLoad()) {<br class="gmail_msg">
             for (const MCPhysReg *ImpUses = MCID.getImplicitUses(); *ImpUses;<br class="gmail_msg">
-              ++ImpUses) {<br class="gmail_msg">
+                 ++ImpUses) {<br class="gmail_msg">
               if (*ImpUses != Hexagon::GP)<br class="gmail_msg">
                 continue;<br class="gmail_msg">
               switch (HexagonMCInstrInfo::getAccessSize(MCII, MI)) {<br class="gmail_msg">
@@ -543,8 +492,7 @@ unsigned HexagonMCCodeEmitter::getExprOp<br class="gmail_msg">
                 raise_relocation_error(bits, kind);<br class="gmail_msg">
               }<br class="gmail_msg">
             }<br class="gmail_msg">
-          }<br class="gmail_msg">
-          else<br class="gmail_msg">
+          } else<br class="gmail_msg">
             raise_relocation_error(bits, kind);<br class="gmail_msg">
         break;<br class="gmail_msg">
       }<br class="gmail_msg">
@@ -759,6 +707,13 @@ unsigned<br class="gmail_msg">
 HexagonMCCodeEmitter::getMachineOpValue(MCInst const &MI, MCOperand const &MO,<br class="gmail_msg">
                                         SmallVectorImpl<MCFixup> &Fixups,<br class="gmail_msg">
                                         MCSubtargetInfo const &STI) const {<br class="gmail_msg">
+  size_t OperandNumber = ~0U;<br class="gmail_msg">
+  for (unsigned i = 0, n = MI.getNumOperands(); i < n; ++i)<br class="gmail_msg">
+    if (&MI.getOperand(i) == &MO) {<br class="gmail_msg">
+      OperandNumber = i;<br class="gmail_msg">
+      break;<br class="gmail_msg">
+    }<br class="gmail_msg">
+  assert((OperandNumber != ~0U) && "Operand not found");<br class="gmail_msg">
<br class="gmail_msg">
   if (HexagonMCInstrInfo::isNewValue(MCII, MI) &&<br class="gmail_msg">
       &MO == &MI.getOperand(HexagonMCInstrInfo::getNewValueOp(MCII, MI))) {<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCCompound.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCCompound.cpp?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCCompound.cpp?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCCompound.cpp (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCCompound.cpp Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -14,6 +14,7 @@<br class="gmail_msg">
 #include "Hexagon.h"<br class="gmail_msg">
 #include "MCTargetDesc/HexagonBaseInfo.h"<br class="gmail_msg">
 #include "MCTargetDesc/HexagonMCInstrInfo.h"<br class="gmail_msg">
+#include "MCTargetDesc/HexagonMCShuffler.h"<br class="gmail_msg">
 #include "llvm/MC/MCContext.h"<br class="gmail_msg">
 #include "llvm/MC/MCInst.h"<br class="gmail_msg">
 #include "llvm/Support/Debug.h"<br class="gmail_msg">
@@ -396,7 +397,7 @@ static bool lookForCompound(MCInstrInfo<br class="gmail_msg">
 /// is found update the contents fo the bundle with the compound insn.<br class="gmail_msg">
 /// If a compound instruction is found then the bundle will have one<br class="gmail_msg">
 /// additional slot.<br class="gmail_msg">
-void HexagonMCInstrInfo::tryCompound(MCInstrInfo const &MCII,<br class="gmail_msg">
+void HexagonMCInstrInfo::tryCompound(MCInstrInfo const &MCII, MCSubtargetInfo const &STI,<br class="gmail_msg">
                                      MCContext &Context, MCInst &MCI) {<br class="gmail_msg">
   assert(HexagonMCInstrInfo::isBundle(MCI) &&<br class="gmail_msg">
          "Non-Bundle where Bundle expected");<br class="gmail_msg">
@@ -405,8 +406,23 @@ void HexagonMCInstrInfo::tryCompound(MCI<br class="gmail_msg">
   if (MCI.size() < 2)<br class="gmail_msg">
     return;<br class="gmail_msg">
<br class="gmail_msg">
+  bool StartedValid = llvm::HexagonMCShuffle(false, MCII, STI, MCI);<br class="gmail_msg">
+<br class="gmail_msg">
+  // Create a vector, needed to keep the order of jump instructions.<br class="gmail_msg">
+  MCInst CheckList(MCI);<br class="gmail_msg">
+<br class="gmail_msg">
   // Look for compounds until none are found, only update the bundle when<br class="gmail_msg">
   // a compound is found.<br class="gmail_msg">
-  while (lookForCompound(MCII, Context, MCI))<br class="gmail_msg">
-    ;<br class="gmail_msg">
+  while (lookForCompound(MCII, Context, CheckList)) {<br class="gmail_msg">
+    // Keep the original bundle around in case the shuffle fails.<br class="gmail_msg">
+    MCInst OriginalBundle(MCI);<br class="gmail_msg">
+<br class="gmail_msg">
+    // Need to update the bundle.<br class="gmail_msg">
+    MCI = CheckList;<br class="gmail_msg">
+<br class="gmail_msg">
+    if (StartedValid && !llvm::HexagonMCShuffle(false, MCII, STI, MCI)) {<br class="gmail_msg">
+      DEBUG(dbgs() << "Found ERROR\n");<br class="gmail_msg">
+      MCI = OriginalBundle;<br class="gmail_msg">
+    }<br class="gmail_msg">
+  }<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -15,6 +15,7 @@<br class="gmail_msg">
 #include "MCTargetDesc/HexagonMCInstrInfo.h"<br class="gmail_msg">
<br class="gmail_msg">
 #include "llvm/ADT/SmallVector.h"<br class="gmail_msg">
+#include "llvm/MC/MCSubtargetInfo.h"<br class="gmail_msg">
 #include "llvm/Support/Debug.h"<br class="gmail_msg">
 #include "llvm/Support/raw_ostream.h"<br class="gmail_msg">
<br class="gmail_msg">
@@ -262,6 +263,7 @@ unsigned HexagonMCInstrInfo::getDuplexCa<br class="gmail_msg">
   case Hexagon::EH_RETURN_JMPR:<br class="gmail_msg">
<br class="gmail_msg">
   case Hexagon::J2_jumpr:<br class="gmail_msg">
+  case Hexagon::PS_jmpret:<br class="gmail_msg">
     // jumpr r31<br class="gmail_msg">
     // Actual form JMPR %PC<imp-def>, %R31<imp-use>, %R0<imp-use,internal>.<br class="gmail_msg">
     DstReg = MCI.getOperand(0).getReg();<br class="gmail_msg">
@@ -275,6 +277,12 @@ unsigned HexagonMCInstrInfo::getDuplexCa<br class="gmail_msg">
   case Hexagon::J2_jumprfnew:<br class="gmail_msg">
   case Hexagon::J2_jumprtnewpt:<br class="gmail_msg">
   case Hexagon::J2_jumprfnewpt:<br class="gmail_msg">
+  case Hexagon::PS_jmprett:<br class="gmail_msg">
+  case Hexagon::PS_jmpretf:<br class="gmail_msg">
+  case Hexagon::PS_jmprettnew:<br class="gmail_msg">
+  case Hexagon::PS_jmpretfnew:<br class="gmail_msg">
+  case Hexagon::PS_jmprettnewpt:<br class="gmail_msg">
+  case Hexagon::PS_jmpretfnewpt:<br class="gmail_msg">
     DstReg = MCI.getOperand(1).getReg();<br class="gmail_msg">
     SrcReg = MCI.getOperand(0).getReg();<br class="gmail_msg">
     // [if ([!]p0[.new])] jumpr r31<br class="gmail_msg">
@@ -284,15 +292,10 @@ unsigned HexagonMCInstrInfo::getDuplexCa<br class="gmail_msg">
     }<br class="gmail_msg">
     break;<br class="gmail_msg">
   case Hexagon::L4_return_t:<br class="gmail_msg">
-<br class="gmail_msg">
   case Hexagon::L4_return_f:<br class="gmail_msg">
-<br class="gmail_msg">
   case Hexagon::L4_return_tnew_pnt:<br class="gmail_msg">
-<br class="gmail_msg">
   case Hexagon::L4_return_fnew_pnt:<br class="gmail_msg">
-<br class="gmail_msg">
   case Hexagon::L4_return_tnew_pt:<br class="gmail_msg">
-<br class="gmail_msg">
   case Hexagon::L4_return_fnew_pt:<br class="gmail_msg">
     // [if ([!]p0[.new])] dealloc_return<br class="gmail_msg">
     SrcReg = MCI.getOperand(0).getReg();<br class="gmail_msg">
@@ -565,7 +568,8 @@ bool HexagonMCInstrInfo::subInstWouldBeE<br class="gmail_msg">
 bool HexagonMCInstrInfo::isOrderedDuplexPair(MCInstrInfo const &MCII,<br class="gmail_msg">
                                              MCInst const &MIa, bool ExtendedA,<br class="gmail_msg">
                                              MCInst const &MIb, bool ExtendedB,<br class="gmail_msg">
-                                             bool bisReversable) {<br class="gmail_msg">
+                                             bool bisReversable,<br class="gmail_msg">
+                                             MCSubtargetInfo const &STI) {<br class="gmail_msg">
   // Slot 1 cannot be extended in duplexes PRM 10.5<br class="gmail_msg">
   if (ExtendedA)<br class="gmail_msg">
     return false;<br class="gmail_msg">
@@ -625,11 +629,16 @@ bool HexagonMCInstrInfo::isOrderedDuplex<br class="gmail_msg">
       return false;<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
-  // If a store appears, it must be in slot 0 (MIa) 1st, and then slot 1 (MIb);<br class="gmail_msg">
-  //   therefore, not duplexable if slot 1 is a store, and slot 0 is not.<br class="gmail_msg">
-  if ((MIbG == HexagonII::HSIG_S1) || (MIbG == HexagonII::HSIG_S2)) {<br class="gmail_msg">
-    if ((MIaG != HexagonII::HSIG_S1) && (MIaG != HexagonII::HSIG_S2))<br class="gmail_msg">
-      return false;<br class="gmail_msg">
+  if (STI.getCPU().equals_lower("hexagonv4") ||<br class="gmail_msg">
+      STI.getCPU().equals_lower("hexagonv5") ||<br class="gmail_msg">
+      STI.getCPU().equals_lower("hexagonv55") ||<br class="gmail_msg">
+      STI.getCPU().equals_lower("hexagonv60")) {<br class="gmail_msg">
+    // If a store appears, it must be in slot 0 (MIa) 1st, and then slot 1 (MIb);<br class="gmail_msg">
+    //   therefore, not duplexable if slot 1 is a store, and slot 0 is not.<br class="gmail_msg">
+    if ((MIbG == HexagonII::HSIG_S1) || (MIbG == HexagonII::HSIG_S2)) {<br class="gmail_msg">
+      if ((MIaG != HexagonII::HSIG_S1) && (MIaG != HexagonII::HSIG_S2))<br class="gmail_msg">
+        return false;<br class="gmail_msg">
+    }<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
   return (isDuplexPairMatch(MIaG, MIbG));<br class="gmail_msg">
@@ -703,6 +712,7 @@ MCInst HexagonMCInstrInfo::deriveSubInst<br class="gmail_msg">
       Result.setOpcode(Hexagon::SA1_dec);<br class="gmail_msg">
       addOps(Result, Inst, 0);<br class="gmail_msg">
       addOps(Result, Inst, 1);<br class="gmail_msg">
+      addOps(Result, Inst, 2);<br class="gmail_msg">
       break;<br class="gmail_msg">
     } //  1,2 SUBInst $Rd = add($Rs,#-1)<br class="gmail_msg">
     else if (Inst.getOperand(1).getReg() == Hexagon::R29) {<br class="gmail_msg">
@@ -806,20 +816,27 @@ MCInst HexagonMCInstrInfo::deriveSubInst<br class="gmail_msg">
     break; //    none  SUBInst deallocframe<br class="gmail_msg">
   case Hexagon::EH_RETURN_JMPR:<br class="gmail_msg">
   case Hexagon::J2_jumpr:<br class="gmail_msg">
+  case Hexagon::PS_jmpret:<br class="gmail_msg">
     Result.setOpcode(Hexagon::SL2_jumpr31);<br class="gmail_msg">
     break; //    none  SUBInst jumpr r31<br class="gmail_msg">
   case Hexagon::J2_jumprf:<br class="gmail_msg">
+  case Hexagon::PS_jmpretf:<br class="gmail_msg">
     Result.setOpcode(Hexagon::SL2_jumpr31_f);<br class="gmail_msg">
     break; //    none  SUBInst if (!p0) jumpr r31<br class="gmail_msg">
   case Hexagon::J2_jumprfnew:<br class="gmail_msg">
   case Hexagon::J2_jumprfnewpt:<br class="gmail_msg">
+  case Hexagon::PS_jmpretfnewpt:<br class="gmail_msg">
+  case Hexagon::PS_jmpretfnew:<br class="gmail_msg">
     Result.setOpcode(Hexagon::SL2_jumpr31_fnew);<br class="gmail_msg">
     break; //    none  SUBInst if (!p0.new) jumpr:nt r31<br class="gmail_msg">
   case Hexagon::J2_jumprt:<br class="gmail_msg">
+  case Hexagon::PS_jmprett:<br class="gmail_msg">
     Result.setOpcode(Hexagon::SL2_jumpr31_t);<br class="gmail_msg">
     break; //    none  SUBInst if (p0) jumpr r31<br class="gmail_msg">
   case Hexagon::J2_jumprtnew:<br class="gmail_msg">
   case Hexagon::J2_jumprtnewpt:<br class="gmail_msg">
+  case Hexagon::PS_jmprettnewpt:<br class="gmail_msg">
+  case Hexagon::PS_jmprettnew:<br class="gmail_msg">
     Result.setOpcode(Hexagon::SL2_jumpr31_tnew);<br class="gmail_msg">
     break; //    none  SUBInst if (p0.new) jumpr:nt r31<br class="gmail_msg">
   case Hexagon::L2_loadrb_io:<br class="gmail_msg">
@@ -966,6 +983,7 @@ MCInst HexagonMCInstrInfo::deriveSubInst<br class="gmail_msg">
     if (Absolute && Value == -1) {<br class="gmail_msg">
       Result.setOpcode(Hexagon::SA1_setin1);<br class="gmail_msg">
       addOps(Result, Inst, 0);<br class="gmail_msg">
+      addOps(Result, Inst, 1);<br class="gmail_msg">
       break; //  2 1 SUBInst $Rd = #-1<br class="gmail_msg">
     } else {<br class="gmail_msg">
       Result.setOpcode(Hexagon::SA1_seti);<br class="gmail_msg">
@@ -1005,6 +1023,7 @@ static bool isStoreInst(unsigned opCode)<br class="gmail_msg">
<br class="gmail_msg">
 SmallVector<DuplexCandidate, 8><br class="gmail_msg">
 HexagonMCInstrInfo::getDuplexPossibilties(MCInstrInfo const &MCII,<br class="gmail_msg">
+                                          MCSubtargetInfo const &STI,<br class="gmail_msg">
                                           MCInst const &MCB) {<br class="gmail_msg">
   assert(isBundle(MCB));<br class="gmail_msg">
   SmallVector<DuplexCandidate, 8> duplexToTry;<br class="gmail_msg">
@@ -1033,7 +1052,7 @@ HexagonMCInstrInfo::getDuplexPossibiltie<br class="gmail_msg">
               HexagonMCInstrInfo::hasExtenderForIndex(MCB, k - 1),<br class="gmail_msg">
               *MCB.getOperand(j).getInst(),<br class="gmail_msg">
               HexagonMCInstrInfo::hasExtenderForIndex(MCB, j - 1),<br class="gmail_msg">
-              bisReversable)) {<br class="gmail_msg">
+              bisReversable, STI)) {<br class="gmail_msg">
         // Get iClass.<br class="gmail_msg">
         unsigned iClass = iClassOfDuplexPair(<br class="gmail_msg">
             getDuplexCandidateGroup(*MCB.getOperand(k).getInst()),<br class="gmail_msg">
@@ -1058,7 +1077,7 @@ HexagonMCInstrInfo::getDuplexPossibiltie<br class="gmail_msg">
                 HexagonMCInstrInfo::hasExtenderForIndex(MCB, j - 1),<br class="gmail_msg">
                 *MCB.getOperand(k).getInst(),<br class="gmail_msg">
                 HexagonMCInstrInfo::hasExtenderForIndex(MCB, k - 1),<br class="gmail_msg">
-                bisReversable)) {<br class="gmail_msg">
+                bisReversable, STI)) {<br class="gmail_msg">
           // Get iClass.<br class="gmail_msg">
           unsigned iClass = iClassOfDuplexPair(<br class="gmail_msg">
               getDuplexCandidateGroup(*MCB.getOperand(j).getInst()),<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -37,30 +37,19 @@<br class="gmail_msg">
<br class="gmail_msg">
 using namespace llvm;<br class="gmail_msg">
<br class="gmail_msg">
-static cl::opt<unsigned><br class="gmail_msg">
-    GPSize("gpsize", cl::NotHidden,<br class="gmail_msg">
-           cl::desc("Global Pointer Addressing Size.  The default size is 8."),<br class="gmail_msg">
-           cl::Prefix, cl::init(8));<br class="gmail_msg">
+static cl::opt<unsigned> GPSize<br class="gmail_msg">
+  ("gpsize", cl::NotHidden,<br class="gmail_msg">
+   cl::desc("Global Pointer Addressing Size.  The default size is 8."),<br class="gmail_msg">
+   cl::Prefix,<br class="gmail_msg">
+   cl::init(8));<br class="gmail_msg">
<br class="gmail_msg">
-void HexagonMCELFStreamer::EmitInstruction(const MCInst &MCK,<br class="gmail_msg">
+void HexagonMCELFStreamer::EmitInstruction(const MCInst &MCB,<br class="gmail_msg">
                                            const MCSubtargetInfo &STI) {<br class="gmail_msg">
-  MCInst HMI = HexagonMCInstrInfo::createBundle();<br class="gmail_msg">
-  MCInst *MCB;<br class="gmail_msg">
-<br class="gmail_msg">
-  if (MCK.getOpcode() != Hexagon::BUNDLE) {<br class="gmail_msg">
-    HMI.addOperand(MCOperand::createInst(&MCK));<br class="gmail_msg">
-    MCB = &HMI;<br class="gmail_msg">
-  } else<br class="gmail_msg">
-    MCB = const_cast<MCInst *>(&MCK);<br class="gmail_msg">
-<br class="gmail_msg">
-  // Examines packet and pad the packet, if needed, when an<br class="gmail_msg">
-  // end-loop is in the bundle.<br class="gmail_msg">
-  HexagonMCInstrInfo::padEndloop(getContext(), *MCB);<br class="gmail_msg">
-  HexagonMCShuffle(*MCII, STI, *MCB);<br class="gmail_msg">
-<br class="gmail_msg">
-  assert(HexagonMCInstrInfo::bundleSize(*MCB) <= HEXAGON_PACKET_SIZE);<br class="gmail_msg">
+  assert(MCB.getOpcode() == Hexagon::BUNDLE);<br class="gmail_msg">
+  assert(HexagonMCInstrInfo::bundleSize(MCB) <= HEXAGON_PACKET_SIZE);<br class="gmail_msg">
+  assert(HexagonMCInstrInfo::bundleSize(MCB) > 0);<br class="gmail_msg">
   bool Extended = false;<br class="gmail_msg">
-  for (auto &I : HexagonMCInstrInfo::bundleInstructions(*MCB)) {<br class="gmail_msg">
+  for (auto &I : HexagonMCInstrInfo::bundleInstructions(MCB)) {<br class="gmail_msg">
     MCInst *MCI = const_cast<MCInst *>(I.getInst());<br class="gmail_msg">
     if (Extended) {<br class="gmail_msg">
       if (HexagonMCInstrInfo::isDuplex(*MCII, *MCI)) {<br class="gmail_msg">
@@ -77,11 +66,12 @@ void HexagonMCELFStreamer::EmitInstructi<br class="gmail_msg">
<br class="gmail_msg">
   // At this point, MCB is a bundle<br class="gmail_msg">
   // Iterate through the bundle and assign addends for the instructions<br class="gmail_msg">
-  for (auto const &I : HexagonMCInstrInfo::bundleInstructions(*MCB)) {<br class="gmail_msg">
+  for (auto const &I : HexagonMCInstrInfo::bundleInstructions(MCB)) {<br class="gmail_msg">
     MCInst *MCI = const_cast<MCInst *>(I.getInst());<br class="gmail_msg">
     EmitSymbol(*MCI);<br class="gmail_msg">
   }<br class="gmail_msg">
-  MCObjectStreamer::EmitInstruction(*MCB, STI);<br class="gmail_msg">
+<br class="gmail_msg">
+  MCObjectStreamer::EmitInstruction(MCB, STI);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
 void HexagonMCELFStreamer::EmitSymbol(const MCInst &Inst) {<br class="gmail_msg">
@@ -119,9 +109,11 @@ void HexagonMCELFStreamer::HexagonMCEmit<br class="gmail_msg">
     MCSectionSubPair P = getCurrentSection();<br class="gmail_msg">
     SwitchSection(&Section);<br class="gmail_msg">
<br class="gmail_msg">
-    EmitValueToAlignment(ByteAlignment, 0, 1, 0);<br class="gmail_msg">
-    EmitLabel(Symbol);<br class="gmail_msg">
-    EmitZeros(Size);<br class="gmail_msg">
+    if (ELFSymbol->isUndefined(false)) {<br class="gmail_msg">
+      EmitValueToAlignment(ByteAlignment, 0, 1, 0);<br class="gmail_msg">
+      EmitLabel(Symbol);<br class="gmail_msg">
+      EmitZeros(Size);<br class="gmail_msg">
+    }<br class="gmail_msg">
<br class="gmail_msg">
     // Update the maximum alignment of the section if necessary.<br class="gmail_msg">
     if (ByteAlignment > Section.getAlignment())<br class="gmail_msg">
@@ -144,9 +136,10 @@ void HexagonMCELFStreamer::HexagonMCEmit<br class="gmail_msg">
   ELFSymbol->setSize(MCConstantExpr::create(Size, getContext()));<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
-void HexagonMCELFStreamer::HexagonMCEmitLocalCommonSymbol(<br class="gmail_msg">
-    MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment,<br class="gmail_msg">
-    unsigned AccessSize) {<br class="gmail_msg">
+void HexagonMCELFStreamer::HexagonMCEmitLocalCommonSymbol(MCSymbol *Symbol,<br class="gmail_msg">
+                                                         uint64_t Size,<br class="gmail_msg">
+                                                         unsigned ByteAlignment,<br class="gmail_msg">
+                                                         unsigned AccessSize) {<br class="gmail_msg">
   getAssembler().registerSymbol(*Symbol);<br class="gmail_msg">
   auto ELFSymbol = cast<MCSymbolELF>(Symbol);<br class="gmail_msg">
   ELFSymbol->setBinding(ELF::STB_LOCAL);<br class="gmail_msg">
@@ -154,11 +147,12 @@ void HexagonMCELFStreamer::HexagonMCEmit<br class="gmail_msg">
   HexagonMCEmitCommonSymbol(Symbol, Size, ByteAlignment, AccessSize);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
-namespace llvm {<br class="gmail_msg">
<br class="gmail_msg">
-MCStreamer *createHexagonELFStreamer(MCContext &Context, MCAsmBackend &MAB,<br class="gmail_msg">
-                                     raw_pwrite_stream &OS, MCCodeEmitter *CE) {<br class="gmail_msg">
-  return new HexagonMCELFStreamer(Context, MAB, OS, CE);<br class="gmail_msg">
-}<br class="gmail_msg">
+namespace llvm {<br class="gmail_msg">
+  MCStreamer *createHexagonELFStreamer(Triple const &TT, MCContext &Context,<br class="gmail_msg">
+                                       MCAsmBackend &MAB,<br class="gmail_msg">
+                                       raw_pwrite_stream &OS, MCCodeEmitter *CE) {<br class="gmail_msg">
+    return new HexagonMCELFStreamer(Context, MAB, OS, CE);<br class="gmail_msg">
+  }<br class="gmail_msg">
<br class="gmail_msg">
 } // end namespace llvm<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.h<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.h?rev=294226&r1=294225&r2=294226&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.h?rev=294226&r1=294225&r2=294226&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.h (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.h Mon Feb  6 13:35:46 2017<br class="gmail_msg">
@@ -27,6 +27,13 @@ public:<br class="gmail_msg">
       : MCELFStreamer(Context, TAB, OS, Emitter),<br class="gmail_msg">
         MCII(createHexagonMCInstrInfo()) {}<br class="gmail_msg">
<br class="gmail_msg">
+  HexagonMC</blockquote></div>