@@ -248,6 +248,34 @@ struct SStoreOpLowering : public OpRewritePattern<yul::SStoreOp> {
248248 }
249249};
250250
251+ struct TLoadOpLowering : public OpRewritePattern <yul::TLoadOp> {
252+ using OpRewritePattern<yul::TLoadOp>::OpRewritePattern;
253+
254+ LogicalResult matchAndRewrite (yul::TLoadOp op,
255+ PatternRewriter &r) const override {
256+ evm::Builder evmB (r, op->getLoc ());
257+
258+ Value ptr = evmB.genTStoragePtr (op.getAddr ());
259+ r.replaceOpWithNewOp <LLVM::LoadOp>(op, r.getIntegerType (256 ), ptr,
260+ evm::getAlignment (ptr));
261+ return success ();
262+ }
263+ };
264+
265+ struct TStoreOpLowering : public OpRewritePattern <yul::TStoreOp> {
266+ using OpRewritePattern<yul::TStoreOp>::OpRewritePattern;
267+
268+ LogicalResult matchAndRewrite (yul::TStoreOp op,
269+ PatternRewriter &r) const override {
270+ evm::Builder evmB (r, op->getLoc ());
271+
272+ Value ptr = evmB.genTStoragePtr (op.getAddr ());
273+ r.replaceOpWithNewOp <LLVM::StoreOp>(op, op.getVal (), ptr,
274+ evm::getAlignment (ptr));
275+ return success ();
276+ }
277+ };
278+
251279struct DataOffsetOpLowering : public OpRewritePattern <yul::DataOffsetOp> {
252280 using OpRewritePattern<yul::DataOffsetOp>::OpRewritePattern;
253281
@@ -711,6 +739,8 @@ void evm::populateYulPats(RewritePatternSet &pats) {
711739 ReturnDataCopyOpLowering,
712740 SLoadOpLowering,
713741 SStoreOpLowering,
742+ TLoadOpLowering,
743+ TStoreOpLowering,
714744 DataOffsetOpLowering,
715745 DataSizeOpLowering,
716746 CodeSizeOpLowering,
0 commit comments