public void SliceMem0() { var s = new Slice(PrimitiveType.Word16, new MemoryAccess(MemoryIdentifier.GlobalMemory, new Identifier("ptr", PrimitiveType.Word32, null), PrimitiveType.Word32), 0); var r = new SliceMem_Rule(); Assert.IsTrue(r.Match(s)); var e = r.Transform(); Assert.AreEqual("Mem0[ptr + 0x00000000:word16]", e.ToString()); }
public virtual Expression VisitSlice(Slice slice) { slice.Expression = slice.Expression.Accept(this); if (sliceConst.Match(slice)) { Changed = true; return(sliceConst.Transform()); } if (sliceMem.Match(slice)) { Changed = true; return(sliceMem.Transform()); } // (slice (shl e n) n) ==> e if (sliceShift.Match(slice)) { Changed = true; return(sliceShift.Transform()); } return(slice); }
public virtual Expression VisitSlice(Slice slice) { var e = slice.Expression.Accept(this); slice = new Slice(slice.DataType, e, slice.Offset); if (sliceConst.Match(slice)) { Changed = true; return(sliceConst.Transform()); } if (sliceMem.Match(slice)) { Changed = true; return(sliceMem.Transform()); } // (slice (shl e n) n) ==> e if (sliceShift.Match(slice)) { Changed = true; return(sliceShift.Transform()); } return(slice); }