Skip to content

Commit 6c8c24d

Browse files
committed
feat: readnone
1 parent 936ed09 commit 6c8c24d

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

src/enzyme_ad/jax/Passes/MarkFunctionMemoryEffectsPass.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -429,18 +429,20 @@ struct MarkFunctionMemoryEffectsPass
429429
argEffectInfo.enzymexlaEffects);
430430

431431
if (isPointerType(funcOp.getArgument(i))) {
432-
if (argEffectInfo.readOnly) {
432+
assert((argEffectInfo.readOnly ^ argEffectInfo.writeOnly) &&
433+
"cannot have both readOnly and writeOnly");
434+
if (argEffectInfo.readOnly && !argEffectInfo.readNone) {
433435
funcOp.setArgAttr(i, LLVM::LLVMDialect::getReadonlyAttrName(),
434436
builder.getUnitAttr());
435437
}
436-
if (argEffectInfo.writeOnly) {
438+
if (argEffectInfo.writeOnly && !argEffectInfo.readNone) {
437439
funcOp.setArgAttr(i, LLVM::LLVMDialect::getWriteOnlyAttrName(),
438440
builder.getUnitAttr());
439441
}
440-
// if (argEffectInfo.readNone) {
441-
// funcOp.setArgAttr(i, LLVM::LLVMDialect::getReadnoneAttrName(),
442-
// builder.getUnitAttr());
443-
// }
442+
if (argEffectInfo.readNone) {
443+
funcOp.setArgAttr(i, LLVM::LLVMDialect::getReadnoneAttrName(),
444+
builder.getUnitAttr());
445+
}
444446
if (!argEffects[i][3]) {
445447
funcOp.setArgAttr(i, LLVM::LLVMDialect::getNoFreeAttrName(),
446448
builder.getUnitAttr());

0 commit comments

Comments
 (0)