@@ -305,6 +305,8 @@ void parallel_master_allocate() {
305
305
// CHECK1-NEXT: entry:
306
306
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
307
307
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
308
+ // CHECK1-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
309
+ // CHECK1-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
308
310
// CHECK1-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
309
311
// CHECK1-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
310
312
// CHECK1-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8
@@ -314,17 +316,24 @@ void parallel_master_allocate() {
314
316
// CHECK1-NEXT: br i1 [[TMP3]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
315
317
// CHECK1: omp_if.then:
316
318
// CHECK1-NEXT: invoke void @_Z3foov()
317
- // CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD :%.*]]
319
+ // CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD :%.*]]
318
320
// CHECK1: invoke.cont:
319
321
// CHECK1-NEXT: call void @__kmpc_end_master(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
320
322
// CHECK1-NEXT: br label [[OMP_IF_END]]
321
- // CHECK1: omp_if.end:
322
- // CHECK1-NEXT: ret void
323
- // CHECK1: terminate.lpad:
323
+ // CHECK1: lpad:
324
324
// CHECK1-NEXT: [[TMP4:%.*]] = landingpad { i8*, i32 }
325
325
// CHECK1-NEXT: catch i8* null
326
326
// CHECK1-NEXT: [[TMP5:%.*]] = extractvalue { i8*, i32 } [[TMP4]], 0
327
- // CHECK1-NEXT: call void @__clang_call_terminate(i8* [[TMP5]]) #[[ATTR6:[0-9]+]]
327
+ // CHECK1-NEXT: store i8* [[TMP5]], i8** [[EXN_SLOT]], align 8
328
+ // CHECK1-NEXT: [[TMP6:%.*]] = extractvalue { i8*, i32 } [[TMP4]], 1
329
+ // CHECK1-NEXT: store i32 [[TMP6]], i32* [[EHSELECTOR_SLOT]], align 4
330
+ // CHECK1-NEXT: call void @__kmpc_end_master(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
331
+ // CHECK1-NEXT: br label [[TERMINATE_HANDLER:%.*]]
332
+ // CHECK1: omp_if.end:
333
+ // CHECK1-NEXT: ret void
334
+ // CHECK1: terminate.handler:
335
+ // CHECK1-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
336
+ // CHECK1-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR6:[0-9]+]]
328
337
// CHECK1-NEXT: unreachable
329
338
//
330
339
//
@@ -354,6 +363,8 @@ void parallel_master_allocate() {
354
363
// CHECK2-NEXT: entry:
355
364
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
356
365
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
366
+ // CHECK2-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
367
+ // CHECK2-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
357
368
// CHECK2-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
358
369
// CHECK2-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
359
370
// CHECK2-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8
@@ -363,17 +374,24 @@ void parallel_master_allocate() {
363
374
// CHECK2-NEXT: br i1 [[TMP3]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
364
375
// CHECK2: omp_if.then:
365
376
// CHECK2-NEXT: invoke void @_Z3foov()
366
- // CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD :%.*]]
377
+ // CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD :%.*]]
367
378
// CHECK2: invoke.cont:
368
379
// CHECK2-NEXT: call void @__kmpc_end_master(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
369
380
// CHECK2-NEXT: br label [[OMP_IF_END]]
370
- // CHECK2: omp_if.end:
371
- // CHECK2-NEXT: ret void
372
- // CHECK2: terminate.lpad:
381
+ // CHECK2: lpad:
373
382
// CHECK2-NEXT: [[TMP4:%.*]] = landingpad { i8*, i32 }
374
383
// CHECK2-NEXT: catch i8* null
375
384
// CHECK2-NEXT: [[TMP5:%.*]] = extractvalue { i8*, i32 } [[TMP4]], 0
376
- // CHECK2-NEXT: call void @__clang_call_terminate(i8* [[TMP5]]) #[[ATTR6:[0-9]+]]
385
+ // CHECK2-NEXT: store i8* [[TMP5]], i8** [[EXN_SLOT]], align 8
386
+ // CHECK2-NEXT: [[TMP6:%.*]] = extractvalue { i8*, i32 } [[TMP4]], 1
387
+ // CHECK2-NEXT: store i32 [[TMP6]], i32* [[EHSELECTOR_SLOT]], align 4
388
+ // CHECK2-NEXT: call void @__kmpc_end_master(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
389
+ // CHECK2-NEXT: br label [[TERMINATE_HANDLER:%.*]]
390
+ // CHECK2: omp_if.end:
391
+ // CHECK2-NEXT: ret void
392
+ // CHECK2: terminate.handler:
393
+ // CHECK2-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
394
+ // CHECK2-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR6:[0-9]+]]
377
395
// CHECK2-NEXT: unreachable
378
396
//
379
397
//
0 commit comments