[llvm-dev] Instruction selection pattern for intrinsic returning llvm_any_ty

Mikael Holmén via llvm-dev llvm-dev at lists.llvm.org
Wed Mar 30 02:43:17 PDT 2016


Hi,

On 03/30/2016 11:38 AM, Matt Arsenault wrote:
>
>> On Mar 30, 2016, at 11:35, Mikael Holmén <mikael.holmen at ericsson.com
>> <mailto:mikael.holmen at ericsson.com>> wrote:
>>
>> i16 (divm16_pseudo …)
>>
>> stuff?
>>
>> I've tried
>> (i16, i16 (divm16_pseudo i16:$src1, i16:$src2)
>> and
>> ((i16, i16) (divm16_pseudo i16:$src1, i16:$src2)
>> and a few other variants without managing to get it through.
>>
>> Thanks again,
>> Mikael
>
> Are you trying to return multiple values?

Yes, the intrisic returns a record

   %rec6 = type { i16, i16 }

so at instructions selection the original call

   %_tmp3 = call %rec6 @llvm.phx.divm.u16.rec6(i16 %_tmp1, i16 %_tmp2)

has been lowered to

   t6: i16,i16 = llvm.phx.divm.u16 TargetConstant:i16<3778>, t2, t4

and the instruction I want to select also returns two values

def divm16_pseudo : MyPseudoInst<
     (outs aNh_0_7:$dst, aNh_0_7:$dst2),
     (ins aNh_0_7:$src1, aNh_0_7:$src2)>;

Both outs are i16.

/Mikael



More information about the llvm-dev mailing list