mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-02-26 08:33:14 +01:00
Fix accidental double-inreg caused by shared TupleType. Enabled inreg by default.
This commit is contained in:
@@ -3454,7 +3454,7 @@ L1:
|
||||
}
|
||||
}
|
||||
if (t->ty == Ttuple)
|
||||
*pt = t;
|
||||
*pt = t->syntaxCopy();
|
||||
else
|
||||
*pt = t->merge();
|
||||
}
|
||||
|
||||
@@ -203,16 +203,18 @@ const llvm::FunctionType* DtoFunctionType(Type* type, const LLType* thistype, co
|
||||
// pass first param in EAX if it fits, is not floating point and is not a 3 byte struct.
|
||||
// FIXME: struct are not passed in EAX yet
|
||||
|
||||
int n_inreg = f->reverseParams ? n - 1 : 0;
|
||||
Argument* arg = Argument::getNth(f->parameters, n_inreg);
|
||||
|
||||
// if there is a implicit context parameter, pass it in EAX
|
||||
if (usesthis || usesnest)
|
||||
{
|
||||
f->thisAttrs |= llvm::Attribute::InReg;
|
||||
assert((!arg || (arg->llvmAttrs & llvm::Attribute::InReg) == 0) && "can't have two inreg args!");
|
||||
}
|
||||
// otherwise check the first formal parameter
|
||||
else
|
||||
{
|
||||
int inreg = f->reverseParams ? n - 1 : 0;
|
||||
Argument* arg = Argument::getNth(f->parameters, inreg);
|
||||
Type* t = arg->type->toBasetype();
|
||||
|
||||
// 32bit ints, pointers, classes, static arrays and AAs
|
||||
@@ -223,6 +225,7 @@ const llvm::FunctionType* DtoFunctionType(Type* type, const LLType* thistype, co
|
||||
(t->size() <= PTRSIZE))
|
||||
{
|
||||
arg->llvmAttrs |= llvm::Attribute::InReg;
|
||||
assert((f->thisAttrs & llvm::Attribute::InReg) == 0 && "can't have two inreg args!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ io.write("Default target: '"..TRIPLE.."'\n");
|
||||
|
||||
-- x86 ABI support
|
||||
X86_REVERSE_PARAMS = 1
|
||||
X86_PASS_IN_EAX = 0 --disabled for now
|
||||
X86_PASS_IN_EAX = 1
|
||||
|
||||
-- D version - don't change these !!!
|
||||
DMDV1 = "1"
|
||||
|
||||
Reference in New Issue
Block a user