Skip to content

Commit c991ac3

Browse files
committed
feat: readnone
1 parent ea2523b commit c991ac3

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

src/enzyme_ad/jax/Passes/MarkFunctionMemoryEffectsPass.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)