[llvm-dev] Store lowering -> Cannot select FrameIndex.
Krzysztof Parzyszek via llvm-dev
llvm-dev at lists.llvm.org
Wed Sep 20 08:25:19 PDT 2017
You cannot discard it, you need to provide some form of converting it
into the address of the given stack slot: a selection pattern, custom
selection, etc.
-Krzysztof
On 9/20/2017 10:14 AM, Dominique Torette via llvm-dev wrote:
> Hi,
>
> I’m try to lower the store LLVM-IR instruction as per the following LLVM
> IR program:
>
> *** IR Dump After Module Verifier ***
>
> define void @storeloadi32() {
>
> %ptr = alloca i32
>
> store volatile i32 12, i32* %ptr
>
> ret void
>
> }
>
> The target instruction is associated to the store like this:
>
> def MOVSUTO_A_iSLr : CLPFPU_A_iSLr<0b1000001101,
>
> (ins
> IMM32Operand:$ImmA, FPUaRegisterOperand:$RegB),
>
> (outs ),
>
> [],
>
> "movsuto_a\t$ImmA,$RegB",
>
> [(store i32:$ImmA, i16:$RegB)],NoItinerary> {
>
> The selection DAG seems to be correct, but a FrameIndex of 0 as been
> introduced :
>
> Optimized legalized selection DAG: BB#0 'storeloadi32:'
>
> SelectionDAG has 6 nodes:
>
> t0: ch = EntryToken
>
> t5: ch = store<Volatile ST4[%ptr]> t0, Constant:i32<12>,
> FrameIndex:i16<0>, undef:i16
>
> t6: ch = CLPISD::RET_FLAG t5
>
> ISEL: Starting pattern match on root node: t5: ch = store<Volatile
> ST4[%ptr]> t0, Constant:i32<12>, FrameIndex:i16<0>, undef:i16
>
> The lowering correctly catches the store and morphs to right
> MOVSUTO_A_iSLr MC instruction:
>
> Initial Opcode index to 331
>
> Skipped scope entry (due to false predicate) at index 339, continuing
> at 354
>
> Morphed node: t5: ch = MOVSUTO_A_iSLr<Mem:Volatile ST4[%ptr]>
> Constant:i32<12>, FrameIndex:i16<0>, t0
>
> ISEL: Match complete!
>
> Then instruction selection try to lower the FrameIndex node !!! This failed…
>
> ISEL: Starting pattern match on root node: t2: i16 = FrameIndex<0>
>
> Initial Opcode index to 0
>
> Match failed at index 0
>
> LLVM ERROR: Cannot select: t2: i16 = FrameIndex<0>
>
> How to discard this FrameIndex<0> ?
>
>
>
>
>
> http://www.spacebel.be/wp-content/uploads/2011/06/image-sign-sbp.jpg
>
> *Dominique Torette*
> System Architect
> Rue des Chasseurs Ardennais - Liège Science Park - B-4031 Angleur
> Tel: +32 (0) 4 361 81 11 - Fax: +32 (0) 4 361 81 20
> www.spacebel.be <http://www.spacebel.be/>
>
>
> ------------------------------------------------------------------------------
>
> E-MAIL DISCLAIMER
>
> The present message may contain confidential and/or legally privileged
> information. If you are not the intended addressee and in case of a
> transmission error, please notify the sender immediately and destroy
> this E-mail. Disclosure, reproduction or distribution of this document
> and its possible attachments is strictly forbidden.
>
> SPACEBEL denies all liability for incomplete, improper, inaccurate,
> intercepted, (partly) destroyed, lost and/or belated transmission of the
> current information given that unencrypted electronic transmission
> cannot currently be guaranteed to be secure or error free.
> Upon request or in conformity with formal, contractual agreements, an
> originally signed hard copy will be sent to you to confirm the
> information contained in this E-mail.
>
> SPACEBEL denies all liability where E-mail is used for private use.
>
> SPACEBEL cannot be held responsible for possible viruses that might
> corrupt this message and/or your computer system.
> -------------------------------------------------------------------------------
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
More information about the llvm-dev
mailing list