Alex Susu via llvm-dev
2017-Mar-08 08:32 UTC
[llvm-dev] Using llc -disablg-cgp to fix instruction selection (store) error
Hello. I want to report a bug I encountered and the quick fix I found. Basically I was getting the following rather strange instruction selection error for a program using vector LLVM IR instructions when giving llc -O1 (but not for -O0): ISEL: Starting pattern match on root node: t8965: ch = store<ST256[FixedStack0]> t0, t1068, FrameIndex:i64<0>, undef:i64 Initial Opcode index to 157 Skipped scope entry (due to false predicate) at index 162, continuing at 236 Match failed at index 241 Continuing at 263 LLVM ERROR: Cannot select: t8965: ch = store<ST256[FixedStack0]> t0, t1068, FrameIndex:i64<0>, undef:i64 t1068: v128i16 = add t9412, t9540 t9412: v128i16 = insert_vector_elt t9411, t5182, Constant:i64<127> t9411: v128i16 = insert_vector_elt t9410, t5184, Constant:i64<126> t9410: v128i16 = insert_vector_elt t9409, t5186, Constant:i64<125> t9409: v128i16 = insert_vector_elt t9408, t5188, Constant:i64<124> t9408: v128i16 = insert_vector_elt t9407, t5190, Constant:i64<123> t9407: v128i16 = insert_vector_elt t9406, t5192, Constant:i64<122> t9406: v128i16 = insert_vector_elt t9405, t5194, Constant:i64<121> t9405: v128i16 = insert_vector_elt t9404, t5196, Constant:i64<120> Note: I saw also that my vector loads and stores (gathers and scatters, to be more exact) are treated differently: LD256 is broken into several LD2 instructions; ST256 has FrameIndex / FixedStack0 attributes now (for llc -O0 I think it does not). I had the inspiration to examine the standard output of llc around a message "CGP: Found ...", which was something new from llc -O0. This message is generated by method CodeGenPrepare::optimizeMemoryInst(), which "is used to optimize both load/store and inline asms with memory operands." So I gave llc -O1 -disable-cgp to Disable Codegen Prepare and I got NO more error at llc -O1. Any comment on this solved issue is appreciated. Best regards, Alex
Friedman, Eli via llvm-dev
2017-Mar-08 18:36 UTC
[llvm-dev] Using llc -disablg-cgp to fix instruction selection (store) error
On 3/8/2017 12:32 AM, Alex Susu via llvm-dev wrote:> Hello. > I want to report a bug I encountered and the quick fix I found. > Basically I was getting the following rather strange instruction > selection error for a program using vector LLVM IR instructions when > giving llc -O1 (but not for -O0): > ISEL: Starting pattern match on root node: t8965: ch = > store<ST256[FixedStack0]> t0, t1068, FrameIndex:i64<0>, undef:i64 > Initial Opcode index to 157 > Skipped scope entry (due to false predicate) at index 162, > continuing at 236 > Match failed at index 241 > Continuing at 263 > LLVM ERROR: Cannot select: t8965: ch = > store<ST256[FixedStack0]> t0, t1068, FrameIndex:i64<0>, undef:i64"Cannot select" means that you haven't defined a pattern which matches the node in question. In this case, it means you don't have a pattern for a v128i16 store instruction.> t1068: v128i16 = add t9412, t9540 > t9412: v128i16 = insert_vector_elt t9411, t5182, > Constant:i64<127> > t9411: v128i16 = insert_vector_elt t9410, t5184, > Constant:i64<126> > t9410: v128i16 = insert_vector_elt t9409, t5186, > Constant:i64<125> > t9409: v128i16 = insert_vector_elt t9408, t5188, > Constant:i64<124> > t9408: v128i16 = insert_vector_elt t9407, t5190, > Constant:i64<123> > t9407: v128i16 = insert_vector_elt t9406, t5192, > Constant:i64<122> > t9406: v128i16 = insert_vector_elt t9405, > t5194, Constant:i64<121> > t9405: v128i16 = insert_vector_elt t9404, > t5196, Constant:i64<120> > > Note: I saw also that my vector loads and stores (gathers and > scatters, to be more exact) are treated differently: LD256 is broken > into several LD2 instructions; ST256 has FrameIndex / FixedStack0 > attributes now (for llc -O0 I think it does not). > > I had the inspiration to examine the standard output of llc around > a message "CGP: Found ...", which was something new from llc -O0. This > message is generated by method CodeGenPrepare::optimizeMemoryInst(), > which "is used to optimize both load/store and inline asms with memory > operands." > > So I gave llc -O1 -disable-cgp to Disable Codegen Prepare and I > got NO more error at llc -O1. > > Any comment on this solved issue is appreciated.You're probably papering over the bug; codegenprepare is just a bunch of miscellaneous late IR optimizations. -Eli -- Employee of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project