本文整理汇总了C#中SsaIdentifierCollection.Add方法的典型用法代码示例。如果您正苦于以下问题:C# SsaIdentifierCollection.Add方法的具体用法?C# SsaIdentifierCollection.Add怎么用?C# SsaIdentifierCollection.Add使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SsaIdentifierCollection
的用法示例。
在下文中一共展示了SsaIdentifierCollection.Add方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: SetUp
public void SetUp()
{
m = new ProcedureBuilder();
id = m.Local32("id");
x = m.Local32("x");
ssaIds = new SsaIdentifierCollection();
foreach (Identifier i in m.Procedure.Frame.Identifiers)
{
ssaIds.Add(i, null, null, false);
}
}
示例2: BuildSsaIdentifiers
private SsaIdentifierCollection BuildSsaIdentifiers()
{
var mrFoo = new RegisterStorage("foo", 1, 0, PrimitiveType.Word32);
var mrBar = new RegisterStorage("bar", 2, 1, PrimitiveType.Word32);
foo = new Identifier(mrFoo.Name, mrFoo.DataType, mrFoo);
var coll = new SsaIdentifierCollection();
var src = Constant.Word32(1);
foo = coll.Add(foo, new Statement(0, new Assignment(foo, src), null), src, false).Identifier;
return coll;
}
示例3: OutpReplaceManyUses
public void OutpReplaceManyUses()
{
ProcedureBuilder m = new ProcedureBuilder();
Identifier foo = new Identifier("foo", PrimitiveType.Word32, null);
Identifier bar = new Identifier("bar", PrimitiveType.Word32, null);
Identifier pfoo = new Identifier("pfoo", PrimitiveType.Pointer32, null);
Block block = m.Label("block");
m.Assign(foo, 1);
Statement stmFoo = m.Block.Statements.Last;
m.Assign(bar, foo);
Statement stmBar = m.Block.Statements.Last;
SsaIdentifier ssaFoo = new SsaIdentifier(foo, foo, stmFoo, ((Assignment) stmFoo.Instruction).Src, false);
ssaFoo.Uses.Add(stmBar);
SsaIdentifier ssaBar = new SsaIdentifier(bar, bar, stmBar, ((Assignment) stmBar.Instruction).Src, false);
SsaIdentifierCollection ssaIds = new SsaIdentifierCollection();
ssaIds.Add(foo, ssaFoo);
ssaIds.Add(bar, ssaBar);
OutParameterTransformer opt = new OutParameterTransformer(m.Procedure, ssaIds);
opt.ReplaceDefinitionsWithOutParameter(foo, pfoo);
Assert.AreEqual(3, block.Statements.Count);
Assert.AreEqual("foo = 0x00000001", block.Statements[0].Instruction.ToString());
Assert.AreEqual("*pfoo = foo", block.Statements[1].Instruction.ToString());
Assert.AreEqual("bar = foo", block.Statements[2].Instruction.ToString());
}
示例4: OutpReplacePhi
public void OutpReplacePhi()
{
var m = new ProcedureBuilder();
var foo = new Identifier("foo", PrimitiveType.Word32, null);
var foo1 = new Identifier("foo1", PrimitiveType.Word32, null);
var foo2 = new Identifier("foo2", PrimitiveType.Word32, null);
var foo3 = new Identifier("foo3", PrimitiveType.Word32, null);
var pfoo = new Identifier("pfoo", PrimitiveType.Pointer32, null);
Block block1 = m.Label("block1");
m.Assign(foo1, Constant.Word32(1));
Statement stmFoo1 = m.Block.Statements.Last;
Block block2 = m.Label("block2");
m.Assign(foo2, Constant.Word32(2));
Statement stmFoo2 = m.Block.Statements.Last;
Block block3 = m.Label("block3");
Statement stmFoo3 = m.Phi(foo3, foo1, foo2);
SsaIdentifierCollection ssaIds = new SsaIdentifierCollection();
ssaIds.Add(foo1, new SsaIdentifier(foo1, foo, stmFoo1, null, false));
ssaIds.Add(foo2, new SsaIdentifier(foo2, foo, stmFoo2, null, false));
ssaIds.Add(foo3, new SsaIdentifier(foo3, foo, stmFoo3, null, false));
OutParameterTransformer opt = new OutParameterTransformer(null, ssaIds);
opt.ReplaceDefinitionsWithOutParameter(foo3, pfoo);
Assert.AreEqual("*pfoo = 0x00000001", stmFoo1.Instruction.ToString());
Assert.AreEqual("*pfoo = 0x00000002", stmFoo2.Instruction.ToString());
Assert.AreEqual("foo3 = PHI(foo1, foo2)", stmFoo3.Instruction.ToString());
}
示例5: Liv_CreateIncInitialValue
public void Liv_CreateIncInitialValue()
{
ssaIds = new SsaIdentifierCollection();
LinearInductionVariableFinder liv = new LinearInductionVariableFinder(null, ssaIds, null);
liv.Context.InitialValue = Constant.Word32(0);
liv.Context.PhiStatement = new Statement(0, null, null);
liv.Context.PhiIdentifier = new Identifier("foo_0", PrimitiveType.Word32, null);
ssaIds.Add(liv.Context.PhiIdentifier, new SsaIdentifier(liv.Context.PhiIdentifier, liv.Context.PhiIdentifier, liv.Context.PhiStatement, null, false));
liv.Context.DeltaValue = Constant.Word32(1);
liv.Context.DeltaStatement = new Statement(0, new Assignment(new Identifier("foo_1", PrimitiveType.Word32, null),
new BinaryExpression(Operator.IAdd, PrimitiveType.Word32, liv.Context.PhiIdentifier, liv.Context.DeltaValue)), null);
ssaIds[liv.Context.PhiIdentifier].Uses.Add(liv.Context.DeltaStatement);
LinearInductionVariable iv = liv.CreateInductionVariable();
Assert.AreEqual("(0x00000001 0x00000001 ?)", iv.ToString());
}
示例6: Liv_CreateBareMinimum
public void Liv_CreateBareMinimum()
{
ssaIds = new SsaIdentifierCollection();
Identifier id0 = new Identifier("foo", PrimitiveType.Word32, new TemporaryStorage("foo", 1, PrimitiveType.Word32));
Identifier id1 = new Identifier("bar", PrimitiveType.Word32, new TemporaryStorage("bar", 1, PrimitiveType.Word32));
Identifier phi = new Identifier("i_3", PrimitiveType.Word32, null);
ssaIds.Add(id0, new SsaIdentifier(id0, id0, null, null, false));
ssaIds.Add(id1, new SsaIdentifier(id1, id1, null, null, false));
ssaIds.Add(phi, new SsaIdentifier(phi, phi, null, null, false));
LinearInductionVariableFinder liv = new LinearInductionVariableFinder(null, ssaIds, null);
liv.Context.PhiStatement = new Statement(0, null, null);
liv.Context.PhiIdentifier = phi;
liv.Context.DeltaValue = Constant.Word32(1);
LinearInductionVariable iv = liv.CreateInductionVariable();
Assert.AreEqual("(? 0x00000001 ?)", iv.ToString());
}