private BoolRelationExpressionNode Visit(BoolRelationExpressionNode node) { var props = properties[node]; node.e1.Visit(this); node.e2.Visit(this); var op = node.op == 1 ? "<" : ">"; generatedCode.Add(new CodeEntity() { Code = $"if {properties[node.e1].addr} {op} {properties[node.e2].addr} goto <label:{props.trueLabel.LabelId}>" }); generatedCode.Add(MakeLabeledGoto(props.falseLabel)); return(node); }
private BoolRelationExpressionNode Visit(BoolRelationExpressionNode node) { Visit(node.e1); Visit(node.e2); LLVMValueRef v; if (node.op == 1) { v = builder.BuildICmp(LLVMIntPredicate.LLVMIntSLT, GetProperty(node.e1).addr, GetProperty(node.e2).addr); } else { v = builder.BuildICmp(LLVMIntPredicate.LLVMIntSGT, GetProperty(node.e1).addr, GetProperty(node.e2).addr); } GetProperty(node).addr = v; return(node); }
private BoolRelationExpressionNode Visit(BoolRelationExpressionNode node) { dynamic props = new ExpandoObject(); properties.Add(node, props); var code = new List <CodeEntry>(); props.code = code; var trueLabel = MakeLabel(); var falseLabel = MakeLabel(); props.trueLabel = trueLabel; props.falseLabel = falseLabel; code.AddRange(properties[node.e1].code); code.AddRange(properties[node.e2].code); var op = node.op == 1 ? "<" : ">"; code.Add(new CodeEntity() { Code = $"if {properties[node.e1].addr} {op} {properties[node.e2].addr} goto <label:{trueLabel.LabelId}>" }); code.Add(MakeLabeledGoto(falseLabel)); return(node); }