Dominique Torette via llvm-dev
2017-Oct-16 15:16 UTC
[llvm-dev] How to match multiple DAG nodes
Hi, I'm trying to lower the following DAG fragment into a single MOV immediate value to an offset position of current frame (Offset register family) using DAG to instruction pattern. [cid:image001.png at 01D3469C.D6AB2820] void test_assign_float() { volatile float res; res = 42.0; } SelectionDAG has 9 nodes: t0: ch = EntryToken t3: ch = lifetime.start t0, TargetFrameIndex:i16<0> t11: ch = store<Volatile ST4[%res]> t3, Constant:i32<1109917696>, FrameIndex:i16<0>, undef:i16 t8: ch = lifetime.end t11, TargetFrameIndex:i16<0> t9: ch = CLPISD::RET_FLAG t8 In my pattern, I have to match multiple nodes: the store node, the Constant node and the FrameIndex node. def MOVSUTO_A_iSLo : CLPFPU_A_iSLo<0b1000001101, (ins IMM32Operand:$ImmA, FPUaOffsetOperand:$OffsetB), (outs ), [], "movsuto_a\t$ImmA,$OffsetB", [(store (imm:$ImmA),(frameindex:$OffsetB))],NoItinerary> { During TableGen, I got the following error: MOVSUTO_A_iSLo: (st (imm:{i16:i32:v2i16:v2i32}):$ImmA, (frameindex:iPTR):$OffsetB)<<P:Predicate_unindexedstore>><<P:Predicate_store>> Included from /home/dte/Projects/CLP/clp-llvm/trunk/llvm-project/llvm/lib/Target/CLP/CLP.td:33: /home/dte/Projects/CLP/clp-llvm/trunk/llvm-project/llvm/lib/Target/CLP/CLPInstrInfo.td:13772:2: error: In MOVSUTO_A_iSLo: Could not infer all types in pattern! def MOVSUTO_A_iSLo : CLPFPU_A_iSLo<0b1000001101, ^ ../../../bin/llvm-tblgen: 1 errors. It is understood that the 'Constant' node will be matched by the default 'imm' pattern. It seems that TableGen can't infer the type for ImmA, even if the operand is defined as is an i32, as per following definition: def IMM32Operand:Operand<i32> { let ParserMatchClass= IMM32OperandClass; } What do I'have to add to remove the ambiguity on the ImmA type? Is there a syntax to specify/coerce the data type of the Constant node in the pattern? I'have guess/try some syntaxes using i32 types, but without success. [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. ------------------------------------------------------------------------------- -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171016/7c7c51c5/attachment-0001.html> -------------- next part -------------- A non-text attachment was scrubbed... Name: image001.png Type: image/png Size: 18975 bytes Desc: image001.png URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171016/7c7c51c5/attachment-0001.png>