void rewriteArgument(IrFuncTy &fty, IrFuncTyArg &arg) override { // FIXME Type *ty = arg.type->toBasetype(); if (ty->ty == Tstruct || ty->ty == Tsarray) { // Rewrite HFAs only because union HFAs are turned into IR types that are // non-HFA and messes up register selection if (ty->ty == Tstruct && isHFA((TypeStruct *)ty, &arg.ltype)) { hfaToArray.applyTo(arg, arg.ltype); } else { compositeToArray64.applyTo(arg); } } }
void rewriteFunctionType(IrFuncTy &fty) override { Type *retTy = fty.ret->type->toBasetype(); if (!fty.ret->byref && retTy->ty == Tstruct) { // Rewrite HFAs only because union HFAs are turned into IR types that are // non-HFA and messes up register selection if (isHFA((TypeStruct *)retTy, &fty.ret->ltype)) { hfaToArray.applyTo(*fty.ret, fty.ret->ltype); } else { integerRewrite.applyTo(*fty.ret); } } for (auto arg : fty.args) { if (!arg->byref) rewriteArgument(fty, *arg); } }