mirror of
https://github.com/intel/llvm.git
synced 2026-02-02 02:00:03 +08:00
Heed ABIArgInfo::getInReg() for return values.
The 'inreg' attribute can also be applied to function return values in LLVM IR. The SPARC v9 backend is using the flag when returning structs containing 32-bit floats. llvm-svn: 183290
This commit is contained in:
@@ -1054,8 +1054,11 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
|
||||
RetAttrs.addAttribute(llvm::Attribute::SExt);
|
||||
else if (RetTy->hasUnsignedIntegerRepresentation())
|
||||
RetAttrs.addAttribute(llvm::Attribute::ZExt);
|
||||
break;
|
||||
// FALL THROUGH
|
||||
case ABIArgInfo::Direct:
|
||||
if (RetAI.getInReg())
|
||||
RetAttrs.addAttribute(llvm::Attribute::InReg);
|
||||
break;
|
||||
case ABIArgInfo::Ignore:
|
||||
break;
|
||||
|
||||
|
||||
@@ -73,8 +73,7 @@ struct mixed {
|
||||
float b;
|
||||
};
|
||||
|
||||
// CHECK: @f_mixed(i32 inreg %x.coerce0, float inreg %x.coerce1)
|
||||
// FIXME: The return value should also be 'inreg'.
|
||||
// CHECK: define inreg %struct.mixed @f_mixed(i32 inreg %x.coerce0, float inreg %x.coerce1)
|
||||
struct mixed f_mixed(struct mixed x) {
|
||||
x.a += 1;
|
||||
return x;
|
||||
|
||||
Reference in New Issue
Block a user