================
@@ -1533,9 +1533,17 @@ void CodeGenFunction::EmitReturnStmt(const ReturnStmt
&S) {
Builder.CreateStore(Result.getScalarVal(), ReturnValue);
} else {
switch (getEvaluationKind(RV->getType())) {
- case TEK_Scalar:
- Builder.CreateStore(EmitScalarExpr(RV), ReturnValue);
- break;
+ case TEK_Scalar: {
+ llvm::Value *Ret = EmitScalarExpr(RV);
+ // EmitStoreOfScalar could be used here, but it extends bool which for
+ // some targets is returned as i1 zeroext.
----------------
Fznamznon wrote:
> So there's a trade-off here: we can unconditionally treat ReturnValue as
> having the for-memory type (at the cost of emitting some extra
> promotions/truncations), or we can track whether we were passed it vs. just
> allocated internally to this function (at the cost of compiler complexity
> around most uses of ReturnValue, which is a relatively small amount of code).
Isn't the latter happening now?
https://github.com/llvm/llvm-project/pull/91364
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits