40 ConversionPatternRewriter &rewriter)
const override {
41 AIE::DeviceOp dev = op->getParentOfType<AIE::DeviceOp>();
44 auto lockOp = op.getLockOp();
45 if (!lockOp.getLockID()) {
46 op->emitError(
"Tried to lower a SetLockOp on an unassigned lock");
50 auto col = lockOp.colIndex();
51 auto row = lockOp.rowIndex();
52 uint32_t lockID = lockOp.getLockIDValue();
55 auto localLockAddressOpt =
57 assert(localLockAddressOpt &&
"verifier guarantees a valid lock address");
58 auto localLockAddress = *localLockAddressOpt;
60 Location loc = op.getLoc();
61 Value value = adaptor.getValue();
62 uint32_t maxValue = tm.getMaxLockValue();
63 Value inRange = rewriter.createOrFold<arith::CmpIOp>(
64 loc, arith::CmpIPredicate::ule, value,
67 rewriter, loc, inRange,
68 "a runtime lock value must be in [0:" + Twine(maxValue) +
"]")))
70 rewriter.replaceOpWithNewOp<NpuWrite32Op>(
72 rewriter.getI32IntegerAttr(col), rewriter.getI32IntegerAttr(row));