[LLVMdev] Passing a 256 bit integer vector with XMM registers
Pan, Wei
wei.pan at intel.com
Fri Sep 20 12:48:31 PDT 2013
I am implementing a new calling convention for X86 which requires to pass a 256 bit integer vector with two XMM registers rather than one YMM register. For example
define <8 x i32> @add(<8 x i32> %a, <8 x i32> %b) {
%add = add <8 x i32> %a, %b
ret <8 x i32> %add
}
With march=X86-64 and mcpu=corei7-avx, llc with the default calling convention generates the following code
vextractf128 $1, %ymm1, %xmm2
vextractf128 $1, %ymm0, %xmm3
vpaddd %xmm2, %xmm3, %xmm2
vpaddd %xmm1, %xmm0, %xmm0
vinsertf128 $1, %xmm2, %ymm0, %ymm0
ret
With this new calling convention, llc would generate slightly different code inside the callee
vpaddd %xmm2, %xmm0, %xmm0
vpaddd %xmm3, %xmm1, %xmm1
ret
I am wonder how we can specify this rule. I tried to specify this in X86CallingConv.td which seems insufficient, since the number of registers is coded in TargetLoweringBase::computeRegisterProperties(). Any suggestions are appreciated!
Thanks!
Wei
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130920/f27b0a22/attachment.html>
More information about the llvm-dev
mailing list