<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 15, 2016 at 12:10 PM, Krzysztof Parzyszek <span dir="ltr"><<a href="mailto:kparzysz@codeaurora.org" target="_blank">kparzysz@codeaurora.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="">On 1/15/2016 1:08 PM, Phil Tomson wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Ah, I see, the defm is a multi-class so I needed to change it to:<br>
<br>
  def: Pat<(load (XSTGADDR_NORMAL tglobaladdr:$addr)),<br>
          (LOADI64_RI tglobaladdr:$addr, 0)>;<br>
// Match load from a relocatable address to a load with GRP:<br>
def: Pat<(load (XSTGADDR_USE_GRP tglobaladdr:$addr)),<br>
          (LOADI64_RI (MOVIMMZ_I64 tglobaladdr:$addr), GRP)>;<br>
</blockquote>
<br></span>
Right.<span class=""><br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
...at least that gets through TableGen.<br>
</blockquote>
<br></span>
Excellent.</blockquote><div><br></div><div>Actually, I realized that the second should be a LOADI64_RR (reg reg instead of reg immediate). So it's really this:<br><br> // Match load from a relocatable address to a load with GRP:<br>def: Pat<(load (XSTGADDR_USE_GRP tglobaladdr:$addr)),<br>         (LOADI64_RR (MOVIMMZ_I64 tglobaladdr:$addr), GRP)>;<br><br><br></div><div>When I tried running llc on my example code I get this:<br><br>ISEL: Starting pattern match on root node: 0x362d630: i64 = XSTGISD::ADDR_USE_GRP 0x3628c90 [ORD=10] [ID=29]<br><br>  Initial Opcode index to 0<br>  Match failed at index 0<br>LLVM ERROR: Cannot select: 0x362d630: i64 = XSTGISD::ADDR_USE_GRP 0x3628c90 [ORD=10] [ID=29]<br>  0x3628c90: i64 = TargetGlobalAddress<i32 addrspace(4)* @answer> 0 [TF=7] [ORD=10] [ID=22]<br>In function: main<br><br> <br><br></div><div>I see the following in my SelectCode (in XSTGGenDGISel.inc):<br><br><br>/*2235*/        OPC_SwitchOpcode /*2 cases */, 27, TARGET_VAL(XSTGISD::ADDR_NORMAL),// ->2266<br>/*2239*/          OPC_RecordChild0, // #1 = $addr<br>/*2240*/          OPC_MoveChild, 0,<br>/*2242*/          OPC_CheckOpcode, TARGET_VAL(ISD::TargetGlobalAddress),<br>/*2245*/          OPC_MoveParent,<br>/*2246*/          OPC_MoveParent,<br>/*2247*/          OPC_CheckPredicate, 5, // Predicate_unindexedload<br>/*2249*/          OPC_CheckPredicate, 6, // Predicate_load<br>/*2251*/          OPC_CheckType, MVT::i64,<br>/*2253*/          OPC_EmitMergeInputChains1_0,<br>/*2254*/          OPC_EmitInteger, MVT::i64, 0, <br>/*2257*/          OPC_MorphNodeTo, TARGET_VAL(XSTG::LOADI64_RI), 0|OPFL_Chain|OPFL_MemRefs,<br>                      1/*#VTs*/, MVT::i64, 2/*#Ops*/, 1, 2, <br>                  // Src: (ld:i64 (XSTGADDR_NORMAL:iPTR (tglobaladdr:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_load>> - Complexity = 10<br>                  // Dst: (LOADI64_RI:i64 (tglobaladdr:i64):$addr, 0:i64)<br><br></div><div>Not sure why the initial Opcode index is being set to 0 instead of 2235?<br><br></div><div>Phil<br></div><div><br></div><div><br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=""><div class="h5"><br>
<br>
<br>
-Krzysztof<br>
<br>
<br>
-- <br>
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation<br>
</div></div></blockquote></div><br></div></div>