<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>