forked from OSchip/llvm-project
Skip exception cleanups when the innermost scope is EHTerminateScope.
EHTerminateScope is used to implement C++ noexcept semantics. Per C++ [except.terminate], it is implemented-defined whether no, some, or all cleanups are run prior to terminatation. Therefore, the code to run cleanups on the way towards termination is unnecessary, and may be omitted. After this change, we will still run some cleanups: any cleanups in a function called from the noexcept function will continue to run, while those in the noexcept function itself will not. (Commit attempt 2: check InnermostEHScope != stable_end() before accessing it.) Differential Revision: https://reviews.llvm.org/D113620
This commit is contained in:
parent
8e123ca65f
commit
fa87fa97fb
|
@ -180,6 +180,15 @@ void *EHScopeStack::pushCleanup(CleanupKind Kind, size_t Size) {
|
||||||
bool IsNormalCleanup = Kind & NormalCleanup;
|
bool IsNormalCleanup = Kind & NormalCleanup;
|
||||||
bool IsEHCleanup = Kind & EHCleanup;
|
bool IsEHCleanup = Kind & EHCleanup;
|
||||||
bool IsLifetimeMarker = Kind & LifetimeMarker;
|
bool IsLifetimeMarker = Kind & LifetimeMarker;
|
||||||
|
|
||||||
|
// Per C++ [except.terminate], it is implementation-defined whether none,
|
||||||
|
// some, or all cleanups are called before std::terminate. Thus, when
|
||||||
|
// terminate is the current EH scope, we may skip adding any EH cleanup
|
||||||
|
// scopes.
|
||||||
|
if (InnermostEHScope != stable_end() &&
|
||||||
|
find(InnermostEHScope)->getKind() == EHScope::Terminate)
|
||||||
|
IsEHCleanup = false;
|
||||||
|
|
||||||
EHCleanupScope *Scope =
|
EHCleanupScope *Scope =
|
||||||
new (Buffer) EHCleanupScope(IsNormalCleanup,
|
new (Buffer) EHCleanupScope(IsNormalCleanup,
|
||||||
IsEHCleanup,
|
IsEHCleanup,
|
||||||
|
|
|
@ -16,32 +16,23 @@ namespace test0 {
|
||||||
foo();
|
foo();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define{{.*}} void @_ZN5test04testEv()
|
// CHECK-LABEL: define{{.*}} void @_ZN5test04testEv()
|
||||||
// CHECK: [[EXN:%.*]] = alloca i8*
|
|
||||||
// This goes to the terminate lpad.
|
// This goes to the terminate lpad.
|
||||||
// CHECK: invoke void @_ZN5test01AC1Ev(
|
// CHECK: invoke void @_ZN5test01AC1Ev(
|
||||||
// This goes to the cleanup-and-then-terminate lpad.
|
// CHECK-NEXT: unwind label %[[TERMINATE_LPAD:.*]]
|
||||||
|
// This also goes to the terminate lpad (no cleanups!).
|
||||||
// CHECK: invoke void @_ZN5test03fooEv()
|
// CHECK: invoke void @_ZN5test03fooEv()
|
||||||
|
// CHECK-NEXT: unwind label %[[TERMINATE_LPAD]]
|
||||||
// Destructors don't throw by default in C++11.
|
// Destructors don't throw by default in C++11.
|
||||||
// CHECK: call void @_ZN5test01AD1Ev(
|
// CHECK: call void @_ZN5test01AD1Ev(
|
||||||
// Cleanup lpad.
|
// Cleanup lpad.
|
||||||
// CHECK: [[T0:%.*]] = landingpad
|
// CHECK: [[TERMINATE_LPAD]]:
|
||||||
// CHECK-NEXT: catch i8* null
|
// CHECK-NEXT: [[T0:%.*]] = landingpad
|
||||||
// CHECK-NEXT: [[T1:%.*]] = extractvalue { i8*, i32 } [[T0]], 0
|
|
||||||
// CHECK-NEXT: store i8* [[T1]], i8** [[EXN]]
|
|
||||||
// (Calling this destructor is not technically required.)
|
|
||||||
// CHECK: call void @_ZN5test01AD1Ev(
|
|
||||||
// CHECK-NEXT: br label
|
|
||||||
// The terminate landing pad jumps in here for some reason.
|
|
||||||
// CHECK: [[T0:%.*]] = landingpad
|
|
||||||
// CHECK-NEXT: catch i8* null
|
// CHECK-NEXT: catch i8* null
|
||||||
// CHECK-NEXT: [[T1:%.*]] = extractvalue { i8*, i32 } [[T0]], 0
|
// CHECK-NEXT: [[T1:%.*]] = extractvalue { i8*, i32 } [[T0]], 0
|
||||||
// CHECK-NEXT: call void @__clang_call_terminate(i8* [[T1]])
|
// CHECK-NEXT: call void @__clang_call_terminate(i8* [[T1]])
|
||||||
// CHECK-NEXT: unreachable
|
// CHECK-NEXT: unreachable
|
||||||
// The terminate handler chained to by the cleanup lpad.
|
|
||||||
// CHECK: [[T0:%.*]] = load i8*, i8** [[EXN]]
|
|
||||||
// CHECK-NEXT: call void @__clang_call_terminate(i8* [[T0]])
|
|
||||||
// CHECK-NEXT: unreachable
|
|
||||||
|
|
||||||
// CHECK-LABEL: define linkonce_odr hidden void @__clang_call_terminate(
|
// CHECK-LABEL: define linkonce_odr hidden void @__clang_call_terminate(
|
||||||
// CHECK: call i8* @__cxa_begin_catch(
|
// CHECK: call i8* @__cxa_begin_catch(
|
||||||
|
|
|
@ -1051,8 +1051,6 @@ int main() {
|
||||||
// CHECK1-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK1-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK1-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK1-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK1-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK1-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK1-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK1-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -1086,7 +1084,7 @@ int main() {
|
||||||
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK1: invoke.cont:
|
// CHECK1: invoke.cont:
|
||||||
// CHECK1-NEXT: [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK1-NEXT: [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK1-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK1-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]
|
||||||
// CHECK1: invoke.cont2:
|
// CHECK1: invoke.cont2:
|
||||||
// CHECK1-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK1-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK1-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
// CHECK1-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
||||||
|
@ -1103,29 +1101,16 @@ int main() {
|
||||||
// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK1-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
// CHECK1-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
||||||
// CHECK1-NEXT: br label [[OMP_INNER_FOR_COND]]
|
// CHECK1-NEXT: br label [[OMP_INNER_FOR_COND]]
|
||||||
// CHECK1: lpad:
|
|
||||||
// CHECK1-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK1-NEXT: catch i8* null
|
|
||||||
// CHECK1-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK1-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK1-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK1-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK1-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
|
||||||
// CHECK1-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK1: omp.inner.for.end:
|
// CHECK1: omp.inner.for.end:
|
||||||
// CHECK1-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK1-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK1: omp.loop.exit:
|
// CHECK1: omp.loop.exit:
|
||||||
// CHECK1-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK1-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: terminate.lpad:
|
// CHECK1: terminate.lpad:
|
||||||
// CHECK1-NEXT: [[TMP17:%.*]] = landingpad { i8*, i32 }
|
// CHECK1-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK1-NEXT: catch i8* null
|
// CHECK1-NEXT: catch i8* null
|
||||||
// CHECK1-NEXT: [[TMP18:%.*]] = extractvalue { i8*, i32 } [[TMP17]], 0
|
// CHECK1-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
||||||
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[TMP18]]) #[[ATTR10]]
|
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[TMP15]]) #[[ATTR10]]
|
||||||
// CHECK1-NEXT: unreachable
|
|
||||||
// CHECK1: terminate.handler:
|
|
||||||
// CHECK1-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]]
|
|
||||||
// CHECK1-NEXT: unreachable
|
// CHECK1-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -2173,8 +2158,6 @@ int main() {
|
||||||
// CHECK2-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK2-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK2-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK2-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK2-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK2-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK2-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK2-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK2-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK2-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -2208,7 +2191,7 @@ int main() {
|
||||||
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK2: invoke.cont:
|
// CHECK2: invoke.cont:
|
||||||
// CHECK2-NEXT: [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK2-NEXT: [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK2-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK2-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]
|
||||||
// CHECK2: invoke.cont2:
|
// CHECK2: invoke.cont2:
|
||||||
// CHECK2-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK2-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK2-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
// CHECK2-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
||||||
|
@ -2225,29 +2208,16 @@ int main() {
|
||||||
// CHECK2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK2-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
// CHECK2-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
||||||
// CHECK2-NEXT: br label [[OMP_INNER_FOR_COND]]
|
// CHECK2-NEXT: br label [[OMP_INNER_FOR_COND]]
|
||||||
// CHECK2: lpad:
|
|
||||||
// CHECK2-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK2-NEXT: catch i8* null
|
|
||||||
// CHECK2-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK2-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK2-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK2-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK2-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
|
||||||
// CHECK2-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK2: omp.inner.for.end:
|
// CHECK2: omp.inner.for.end:
|
||||||
// CHECK2-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK2-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK2: omp.loop.exit:
|
// CHECK2: omp.loop.exit:
|
||||||
// CHECK2-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK2-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: terminate.lpad:
|
// CHECK2: terminate.lpad:
|
||||||
// CHECK2-NEXT: [[TMP17:%.*]] = landingpad { i8*, i32 }
|
// CHECK2-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK2-NEXT: catch i8* null
|
// CHECK2-NEXT: catch i8* null
|
||||||
// CHECK2-NEXT: [[TMP18:%.*]] = extractvalue { i8*, i32 } [[TMP17]], 0
|
// CHECK2-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
||||||
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[TMP18]]) #[[ATTR10]]
|
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[TMP15]]) #[[ATTR10]]
|
||||||
// CHECK2-NEXT: unreachable
|
|
||||||
// CHECK2: terminate.handler:
|
|
||||||
// CHECK2-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]]
|
|
||||||
// CHECK2-NEXT: unreachable
|
// CHECK2-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -3286,8 +3256,6 @@ int main() {
|
||||||
// CHECK5-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK5-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK5-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK5-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK5-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK5-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK5-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK5-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK5-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK5-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK5-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK5-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK5-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK5-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -3321,7 +3289,7 @@ int main() {
|
||||||
// CHECK5-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
// CHECK5-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK5: invoke.cont:
|
// CHECK5: invoke.cont:
|
||||||
// CHECK5-NEXT: [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK5-NEXT: [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK5-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK5-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]
|
||||||
// CHECK5: invoke.cont2:
|
// CHECK5: invoke.cont2:
|
||||||
// CHECK5-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK5-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK5-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
// CHECK5-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
||||||
|
@ -3338,29 +3306,16 @@ int main() {
|
||||||
// CHECK5-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK5-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK5-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
// CHECK5-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
||||||
// CHECK5-NEXT: br label [[OMP_INNER_FOR_COND]]
|
// CHECK5-NEXT: br label [[OMP_INNER_FOR_COND]]
|
||||||
// CHECK5: lpad:
|
|
||||||
// CHECK5-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK5-NEXT: catch i8* null
|
|
||||||
// CHECK5-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK5-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK5-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK5-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK5-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
|
||||||
// CHECK5-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK5: omp.inner.for.end:
|
// CHECK5: omp.inner.for.end:
|
||||||
// CHECK5-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK5-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK5: omp.loop.exit:
|
// CHECK5: omp.loop.exit:
|
||||||
// CHECK5-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK5-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK5-NEXT: ret void
|
// CHECK5-NEXT: ret void
|
||||||
// CHECK5: terminate.lpad:
|
// CHECK5: terminate.lpad:
|
||||||
// CHECK5-NEXT: [[TMP17:%.*]] = landingpad { i8*, i32 }
|
// CHECK5-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK5-NEXT: catch i8* null
|
// CHECK5-NEXT: catch i8* null
|
||||||
// CHECK5-NEXT: [[TMP18:%.*]] = extractvalue { i8*, i32 } [[TMP17]], 0
|
// CHECK5-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
||||||
// CHECK5-NEXT: call void @__clang_call_terminate(i8* [[TMP18]]) #[[ATTR10]]
|
// CHECK5-NEXT: call void @__clang_call_terminate(i8* [[TMP15]]) #[[ATTR10]]
|
||||||
// CHECK5-NEXT: unreachable
|
|
||||||
// CHECK5: terminate.handler:
|
|
||||||
// CHECK5-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK5-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]]
|
|
||||||
// CHECK5-NEXT: unreachable
|
// CHECK5-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -4408,8 +4363,6 @@ int main() {
|
||||||
// CHECK6-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK6-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK6-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK6-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK6-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK6-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK6-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK6-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK6-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK6-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK6-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK6-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK6-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK6-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -4443,7 +4396,7 @@ int main() {
|
||||||
// CHECK6-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
// CHECK6-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK6: invoke.cont:
|
// CHECK6: invoke.cont:
|
||||||
// CHECK6-NEXT: [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK6-NEXT: [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK6-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK6-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]
|
||||||
// CHECK6: invoke.cont2:
|
// CHECK6: invoke.cont2:
|
||||||
// CHECK6-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK6-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK6-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
// CHECK6-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
||||||
|
@ -4460,29 +4413,16 @@ int main() {
|
||||||
// CHECK6-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK6-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK6-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
// CHECK6-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
||||||
// CHECK6-NEXT: br label [[OMP_INNER_FOR_COND]]
|
// CHECK6-NEXT: br label [[OMP_INNER_FOR_COND]]
|
||||||
// CHECK6: lpad:
|
|
||||||
// CHECK6-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK6-NEXT: catch i8* null
|
|
||||||
// CHECK6-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK6-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK6-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK6-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK6-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
|
||||||
// CHECK6-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK6: omp.inner.for.end:
|
// CHECK6: omp.inner.for.end:
|
||||||
// CHECK6-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK6-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK6: omp.loop.exit:
|
// CHECK6: omp.loop.exit:
|
||||||
// CHECK6-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK6-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK6-NEXT: ret void
|
// CHECK6-NEXT: ret void
|
||||||
// CHECK6: terminate.lpad:
|
// CHECK6: terminate.lpad:
|
||||||
// CHECK6-NEXT: [[TMP17:%.*]] = landingpad { i8*, i32 }
|
// CHECK6-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK6-NEXT: catch i8* null
|
// CHECK6-NEXT: catch i8* null
|
||||||
// CHECK6-NEXT: [[TMP18:%.*]] = extractvalue { i8*, i32 } [[TMP17]], 0
|
// CHECK6-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
||||||
// CHECK6-NEXT: call void @__clang_call_terminate(i8* [[TMP18]]) #[[ATTR10]]
|
// CHECK6-NEXT: call void @__clang_call_terminate(i8* [[TMP15]]) #[[ATTR10]]
|
||||||
// CHECK6-NEXT: unreachable
|
|
||||||
// CHECK6: terminate.handler:
|
|
||||||
// CHECK6-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK6-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]]
|
|
||||||
// CHECK6-NEXT: unreachable
|
// CHECK6-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -5539,8 +5479,6 @@ int main() {
|
||||||
// CHECK9-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK9-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK9-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK9-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK9-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK9-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK9-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK9-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK9-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK9-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK9-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK9-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK9-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK9-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -5574,7 +5512,7 @@ int main() {
|
||||||
// CHECK9-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
// CHECK9-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK9: invoke.cont:
|
// CHECK9: invoke.cont:
|
||||||
// CHECK9-NEXT: [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK9-NEXT: [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK9-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK9-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]
|
||||||
// CHECK9: invoke.cont2:
|
// CHECK9: invoke.cont2:
|
||||||
// CHECK9-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK9-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK9-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
// CHECK9-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
||||||
|
@ -5591,29 +5529,16 @@ int main() {
|
||||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK9-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
// CHECK9-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
||||||
// CHECK9-NEXT: br label [[OMP_INNER_FOR_COND]]
|
// CHECK9-NEXT: br label [[OMP_INNER_FOR_COND]]
|
||||||
// CHECK9: lpad:
|
|
||||||
// CHECK9-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK9-NEXT: catch i8* null
|
|
||||||
// CHECK9-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK9-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK9-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK9-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK9-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
|
||||||
// CHECK9-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK9: omp.inner.for.end:
|
// CHECK9: omp.inner.for.end:
|
||||||
// CHECK9-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK9-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK9: omp.loop.exit:
|
// CHECK9: omp.loop.exit:
|
||||||
// CHECK9-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK9-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK9-NEXT: ret void
|
// CHECK9-NEXT: ret void
|
||||||
// CHECK9: terminate.lpad:
|
// CHECK9: terminate.lpad:
|
||||||
// CHECK9-NEXT: [[TMP17:%.*]] = landingpad { i8*, i32 }
|
// CHECK9-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK9-NEXT: catch i8* null
|
// CHECK9-NEXT: catch i8* null
|
||||||
// CHECK9-NEXT: [[TMP18:%.*]] = extractvalue { i8*, i32 } [[TMP17]], 0
|
// CHECK9-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
||||||
// CHECK9-NEXT: call void @__clang_call_terminate(i8* [[TMP18]]) #[[ATTR10]]
|
// CHECK9-NEXT: call void @__clang_call_terminate(i8* [[TMP15]]) #[[ATTR10]]
|
||||||
// CHECK9-NEXT: unreachable
|
|
||||||
// CHECK9: terminate.handler:
|
|
||||||
// CHECK9-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK9-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]]
|
|
||||||
// CHECK9-NEXT: unreachable
|
// CHECK9-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -6661,8 +6586,6 @@ int main() {
|
||||||
// CHECK10-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK10-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK10-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK10-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK10-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK10-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK10-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK10-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK10-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK10-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK10-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK10-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK10-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK10-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -6696,7 +6619,7 @@ int main() {
|
||||||
// CHECK10-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
// CHECK10-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK10: invoke.cont:
|
// CHECK10: invoke.cont:
|
||||||
// CHECK10-NEXT: [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK10-NEXT: [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK10-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK10-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]
|
||||||
// CHECK10: invoke.cont2:
|
// CHECK10: invoke.cont2:
|
||||||
// CHECK10-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK10-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK10-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
// CHECK10-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
||||||
|
@ -6713,29 +6636,16 @@ int main() {
|
||||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK10-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
// CHECK10-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
||||||
// CHECK10-NEXT: br label [[OMP_INNER_FOR_COND]]
|
// CHECK10-NEXT: br label [[OMP_INNER_FOR_COND]]
|
||||||
// CHECK10: lpad:
|
|
||||||
// CHECK10-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK10-NEXT: catch i8* null
|
|
||||||
// CHECK10-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK10-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK10-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK10-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK10-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
|
||||||
// CHECK10-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK10: omp.inner.for.end:
|
// CHECK10: omp.inner.for.end:
|
||||||
// CHECK10-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK10-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK10: omp.loop.exit:
|
// CHECK10: omp.loop.exit:
|
||||||
// CHECK10-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK10-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK10-NEXT: ret void
|
// CHECK10-NEXT: ret void
|
||||||
// CHECK10: terminate.lpad:
|
// CHECK10: terminate.lpad:
|
||||||
// CHECK10-NEXT: [[TMP17:%.*]] = landingpad { i8*, i32 }
|
// CHECK10-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK10-NEXT: catch i8* null
|
// CHECK10-NEXT: catch i8* null
|
||||||
// CHECK10-NEXT: [[TMP18:%.*]] = extractvalue { i8*, i32 } [[TMP17]], 0
|
// CHECK10-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
||||||
// CHECK10-NEXT: call void @__clang_call_terminate(i8* [[TMP18]]) #[[ATTR10]]
|
// CHECK10-NEXT: call void @__clang_call_terminate(i8* [[TMP15]]) #[[ATTR10]]
|
||||||
// CHECK10-NEXT: unreachable
|
|
||||||
// CHECK10: terminate.handler:
|
|
||||||
// CHECK10-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK10-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]]
|
|
||||||
// CHECK10-NEXT: unreachable
|
// CHECK10-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -7774,8 +7684,6 @@ int main() {
|
||||||
// CHECK13-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK13-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK13-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK13-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK13-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK13-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK13-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK13-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK13-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK13-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK13-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK13-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK13-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK13-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -7809,7 +7717,7 @@ int main() {
|
||||||
// CHECK13-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
// CHECK13-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK13: invoke.cont:
|
// CHECK13: invoke.cont:
|
||||||
// CHECK13-NEXT: [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK13-NEXT: [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK13-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK13-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]
|
||||||
// CHECK13: invoke.cont2:
|
// CHECK13: invoke.cont2:
|
||||||
// CHECK13-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK13-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK13-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
// CHECK13-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
||||||
|
@ -7826,29 +7734,16 @@ int main() {
|
||||||
// CHECK13-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK13-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK13-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
// CHECK13-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
||||||
// CHECK13-NEXT: br label [[OMP_INNER_FOR_COND]]
|
// CHECK13-NEXT: br label [[OMP_INNER_FOR_COND]]
|
||||||
// CHECK13: lpad:
|
|
||||||
// CHECK13-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK13-NEXT: catch i8* null
|
|
||||||
// CHECK13-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK13-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK13-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK13-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK13-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
|
||||||
// CHECK13-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK13: omp.inner.for.end:
|
// CHECK13: omp.inner.for.end:
|
||||||
// CHECK13-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK13-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK13: omp.loop.exit:
|
// CHECK13: omp.loop.exit:
|
||||||
// CHECK13-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK13-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK13-NEXT: ret void
|
// CHECK13-NEXT: ret void
|
||||||
// CHECK13: terminate.lpad:
|
// CHECK13: terminate.lpad:
|
||||||
// CHECK13-NEXT: [[TMP17:%.*]] = landingpad { i8*, i32 }
|
// CHECK13-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK13-NEXT: catch i8* null
|
// CHECK13-NEXT: catch i8* null
|
||||||
// CHECK13-NEXT: [[TMP18:%.*]] = extractvalue { i8*, i32 } [[TMP17]], 0
|
// CHECK13-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
||||||
// CHECK13-NEXT: call void @__clang_call_terminate(i8* [[TMP18]]) #[[ATTR10]]
|
// CHECK13-NEXT: call void @__clang_call_terminate(i8* [[TMP15]]) #[[ATTR10]]
|
||||||
// CHECK13-NEXT: unreachable
|
|
||||||
// CHECK13: terminate.handler:
|
|
||||||
// CHECK13-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK13-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]]
|
|
||||||
// CHECK13-NEXT: unreachable
|
// CHECK13-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -8896,8 +8791,6 @@ int main() {
|
||||||
// CHECK14-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK14-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK14-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK14-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK14-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK14-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK14-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK14-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK14-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK14-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK14-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK14-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK14-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK14-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -8931,7 +8824,7 @@ int main() {
|
||||||
// CHECK14-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
// CHECK14-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK14: invoke.cont:
|
// CHECK14: invoke.cont:
|
||||||
// CHECK14-NEXT: [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK14-NEXT: [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK14-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK14-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]
|
||||||
// CHECK14: invoke.cont2:
|
// CHECK14: invoke.cont2:
|
||||||
// CHECK14-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK14-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK14-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
// CHECK14-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])
|
||||||
|
@ -8948,29 +8841,16 @@ int main() {
|
||||||
// CHECK14-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK14-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK14-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
// CHECK14-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4
|
||||||
// CHECK14-NEXT: br label [[OMP_INNER_FOR_COND]]
|
// CHECK14-NEXT: br label [[OMP_INNER_FOR_COND]]
|
||||||
// CHECK14: lpad:
|
|
||||||
// CHECK14-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK14-NEXT: catch i8* null
|
|
||||||
// CHECK14-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK14-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK14-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK14-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK14-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
|
||||||
// CHECK14-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK14: omp.inner.for.end:
|
// CHECK14: omp.inner.for.end:
|
||||||
// CHECK14-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK14-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK14: omp.loop.exit:
|
// CHECK14: omp.loop.exit:
|
||||||
// CHECK14-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK14-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK14-NEXT: ret void
|
// CHECK14-NEXT: ret void
|
||||||
// CHECK14: terminate.lpad:
|
// CHECK14: terminate.lpad:
|
||||||
// CHECK14-NEXT: [[TMP17:%.*]] = landingpad { i8*, i32 }
|
// CHECK14-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK14-NEXT: catch i8* null
|
// CHECK14-NEXT: catch i8* null
|
||||||
// CHECK14-NEXT: [[TMP18:%.*]] = extractvalue { i8*, i32 } [[TMP17]], 0
|
// CHECK14-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
||||||
// CHECK14-NEXT: call void @__clang_call_terminate(i8* [[TMP18]]) #[[ATTR10]]
|
// CHECK14-NEXT: call void @__clang_call_terminate(i8* [[TMP15]]) #[[ATTR10]]
|
||||||
// CHECK14-NEXT: unreachable
|
|
||||||
// CHECK14: terminate.handler:
|
|
||||||
// CHECK14-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK14-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]]
|
|
||||||
// CHECK14-NEXT: unreachable
|
// CHECK14-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
|
@ -1121,8 +1121,6 @@ int main() {
|
||||||
// CHECK1-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK1-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK1-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK1-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK1-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK1-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK1-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK1-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -1156,7 +1154,7 @@ int main() {
|
||||||
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !42
|
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !42
|
||||||
// CHECK1: invoke.cont:
|
// CHECK1: invoke.cont:
|
||||||
// CHECK1-NEXT: [[CALL:%.*]] = invoke signext i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK1-NEXT: [[CALL:%.*]] = invoke signext i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK1-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]], !llvm.access.group !42
|
// CHECK1-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]], !llvm.access.group !42
|
||||||
// CHECK1: invoke.cont2:
|
// CHECK1: invoke.cont2:
|
||||||
// CHECK1-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK1-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK1-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !42
|
// CHECK1-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !42
|
||||||
|
@ -1173,36 +1171,23 @@ int main() {
|
||||||
// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK1-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !42
|
// CHECK1-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !42
|
||||||
// CHECK1-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP43:![0-9]+]]
|
// CHECK1-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP43:![0-9]+]]
|
||||||
// CHECK1: lpad:
|
|
||||||
// CHECK1-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK1-NEXT: catch i8* null
|
|
||||||
// CHECK1-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK1-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8, !llvm.access.group !42
|
|
||||||
// CHECK1-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK1-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4, !llvm.access.group !42
|
|
||||||
// CHECK1-NEXT: call void @_ZN1SD1Ev(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]], !llvm.access.group !42
|
|
||||||
// CHECK1-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK1: omp.inner.for.end:
|
// CHECK1: omp.inner.for.end:
|
||||||
// CHECK1-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK1-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK1: omp.loop.exit:
|
// CHECK1: omp.loop.exit:
|
||||||
// CHECK1-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK1-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK1-NEXT: [[TMP17:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
// CHECK1-NEXT: [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
||||||
// CHECK1-NEXT: [[TMP18:%.*]] = icmp ne i32 [[TMP17]], 0
|
// CHECK1-NEXT: [[TMP15:%.*]] = icmp ne i32 [[TMP14]], 0
|
||||||
// CHECK1-NEXT: br i1 [[TMP18]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
// CHECK1-NEXT: br i1 [[TMP15]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
||||||
// CHECK1: .omp.final.then:
|
// CHECK1: .omp.final.then:
|
||||||
// CHECK1-NEXT: store i32 100, i32* [[I]], align 4
|
// CHECK1-NEXT: store i32 100, i32* [[I]], align 4
|
||||||
// CHECK1-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
// CHECK1-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
||||||
// CHECK1: .omp.final.done:
|
// CHECK1: .omp.final.done:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: terminate.lpad:
|
// CHECK1: terminate.lpad:
|
||||||
// CHECK1-NEXT: [[TMP19:%.*]] = landingpad { i8*, i32 }
|
// CHECK1-NEXT: [[TMP16:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK1-NEXT: catch i8* null
|
// CHECK1-NEXT: catch i8* null
|
||||||
// CHECK1-NEXT: [[TMP20:%.*]] = extractvalue { i8*, i32 } [[TMP19]], 0
|
// CHECK1-NEXT: [[TMP17:%.*]] = extractvalue { i8*, i32 } [[TMP16]], 0
|
||||||
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[TMP20]]) #[[ATTR10]], !llvm.access.group !42
|
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[TMP17]]) #[[ATTR10]], !llvm.access.group !42
|
||||||
// CHECK1-NEXT: unreachable
|
|
||||||
// CHECK1: terminate.handler:
|
|
||||||
// CHECK1-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8, !llvm.access.group !42
|
|
||||||
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]], !llvm.access.group !42
|
|
||||||
// CHECK1-NEXT: unreachable
|
// CHECK1-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -2327,8 +2312,6 @@ int main() {
|
||||||
// CHECK2-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK2-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK2-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK2-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK2-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK2-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK2-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK2-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK2-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK2-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -2362,7 +2345,7 @@ int main() {
|
||||||
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !42
|
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !42
|
||||||
// CHECK2: invoke.cont:
|
// CHECK2: invoke.cont:
|
||||||
// CHECK2-NEXT: [[CALL:%.*]] = invoke signext i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK2-NEXT: [[CALL:%.*]] = invoke signext i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK2-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]], !llvm.access.group !42
|
// CHECK2-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]], !llvm.access.group !42
|
||||||
// CHECK2: invoke.cont2:
|
// CHECK2: invoke.cont2:
|
||||||
// CHECK2-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK2-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK2-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !42
|
// CHECK2-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !42
|
||||||
|
@ -2379,36 +2362,23 @@ int main() {
|
||||||
// CHECK2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK2-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !42
|
// CHECK2-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !42
|
||||||
// CHECK2-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP43:![0-9]+]]
|
// CHECK2-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP43:![0-9]+]]
|
||||||
// CHECK2: lpad:
|
|
||||||
// CHECK2-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK2-NEXT: catch i8* null
|
|
||||||
// CHECK2-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK2-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8, !llvm.access.group !42
|
|
||||||
// CHECK2-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK2-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4, !llvm.access.group !42
|
|
||||||
// CHECK2-NEXT: call void @_ZN1SD1Ev(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]], !llvm.access.group !42
|
|
||||||
// CHECK2-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK2: omp.inner.for.end:
|
// CHECK2: omp.inner.for.end:
|
||||||
// CHECK2-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK2-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK2: omp.loop.exit:
|
// CHECK2: omp.loop.exit:
|
||||||
// CHECK2-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK2-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK2-NEXT: [[TMP17:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
// CHECK2-NEXT: [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
||||||
// CHECK2-NEXT: [[TMP18:%.*]] = icmp ne i32 [[TMP17]], 0
|
// CHECK2-NEXT: [[TMP15:%.*]] = icmp ne i32 [[TMP14]], 0
|
||||||
// CHECK2-NEXT: br i1 [[TMP18]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
// CHECK2-NEXT: br i1 [[TMP15]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
||||||
// CHECK2: .omp.final.then:
|
// CHECK2: .omp.final.then:
|
||||||
// CHECK2-NEXT: store i32 100, i32* [[I]], align 4
|
// CHECK2-NEXT: store i32 100, i32* [[I]], align 4
|
||||||
// CHECK2-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
// CHECK2-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
||||||
// CHECK2: .omp.final.done:
|
// CHECK2: .omp.final.done:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: terminate.lpad:
|
// CHECK2: terminate.lpad:
|
||||||
// CHECK2-NEXT: [[TMP19:%.*]] = landingpad { i8*, i32 }
|
// CHECK2-NEXT: [[TMP16:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK2-NEXT: catch i8* null
|
// CHECK2-NEXT: catch i8* null
|
||||||
// CHECK2-NEXT: [[TMP20:%.*]] = extractvalue { i8*, i32 } [[TMP19]], 0
|
// CHECK2-NEXT: [[TMP17:%.*]] = extractvalue { i8*, i32 } [[TMP16]], 0
|
||||||
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[TMP20]]) #[[ATTR10]], !llvm.access.group !42
|
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[TMP17]]) #[[ATTR10]], !llvm.access.group !42
|
||||||
// CHECK2-NEXT: unreachable
|
|
||||||
// CHECK2: terminate.handler:
|
|
||||||
// CHECK2-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8, !llvm.access.group !42
|
|
||||||
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]], !llvm.access.group !42
|
|
||||||
// CHECK2-NEXT: unreachable
|
// CHECK2-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -4202,8 +4172,6 @@ int main() {
|
||||||
// CHECK5-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK5-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK5-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK5-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK5-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK5-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK5-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK5-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK5-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK5-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK5-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK5-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK5-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK5-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -4237,7 +4205,7 @@ int main() {
|
||||||
// CHECK5-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !42
|
// CHECK5-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !42
|
||||||
// CHECK5: invoke.cont:
|
// CHECK5: invoke.cont:
|
||||||
// CHECK5-NEXT: [[CALL:%.*]] = invoke signext i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK5-NEXT: [[CALL:%.*]] = invoke signext i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK5-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]], !llvm.access.group !42
|
// CHECK5-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]], !llvm.access.group !42
|
||||||
// CHECK5: invoke.cont2:
|
// CHECK5: invoke.cont2:
|
||||||
// CHECK5-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK5-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK5-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !42
|
// CHECK5-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !42
|
||||||
|
@ -4254,36 +4222,23 @@ int main() {
|
||||||
// CHECK5-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK5-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK5-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !42
|
// CHECK5-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !42
|
||||||
// CHECK5-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP43:![0-9]+]]
|
// CHECK5-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP43:![0-9]+]]
|
||||||
// CHECK5: lpad:
|
|
||||||
// CHECK5-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK5-NEXT: catch i8* null
|
|
||||||
// CHECK5-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK5-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8, !llvm.access.group !42
|
|
||||||
// CHECK5-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK5-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4, !llvm.access.group !42
|
|
||||||
// CHECK5-NEXT: call void @_ZN1SD1Ev(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]], !llvm.access.group !42
|
|
||||||
// CHECK5-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK5: omp.inner.for.end:
|
// CHECK5: omp.inner.for.end:
|
||||||
// CHECK5-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK5-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK5: omp.loop.exit:
|
// CHECK5: omp.loop.exit:
|
||||||
// CHECK5-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK5-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK5-NEXT: [[TMP17:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
// CHECK5-NEXT: [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
||||||
// CHECK5-NEXT: [[TMP18:%.*]] = icmp ne i32 [[TMP17]], 0
|
// CHECK5-NEXT: [[TMP15:%.*]] = icmp ne i32 [[TMP14]], 0
|
||||||
// CHECK5-NEXT: br i1 [[TMP18]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
// CHECK5-NEXT: br i1 [[TMP15]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
||||||
// CHECK5: .omp.final.then:
|
// CHECK5: .omp.final.then:
|
||||||
// CHECK5-NEXT: store i32 100, i32* [[I]], align 4
|
// CHECK5-NEXT: store i32 100, i32* [[I]], align 4
|
||||||
// CHECK5-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
// CHECK5-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
||||||
// CHECK5: .omp.final.done:
|
// CHECK5: .omp.final.done:
|
||||||
// CHECK5-NEXT: ret void
|
// CHECK5-NEXT: ret void
|
||||||
// CHECK5: terminate.lpad:
|
// CHECK5: terminate.lpad:
|
||||||
// CHECK5-NEXT: [[TMP19:%.*]] = landingpad { i8*, i32 }
|
// CHECK5-NEXT: [[TMP16:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK5-NEXT: catch i8* null
|
// CHECK5-NEXT: catch i8* null
|
||||||
// CHECK5-NEXT: [[TMP20:%.*]] = extractvalue { i8*, i32 } [[TMP19]], 0
|
// CHECK5-NEXT: [[TMP17:%.*]] = extractvalue { i8*, i32 } [[TMP16]], 0
|
||||||
// CHECK5-NEXT: call void @__clang_call_terminate(i8* [[TMP20]]) #[[ATTR10]], !llvm.access.group !42
|
// CHECK5-NEXT: call void @__clang_call_terminate(i8* [[TMP17]]) #[[ATTR10]], !llvm.access.group !42
|
||||||
// CHECK5-NEXT: unreachable
|
|
||||||
// CHECK5: terminate.handler:
|
|
||||||
// CHECK5-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8, !llvm.access.group !42
|
|
||||||
// CHECK5-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]], !llvm.access.group !42
|
|
||||||
// CHECK5-NEXT: unreachable
|
// CHECK5-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -5408,8 +5363,6 @@ int main() {
|
||||||
// CHECK6-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK6-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK6-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK6-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK6-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK6-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK6-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK6-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK6-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK6-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK6-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK6-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK6-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK6-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -5443,7 +5396,7 @@ int main() {
|
||||||
// CHECK6-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !42
|
// CHECK6-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !42
|
||||||
// CHECK6: invoke.cont:
|
// CHECK6: invoke.cont:
|
||||||
// CHECK6-NEXT: [[CALL:%.*]] = invoke signext i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK6-NEXT: [[CALL:%.*]] = invoke signext i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK6-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]], !llvm.access.group !42
|
// CHECK6-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]], !llvm.access.group !42
|
||||||
// CHECK6: invoke.cont2:
|
// CHECK6: invoke.cont2:
|
||||||
// CHECK6-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK6-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK6-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !42
|
// CHECK6-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !42
|
||||||
|
@ -5460,36 +5413,23 @@ int main() {
|
||||||
// CHECK6-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK6-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK6-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !42
|
// CHECK6-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !42
|
||||||
// CHECK6-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP43:![0-9]+]]
|
// CHECK6-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP43:![0-9]+]]
|
||||||
// CHECK6: lpad:
|
|
||||||
// CHECK6-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK6-NEXT: catch i8* null
|
|
||||||
// CHECK6-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK6-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8, !llvm.access.group !42
|
|
||||||
// CHECK6-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK6-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4, !llvm.access.group !42
|
|
||||||
// CHECK6-NEXT: call void @_ZN1SD1Ev(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]], !llvm.access.group !42
|
|
||||||
// CHECK6-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK6: omp.inner.for.end:
|
// CHECK6: omp.inner.for.end:
|
||||||
// CHECK6-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK6-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK6: omp.loop.exit:
|
// CHECK6: omp.loop.exit:
|
||||||
// CHECK6-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK6-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK6-NEXT: [[TMP17:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
// CHECK6-NEXT: [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
||||||
// CHECK6-NEXT: [[TMP18:%.*]] = icmp ne i32 [[TMP17]], 0
|
// CHECK6-NEXT: [[TMP15:%.*]] = icmp ne i32 [[TMP14]], 0
|
||||||
// CHECK6-NEXT: br i1 [[TMP18]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
// CHECK6-NEXT: br i1 [[TMP15]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
||||||
// CHECK6: .omp.final.then:
|
// CHECK6: .omp.final.then:
|
||||||
// CHECK6-NEXT: store i32 100, i32* [[I]], align 4
|
// CHECK6-NEXT: store i32 100, i32* [[I]], align 4
|
||||||
// CHECK6-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
// CHECK6-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
||||||
// CHECK6: .omp.final.done:
|
// CHECK6: .omp.final.done:
|
||||||
// CHECK6-NEXT: ret void
|
// CHECK6-NEXT: ret void
|
||||||
// CHECK6: terminate.lpad:
|
// CHECK6: terminate.lpad:
|
||||||
// CHECK6-NEXT: [[TMP19:%.*]] = landingpad { i8*, i32 }
|
// CHECK6-NEXT: [[TMP16:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK6-NEXT: catch i8* null
|
// CHECK6-NEXT: catch i8* null
|
||||||
// CHECK6-NEXT: [[TMP20:%.*]] = extractvalue { i8*, i32 } [[TMP19]], 0
|
// CHECK6-NEXT: [[TMP17:%.*]] = extractvalue { i8*, i32 } [[TMP16]], 0
|
||||||
// CHECK6-NEXT: call void @__clang_call_terminate(i8* [[TMP20]]) #[[ATTR10]], !llvm.access.group !42
|
// CHECK6-NEXT: call void @__clang_call_terminate(i8* [[TMP17]]) #[[ATTR10]], !llvm.access.group !42
|
||||||
// CHECK6-NEXT: unreachable
|
|
||||||
// CHECK6: terminate.handler:
|
|
||||||
// CHECK6-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8, !llvm.access.group !42
|
|
||||||
// CHECK6-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]], !llvm.access.group !42
|
|
||||||
// CHECK6-NEXT: unreachable
|
// CHECK6-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -7301,8 +7241,6 @@ int main() {
|
||||||
// CHECK9-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK9-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK9-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK9-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK9-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK9-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK9-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK9-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK9-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK9-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK9-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK9-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK9-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK9-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -7336,7 +7274,7 @@ int main() {
|
||||||
// CHECK9-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !46
|
// CHECK9-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !46
|
||||||
// CHECK9: invoke.cont:
|
// CHECK9: invoke.cont:
|
||||||
// CHECK9-NEXT: [[CALL:%.*]] = invoke i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK9-NEXT: [[CALL:%.*]] = invoke i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK9-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]], !llvm.access.group !46
|
// CHECK9-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]], !llvm.access.group !46
|
||||||
// CHECK9: invoke.cont2:
|
// CHECK9: invoke.cont2:
|
||||||
// CHECK9-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK9-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK9-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !46
|
// CHECK9-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !46
|
||||||
|
@ -7353,36 +7291,23 @@ int main() {
|
||||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK9-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !46
|
// CHECK9-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !46
|
||||||
// CHECK9-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP47:![0-9]+]]
|
// CHECK9-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP47:![0-9]+]]
|
||||||
// CHECK9: lpad:
|
|
||||||
// CHECK9-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK9-NEXT: catch i8* null
|
|
||||||
// CHECK9-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK9-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8, !llvm.access.group !46
|
|
||||||
// CHECK9-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK9-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4, !llvm.access.group !46
|
|
||||||
// CHECK9-NEXT: call void @_ZN1SD1Ev(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]], !llvm.access.group !46
|
|
||||||
// CHECK9-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK9: omp.inner.for.end:
|
// CHECK9: omp.inner.for.end:
|
||||||
// CHECK9-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK9-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK9: omp.loop.exit:
|
// CHECK9: omp.loop.exit:
|
||||||
// CHECK9-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK9-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK9-NEXT: [[TMP17:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
// CHECK9-NEXT: [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
||||||
// CHECK9-NEXT: [[TMP18:%.*]] = icmp ne i32 [[TMP17]], 0
|
// CHECK9-NEXT: [[TMP15:%.*]] = icmp ne i32 [[TMP14]], 0
|
||||||
// CHECK9-NEXT: br i1 [[TMP18]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
// CHECK9-NEXT: br i1 [[TMP15]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
||||||
// CHECK9: .omp.final.then:
|
// CHECK9: .omp.final.then:
|
||||||
// CHECK9-NEXT: store i32 100, i32* [[I]], align 4
|
// CHECK9-NEXT: store i32 100, i32* [[I]], align 4
|
||||||
// CHECK9-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
// CHECK9-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
||||||
// CHECK9: .omp.final.done:
|
// CHECK9: .omp.final.done:
|
||||||
// CHECK9-NEXT: ret void
|
// CHECK9-NEXT: ret void
|
||||||
// CHECK9: terminate.lpad:
|
// CHECK9: terminate.lpad:
|
||||||
// CHECK9-NEXT: [[TMP19:%.*]] = landingpad { i8*, i32 }
|
// CHECK9-NEXT: [[TMP16:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK9-NEXT: catch i8* null
|
// CHECK9-NEXT: catch i8* null
|
||||||
// CHECK9-NEXT: [[TMP20:%.*]] = extractvalue { i8*, i32 } [[TMP19]], 0
|
// CHECK9-NEXT: [[TMP17:%.*]] = extractvalue { i8*, i32 } [[TMP16]], 0
|
||||||
// CHECK9-NEXT: call void @__clang_call_terminate(i8* [[TMP20]]) #[[ATTR10]], !llvm.access.group !46
|
// CHECK9-NEXT: call void @__clang_call_terminate(i8* [[TMP17]]) #[[ATTR10]], !llvm.access.group !46
|
||||||
// CHECK9-NEXT: unreachable
|
|
||||||
// CHECK9: terminate.handler:
|
|
||||||
// CHECK9-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8, !llvm.access.group !46
|
|
||||||
// CHECK9-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]], !llvm.access.group !46
|
|
||||||
// CHECK9-NEXT: unreachable
|
// CHECK9-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -8507,8 +8432,6 @@ int main() {
|
||||||
// CHECK10-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK10-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK10-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK10-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK10-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK10-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK10-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK10-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK10-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK10-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK10-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK10-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK10-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK10-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -8542,7 +8465,7 @@ int main() {
|
||||||
// CHECK10-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !46
|
// CHECK10-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !46
|
||||||
// CHECK10: invoke.cont:
|
// CHECK10: invoke.cont:
|
||||||
// CHECK10-NEXT: [[CALL:%.*]] = invoke i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK10-NEXT: [[CALL:%.*]] = invoke i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK10-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]], !llvm.access.group !46
|
// CHECK10-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]], !llvm.access.group !46
|
||||||
// CHECK10: invoke.cont2:
|
// CHECK10: invoke.cont2:
|
||||||
// CHECK10-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK10-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK10-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !46
|
// CHECK10-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !46
|
||||||
|
@ -8559,36 +8482,23 @@ int main() {
|
||||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK10-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !46
|
// CHECK10-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !46
|
||||||
// CHECK10-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP47:![0-9]+]]
|
// CHECK10-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP47:![0-9]+]]
|
||||||
// CHECK10: lpad:
|
|
||||||
// CHECK10-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK10-NEXT: catch i8* null
|
|
||||||
// CHECK10-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK10-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8, !llvm.access.group !46
|
|
||||||
// CHECK10-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK10-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4, !llvm.access.group !46
|
|
||||||
// CHECK10-NEXT: call void @_ZN1SD1Ev(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]], !llvm.access.group !46
|
|
||||||
// CHECK10-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK10: omp.inner.for.end:
|
// CHECK10: omp.inner.for.end:
|
||||||
// CHECK10-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK10-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK10: omp.loop.exit:
|
// CHECK10: omp.loop.exit:
|
||||||
// CHECK10-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK10-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK10-NEXT: [[TMP17:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
// CHECK10-NEXT: [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
||||||
// CHECK10-NEXT: [[TMP18:%.*]] = icmp ne i32 [[TMP17]], 0
|
// CHECK10-NEXT: [[TMP15:%.*]] = icmp ne i32 [[TMP14]], 0
|
||||||
// CHECK10-NEXT: br i1 [[TMP18]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
// CHECK10-NEXT: br i1 [[TMP15]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
||||||
// CHECK10: .omp.final.then:
|
// CHECK10: .omp.final.then:
|
||||||
// CHECK10-NEXT: store i32 100, i32* [[I]], align 4
|
// CHECK10-NEXT: store i32 100, i32* [[I]], align 4
|
||||||
// CHECK10-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
// CHECK10-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
||||||
// CHECK10: .omp.final.done:
|
// CHECK10: .omp.final.done:
|
||||||
// CHECK10-NEXT: ret void
|
// CHECK10-NEXT: ret void
|
||||||
// CHECK10: terminate.lpad:
|
// CHECK10: terminate.lpad:
|
||||||
// CHECK10-NEXT: [[TMP19:%.*]] = landingpad { i8*, i32 }
|
// CHECK10-NEXT: [[TMP16:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK10-NEXT: catch i8* null
|
// CHECK10-NEXT: catch i8* null
|
||||||
// CHECK10-NEXT: [[TMP20:%.*]] = extractvalue { i8*, i32 } [[TMP19]], 0
|
// CHECK10-NEXT: [[TMP17:%.*]] = extractvalue { i8*, i32 } [[TMP16]], 0
|
||||||
// CHECK10-NEXT: call void @__clang_call_terminate(i8* [[TMP20]]) #[[ATTR10]], !llvm.access.group !46
|
// CHECK10-NEXT: call void @__clang_call_terminate(i8* [[TMP17]]) #[[ATTR10]], !llvm.access.group !46
|
||||||
// CHECK10-NEXT: unreachable
|
|
||||||
// CHECK10: terminate.handler:
|
|
||||||
// CHECK10-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8, !llvm.access.group !46
|
|
||||||
// CHECK10-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]], !llvm.access.group !46
|
|
||||||
// CHECK10-NEXT: unreachable
|
// CHECK10-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -10382,8 +10292,6 @@ int main() {
|
||||||
// CHECK13-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK13-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK13-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK13-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK13-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK13-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK13-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK13-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK13-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK13-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK13-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK13-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK13-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK13-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -10417,7 +10325,7 @@ int main() {
|
||||||
// CHECK13-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !46
|
// CHECK13-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !46
|
||||||
// CHECK13: invoke.cont:
|
// CHECK13: invoke.cont:
|
||||||
// CHECK13-NEXT: [[CALL:%.*]] = invoke i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK13-NEXT: [[CALL:%.*]] = invoke i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK13-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]], !llvm.access.group !46
|
// CHECK13-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]], !llvm.access.group !46
|
||||||
// CHECK13: invoke.cont2:
|
// CHECK13: invoke.cont2:
|
||||||
// CHECK13-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK13-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK13-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !46
|
// CHECK13-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !46
|
||||||
|
@ -10434,36 +10342,23 @@ int main() {
|
||||||
// CHECK13-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK13-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK13-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !46
|
// CHECK13-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !46
|
||||||
// CHECK13-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP47:![0-9]+]]
|
// CHECK13-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP47:![0-9]+]]
|
||||||
// CHECK13: lpad:
|
|
||||||
// CHECK13-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK13-NEXT: catch i8* null
|
|
||||||
// CHECK13-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK13-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8, !llvm.access.group !46
|
|
||||||
// CHECK13-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK13-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4, !llvm.access.group !46
|
|
||||||
// CHECK13-NEXT: call void @_ZN1SD1Ev(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]], !llvm.access.group !46
|
|
||||||
// CHECK13-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK13: omp.inner.for.end:
|
// CHECK13: omp.inner.for.end:
|
||||||
// CHECK13-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK13-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK13: omp.loop.exit:
|
// CHECK13: omp.loop.exit:
|
||||||
// CHECK13-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK13-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK13-NEXT: [[TMP17:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
// CHECK13-NEXT: [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
||||||
// CHECK13-NEXT: [[TMP18:%.*]] = icmp ne i32 [[TMP17]], 0
|
// CHECK13-NEXT: [[TMP15:%.*]] = icmp ne i32 [[TMP14]], 0
|
||||||
// CHECK13-NEXT: br i1 [[TMP18]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
// CHECK13-NEXT: br i1 [[TMP15]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
||||||
// CHECK13: .omp.final.then:
|
// CHECK13: .omp.final.then:
|
||||||
// CHECK13-NEXT: store i32 100, i32* [[I]], align 4
|
// CHECK13-NEXT: store i32 100, i32* [[I]], align 4
|
||||||
// CHECK13-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
// CHECK13-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
||||||
// CHECK13: .omp.final.done:
|
// CHECK13: .omp.final.done:
|
||||||
// CHECK13-NEXT: ret void
|
// CHECK13-NEXT: ret void
|
||||||
// CHECK13: terminate.lpad:
|
// CHECK13: terminate.lpad:
|
||||||
// CHECK13-NEXT: [[TMP19:%.*]] = landingpad { i8*, i32 }
|
// CHECK13-NEXT: [[TMP16:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK13-NEXT: catch i8* null
|
// CHECK13-NEXT: catch i8* null
|
||||||
// CHECK13-NEXT: [[TMP20:%.*]] = extractvalue { i8*, i32 } [[TMP19]], 0
|
// CHECK13-NEXT: [[TMP17:%.*]] = extractvalue { i8*, i32 } [[TMP16]], 0
|
||||||
// CHECK13-NEXT: call void @__clang_call_terminate(i8* [[TMP20]]) #[[ATTR10]], !llvm.access.group !46
|
// CHECK13-NEXT: call void @__clang_call_terminate(i8* [[TMP17]]) #[[ATTR10]], !llvm.access.group !46
|
||||||
// CHECK13-NEXT: unreachable
|
|
||||||
// CHECK13: terminate.handler:
|
|
||||||
// CHECK13-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8, !llvm.access.group !46
|
|
||||||
// CHECK13-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]], !llvm.access.group !46
|
|
||||||
// CHECK13-NEXT: unreachable
|
// CHECK13-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -11588,8 +11483,6 @@ int main() {
|
||||||
// CHECK14-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
// CHECK14-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
|
||||||
// CHECK14-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK14-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK14-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK14-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK14-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK14-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK14-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK14-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK14-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK14-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK14-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
// CHECK14-NEXT: store i32 0, i32* [[DOTOMP_COMB_LB]], align 4
|
||||||
|
@ -11623,7 +11516,7 @@ int main() {
|
||||||
// CHECK14-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !46
|
// CHECK14-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !llvm.access.group !46
|
||||||
// CHECK14: invoke.cont:
|
// CHECK14: invoke.cont:
|
||||||
// CHECK14-NEXT: [[CALL:%.*]] = invoke i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK14-NEXT: [[CALL:%.*]] = invoke i8 @_ZN1ScvcEv(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK14-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD:%.*]], !llvm.access.group !46
|
// CHECK14-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]], !llvm.access.group !46
|
||||||
// CHECK14: invoke.cont2:
|
// CHECK14: invoke.cont2:
|
||||||
// CHECK14-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
// CHECK14-NEXT: [[TMP7:%.*]] = sext i8 [[CALL]] to i32
|
||||||
// CHECK14-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !46
|
// CHECK14-NEXT: call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]]), !llvm.access.group !46
|
||||||
|
@ -11640,36 +11533,23 @@ int main() {
|
||||||
// CHECK14-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
// CHECK14-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]
|
||||||
// CHECK14-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !46
|
// CHECK14-NEXT: store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4, !llvm.access.group !46
|
||||||
// CHECK14-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP47:![0-9]+]]
|
// CHECK14-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP47:![0-9]+]]
|
||||||
// CHECK14: lpad:
|
|
||||||
// CHECK14-NEXT: [[TMP14:%.*]] = landingpad { i8*, i32 }
|
|
||||||
// CHECK14-NEXT: catch i8* null
|
|
||||||
// CHECK14-NEXT: [[TMP15:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 0
|
|
||||||
// CHECK14-NEXT: store i8* [[TMP15]], i8** [[EXN_SLOT]], align 8, !llvm.access.group !46
|
|
||||||
// CHECK14-NEXT: [[TMP16:%.*]] = extractvalue { i8*, i32 } [[TMP14]], 1
|
|
||||||
// CHECK14-NEXT: store i32 [[TMP16]], i32* [[EHSELECTOR_SLOT]], align 4, !llvm.access.group !46
|
|
||||||
// CHECK14-NEXT: call void @_ZN1SD1Ev(%struct.S* nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]], !llvm.access.group !46
|
|
||||||
// CHECK14-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK14: omp.inner.for.end:
|
// CHECK14: omp.inner.for.end:
|
||||||
// CHECK14-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
// CHECK14-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
|
||||||
// CHECK14: omp.loop.exit:
|
// CHECK14: omp.loop.exit:
|
||||||
// CHECK14-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK14-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK14-NEXT: [[TMP17:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
// CHECK14-NEXT: [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IS_LAST]], align 4
|
||||||
// CHECK14-NEXT: [[TMP18:%.*]] = icmp ne i32 [[TMP17]], 0
|
// CHECK14-NEXT: [[TMP15:%.*]] = icmp ne i32 [[TMP14]], 0
|
||||||
// CHECK14-NEXT: br i1 [[TMP18]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
// CHECK14-NEXT: br i1 [[TMP15]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]
|
||||||
// CHECK14: .omp.final.then:
|
// CHECK14: .omp.final.then:
|
||||||
// CHECK14-NEXT: store i32 100, i32* [[I]], align 4
|
// CHECK14-NEXT: store i32 100, i32* [[I]], align 4
|
||||||
// CHECK14-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
// CHECK14-NEXT: br label [[DOTOMP_FINAL_DONE]]
|
||||||
// CHECK14: .omp.final.done:
|
// CHECK14: .omp.final.done:
|
||||||
// CHECK14-NEXT: ret void
|
// CHECK14-NEXT: ret void
|
||||||
// CHECK14: terminate.lpad:
|
// CHECK14: terminate.lpad:
|
||||||
// CHECK14-NEXT: [[TMP19:%.*]] = landingpad { i8*, i32 }
|
// CHECK14-NEXT: [[TMP16:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK14-NEXT: catch i8* null
|
// CHECK14-NEXT: catch i8* null
|
||||||
// CHECK14-NEXT: [[TMP20:%.*]] = extractvalue { i8*, i32 } [[TMP19]], 0
|
// CHECK14-NEXT: [[TMP17:%.*]] = extractvalue { i8*, i32 } [[TMP16]], 0
|
||||||
// CHECK14-NEXT: call void @__clang_call_terminate(i8* [[TMP20]]) #[[ATTR10]], !llvm.access.group !46
|
// CHECK14-NEXT: call void @__clang_call_terminate(i8* [[TMP17]]) #[[ATTR10]], !llvm.access.group !46
|
||||||
// CHECK14-NEXT: unreachable
|
|
||||||
// CHECK14: terminate.handler:
|
|
||||||
// CHECK14-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8, !llvm.access.group !46
|
|
||||||
// CHECK14-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR10]], !llvm.access.group !46
|
|
||||||
// CHECK14-NEXT: unreachable
|
// CHECK14-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
|
@ -73,7 +73,7 @@ int main() {
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4
|
// CHECK1-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4
|
||||||
// CHECK1-NEXT: call void @__kmpc_critical(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], [8 x i32]* @.gomp_critical_user_.var) [ "funclet"(token [[TMP1]]) ]
|
// CHECK1-NEXT: call void @__kmpc_critical(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], [8 x i32]* @.gomp_critical_user_.var) [ "funclet"(token [[TMP1]]) ]
|
||||||
// CHECK1-NEXT: invoke void @"?bar@@YAXXZ"() [ "funclet"(token [[TMP1]]) ]
|
// CHECK1-NEXT: invoke void @"?bar@@YAXXZ"() [ "funclet"(token [[TMP1]]) ]
|
||||||
// CHECK1-NEXT: to label [[INVOKE_CONT1:%.*]] unwind label [[EHCLEANUP:%.*]]
|
// CHECK1-NEXT: to label [[INVOKE_CONT1:%.*]] unwind label [[TERMINATE2:%.*]]
|
||||||
// CHECK1: invoke.cont1:
|
// CHECK1: invoke.cont1:
|
||||||
// CHECK1-NEXT: call void @__kmpc_end_critical(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], [8 x i32]* @.gomp_critical_user_.var) [ "funclet"(token [[TMP1]]) ]
|
// CHECK1-NEXT: call void @__kmpc_end_critical(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], [8 x i32]* @.gomp_critical_user_.var) [ "funclet"(token [[TMP1]]) ]
|
||||||
// CHECK1-NEXT: catchret from [[TMP1]] to label [[CATCHRET_DEST:%.*]]
|
// CHECK1-NEXT: catchret from [[TMP1]] to label [[CATCHRET_DEST:%.*]]
|
||||||
|
@ -83,17 +83,13 @@ int main() {
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: invoke.cont:
|
// CHECK1: invoke.cont:
|
||||||
// CHECK1-NEXT: br label [[TRY_CONT]]
|
// CHECK1-NEXT: br label [[TRY_CONT]]
|
||||||
// CHECK1: ehcleanup:
|
|
||||||
// CHECK1-NEXT: [[TMP4:%.*]] = cleanuppad within [[TMP1]] []
|
|
||||||
// CHECK1-NEXT: call void @__kmpc_end_critical(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], [8 x i32]* @.gomp_critical_user_.var) [ "funclet"(token [[TMP4]]) ]
|
|
||||||
// CHECK1-NEXT: cleanupret from [[TMP4]] unwind label [[TERMINATE2:%.*]]
|
|
||||||
// CHECK1: terminate:
|
// CHECK1: terminate:
|
||||||
// CHECK1-NEXT: [[TMP5:%.*]] = cleanuppad within none []
|
// CHECK1-NEXT: [[TMP4:%.*]] = cleanuppad within none []
|
||||||
// CHECK1-NEXT: call void @"?terminate@@YAXXZ"() #[[ATTR7:[0-9]+]] [ "funclet"(token [[TMP5]]) ]
|
// CHECK1-NEXT: call void @"?terminate@@YAXXZ"() #[[ATTR7:[0-9]+]] [ "funclet"(token [[TMP4]]) ]
|
||||||
// CHECK1-NEXT: unreachable
|
// CHECK1-NEXT: unreachable
|
||||||
// CHECK1: terminate2:
|
// CHECK1: terminate2:
|
||||||
// CHECK1-NEXT: [[TMP6:%.*]] = cleanuppad within [[TMP1]] []
|
// CHECK1-NEXT: [[TMP5:%.*]] = cleanuppad within [[TMP1]] []
|
||||||
// CHECK1-NEXT: call void @"?terminate@@YAXXZ"() #[[ATTR7]] [ "funclet"(token [[TMP6]]) ]
|
// CHECK1-NEXT: call void @"?terminate@@YAXXZ"() #[[ATTR7]] [ "funclet"(token [[TMP5]]) ]
|
||||||
// CHECK1-NEXT: unreachable
|
// CHECK1-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
|
@ -88,9 +88,6 @@ int main() {
|
||||||
#pragma omp ordered depend(sink : i - 2)
|
#pragma omp ordered depend(sink : i - 2)
|
||||||
d[i] = a[i - 2];
|
d[i] = a[i - 2];
|
||||||
}
|
}
|
||||||
// CHECK: landingpad
|
|
||||||
// CHECK-NORMAL: call void @__kmpc_doacross_fini([[IDENT]], i32 [[GTID]])
|
|
||||||
// CHECK: br label %
|
|
||||||
|
|
||||||
// CHECK: call void @__kmpc_for_static_fini(
|
// CHECK: call void @__kmpc_for_static_fini(
|
||||||
// CHECK-NORMAL: call void @__kmpc_doacross_fini([[IDENT]], i32 [[GTID]])
|
// CHECK-NORMAL: call void @__kmpc_doacross_fini([[IDENT]], i32 [[GTID]])
|
||||||
|
@ -150,10 +147,6 @@ int main1() {
|
||||||
#pragma omp ordered depend(sink : i - 2)
|
#pragma omp ordered depend(sink : i - 2)
|
||||||
d[i] = a[i - 2];
|
d[i] = a[i - 2];
|
||||||
}
|
}
|
||||||
// CHECK: landingpad
|
|
||||||
// CHECK-NORMAL: call void @__kmpc_doacross_fini([[IDENT]], i32 [[GTID]])
|
|
||||||
// CHECK: br label %
|
|
||||||
|
|
||||||
// CHECK: call void @__kmpc_for_static_fini(
|
// CHECK: call void @__kmpc_for_static_fini(
|
||||||
// CHECK-NORMAL: call void @__kmpc_doacross_fini([[IDENT]], i32 [[GTID]])
|
// CHECK-NORMAL: call void @__kmpc_doacross_fini([[IDENT]], i32 [[GTID]])
|
||||||
// CHECK: ret i32 0
|
// CHECK: ret i32 0
|
||||||
|
@ -267,10 +260,6 @@ struct TestStruct {
|
||||||
baz(a[i][j], b[i][j]);
|
baz(a[i][j], b[i][j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// CHECK: landingpad
|
|
||||||
// CHECK-NORMAL: call void @__kmpc_doacross_fini([[IDENT]], i32 [[GTID]])
|
|
||||||
// CHECK: br label %
|
|
||||||
|
|
||||||
// CHECK: call void @__kmpc_for_static_fini(
|
// CHECK: call void @__kmpc_for_static_fini(
|
||||||
// CHECK-NORMAL: call void @__kmpc_doacross_fini([[IDENT]], i32 [[GTID]])
|
// CHECK-NORMAL: call void @__kmpc_doacross_fini([[IDENT]], i32 [[GTID]])
|
||||||
// CHECK: ret
|
// CHECK: ret
|
||||||
|
|
|
@ -305,8 +305,6 @@ void parallel_master_allocate() {
|
||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
|
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
|
||||||
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
|
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
|
||||||
// CHECK1-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK1-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK1-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK1-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK1-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
|
@ -316,24 +314,17 @@ void parallel_master_allocate() {
|
||||||
// CHECK1-NEXT: br i1 [[TMP3]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
|
// CHECK1-NEXT: br i1 [[TMP3]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
|
||||||
// CHECK1: omp_if.then:
|
// CHECK1: omp_if.then:
|
||||||
// CHECK1-NEXT: invoke void @_Z3foov()
|
// CHECK1-NEXT: invoke void @_Z3foov()
|
||||||
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK1: invoke.cont:
|
// CHECK1: invoke.cont:
|
||||||
// CHECK1-NEXT: call void @__kmpc_end_master(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK1-NEXT: call void @__kmpc_end_master(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK1-NEXT: br label [[OMP_IF_END]]
|
// CHECK1-NEXT: br label [[OMP_IF_END]]
|
||||||
// CHECK1: lpad:
|
// CHECK1: omp_if.end:
|
||||||
|
// CHECK1-NEXT: ret void
|
||||||
|
// CHECK1: terminate.lpad:
|
||||||
// CHECK1-NEXT: [[TMP4:%.*]] = landingpad { i8*, i32 }
|
// CHECK1-NEXT: [[TMP4:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK1-NEXT: catch i8* null
|
// CHECK1-NEXT: catch i8* null
|
||||||
// CHECK1-NEXT: [[TMP5:%.*]] = extractvalue { i8*, i32 } [[TMP4]], 0
|
// CHECK1-NEXT: [[TMP5:%.*]] = extractvalue { i8*, i32 } [[TMP4]], 0
|
||||||
// CHECK1-NEXT: store i8* [[TMP5]], i8** [[EXN_SLOT]], align 8
|
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[TMP5]]) #[[ATTR6:[0-9]+]]
|
||||||
// CHECK1-NEXT: [[TMP6:%.*]] = extractvalue { i8*, i32 } [[TMP4]], 1
|
|
||||||
// CHECK1-NEXT: store i32 [[TMP6]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK1-NEXT: call void @__kmpc_end_master(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
|
||||||
// CHECK1-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK1: omp_if.end:
|
|
||||||
// CHECK1-NEXT: ret void
|
|
||||||
// CHECK1: terminate.handler:
|
|
||||||
// CHECK1-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR6:[0-9]+]]
|
|
||||||
// CHECK1-NEXT: unreachable
|
// CHECK1-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -363,8 +354,6 @@ void parallel_master_allocate() {
|
||||||
// CHECK2-NEXT: entry:
|
// CHECK2-NEXT: entry:
|
||||||
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
|
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
|
||||||
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
|
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
|
||||||
// CHECK2-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK2-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK2-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK2-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK2-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK2-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK2-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
|
@ -374,24 +363,17 @@ void parallel_master_allocate() {
|
||||||
// CHECK2-NEXT: br i1 [[TMP3]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
|
// CHECK2-NEXT: br i1 [[TMP3]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
|
||||||
// CHECK2: omp_if.then:
|
// CHECK2: omp_if.then:
|
||||||
// CHECK2-NEXT: invoke void @_Z3foov()
|
// CHECK2-NEXT: invoke void @_Z3foov()
|
||||||
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK2: invoke.cont:
|
// CHECK2: invoke.cont:
|
||||||
// CHECK2-NEXT: call void @__kmpc_end_master(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK2-NEXT: call void @__kmpc_end_master(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK2-NEXT: br label [[OMP_IF_END]]
|
// CHECK2-NEXT: br label [[OMP_IF_END]]
|
||||||
// CHECK2: lpad:
|
// CHECK2: omp_if.end:
|
||||||
|
// CHECK2-NEXT: ret void
|
||||||
|
// CHECK2: terminate.lpad:
|
||||||
// CHECK2-NEXT: [[TMP4:%.*]] = landingpad { i8*, i32 }
|
// CHECK2-NEXT: [[TMP4:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK2-NEXT: catch i8* null
|
// CHECK2-NEXT: catch i8* null
|
||||||
// CHECK2-NEXT: [[TMP5:%.*]] = extractvalue { i8*, i32 } [[TMP4]], 0
|
// CHECK2-NEXT: [[TMP5:%.*]] = extractvalue { i8*, i32 } [[TMP4]], 0
|
||||||
// CHECK2-NEXT: store i8* [[TMP5]], i8** [[EXN_SLOT]], align 8
|
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[TMP5]]) #[[ATTR6:[0-9]+]]
|
||||||
// CHECK2-NEXT: [[TMP6:%.*]] = extractvalue { i8*, i32 } [[TMP4]], 1
|
|
||||||
// CHECK2-NEXT: store i32 [[TMP6]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK2-NEXT: call void @__kmpc_end_master(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
|
||||||
// CHECK2-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK2: omp_if.end:
|
|
||||||
// CHECK2-NEXT: ret void
|
|
||||||
// CHECK2: terminate.handler:
|
|
||||||
// CHECK2-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR6:[0-9]+]]
|
|
||||||
// CHECK2-NEXT: unreachable
|
// CHECK2-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -41,8 +41,6 @@ void parallel_taskgroup() {
|
||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[A:%.*]] = alloca i8, align 1
|
// CHECK1-NEXT: [[A:%.*]] = alloca i8, align 1
|
||||||
// CHECK1-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK1-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1:[0-9]+]])
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: store i32 0, i32* [[RETVAL]], align 4
|
// CHECK1-NEXT: store i32 0, i32* [[RETVAL]], align 4
|
||||||
// CHECK1-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
// CHECK1-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
||||||
|
@ -50,24 +48,17 @@ void parallel_taskgroup() {
|
||||||
// CHECK1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
// CHECK1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
||||||
// CHECK1-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
// CHECK1-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
||||||
// CHECK1-NEXT: invoke void @_Z3foov()
|
// CHECK1-NEXT: invoke void @_Z3foov()
|
||||||
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK1: invoke.cont:
|
// CHECK1: invoke.cont:
|
||||||
// CHECK1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
// CHECK1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = load i8, i8* [[A]], align 1
|
// CHECK1-NEXT: [[TMP1:%.*]] = load i8, i8* [[A]], align 1
|
||||||
// CHECK1-NEXT: [[CONV:%.*]] = sext i8 [[TMP1]] to i32
|
// CHECK1-NEXT: [[CONV:%.*]] = sext i8 [[TMP1]] to i32
|
||||||
// CHECK1-NEXT: ret i32 [[CONV]]
|
// CHECK1-NEXT: ret i32 [[CONV]]
|
||||||
// CHECK1: lpad:
|
// CHECK1: terminate.lpad:
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// CHECK1-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK1-NEXT: catch i8* null
|
// CHECK1-NEXT: catch i8* null
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
// CHECK1-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
||||||
// CHECK1-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8
|
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR8:[0-9]+]]
|
||||||
// CHECK1-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1
|
|
||||||
// CHECK1-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
|
||||||
// CHECK1-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK1: terminate.handler:
|
|
||||||
// CHECK1-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR8:[0-9]+]]
|
|
||||||
// CHECK1-NEXT: unreachable
|
// CHECK1-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -90,30 +81,21 @@ void parallel_taskgroup() {
|
||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
|
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
|
||||||
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
|
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
|
||||||
// CHECK1-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK1-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK1-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK1-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK1-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 4
|
// CHECK1-NEXT: [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 4
|
||||||
// CHECK1-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK1-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK1-NEXT: invoke void @_Z3foov()
|
// CHECK1-NEXT: invoke void @_Z3foov()
|
||||||
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK1: invoke.cont:
|
// CHECK1: invoke.cont:
|
||||||
// CHECK1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: lpad:
|
// CHECK1: terminate.lpad:
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// CHECK1-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK1-NEXT: catch i8* null
|
// CHECK1-NEXT: catch i8* null
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
// CHECK1-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
||||||
// CHECK1-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8
|
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR8]]
|
||||||
// CHECK1-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1
|
|
||||||
// CHECK1-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
|
||||||
// CHECK1-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK1: terminate.handler:
|
|
||||||
// CHECK1-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR8]]
|
|
||||||
// CHECK1-NEXT: unreachable
|
// CHECK1-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -129,8 +111,6 @@ void parallel_taskgroup() {
|
||||||
// CHECK2-NEXT: entry:
|
// CHECK2-NEXT: entry:
|
||||||
// CHECK2-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[A:%.*]] = alloca i8, align 1
|
// CHECK2-NEXT: [[A:%.*]] = alloca i8, align 1
|
||||||
// CHECK2-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK2-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1:[0-9]+]])
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: store i32 0, i32* [[RETVAL]], align 4
|
// CHECK2-NEXT: store i32 0, i32* [[RETVAL]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
// CHECK2-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
||||||
|
@ -138,24 +118,17 @@ void parallel_taskgroup() {
|
||||||
// CHECK2-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
// CHECK2-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
||||||
// CHECK2-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
// CHECK2-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
||||||
// CHECK2-NEXT: invoke void @_Z3foov()
|
// CHECK2-NEXT: invoke void @_Z3foov()
|
||||||
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK2: invoke.cont:
|
// CHECK2: invoke.cont:
|
||||||
// CHECK2-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
// CHECK2-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = load i8, i8* [[A]], align 1
|
// CHECK2-NEXT: [[TMP1:%.*]] = load i8, i8* [[A]], align 1
|
||||||
// CHECK2-NEXT: [[CONV:%.*]] = sext i8 [[TMP1]] to i32
|
// CHECK2-NEXT: [[CONV:%.*]] = sext i8 [[TMP1]] to i32
|
||||||
// CHECK2-NEXT: ret i32 [[CONV]]
|
// CHECK2-NEXT: ret i32 [[CONV]]
|
||||||
// CHECK2: lpad:
|
// CHECK2: terminate.lpad:
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// CHECK2-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK2-NEXT: catch i8* null
|
// CHECK2-NEXT: catch i8* null
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
// CHECK2-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
||||||
// CHECK2-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8
|
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR8:[0-9]+]]
|
||||||
// CHECK2-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1
|
|
||||||
// CHECK2-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK2-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]])
|
|
||||||
// CHECK2-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK2: terminate.handler:
|
|
||||||
// CHECK2-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR8:[0-9]+]]
|
|
||||||
// CHECK2-NEXT: unreachable
|
// CHECK2-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -178,30 +151,21 @@ void parallel_taskgroup() {
|
||||||
// CHECK2-NEXT: entry:
|
// CHECK2-NEXT: entry:
|
||||||
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
|
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
|
||||||
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
|
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
|
||||||
// CHECK2-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK2-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK2-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK2-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK2-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// CHECK2-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// CHECK2-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 4
|
// CHECK2-NEXT: [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK2-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK2-NEXT: invoke void @_Z3foov()
|
// CHECK2-NEXT: invoke void @_Z3foov()
|
||||||
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK2: invoke.cont:
|
// CHECK2: invoke.cont:
|
||||||
// CHECK2-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
// CHECK2-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: lpad:
|
// CHECK2: terminate.lpad:
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// CHECK2-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK2-NEXT: catch i8* null
|
// CHECK2-NEXT: catch i8* null
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
// CHECK2-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
||||||
// CHECK2-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8
|
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR8]]
|
||||||
// CHECK2-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1
|
|
||||||
// CHECK2-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK2-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]])
|
|
||||||
// CHECK2-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK2: terminate.handler:
|
|
||||||
// CHECK2-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR8]]
|
|
||||||
// CHECK2-NEXT: unreachable
|
// CHECK2-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -217,8 +181,6 @@ void parallel_taskgroup() {
|
||||||
// DEBUG1-NEXT: entry:
|
// DEBUG1-NEXT: entry:
|
||||||
// DEBUG1-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
|
// DEBUG1-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
|
||||||
// DEBUG1-NEXT: [[A:%.*]] = alloca i8, align 1
|
// DEBUG1-NEXT: [[A:%.*]] = alloca i8, align 1
|
||||||
// DEBUG1-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// DEBUG1-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// DEBUG1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1:[0-9]+]])
|
// DEBUG1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1:[0-9]+]])
|
||||||
// DEBUG1-NEXT: store i32 0, i32* [[RETVAL]], align 4
|
// DEBUG1-NEXT: store i32 0, i32* [[RETVAL]], align 4
|
||||||
// DEBUG1-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]]), !dbg [[DBG13:![0-9]+]]
|
// DEBUG1-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]]), !dbg [[DBG13:![0-9]+]]
|
||||||
|
@ -226,24 +188,17 @@ void parallel_taskgroup() {
|
||||||
// DEBUG1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]]), !dbg [[DBG15:![0-9]+]]
|
// DEBUG1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]]), !dbg [[DBG15:![0-9]+]]
|
||||||
// DEBUG1-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB3:[0-9]+]], i32 [[TMP0]]), !dbg [[DBG16:![0-9]+]]
|
// DEBUG1-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB3:[0-9]+]], i32 [[TMP0]]), !dbg [[DBG16:![0-9]+]]
|
||||||
// DEBUG1-NEXT: invoke void @_Z3foov()
|
// DEBUG1-NEXT: invoke void @_Z3foov()
|
||||||
// DEBUG1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]], !dbg [[DBG17:![0-9]+]]
|
// DEBUG1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !dbg [[DBG17:![0-9]+]]
|
||||||
// DEBUG1: invoke.cont:
|
// DEBUG1: invoke.cont:
|
||||||
// DEBUG1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]]), !dbg [[DBG17]]
|
// DEBUG1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]]), !dbg [[DBG17]]
|
||||||
// DEBUG1-NEXT: [[TMP1:%.*]] = load i8, i8* [[A]], align 1, !dbg [[DBG18:![0-9]+]]
|
// DEBUG1-NEXT: [[TMP1:%.*]] = load i8, i8* [[A]], align 1, !dbg [[DBG18:![0-9]+]]
|
||||||
// DEBUG1-NEXT: [[CONV:%.*]] = sext i8 [[TMP1]] to i32, !dbg [[DBG18]]
|
// DEBUG1-NEXT: [[CONV:%.*]] = sext i8 [[TMP1]] to i32, !dbg [[DBG18]]
|
||||||
// DEBUG1-NEXT: ret i32 [[CONV]], !dbg [[DBG19:![0-9]+]]
|
// DEBUG1-NEXT: ret i32 [[CONV]], !dbg [[DBG19:![0-9]+]]
|
||||||
// DEBUG1: lpad:
|
// DEBUG1: terminate.lpad:
|
||||||
// DEBUG1-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// DEBUG1-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// DEBUG1-NEXT: catch i8* null, !dbg [[DBG20:![0-9]+]]
|
// DEBUG1-NEXT: catch i8* null, !dbg [[DBG17]]
|
||||||
// DEBUG1-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0, !dbg [[DBG20]]
|
// DEBUG1-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0, !dbg [[DBG17]]
|
||||||
// DEBUG1-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8, !dbg [[DBG20]]
|
// DEBUG1-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR8:[0-9]+]], !dbg [[DBG17]]
|
||||||
// DEBUG1-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1, !dbg [[DBG20]]
|
|
||||||
// DEBUG1-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4, !dbg [[DBG20]]
|
|
||||||
// DEBUG1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]]), !dbg [[DBG17]]
|
|
||||||
// DEBUG1-NEXT: br label [[TERMINATE_HANDLER:%.*]], !dbg [[DBG17]]
|
|
||||||
// DEBUG1: terminate.handler:
|
|
||||||
// DEBUG1-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8, !dbg [[DBG17]]
|
|
||||||
// DEBUG1-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR8:[0-9]+]], !dbg [[DBG17]]
|
|
||||||
// DEBUG1-NEXT: unreachable, !dbg [[DBG17]]
|
// DEBUG1-NEXT: unreachable, !dbg [[DBG17]]
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -255,10 +210,10 @@ void parallel_taskgroup() {
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// DEBUG1-LABEL: define {{[^@]+}}@_Z18parallel_taskgroupv
|
// DEBUG1-LABEL: define {{[^@]+}}@_Z18parallel_taskgroupv
|
||||||
// DEBUG1-SAME: () #[[ATTR6:[0-9]+]] !dbg [[DBG21:![0-9]+]] {
|
// DEBUG1-SAME: () #[[ATTR6:[0-9]+]] !dbg [[DBG20:![0-9]+]] {
|
||||||
// DEBUG1-NEXT: entry:
|
// DEBUG1-NEXT: entry:
|
||||||
// DEBUG1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB7:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)), !dbg [[DBG22:![0-9]+]]
|
// DEBUG1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB7:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)), !dbg [[DBG21:![0-9]+]]
|
||||||
// DEBUG1-NEXT: ret void, !dbg [[DBG23:![0-9]+]]
|
// DEBUG1-NEXT: ret void, !dbg [[DBG22:![0-9]+]]
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// DEBUG1-LABEL: define {{[^@]+}}@.omp_outlined.
|
// DEBUG1-LABEL: define {{[^@]+}}@.omp_outlined.
|
||||||
|
@ -266,29 +221,20 @@ void parallel_taskgroup() {
|
||||||
// DEBUG1-NEXT: entry:
|
// DEBUG1-NEXT: entry:
|
||||||
// DEBUG1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
|
// DEBUG1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
|
||||||
// DEBUG1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
|
// DEBUG1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
|
||||||
// DEBUG1-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// DEBUG1-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// DEBUG1-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
// DEBUG1-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
|
||||||
// DEBUG1-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
// DEBUG1-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
|
||||||
// DEBUG1-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8, !dbg [[DBG25:![0-9]+]]
|
// DEBUG1-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8, !dbg [[DBG24:![0-9]+]]
|
||||||
// DEBUG1-NEXT: [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 4, !dbg [[DBG25]]
|
// DEBUG1-NEXT: [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 4, !dbg [[DBG24]]
|
||||||
// DEBUG1-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB5:[0-9]+]], i32 [[TMP1]]), !dbg [[DBG25]]
|
// DEBUG1-NEXT: call void @__kmpc_taskgroup(%struct.ident_t* @[[GLOB5:[0-9]+]], i32 [[TMP1]]), !dbg [[DBG24]]
|
||||||
// DEBUG1-NEXT: invoke void @_Z3foov()
|
// DEBUG1-NEXT: invoke void @_Z3foov()
|
||||||
// DEBUG1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]], !dbg [[DBG26:![0-9]+]]
|
// DEBUG1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]], !dbg [[DBG25:![0-9]+]]
|
||||||
// DEBUG1: invoke.cont:
|
// DEBUG1: invoke.cont:
|
||||||
// DEBUG1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB5]], i32 [[TMP1]]), !dbg [[DBG26]]
|
// DEBUG1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB5]], i32 [[TMP1]]), !dbg [[DBG25]]
|
||||||
// DEBUG1-NEXT: ret void, !dbg [[DBG27:![0-9]+]]
|
// DEBUG1-NEXT: ret void, !dbg [[DBG26:![0-9]+]]
|
||||||
// DEBUG1: lpad:
|
// DEBUG1: terminate.lpad:
|
||||||
// DEBUG1-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// DEBUG1-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// DEBUG1-NEXT: catch i8* null, !dbg [[DBG28:![0-9]+]]
|
// DEBUG1-NEXT: catch i8* null, !dbg [[DBG25]]
|
||||||
// DEBUG1-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0, !dbg [[DBG28]]
|
// DEBUG1-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0, !dbg [[DBG25]]
|
||||||
// DEBUG1-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8, !dbg [[DBG28]]
|
// DEBUG1-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR8]], !dbg [[DBG25]]
|
||||||
// DEBUG1-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1, !dbg [[DBG28]]
|
// DEBUG1-NEXT: unreachable, !dbg [[DBG25]]
|
||||||
// DEBUG1-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4, !dbg [[DBG28]]
|
|
||||||
// DEBUG1-NEXT: call void @__kmpc_end_taskgroup(%struct.ident_t* @[[GLOB5]], i32 [[TMP1]]), !dbg [[DBG26]]
|
|
||||||
// DEBUG1-NEXT: br label [[TERMINATE_HANDLER:%.*]], !dbg [[DBG26]]
|
|
||||||
// DEBUG1: terminate.handler:
|
|
||||||
// DEBUG1-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8, !dbg [[DBG26]]
|
|
||||||
// DEBUG1-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR8]], !dbg [[DBG26]]
|
|
||||||
// DEBUG1-NEXT: unreachable, !dbg [[DBG26]]
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -1044,11 +1044,9 @@ int main() {
|
||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
// CHECK1-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
||||||
// CHECK1-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK1-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK1-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK1-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK1-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
// CHECK1-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
||||||
// CHECK1-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
// CHECK1-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
||||||
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK1: invoke.cont:
|
// CHECK1: invoke.cont:
|
||||||
// CHECK1-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK1-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK1-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
// CHECK1-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
||||||
|
@ -1059,17 +1057,11 @@ int main() {
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
// CHECK1-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
||||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: lpad:
|
// CHECK1: terminate.lpad:
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// CHECK1-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK1-NEXT: catch i8* null
|
// CHECK1-NEXT: catch i8* null
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
// CHECK1-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
||||||
// CHECK1-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8
|
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR9]]
|
||||||
// CHECK1-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1
|
|
||||||
// CHECK1-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK1-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK1: terminate.handler:
|
|
||||||
// CHECK1-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR9]]
|
|
||||||
// CHECK1-NEXT: unreachable
|
// CHECK1-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -2196,11 +2188,9 @@ int main() {
|
||||||
// CHECK2-NEXT: entry:
|
// CHECK2-NEXT: entry:
|
||||||
// CHECK2-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
// CHECK2-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
||||||
// CHECK2-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK2-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK2-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK2-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK2-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
// CHECK2-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
||||||
// CHECK2-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
// CHECK2-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
||||||
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK2: invoke.cont:
|
// CHECK2: invoke.cont:
|
||||||
// CHECK2-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK2-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK2-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
// CHECK2-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
||||||
|
@ -2211,17 +2201,11 @@ int main() {
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
// CHECK2-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
||||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: lpad:
|
// CHECK2: terminate.lpad:
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// CHECK2-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK2-NEXT: catch i8* null
|
// CHECK2-NEXT: catch i8* null
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
// CHECK2-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
||||||
// CHECK2-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8
|
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR9]]
|
||||||
// CHECK2-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1
|
|
||||||
// CHECK2-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK2-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK2: terminate.handler:
|
|
||||||
// CHECK2-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR9]]
|
|
||||||
// CHECK2-NEXT: unreachable
|
// CHECK2-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -3339,11 +3323,9 @@ int main() {
|
||||||
// CHECK5-NEXT: entry:
|
// CHECK5-NEXT: entry:
|
||||||
// CHECK5-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
// CHECK5-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
||||||
// CHECK5-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK5-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK5-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK5-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK5-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
// CHECK5-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
||||||
// CHECK5-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
// CHECK5-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
||||||
// CHECK5-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK5-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK5: invoke.cont:
|
// CHECK5: invoke.cont:
|
||||||
// CHECK5-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK5-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK5-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
// CHECK5-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
||||||
|
@ -3354,17 +3336,11 @@ int main() {
|
||||||
// CHECK5-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
// CHECK5-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
||||||
// CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
// CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
||||||
// CHECK5-NEXT: ret void
|
// CHECK5-NEXT: ret void
|
||||||
// CHECK5: lpad:
|
// CHECK5: terminate.lpad:
|
||||||
// CHECK5-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// CHECK5-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK5-NEXT: catch i8* null
|
// CHECK5-NEXT: catch i8* null
|
||||||
// CHECK5-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
// CHECK5-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
||||||
// CHECK5-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8
|
// CHECK5-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR9]]
|
||||||
// CHECK5-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1
|
|
||||||
// CHECK5-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK5-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK5: terminate.handler:
|
|
||||||
// CHECK5-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK5-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR9]]
|
|
||||||
// CHECK5-NEXT: unreachable
|
// CHECK5-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -4491,11 +4467,9 @@ int main() {
|
||||||
// CHECK6-NEXT: entry:
|
// CHECK6-NEXT: entry:
|
||||||
// CHECK6-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
// CHECK6-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
||||||
// CHECK6-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK6-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK6-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK6-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK6-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
// CHECK6-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
||||||
// CHECK6-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
// CHECK6-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
||||||
// CHECK6-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK6-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK6: invoke.cont:
|
// CHECK6: invoke.cont:
|
||||||
// CHECK6-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK6-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK6-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
// CHECK6-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
||||||
|
@ -4506,17 +4480,11 @@ int main() {
|
||||||
// CHECK6-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
// CHECK6-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
||||||
// CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
// CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
||||||
// CHECK6-NEXT: ret void
|
// CHECK6-NEXT: ret void
|
||||||
// CHECK6: lpad:
|
// CHECK6: terminate.lpad:
|
||||||
// CHECK6-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// CHECK6-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK6-NEXT: catch i8* null
|
// CHECK6-NEXT: catch i8* null
|
||||||
// CHECK6-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
// CHECK6-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
||||||
// CHECK6-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8
|
// CHECK6-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR9]]
|
||||||
// CHECK6-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1
|
|
||||||
// CHECK6-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK6-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK6: terminate.handler:
|
|
||||||
// CHECK6-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK6-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR9]]
|
|
||||||
// CHECK6-NEXT: unreachable
|
// CHECK6-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
|
@ -1116,11 +1116,9 @@ int main() {
|
||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
// CHECK1-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
||||||
// CHECK1-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK1-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK1-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK1-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK1-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
// CHECK1-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
||||||
// CHECK1-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
// CHECK1-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
||||||
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK1-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK1: invoke.cont:
|
// CHECK1: invoke.cont:
|
||||||
// CHECK1-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK1-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK1-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
// CHECK1-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
||||||
|
@ -1131,17 +1129,11 @@ int main() {
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
// CHECK1-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
||||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: lpad:
|
// CHECK1: terminate.lpad:
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// CHECK1-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK1-NEXT: catch i8* null
|
// CHECK1-NEXT: catch i8* null
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
// CHECK1-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
||||||
// CHECK1-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8
|
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR9]]
|
||||||
// CHECK1-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1
|
|
||||||
// CHECK1-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK1-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK1: terminate.handler:
|
|
||||||
// CHECK1-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK1-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR9]]
|
|
||||||
// CHECK1-NEXT: unreachable
|
// CHECK1-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -2352,11 +2344,9 @@ int main() {
|
||||||
// CHECK2-NEXT: entry:
|
// CHECK2-NEXT: entry:
|
||||||
// CHECK2-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
// CHECK2-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
||||||
// CHECK2-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK2-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK2-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK2-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK2-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
// CHECK2-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
||||||
// CHECK2-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
// CHECK2-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
||||||
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK2-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK2: invoke.cont:
|
// CHECK2: invoke.cont:
|
||||||
// CHECK2-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK2-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK2-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
// CHECK2-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
||||||
|
@ -2367,17 +2357,11 @@ int main() {
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
// CHECK2-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
||||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: lpad:
|
// CHECK2: terminate.lpad:
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// CHECK2-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK2-NEXT: catch i8* null
|
// CHECK2-NEXT: catch i8* null
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
// CHECK2-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
||||||
// CHECK2-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8
|
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR9]]
|
||||||
// CHECK2-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1
|
|
||||||
// CHECK2-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK2-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK2: terminate.handler:
|
|
||||||
// CHECK2-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK2-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR9]]
|
|
||||||
// CHECK2-NEXT: unreachable
|
// CHECK2-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -4277,11 +4261,9 @@ int main() {
|
||||||
// CHECK5-NEXT: entry:
|
// CHECK5-NEXT: entry:
|
||||||
// CHECK5-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
// CHECK5-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
||||||
// CHECK5-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK5-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK5-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK5-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK5-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
// CHECK5-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
||||||
// CHECK5-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
// CHECK5-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
||||||
// CHECK5-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK5-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK5: invoke.cont:
|
// CHECK5: invoke.cont:
|
||||||
// CHECK5-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK5-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK5-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
// CHECK5-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
||||||
|
@ -4292,17 +4274,11 @@ int main() {
|
||||||
// CHECK5-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
// CHECK5-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
||||||
// CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
// CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
||||||
// CHECK5-NEXT: ret void
|
// CHECK5-NEXT: ret void
|
||||||
// CHECK5: lpad:
|
// CHECK5: terminate.lpad:
|
||||||
// CHECK5-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// CHECK5-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK5-NEXT: catch i8* null
|
// CHECK5-NEXT: catch i8* null
|
||||||
// CHECK5-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
// CHECK5-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
||||||
// CHECK5-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8
|
// CHECK5-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR9]]
|
||||||
// CHECK5-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1
|
|
||||||
// CHECK5-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK5-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK5: terminate.handler:
|
|
||||||
// CHECK5-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK5-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR9]]
|
|
||||||
// CHECK5-NEXT: unreachable
|
// CHECK5-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -5513,11 +5489,9 @@ int main() {
|
||||||
// CHECK6-NEXT: entry:
|
// CHECK6-NEXT: entry:
|
||||||
// CHECK6-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
// CHECK6-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i8, align 1
|
||||||
// CHECK6-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
// CHECK6-NEXT: [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 8
|
||||||
// CHECK6-NEXT: [[EXN_SLOT:%.*]] = alloca i8*, align 8
|
|
||||||
// CHECK6-NEXT: [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK6-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
// CHECK6-NEXT: [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 8
|
||||||
// CHECK6-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
// CHECK6-NEXT: invoke void @_ZN1SC1El(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)
|
||||||
// CHECK6-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
|
// CHECK6-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]
|
||||||
// CHECK6: invoke.cont:
|
// CHECK6: invoke.cont:
|
||||||
// CHECK6-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
// CHECK6-NEXT: [[CALL:%.*]] = call noundef signext i8 @_ZN1ScvcEv(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])
|
||||||
// CHECK6-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
// CHECK6-NEXT: call void @_ZN1SD1Ev(%struct.S* noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR6]]
|
||||||
|
@ -5528,17 +5502,11 @@ int main() {
|
||||||
// CHECK6-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
// CHECK6-NEXT: [[TMP1:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8
|
||||||
// CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
// CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])
|
||||||
// CHECK6-NEXT: ret void
|
// CHECK6-NEXT: ret void
|
||||||
// CHECK6: lpad:
|
// CHECK6: terminate.lpad:
|
||||||
// CHECK6-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
// CHECK6-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
|
||||||
// CHECK6-NEXT: catch i8* null
|
// CHECK6-NEXT: catch i8* null
|
||||||
// CHECK6-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
// CHECK6-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 0
|
||||||
// CHECK6-NEXT: store i8* [[TMP3]], i8** [[EXN_SLOT]], align 8
|
// CHECK6-NEXT: call void @__clang_call_terminate(i8* [[TMP3]]) #[[ATTR9]]
|
||||||
// CHECK6-NEXT: [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP2]], 1
|
|
||||||
// CHECK6-NEXT: store i32 [[TMP4]], i32* [[EHSELECTOR_SLOT]], align 4
|
|
||||||
// CHECK6-NEXT: br label [[TERMINATE_HANDLER:%.*]]
|
|
||||||
// CHECK6: terminate.handler:
|
|
||||||
// CHECK6-NEXT: [[EXN:%.*]] = load i8*, i8** [[EXN_SLOT]], align 8
|
|
||||||
// CHECK6-NEXT: call void @__clang_call_terminate(i8* [[EXN]]) #[[ATTR9]]
|
|
||||||
// CHECK6-NEXT: unreachable
|
// CHECK6-NEXT: unreachable
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue