@@ -451,18 +451,24 @@ struct MarkFunctionMemoryEffectsPass
451451 argEffectInfo.enzymexlaEffects );
452452
453453 if (isPointerType (funcOp.getArgument (i))) {
454- if (argEffectInfo.readOnly ) {
454+ llvm::dbgs () << " argEffectInfo.readOnly " << argEffectInfo.readOnly
455+ << " argEffectInfo.writeOnly " << argEffectInfo.writeOnly
456+ << " argEffectInfo.readNone " << argEffectInfo.readNone
457+ << " \n " ;
458+ if (argEffectInfo.readOnly && !argEffectInfo.readNone ) {
459+ assert (!argEffectInfo.writeOnly && " readOnly and writeOnly?" );
455460 funcOp.setArgAttr (i, LLVM::LLVMDialect::getReadonlyAttrName (),
456461 builder.getUnitAttr ());
457462 }
458- if (argEffectInfo.writeOnly ) {
463+ if (argEffectInfo.writeOnly && !argEffectInfo.readNone ) {
464+ assert (!argEffectInfo.readOnly && " writeOnly and readOnly?" );
459465 funcOp.setArgAttr (i, LLVM::LLVMDialect::getWriteOnlyAttrName (),
460466 builder.getUnitAttr ());
461467 }
462- // if (argEffectInfo.readNone) {
463- // funcOp.setArgAttr(i, LLVM::LLVMDialect::getReadnoneAttrName(),
464- // builder.getUnitAttr());
465- // }
468+ if (argEffectInfo.readNone ) {
469+ funcOp.setArgAttr (i, LLVM::LLVMDialect::getReadnoneAttrName (),
470+ builder.getUnitAttr ());
471+ }
466472 if (!argEffects[i][3 ]) {
467473 funcOp.setArgAttr (i, LLVM::LLVMDialect::getNoFreeAttrName (),
468474 builder.getUnitAttr ());
0 commit comments