@@ -197,9 +197,61 @@ class IRBuilderSpec : XCTestCase {
197
197
198
198
// IRBUILDERFCMP-NEXT: ret void
199
199
builder. buildRetVoid ( )
200
+
200
201
// IRBUILDERFCMP-NEXT: }
201
202
module. dump ( )
202
203
} )
204
+
205
+ XCTAssert ( fileCheckOutput ( of: . stderr, withPrefixes: [ " CONTROLFLOW " ] ) {
206
+ // CONTROLFLOW: ; ModuleID = 'IRBuilderTest'
207
+ // CONTROLFLOW-NEXT: source_filename = "IRBuilderTest"
208
+ let module = Module ( name: " IRBuilderTest " )
209
+ let builder = IRBuilder ( module: module)
210
+
211
+ // CONTROLFLOW: define i32 @main() {
212
+ let main = builder. addFunction ( " main " ,
213
+ type: FunctionType ( argTypes: [ ] ,
214
+ returnType: IntType . int32) )
215
+
216
+ // CONTROLFLOW-NEXT: entry:
217
+ let entry = main. appendBasicBlock ( named: " entry " )
218
+ builder. positionAtEnd ( of: entry)
219
+
220
+ // CONTROLFLOW-NEXT: %var = alloca i64
221
+ let variable = builder. buildAlloca ( type: IntType . int64, name: " var " )
222
+
223
+ // CONTROLFLOW-NEXT: store i64 1, i64* %var
224
+ builder. buildStore ( IntType . int64. constant ( 1 ) , to: variable)
225
+
226
+ // CONTROLFLOW-NEXT: %0 = load i64, i64* %var
227
+ let load = builder. buildLoad ( variable)
228
+
229
+ // CONTROLFLOW-NEXT: %1 = icmp eq i64 %0, 0
230
+ let res = builder. buildICmp ( load, IntType . int64. zero ( ) , . eq)
231
+
232
+ let thenBB = main. appendBasicBlock ( named: " then " )
233
+ let elseBB = main. appendBasicBlock ( named: " else " )
234
+
235
+ // CONTROLFLOW-NEXT: br i1 %1, label %then, label %else
236
+ builder. buildCondBr ( condition: res, then: thenBB, else: elseBB)
237
+
238
+ // CONTROLFLOW-NEXT:
239
+ // CONTROLFLOW-NEXT: then:
240
+ builder. positionAtEnd ( of: thenBB)
241
+
242
+ // CONTROLFLOW-NEXT: ret i32 1
243
+ builder. buildRet ( IntType . int32. constant ( 1 ) )
244
+
245
+ // CONTROLFLOW-NEXT:
246
+ // CONTROLFLOW-NEXT: else:
247
+ builder. positionAtEnd ( of: elseBB)
248
+
249
+ // CONTROLFLOW-NEXT: ret i32 0
250
+ builder. buildRet ( IntType . int32. constant ( 0 ) )
251
+
252
+ // CONTROLFLOW-NEXT: }
253
+ module. dump ( )
254
+ } )
203
255
}
204
256
205
257
#if !os(macOS)
0 commit comments