[llvm-dev] Error in v64i32 type in x86 backend

Craig Topper via llvm-dev llvm-dev at lists.llvm.org
Fri Jul 7 22:00:07 PDT 2017


Oops that should have said "REX prefix" in the first sentence.

~Craig

On Fri, Jul 7, 2017 at 9:59 PM, Craig Topper <craig.topper at gmail.com> wrote:

> You don't want RI. That's used for instructions that need a reg prefix.
> You need to use $src1 and $src2 in the assembly string too. It also looks
> like you have two closing ] brackets.
>
> ~Craig
>
> On Fri, Jul 7, 2017 at 9:55 PM, hameeza ahmed <hahmed2305 at gmail.com>
> wrote:
>
>> Thank you;
>> i have changed as follows.is it fine now?
>>
>> def  VADD_256B  : I<0xFE, MRMDestReg, (outs VR2048:$dst), (ins VR2048:$src1,
>> VR2048:$src2),
>>                    "VADD_256B\t{$src, $dst|$dst, $src}", [(set VR2048:$dst,
>> (add VR2048:$src1, VR2048:$src2))]]>;
>>
>> Also here i have changed class RI to I. Does it make any difference?
>>
>>
>>
>> On Sat, Jul 8, 2017 at 9:38 AM, Craig Topper <craig.topper at gmail.com>
>> wrote:
>>
>>> IIC_XADD_REG is used to associate latency and other information for use
>>> by the instruction scheduling pass.
>>>
>>> You're missing a pattern in the square bracket to match an add node. You
>>> also need two VR2048 registers in the 'ins'
>>>
>>> ~Craig
>>>
>>> On Fri, Jul 7, 2017 at 9:29 PM, hameeza ahmed <hahmed2305 at gmail.com>
>>> wrote:
>>>
>>>> Can you please tell whether following add is correct to add 2 64xi32
>>>> numbers.
>>>>
>>>> def VADD_256B  : RI<0xFE, MRMDestReg, (outs VR2048:$dst), (ins VR2048
>>>> :$src),
>>>>                    "VADD_256B\t{$src, $dst|$dst, $src}", [],
>>>> IIC_XADD_REG>, TB;
>>>>
>>>> what is llc_xadd_reg here?
>>>>
>>>>
>>>>
>>>> On Sat, Jul 8, 2017 at 8:48 AM, Craig Topper <craig.topper at gmail.com>
>>>> wrote:
>>>>
>>>>> Change the i32 in the store pattern to v64i32.
>>>>>
>>>>> On Fri, Jul 7, 2017 at 8:41 PM hameeza ahmed <hahmed2305 at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Thank you. i understood how avx512 vector instructions are written in
>>>>>> x86instravx512. i need to define my vector instructions so i wrote;
>>>>>>
>>>>>>  def VMOV_256B_RM : I<0x6F, MRMSrcMem, (outs VR2048:$dst), (ins
>>>>>> i32mem:$src),
>>>>>>                     "vmov_256B_rm\t{$src, $dst|$dst, $src}",
>>>>>>                     [(set VR2048:$dst, (v64i32 (scalar_to_vector
>>>>>> (loadi32 addr:$src))))],
>>>>>>                     IIC_MOV_MEM>, EVEX;
>>>>>>
>>>>>> def VMOV_256B_MR : I<0x7F, MRMDestMem, (outs), (ins i32mem:$dst,
>>>>>> VR2048:$src),
>>>>>>                     "vmov_256B_mr\t{$src, $dst|$dst, $src}",
>>>>>>                     [(store (i32 (bitconvert VR2048:$src)),
>>>>>> addr:$dst)], IIC_MOV_MEM>, EVEX;
>>>>>>
>>>>>> in x86instrinfo.td;
>>>>>>
>>>>>> when i build i got these instructions in X86GenInstrInfo.
>>>>>> but still my instruction is not selected when i run input file in
>>>>>> debug mode; getting following errors;
>>>>>>
>>>>>>
>>>>>> ===== Instruction selection begins: BB#1 'vector.body'
>>>>>> Selecting: t9: ch = store<ST256[bitcast ([65 x i32]* @c to <64 x
>>>>>> i32>*)](align=16)(tbaa=<0x3817578>)> t8, t7, t11, undef:i64
>>>>>>
>>>>>> ISEL: Starting pattern match on root node: t9: ch =
>>>>>> store<ST256[bitcast ([65 x i32]* @c to <64 x i32>*)](align=16)(tbaa=<0x3817578>)>
>>>>>> t8, t7, t11, undef:i64
>>>>>>
>>>>>>   Skipped scope entry (due to false predicate) at index 14,
>>>>>> continuing at 81
>>>>>>   Skipped scope entry (due to false predicate) at index 82,
>>>>>> continuing at 149
>>>>>>   Skipped scope entry (due to false predicate) at index 150,
>>>>>> continuing at 217
>>>>>>   Skipped scope entry (due to false predicate) at index 218,
>>>>>> continuing at 267
>>>>>>   Skipped scope entry (due to false predicate) at index 268,
>>>>>> continuing at 317
>>>>>>   Skipped scope entry (due to false predicate) at index 318,
>>>>>> continuing at 367
>>>>>>   Skipped scope entry (due to false predicate) at index 368,
>>>>>> continuing at 394
>>>>>>   Skipped scope entry (due to false predicate) at index 395,
>>>>>> continuing at 421
>>>>>>   Skipped scope entry (due to false predicate) at index 422,
>>>>>> continuing at 471
>>>>>>   Skipped scope entry (due to false predicate) at index 472,
>>>>>> continuing at 521
>>>>>>   Skipped scope entry (due to false predicate) at index 522,
>>>>>> continuing at 571
>>>>>>   Skipped scope entry (due to false predicate) at index 572,
>>>>>> continuing at 639
>>>>>>   Skipped scope entry (due to false predicate) at index 640,
>>>>>> continuing at 707
>>>>>>   Skipped scope entry (due to false predicate) at index 708,
>>>>>> continuing at 775
>>>>>>   Skipped scope entry (due to false predicate) at index 776,
>>>>>> continuing at 804
>>>>>>   Skipped scope entry (due to false predicate) at index 805,
>>>>>> continuing at 833
>>>>>>   Skipped scope entry (due to false predicate) at index 834,
>>>>>> continuing at 862
>>>>>>   Skipped scope entry (due to false predicate) at index 863,
>>>>>> continuing at 891
>>>>>>   Skipped scope entry (due to false predicate) at index 892,
>>>>>> continuing at 920
>>>>>>   Skipped scope entry (due to false predicate) at index 921,
>>>>>> continuing at 949
>>>>>>   Skipped scope entry (due to false predicate) at index 950,
>>>>>> continuing at 987
>>>>>>   Skipped scope entry (due to false predicate) at index 988,
>>>>>> continuing at 1025
>>>>>>   Match failed at index 12
>>>>>>   Continuing at 1026
>>>>>>   OpcodeSwitch from 1029 to 5725
>>>>>>   Match failed at index 5743
>>>>>>   Continuing at 5772
>>>>>>   Match failed at index 5776
>>>>>>   Continuing at 5805
>>>>>>   Match failed at index 5809
>>>>>>   Continuing at 5838
>>>>>>   Match failed at index 5842
>>>>>>   Continuing at 5911
>>>>>>   Match failed at index 5915
>>>>>>   Continuing at 5953
>>>>>>   Match failed at index 5957
>>>>>>   Continuing at 5995
>>>>>>   Match failed at index 5999
>>>>>>   Continuing at 6037
>>>>>>   Match failed at index 6041
>>>>>>   Continuing at 6084
>>>>>>   Match failed at index 6088
>>>>>>   Continuing at 6131
>>>>>>   Skipped scope entry (due to false predicate) at index 6138,
>>>>>> continuing at 6181
>>>>>>   Skipped scope entry (due to false predicate) at index 6182,
>>>>>> continuing at 6228
>>>>>>   Skipped scope entry (due to false predicate) at index 6235,
>>>>>> continuing at 6384
>>>>>>   Match failed at index 6388
>>>>>>   Continuing at 6419
>>>>>>   Match failed at index 6423
>>>>>>   Continuing at 6454
>>>>>>   Match failed at index 6458
>>>>>>   Continuing at 6489
>>>>>>   Continuing at 6490
>>>>>>   Continuing at 6491
>>>>>>   Continuing at 6492
>>>>>>   Match failed at index 6514
>>>>>>   Continuing at 6545
>>>>>>   Match failed at index 6562
>>>>>>   Continuing at 6593
>>>>>>   Match failed at index 6610
>>>>>>   Continuing at 6641
>>>>>>   Continuing at 6642
>>>>>>   Match failed at index 6658
>>>>>>   Continuing at 6772
>>>>>>   Match failed at index 6788
>>>>>>   Continuing at 6902
>>>>>>   Continuing at 13636
>>>>>>   Match failed at index 13640
>>>>>>   Continuing at 14940
>>>>>>   Match failed at index 14943
>>>>>>   Continuing at 15415
>>>>>>   Match failed at index 15417
>>>>>>   Continuing at 15570
>>>>>>   Match failed at index 15571
>>>>>>   Continuing at 15598
>>>>>>   Match failed at index 15599
>>>>>>   Continuing at 15716
>>>>>>   Match failed at index 15719
>>>>>>   Continuing at 15837
>>>>>>   Match failed at index 15840
>>>>>>   Continuing at 16198
>>>>>>   Skipped scope entry (due to false predicate) at index 16203,
>>>>>> continuing at 16285
>>>>>>   Skipped scope entry (due to false predicate) at index 16286,
>>>>>> continuing at 16394
>>>>>>   Skipped scope entry (due to false predicate) at index 16395,
>>>>>> continuing at 16464
>>>>>>   Skipped scope entry (due to false predicate) at index 16465,
>>>>>> continuing at 16487
>>>>>>   Skipped scope entry (due to false predicate) at index 16488,
>>>>>> continuing at 16510
>>>>>>   Skipped scope entry (due to false predicate) at index 16511,
>>>>>> continuing at 16533
>>>>>>   Skipped scope entry (due to false predicate) at index 16534,
>>>>>> continuing at 16556
>>>>>>   Skipped scope entry (due to false predicate) at index 16557,
>>>>>> continuing at 16680
>>>>>>   Skipped scope entry (due to false predicate) at index 16681,
>>>>>> continuing at 16804
>>>>>>   Skipped scope entry (due to false predicate) at index 16805,
>>>>>> continuing at 16890
>>>>>>   Skipped scope entry (due to false predicate) at index 16891,
>>>>>> continuing at 16976
>>>>>>   Skipped scope entry (due to false predicate) at index 16978,
>>>>>> continuing at 17169
>>>>>>   Skipped scope entry (due to false predicate) at index 17171,
>>>>>> continuing at 17342
>>>>>>   Skipped scope entry (due to false predicate) at index 17344,
>>>>>> continuing at 17497
>>>>>>   Skipped scope entry (due to false predicate) at index 17499,
>>>>>> continuing at 17632
>>>>>>   Skipped scope entry (due to false predicate) at index 17634,
>>>>>> continuing at 17801
>>>>>>   Skipped scope entry (due to false predicate) at index 17803,
>>>>>> continuing at 17944
>>>>>>   Skipped scope entry (due to false predicate) at index 17946,
>>>>>> continuing at 18074
>>>>>>   Skipped scope entry (due to false predicate) at index 18075,
>>>>>> continuing at 18178
>>>>>>   Skipped scope entry (due to false predicate) at index 18179,
>>>>>> continuing at 18253
>>>>>>   Skipped scope entry (due to false predicate) at index 18254,
>>>>>> continuing at 18278
>>>>>>   Skipped scope entry (due to false predicate) at index 18279,
>>>>>> continuing at 18303
>>>>>>   Skipped scope entry (due to false predicate) at index 18304,
>>>>>> continuing at 18328
>>>>>>   Skipped scope entry (due to false predicate) at index 18329,
>>>>>> continuing at 18376
>>>>>>   Skipped scope entry (due to false predicate) at index 18377,
>>>>>> continuing at 18424
>>>>>>   Skipped scope entry (due to false predicate) at index 18425,
>>>>>> continuing at 18520
>>>>>>   Skipped scope entry (due to false predicate) at index 18521,
>>>>>> continuing at 18636
>>>>>>   Skipped scope entry (due to false predicate) at index 18637,
>>>>>> continuing at 18661
>>>>>>   Skipped scope entry (due to false predicate) at index 18662,
>>>>>> continuing at 18711
>>>>>>   Skipped scope entry (due to false predicate) at index 18712,
>>>>>> continuing at 18736
>>>>>>   Skipped scope entry (due to false predicate) at index 18737,
>>>>>> continuing at 18770
>>>>>>   Skipped scope entry (due to false predicate) at index 18771,
>>>>>> continuing at 18856
>>>>>>   Skipped scope entry (due to false predicate) at index 18857,
>>>>>> continuing at 18942
>>>>>>   Skipped scope entry (due to false predicate) at index 18943,
>>>>>> continuing at 19028
>>>>>>   Match failed at index 16201
>>>>>>   Continuing at 19029
>>>>>> LLVM ERROR: Cannot select: t9: ch = store<ST256[bitcast ([65 x i32]*
>>>>>> @c to <64 x i32>*)](align=16)(tbaa=<0x3817578>)> t8, t7, t11,
>>>>>> undef:i64
>>>>>>   t7: v64i32 = add t6, t4
>>>>>>     t6: v64i32,ch = load<LD256[bitcast ([65 x i32]* @c to <64 x
>>>>>> i32>*)](align=16)(tbaa=<0x3817578>)(dereferenceable)> t0, t11,
>>>>>> undef:i64
>>>>>>       t11: i64 = X86ISD::Wrapper TargetGlobalAddress:i64<[65 x i32]*
>>>>>> @c> 0
>>>>>>         t10: i64 = TargetGlobalAddress<[65 x i32]* @c> 0
>>>>>>       t3: i64 = undef
>>>>>>     t4: v64i32,ch = load<LD256[bitcast ([65 x i32]* @b to <64 x
>>>>>> i32>*)](align=16)(tbaa=<0x3817578>)(dereferenceable)> t0, t13,
>>>>>> undef:i64
>>>>>>       t13: i64 = X86ISD::Wrapper TargetGlobalAddress:i64<[65 x i32]*
>>>>>> @b> 0
>>>>>>         t12: i64 = TargetGlobalAddress<[65 x i32]* @b> 0
>>>>>>       t3: i64 = undef
>>>>>>   t11: i64 = X86ISD::Wrapper TargetGlobalAddress:i64<[65 x i32]* @c> 0
>>>>>>     t10: i64 = TargetGlobalAddress<[65 x i32]* @c> 0
>>>>>>   t3: i64 = undef
>>>>>> In function: foo
>>>>>>
>>>>>>
>>>>>>
>>>>>> What could be the reason of this?? Please correct me.
>>>>>> I am stuck at this point....
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Jul 7, 2017 at 10:59 PM, Friedman, Eli <
>>>>>> efriedma at codeaurora.org> wrote:
>>>>>>
>>>>>>> The word "fold" is used all over LLVM.  It generally refers to
>>>>>>> transformations which delete an instruction.
>>>>>>>
>>>>>>> If you're asking about http://llvm.org/docs/CodeGener
>>>>>>> ator.html#instruction-folding , it just means an instruction which
>>>>>>> was produced by the "instruction folding" transform; there isn't anything
>>>>>>> special about the instruction itself.
>>>>>>>
>>>>>>> -Eli
>>>>>>>
>>>>>>>
>>>>>>> On 7/6/2017 10:51 PM, hameeza ahmed wrote:
>>>>>>>
>>>>>>> What is meant by folded instructions in LLVM?
>>>>>>> How they work?
>>>>>>>
>>>>>>> On Fri, Jul 7, 2017 at 10:19 AM, hameeza ahmed <hahmed2305 at gmail.com
>>>>>>> > wrote:
>>>>>>>
>>>>>>>> Thank You.
>>>>>>>>
>>>>>>>> On Fri, Jul 7, 2017 at 10:03 AM, Craig Topper <
>>>>>>>> craig.topper at gmail.com> wrote:
>>>>>>>>
>>>>>>>>> Yes, that error is from instruction selection. I think your
>>>>>>>>> legalization changes worked fine.
>>>>>>>>>
>>>>>>>>> ~Craig
>>>>>>>>>
>>>>>>>>> On Thu, Jul 6, 2017 at 8:21 PM, hameeza ahmed via llvm-dev <
>>>>>>>>> llvm-dev at lists.llvm.org> wrote:
>>>>>>>>>
>>>>>>>>>> also i further run the following command;
>>>>>>>>>> llc -debug filer-knl_o3.ll
>>>>>>>>>>
>>>>>>>>>> and its output is attached here. by looking at the output can we
>>>>>>>>>> say that legalization runs fine and the error is due to instruction
>>>>>>>>>> selection/ pattern matching which is not yet implemented?
>>>>>>>>>>
>>>>>>>>>> so do i need to worry and try to correct it at this stage or
>>>>>>>>>> should i move forward to implement instruction selection/ pattern matching?
>>>>>>>>>>
>>>>>>>>>> Please guide me.
>>>>>>>>>>
>>>>>>>>>> Thank You
>>>>>>>>>>
>>>>>>>>>> On Fri, Jul 7, 2017 at 8:00 AM, hameeza ahmed <
>>>>>>>>>> hahmed2305 at gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Thank You. well i have seen these links. but they dont cover the
>>>>>>>>>>> problem that i have mentioned. actually i am doing all the things step by
>>>>>>>>>>> step.
>>>>>>>>>>>
>>>>>>>>>>> so i havent yet worked with instruction selection phase/ files.
>>>>>>>>>>> rather before that i am trying to do legalization by allowing vector
>>>>>>>>>>> elements>16 i.e 64xi32. here i have mainly worked with 2 files uptil now,
>>>>>>>>>>> i.e registerinfo.td to define register class to be called in
>>>>>>>>>>> legalization. and most importantly i am dealing with file
>>>>>>>>>>> X86ISelLowering.cpp.
>>>>>>>>>>>
>>>>>>>>>>> Now is there any relation in this and instruction selection.
>>>>>>>>>>> since instruction selection comes after combine and legalize so i havent
>>>>>>>>>>> yet worked on it.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Please correct me, I am stuck here.
>>>>>>>>>>>
>>>>>>>>>>> Thank You again
>>>>>>>>>>>
>>>>>>>>>>> On Fri, Jul 7, 2017 at 7:11 AM, Friedman, Eli <
>>>>>>>>>>> efriedma at codeaurora.org> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Have you read http://llvm.org/docs/WritingAnLLVMBackend.html
>>>>>>>>>>>> and http://llvm.org/docs/CodeGenerator.html ?
>>>>>>>>>>>> http://llvm.org/docs/WritingAnLLVMBackend.html#instruction-s
>>>>>>>>>>>> elector describes how to define a store instruction.
>>>>>>>>>>>>
>>>>>>>>>>>> -Eli
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On 7/6/2017 6:51 PM, hameeza ahmed via llvm-dev wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> Please correct me i m stuck at this point.
>>>>>>>>>>>>
>>>>>>>>>>>> On Jul 6, 2017 5:18 PM, "hameeza ahmed" <hahmed2305 at gmail.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> Hello,
>>>>>>>>>>>> i am experimenting with the increase in register/ vector width
>>>>>>>>>>>> to 64 elements of 32 bits instead of 16 in x86 backend.
>>>>>>>>>>>> for eg.
>>>>>>>>>>>> i have a loop with 65 iterations;
>>>>>>>>>>>> if my IR generates v64i32 and 1 scalar, still the backend
>>>>>>>>>>>> breaks the v64i32 into 4 v16i32. i want it to retain v64i32. like if there
>>>>>>>>>>>> are 128 elements in loop then it should break it into 2 v64i32 instructions.
>>>>>>>>>>>>
>>>>>>>>>>>> in order to do this i have made necessary changes in
>>>>>>>>>>>> X86ISelLowering.cpp. and rebuild llvm. then when i use the
>>>>>>>>>>>> command -view-dag-combine2-dags i get the required output in
>>>>>>>>>>>> graph but the following error on console:
>>>>>>>>>>>>
>>>>>>>>>>>> LLVM ERROR: Cannot select: t10: ch = store<ST256[bitcast ([65 x
>>>>>>>>>>>> i32]* @a to <64 x i32>*)](align=16)(tbaa=<0x30c5438>)> t9, t7,
>>>>>>>>>>>> t12, undef:i64
>>>>>>>>>>>>   t7: v64i32 = add t6, t4
>>>>>>>>>>>>     t6: v64i32,ch = load<LD256[bitcast ([65 x i32]* @c to <64 x
>>>>>>>>>>>> i32>*)](align=16)(tbaa=<0x30c5438>)(dereferenceable)> t0, t14,
>>>>>>>>>>>> undef:i64
>>>>>>>>>>>>       t14: i64 = X86ISD::Wrapper TargetGlobalAddress:i64<[65 x
>>>>>>>>>>>> i32]* @c> 0
>>>>>>>>>>>>         t13: i64 = TargetGlobalAddress<[65 x i32]* @c> 0
>>>>>>>>>>>>       t3: i64 = undef
>>>>>>>>>>>>     t4: v64i32,ch = load<LD256[bitcast ([65 x i32]* @b to <64 x
>>>>>>>>>>>> i32>*)](align=16)(tbaa=<0x30c5438>)(dereferenceable)> t0, t16,
>>>>>>>>>>>> undef:i64
>>>>>>>>>>>>       t16: i64 = X86ISD::Wrapper TargetGlobalAddress:i64<[65 x
>>>>>>>>>>>> i32]* @b> 0
>>>>>>>>>>>>         t15: i64 = TargetGlobalAddress<[65 x i32]* @b> 0
>>>>>>>>>>>>       t3: i64 = undef
>>>>>>>>>>>>   t12: i64 = X86ISD::Wrapper TargetGlobalAddress:i64<[65 x
>>>>>>>>>>>> i32]* @a> 0
>>>>>>>>>>>>     t11: i64 = TargetGlobalAddress<[65 x i32]* @a> 0
>>>>>>>>>>>>   t3: i64 = undef
>>>>>>>>>>>> In function: foo
>>>>>>>>>>>>
>>>>>>>>>>>> The dag after legalization is also attached here.
>>>>>>>>>>>>
>>>>>>>>>>>> the source is vector sum of 65 elements.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Kindly correct me.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> LLVM Developers mailing listllvm-dev at lists.llvm.orghttp://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Employee of Qualcomm Innovation Center, Inc.
>>>>>>>>>>>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> LLVM Developers mailing list
>>>>>>>>>> llvm-dev at lists.llvm.org
>>>>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Employee of Qualcomm Innovation Center, Inc.
>>>>>>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
>>>>>>>
>>>>>>>
>>>>>> --
>>>>> ~Craig
>>>>>
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170707/ed477e62/attachment-0001.html>


More information about the llvm-dev mailing list