<div dir="ltr">Hi everyone. <br><div><div><br>I am doing a project on which I want to take the advantage of <br>two Haswell instructions, pext and pdep, with bmi2 attribute <br>in LLVM.<br><br>I have made the v32i1 legal by <br>

<div style="margin-left:40px">addRegisterClass(MVT::v32i1, &X86::GR32RegClass);<br></div>And my code could transform the specific VECTOR_SHUFFLE Node<br>into x86.bmi.pext.32 Node.<br><div style="margin-left:40px">0x27a7710: i32 = llvm.x86.bmi.pext.32 [ORD=1] 0x27a6d10: i32 = Constant<2761>, 0x27a7510, 0x27a7610: i32 = Constant<-1152><br>

  0x27a7510: i32 = bitcast [ORD=1] 0x27a6c10<br>    0x27a6c10: v32i1,ch = CopyFromReg [ID=5] 0x277f9c8: ch = EntryToken [ID=0], 0x27a6b10: v32i1 = Register %vreg0 [ID=1]<br></div><br>But the llc said that<br><div style="margin-left:40px">

 LLVM ERROR: Cannot select: 0x27a7510: i32 = bitcast 0x27a6c10 [ORD=1] [ID=7]<br>  0x27a6c10: v32i1,ch = CopyFromReg 0x277f9c8, 0x27a6b10 [ID=6]<br>    0x27a6b10: v32i1 = Register %vreg0 [ID=1]<br></div><br>And I followed the file X86InstrSSE.td, writing the following in the file <br>

</div><div>X86InstrInfo.td:<br><div style="margin-left:40px">let Predicates = [HasBMI2] in {<br>  def : Pat <(i32 (bitconvert (v32i1 GR32:$src))), (i32 GR32:$src)>;<br>}<br></div>the error raised in compilation:<br>

<div style="margin-left:40px">anonymous.159:     (bitconvert:i32 GR32:<empty>:$src)<br>Included from /home/lai/git/llvm/lib/Target/X86/X86.td:336:<br>/home/lai/git/llvm/lib/Target/X86/X86InstrInfo.td:1921:3: error: In anonymous.159: Type inference contradiction found, merging 'i32' into 'v32i1'<br>

    def : Pat <(i32 (bitconvert (v32i1 GR32:$src))), (i32 GR32:$src)>;<br>    ^<br><br></div>How can I fix this? I'm working on llvm3.4. Thanks<br></div><div><br>Lai</div></div></div>