本文整理汇总了Golang中code/google/com/p/go/tools/ssa.Instruction.Parent方法的典型用法代码示例。如果您正苦于以下问题:Golang Instruction.Parent方法的具体用法?Golang Instruction.Parent怎么用?Golang Instruction.Parent使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类code/google/com/p/go/tools/ssa.Instruction
的用法示例。
在下文中一共展示了Instruction.Parent方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: instruction
//.........这里部分代码省略.........
case *ssa.Panic:
arg := fr.value(instr.X).LLVMValue()
fr.builder.CreateCall(fr.runtime.panic_.LLVMValue(), []llvm.Value{arg}, "")
fr.builder.CreateUnreachable()
case *ssa.Phi:
typ := instr.Type()
phi := fr.builder.CreatePHI(fr.llvmtypes.ToLLVM(typ), instr.Comment)
fr.env[instr] = fr.NewValue(phi, typ)
values := make([]llvm.Value, len(instr.Edges))
blocks := make([]llvm.BasicBlock, len(instr.Edges))
block := instr.Block()
for i, edge := range instr.Edges {
values[i] = fr.value(edge).LLVMValue()
blocks[i] = fr.block(block.Preds[i])
}
phi.AddIncoming(values, blocks)
case *ssa.Range:
x := fr.value(instr.X)
switch x.Type().Underlying().(type) {
case *types.Map:
fr.env[instr] = fr.mapIterInit(x)
case *types.Basic: // string
fr.env[instr] = x
default:
panic(fmt.Sprintf("unhandled range for type %T", x.Type()))
}
case *ssa.Return:
switch n := len(instr.Results); n {
case 0:
// https://code.google.com/p/go/issues/detail?id=7022
if r := instr.Parent().Signature.Results(); r != nil && r.Len() > 0 {
fr.builder.CreateUnreachable()
} else {
fr.builder.CreateRetVoid()
}
case 1:
fr.builder.CreateRet(fr.value(instr.Results[0]).LLVMValue())
default:
values := make([]llvm.Value, n)
for i, result := range instr.Results {
values[i] = fr.value(result).LLVMValue()
}
fr.builder.CreateAggregateRet(values)
}
case *ssa.RunDefers:
fr.builder.CreateCall(fr.runtime.rundefers.LLVMValue(), nil, "")
case *ssa.Select:
states := make([]selectState, len(instr.States))
for i, state := range instr.States {
states[i] = selectState{
Dir: state.Dir,
Chan: fr.value(state.Chan),
Send: fr.value(state.Send),
}
}
fr.env[instr] = fr.chanSelect(states, instr.Blocking)
case *ssa.Send:
fr.chanSend(fr.value(instr.Chan), fr.value(instr.X))
case *ssa.Slice: