示例#1
0
        public void Process(MethodCompiler compiler, Instruction insn, LLVMBuilderRef builder)
        {
            Instruction destination = (Instruction)insn.Operand;
            var         b1          = compiler.GetBasicBlock(destination.Offset);
            var         b2          = compiler.GetBasicBlock(insn.Next.Offset);
            var         value       = compiler.CurrentBasicBlock.GetState().StackPop();

            if (insn.OpCode.Code == Code.Brtrue || insn.OpCode.Code == Code.Brtrue_S)
            {
                LLVM.BuildCondBr(builder, value.Value, b1.LLVMBlock, b2.LLVMBlock);
            }
            else
            {
                LLVM.BuildCondBr(builder, value.Value, b2.LLVMBlock, b1.LLVMBlock);
            }
        }
示例#2
0
        public void Process(MethodCompiler compiler, Instruction insn, LLVMBuilderRef builder)
        {
            Instruction destination = (Instruction)insn.Operand;
            var         basicBlock  = compiler.GetBasicBlock(destination.Offset);

            LLVM.BuildBr(builder, basicBlock.LLVMBlock);
        }