@@ -404,18 +404,20 @@ ComplexExprEmitter::VisitImaginaryLiteral(const ImaginaryLiteral *il) {
404404 auto imagValue = cast<IntegerLiteral>(il->getSubExpr ())->getValue ();
405405 realValueAttr = cir::IntAttr::get (elementTy, 0 );
406406 imagValueAttr = cir::IntAttr::get (elementTy, imagValue);
407- } else if (mlir::isa<cir::FPTypeInterface>(elementTy)) {
407+ } else {
408+ assert (mlir::isa<cir::FPTypeInterface>(elementTy) &&
409+ " Expected complex element type to be floating-point" );
410+
408411 auto imagValue = cast<FloatingLiteral>(il->getSubExpr ())->getValue ();
409412 realValueAttr = cir::FPAttr::get (
410413 elementTy, llvm::APFloat::getZero (imagValue.getSemantics ()));
411414 imagValueAttr = cir::FPAttr::get (elementTy, imagValue);
412- } else {
413- llvm_unreachable (" unexpected complex element type" );
414415 }
415416
416- auto realValue = builder.getConstant (loc, realValueAttr);
417- auto imagValue = builder.getConstant (loc, imagValueAttr);
418- return builder.createComplexCreate (loc, realValue, imagValue);
417+ auto complexTy = cir::ComplexType::get (realValueAttr.getType ());
418+ auto complexAttr =
419+ cir::ComplexAttr::get (complexTy, realValueAttr, imagValueAttr);
420+ return cir::ConstantOp::create (builder, loc, complexAttr);
419421}
420422
421423mlir::Value ComplexExprEmitter::VisitCallExpr (const CallExpr *e) {
0 commit comments