[LLVMdev] questions about byval argument passing

Akira Hatanaka ahatanak at gmail.com
Thu Oct 20 14:21:59 PDT 2011

Suppose this structure is passed by value to a function foo(struct S1),

struct S1 {
  int i0;
  float f0;
  double d0;
  long long l0;

and the ABI dictates the elements of the structure are copied to both
integer and floating pointer argument registers in the following way:

(i0, f0) => 1st 64-bit integer argument register
d0 => 2nd double float argument register (doubles are passed in FP registers)
l0 => 3rd 64-bit integer argument register

What is the best way to find out whether integer registers or floating
pointer registers should be used for argument passing inside
TargetLowering::LowerCall? I can get basic information of the
structure being passed (for example, by calling
ArgFlagsTy::getByValSize() or ArgFlagsTy::getByValAlign() to get size
and alignment), but there doesn't seem to be an easy way to find more
detailed information. Do I have to get the instance of StructType for
structure S1 and analyze it?

More information about the llvm-dev mailing list