예제 #1
0
        public void VpGithub1074()
        {
            var x1 = m.Reg64("x1");
            var x2 = m.Reg64("x2");
            var x3 = m.Reg64("x3");

            m.Assign(x1, m.Mem64(m.Word64(0x00123400)));
            m.Assign(x2, m.Shl(x1, 3));
            m.Assign(x3, m.ISub(x2, x1));
            m.MStore(m.Word64(0x00123408), x3);

            RunValuePropagator();
            var sExp =
                #region Expected
                @"x1: orig: x1
    def:  x1 = Mem3[0x123400<64>:word64]
    uses: x2 = x1 << 3<8>
          x3 = x1 * 7<64>
          Mem4[0x123408<64>:word64] = x1 * 7<64>
x2: orig: x2
    def:  x2 = x1 << 3<8>
x3: orig: x3
    def:  x3 = x1 * 7<64>
Mem3: orig: Mem0
    uses: x1 = Mem3[0x123400<64>:word64]
Mem4: orig: Mem0
    def:  Mem4[0x123408<64>:word64] = x1 * 7<64>
// SsaProcedureBuilder
// Return size: 0
define SsaProcedureBuilder
SsaProcedureBuilder_entry:
	// succ:  l1
l1:
	x1 = Mem3[0x123400<64>:word64]
	x2 = x1 << 3<8>
	x3 = x1 * 7<64>
	Mem4[0x123408<64>:word64] = x1 * 7<64>
SsaProcedureBuilder_exit:
";

            #endregion
            AssertStringsEqual(sExp, m.Ssa);
        }