[llvm] r326811 - [AArch64] define isExtractSubvectorCheap
Sebastian Pop via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 7 13:51:37 PST 2018
The error is due to a missing def-pat for (i64 0)
ISEL: Starting pattern match
Initial Opcode index to 85068
Match failed at index 85076
LLVM ERROR: Cannot select: t47: v8i16 = insert_subvector undef:v8i16, t43,
Constant:i64<0>
The code generated from llvm/lib/Target/AArch64/AArch64InstrInfo.td
def : Pat<(insert_subvector undef, (v4i16 FPR64:$src), (i32 0)),
(INSERT_SUBREG (v8i16 (IMPLICIT_DEF)), FPR64:$src, dsub)>;
is in ninja/lib/Target/AArch64/AArch64GenDAGISel.inc
At the location of the error it is:
/* 85076*/ OPC_CheckChild2Type, MVT::i32,
And it failed to match the type of operand 2.
adding another def-pat like this fixes it:
def : Pat<(insert_subvector undef, (v4i16 FPR64:$src), (i64 0)),
(INSERT_SUBREG (v8i16 (IMPLICIT_DEF)), FPR64:$src, dsub)>;
I will submit a patch.
Sebastian
On Wed, Mar 7, 2018 at 2:50 PM, Sebastian Pop <sebpop at gmail.com> wrote:
> I'm looking at the reduced test.
> Thanks for the heads'up.
>
> On Wed, Mar 7, 2018 at 11:11 AM, David Green <David.Green at arm.com> wrote:
>
>> Hello
>>
>> I believe this is the commit causing this code to fail to compile. It's
>> reduced from some randomised neon code, so sorry if it's a bit ugly.
>> Running with llc claims:
>>
>> error in backend: Cannot select: t47: v8i16 = insert_subvector
>> undef:v8i16, t43,
>> Constant:i64<0>
>>
>>
>> target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
>> target triple = "aarch64--linux-gnu"
>>
>> @d = common dso_local local_unnamed_addr global <4 x i16>
>> zeroinitializer, align 8
>>
>> define <8 x i16> @c(i32 %e) {
>> entry:
>> %0 = load <4 x i16>, <4 x i16>* @d, align 8
>> %vminv = tail call i32 @llvm.aarch64.neon.uminv.i32.v4i16(<4 x i16> %0)
>> %1 = trunc i32 %vminv to i16
>> %vecinit3 = insertelement <4 x i16> <i16 undef, i16 undef, i16 0, i16
>> 0>, i16 %1, i32 1
>> %call = tail call <8 x i16> @c(i32 0) #3
>> %vgetq_lane = extractelement <8 x i16> %call, i32 0
>> %vset_lane = insertelement <4 x i16> %vecinit3, i16 %vgetq_lane, i32 0
>> %call4 = tail call i32 bitcast (i32 (...)* @k to i32 (<4 x i16>)*)(<4 x
>> i16> %vset_lane) #3
>> ret <8 x i16> undef
>> }
>>
>> declare i32 @llvm.aarch64.neon.uminv.i32.v4i16(<4 x i16>)
>> declare i32 @k(...)
>>
>>
>> Any ideas? I'm surprised this isExtractSubvectorCheap would be causing
>> this.
>> Cheers
>> Dave
>> IMPORTANT NOTICE: The contents of this email and any attachments are
>> confidential and may also be privileged. If you are not the intended
>> recipient, please notify the sender immediately and do not disclose the
>> contents to any other person, use it for any purpose, or store or copy the
>> information in any medium. Thank you.
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180307/22b9b51c/attachment.html>
More information about the llvm-commits
mailing list