MCPcopy Create free account
hub / github.com/google/gapid / While

Method While

core/codegen/builder.go:198–215  ·  view source on GitHub ↗

While builds a logic block with the following psuedocode: while test() { loop() }

(test func() *Value, loop func())

Source from the content-addressed store, hash-verified

196// }
197//
198func (b *Builder) While(test func() *Value, loop func()) {
199 testBlock := b.m.ctx.AddBasicBlock(b.function.llvm, "while_test")
200 loopBlock := b.m.ctx.AddBasicBlock(b.function.llvm, "while_loop")
201 exitBlock := b.m.ctx.AddBasicBlock(b.function.llvm, "while_exit")
202
203 b.llvm.CreateBr(testBlock)
204
205 b.block(testBlock, llvm.BasicBlock{}, func() {
206 cond := test()
207 if !b.IsBlockTerminated() {
208 b.llvm.CreateCondBr(cond.llvm, loopBlock, exitBlock)
209 }
210 })
211
212 b.block(loopBlock, testBlock, loop)
213
214 b.setInsertPointAtEnd(exitBlock)
215}
216
217// ForN builds a logic block with the following psuedocode:
218//

Callers 2

iterationMethod · 0.80
buildWriteFuncsMethod · 0.80

Calls 4

blockMethod · 0.95
IsBlockTerminatedMethod · 0.95
setInsertPointAtEndMethod · 0.95
testTypeAlias · 0.50

Tested by

no test coverage detected