[llvm-dev] i1 true ^= -1 in DAG matcher?

Hendrik Greving via llvm-dev llvm-dev at lists.llvm.org
Wed Feb 19 11:01:13 PST 2020


Hello,

It looks like that in the DAG matcher, the DAG has a xor with '-1' for
checking a true value vector

for instance,

%cmp4.i = icmp ne <8 x i32> %6, %5
%7 = xor <8 x i1> %cmp4.i, <i1 true, i1 true, i1 true, i1 true, i1 true, i1
true, i1 true, i1 true>
[use of %7]

results in vector of  '-1' in the DAG. This also seems the reason why
LLVM's vnot PatFrag doesn't match in this case. I've also found f
rom third_party/llvm/llvm-project/llvm/lib/Target/AMDGPU/SIInstructions.td:

// FIXME: The generated DAG matcher seems to have strange behavior
// with a 1-bit literal to match, so use a -1 for checking a true
// 1-bit value.

Which seems to reflect the same observation. Is this a bug or a feature?

Thanks in advance for any explanation
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200219/3c2aeca5/attachment.html>


More information about the llvm-dev mailing list