@@ -148,16 +148,14 @@ struct QIRAPITypeConverter : public TypeConverter {
148148 return cudaq::cc::ArrayType::get (newEleTy);
149149 });
150150 addConversion ([&](cudaq::cc::StructType ty) -> Type {
151+ if (ty.getOpaque ())
152+ return ty;
151153 SmallVector<Type> members;
152154 for (auto memTy : ty.getMembers ())
153155 members.push_back (convertType (memTy));
154- if (ty.getName ())
155- return cudaq::cc::StructType::get (ty.getContext (), ty.getName (),
156- members, ty.getBitSize (),
157- ty.getAlignment (), ty.getPacked ());
158- return cudaq::cc::StructType::get (ty.getContext (), members,
159- ty.getBitSize (), ty.getAlignment (),
160- ty.getPacked ());
156+ return cudaq::cc::StructType::get (ty.getContext (), ty.getName (), members,
157+ /* opaque=*/ false , ty.getPacked (),
158+ ty.getBitSize (), ty.getAlignment ());
161159 });
162160 }
163161
@@ -1733,24 +1731,6 @@ struct OpInterfacePattern : public OpConversionPattern<OP> {
17331731 matchAndRewrite (OP op, typename Base::OpAdaptor adaptor,
17341732 ConversionPatternRewriter &rewriter) const override {
17351733 auto newResultTy = getTypeConverter ()->convertType (op.getType ());
1736-
1737- // Check if result type changed
1738- bool resultChanged = (newResultTy != op.getType ());
1739-
1740- // Check if any operand types changed
1741- bool operandsChanged = false ;
1742- for (auto [oldOp, newOp] :
1743- llvm::zip (op->getOperands (), adaptor.getOperands ())) {
1744- if (oldOp.getType () != newOp.getType ()) {
1745- operandsChanged = true ;
1746- break ;
1747- }
1748- }
1749-
1750- // Only convert if something actually changed
1751- if (!resultChanged && !operandsChanged)
1752- return failure ();
1753-
17541734 rewriter.replaceOpWithNewOp <OP>(op, newResultTy, adaptor.getOperands (),
17551735 op->getAttrs ());
17561736 return success ();
@@ -1799,6 +1779,8 @@ struct StoreOpPattern : public OpConversionPattern<cudaq::cc::StoreOp> {
17991779 }
18001780};
18011781
1782+ // Not an OpInterfacePattern: LogOutputOp has no result type, so op.getType()
1783+ // is not available. Same zero-result pattern as StoreOpPattern above.
18021784struct LogOutputOpPattern : public OpConversionPattern <cudaq::cc::LogOutputOp> {
18031785 using OpConversionPattern::OpConversionPattern;
18041786
0 commit comments