rjmccall added a comment. In D72271#1807790 <https://reviews.llvm.org/D72271#1807790>, @simon_tatham wrote:
> The current return value of `EmitTargetBuiltinExpr` will be the `llvm::Value > *` corresponding to the last of a sequence of store instructions that writes > the constructed aggregate into the return value slot. There's no need to > actually use that `Value` for anything in this case, but we can still test > that it's non-null, to find out whether `EmitTargetBuiltinExpr` has > successfully recognized a builtin and generated some code, or whether we have > to fall through to the `ErrorUnsupported`. Ah, yes, good point. ================ Comment at: clang/lib/CodeGen/CGBuiltin.cpp:4350 + llvm_unreachable("Bad evaluation kind in EmitBuiltinExpr"); + } ---------------- I would just structure this as: ``` // If the result is an aggregate, force ReturnValue to be non-null so that // the target-specific emission code can always just emit into it. TypeEvaluationKind EvalKind = getEvaluationKind(E->getType()); if (EvalKind == TEK_Aggregate && ReturnValue.isNull()) { ... } // Try to emit a target builtin. if (Value *V = EmitTargetBuiltinExpr(BuiltinID, E, ReturnValue)) { // Turn the result into the appropriate kind of RValue. switch (EvalKind) { ... } } ``` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D72271/new/ https://reviews.llvm.org/D72271 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits