<div dir="ltr"><div>Eli,</div><div><br></div><div> Ok, thanks, this makes more sense.</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 7, 2018 at 2:17 PM, Friedman, Eli <span dir="ltr"><<a href="mailto:efriedma@codeaurora.org" target="_blank">efriedma@codeaurora.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>On 6/7/2018 10:45 AM, Ryan Taylor via llvm-dev wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'm trying to match a ConstantFPSDNode == 0 in dag pattern for tablegen but am having some issues.<br>
<br>
So LLVM doesn't seem to accept a floating point constant literal match like:<br>
<br>
%v = call <4 x float> @foo(i32 15, float %s, float 0.0, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)<br>
  ret <4 x float> %v<br>
<br>
def : XXXPat<(v4f32 (int_foo i32:$mask, f32:$s, 0, v8i32:$rsrc, v4i32:$sampler, i1:$unorm, 0, i32:$cachepolicy)), (FOO_MI (COPY_TO_REGCLASS ?:$s, 32RegClass), ?:$rsrc, ?:$sampler, (as_i32imm ?:$mask), (as_i1imm ?:$unorm), (as_i1imm ?:$cachepolicy), (as_i1imm ?:$cachepolicy), 0, 0, 0, { 0 })>;<br>
<br>
which would be ideal. This seems to be because OPC_CheckInteger only checks for ConstantSDNode and not ConstantFPSDNode. So it was suggested to use ComplexPattern, so given:<br>
<br>
bool XXXDAGToDAGISel::SelectConstan<wbr>tFPSDNodeImmZero(SDValue In, SDValue &Src) const {<br>
  if (ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(In)<wbr>)<br>
    return C->isZero();<br>
  return false;<br>
}<br>
<br>
def ConstantFPSDNodeImmZero : ComplexPattern<f32, 0, "SelectConstantFPSDNodeImmZero<wbr>">;<br>
<br>
def : XXXPat<(v4f32 (int_foo i32:$dmask, f32:$s, (f32 (ConstantFPSDNodeImmZero f32:$lod)), v8i32:$rsrc, v4i32:$sampler, i1:$unorm, 0, i32:$cachepolicy)), (FOO_MI (COPY_TO_REGCLASS ?:$s, 32RegClass), ?:$rsrc, ?:$sampler, (as_i32imm ?:$dmask), (as_i1imm ?:$unorm), (as_i1imm ?:$cachepolicy), (as_i1imm ?:$cachepolicy), 0, 0, 0, { 0 })>;<br>
</blockquote>
<br></span>
This isn't right; an floating-point immediate doesn't have any inputs.<br>
<br>
A bunch of backends have a pattern like this; grep for fpimm0.<span class="HOEnZb"><font color="#888888"><br>
<br>
-Eli<br>
<br>
-- <br>
Employee of Qualcomm Innovation Center, Inc.<br>
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project<br>
<br>
</font></span></blockquote></div><br></div>