[clang] [CIR] Add support for constructor aliases (PR #145792)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 26 09:40:41 PDT 2025
================
@@ -888,6 +888,69 @@ void CIRGenModule::updateCompletedType(const TagDecl *td) {
genTypes.updateCompletedType(td);
}
+void CIRGenModule::addReplacement(StringRef name, mlir::Operation *op) {
+ replacements[name] = op;
+}
+
+void CIRGenModule::replacePointerTypeArgs(cir::FuncOp oldF, cir::FuncOp newF) {
+ std::optional<mlir::SymbolTable::UseRange> optionalUseRange =
+ oldF.getSymbolUses(theModule);
+ if (!optionalUseRange)
+ return;
+
+ for (const mlir::SymbolTable::SymbolUse &u : *optionalUseRange) {
+ // CallTryOp only shows up after FlattenCFG.
+ auto call = mlir::dyn_cast<cir::CallOp>(u.getUser());
+ if (!call)
+ continue;
+
+ mlir::OperandRange argOps = call.getArgs();
+ mlir::ArrayRef<mlir::Type> funcArgTypes =
+ newF.getFunctionType().getInputs();
+ // In the case of variadic functions, the call may have more arguments that
+ // the function type, so we can't use llvm::enumerate here.
----------------
andykaylor wrote:
In the full implementation from the incubator, the index is needed to replace the call arg with a bitcast if one is needed. However, I've convinced myself that we never hit the bitcast case, so I guess as long as this is just a check of that assumption, I can use llvm::zip.
https://github.com/llvm/llvm-project/pull/145792
More information about the cfe-commits
mailing list