@@ -305,6 +305,8 @@ void parallel_master_allocate() {
305305// CHECK1-NEXT: entry:
306306// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
307307// 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
308310// CHECK1-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
309311// CHECK1-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
310312// CHECK1-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8
@@ -314,17 +316,24 @@ void parallel_master_allocate() {
314316// CHECK1-NEXT: br i1 [[TMP3]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
315317// CHECK1: omp_if.then:
316318// 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 :%.*]]
318320// CHECK1: invoke.cont:
319321// CHECK1-NEXT: call void @__kmpc_end_master(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
320322// CHECK1-NEXT: br label [[OMP_IF_END]]
321- // CHECK1: omp_if.end:
322- // CHECK1-NEXT: ret void
323- // CHECK1: terminate.lpad:
323+ // CHECK1: lpad:
324324// CHECK1-NEXT: [[TMP4:%.*]] = landingpad { i8*, i32 }
325325// CHECK1-NEXT: catch i8* null
326326// 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]+]]
328337// CHECK1-NEXT: unreachable
329338//
330339//
@@ -354,6 +363,8 @@ void parallel_master_allocate() {
354363// CHECK2-NEXT: entry:
355364// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
356365// 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
357368// CHECK2-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
358369// CHECK2-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
359370// CHECK2-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8
@@ -363,17 +374,24 @@ void parallel_master_allocate() {
363374// CHECK2-NEXT: br i1 [[TMP3]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
364375// CHECK2: omp_if.then:
365376// 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 :%.*]]
367378// CHECK2: invoke.cont:
368379// CHECK2-NEXT: call void @__kmpc_end_master(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
369380// CHECK2-NEXT: br label [[OMP_IF_END]]
370- // CHECK2: omp_if.end:
371- // CHECK2-NEXT: ret void
372- // CHECK2: terminate.lpad:
381+ // CHECK2: lpad:
373382// CHECK2-NEXT: [[TMP4:%.*]] = landingpad { i8*, i32 }
374383// CHECK2-NEXT: catch i8* null
375384// 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]+]]
377395// CHECK2-NEXT: unreachable
378396//
379397//
0 commit comments