Thank you very much for this detail information~<br><div><div><br></div><div><br></div><div style="font-size: 12px;font-family: Arial Narrow;padding:2px 0 2px 0;">------------------ 原始邮件 ------------------</div><div style="font-size: 12px;background:#efefef;padding:8px;"><div><b>发件人:</b> "Tim Northover"<t.p.northover@gmail.com>;</div><div><b>发送时间:</b> 2019年10月22日(星期二) 凌晨0:17</div><div><b>收件人:</b> "Celine"<595602881@qq.com>;<wbr></div><div><b>抄送:</b> "llvm-dev"<llvm-dev@lists.llvm.org>;<wbr></div><div><b>主题:</b> Re: [llvm-dev] How to create vector pointer type?</div></div><div><br></div>Hi Celine,<br><br>On Mon, 21 Oct 2019 at 05:24, Celine via llvm-dev<br><llvm-dev@lists.llvm.org> wrote:<br>> Then meet the following error:<br>> Assertion failed: ResultElementType == cast<PointerType>(getType()->getScalarType())->getElementType(), file D:\cygwin64\home\celine\clang-102\llvm\include\llvm/IR/Instructions.h, line 958<br><br>Both of your functions look sensible to me, but this assertion is from<br>within GetElementPtrInst, so it's happening after you've done<br>something with these types. You probably replaced a Value with a<br>different one with this new type (or mutated it in place). That leaves<br>the IR in an inconsistent state E.g. one operand of an add could be<br>i16 and the other i32, or in this case a GEP thinks it's operating on<br>an i16* to produce another i16*, but it's actually operating on a <16<br>x i16>*, which would produce another <16 x i16>*.<br><br>If you're trying to change the type of a Value you generally have to<br>recreate its whole chain of users until you can reunify the types. If<br>this is vectorizing a loop, for example, the whole loop data-path<br>would probably need to be recreated with the new vector type, and<br>surrounded by pointer bitcasts ot <16 x i16>* at the beginning (and<br>back to i16* at the end if anyone cares about the final pointer).<br><br>Cheers.<br><br>Tim.<br></div>