From 62f7f01a47fad3d345e476c681f81054f0830cd6 Mon Sep 17 00:00:00 2001 From: klensy Date: Thu, 23 May 2024 13:56:41 +0300 Subject: [PATCH] clang filecheck typos fix moved from #91854 --- .../checkers/modernize/redundant-void-arg.cpp | 4 +- .../Analysis/analyzer-checker-option-help.c | 40 +- clang/test/CodeGen/PowerPC/ppc-tmmintrin.c | 2 +- clang/test/CodeGen/X86/avx-builtins.c | 4 +- clang/test/CodeGen/X86/avx512vl-builtins.c | 4 +- clang/test/CodeGen/X86/avx512vlbw-builtins.c | 8 +- clang/test/CodeGen/constantexpr-fneg.c | 2 +- clang/test/CodeGen/fp-floatcontrol-pragma.cpp | 6 +- clang/test/CodeGen/paren-list-agg-init.cpp | 2 +- clang/test/CodeGenCXX/microsoft-abi-throw.cpp | 2 +- .../vtable-assume-load-address-space.cpp | 2 +- clang/test/CodeGenCXX/vtable-assume-load.cpp | 2 +- clang/test/CodeGenOpenCL/builtins-amdgcn.cl | 10 +- clang/test/Driver/baremetal-sysroot.cpp | 2 +- clang/test/Driver/baremetal.cpp | 6 +- clang/test/Driver/save-stats.c | 6 +- .../Misc/pragma-attribute-strict-subjects.c | 2 +- ...target_parallel_generic_loop_codegen-1.cpp | 4438 ++++++++--------- .../standard_conversion_sequences.hlsl | 6 +- 19 files changed, 2274 insertions(+), 2274 deletions(-) diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/redundant-void-arg.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/redundant-void-arg.cpp index 89bf7f04f5576a..6cf59f91016df3 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/modernize/redundant-void-arg.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/redundant-void-arg.cpp @@ -306,8 +306,8 @@ void gronk::bar(void) { // CHECK-MESSAGES: :[[@LINE-2]]:11: warning: {{.*}} in variable declaration // CHECK-FIXES: {{^ }}void (gronk::*p5){{$}} // CHECK-FIXES-NEXT: {{^ \($}} - // CHECK-FIXES-NExT: {{^ $}} - // CHECK-FIXES-NExT: {{^ \);$}} + // CHECK-FIXES-NEXT: {{^ $}} + // CHECK-FIXES-NEXT: {{^ \);$}} } // intentionally not LLVM style to check preservation of whitespace diff --git a/clang/test/Analysis/analyzer-checker-option-help.c b/clang/test/Analysis/analyzer-checker-option-help.c index 5f95569e58498e..5e7531314f3ba2 100644 --- a/clang/test/Analysis/analyzer-checker-option-help.c +++ b/clang/test/Analysis/analyzer-checker-option-help.c @@ -35,26 +35,26 @@ // // CHECK-STABLE: cplusplus.Move:WarnOn // CHECK-STABLE-SAME: (string) In non-aggressive mode, only warn -// CHECK-STABLLE: on use-after-move of local variables (or -// CHECK-STABLLE: local rvalue references) and of STL objects. -// CHECK-STABLLE: The former is possible because local variables -// CHECK-STABLLE: (or local rvalue references) are not tempting -// CHECK-STABLLE: their user to re-use the storage. The latter -// CHECK-STABLLE: is possible because STL objects are known -// CHECK-STABLLE: to end up in a valid but unspecified state -// CHECK-STABLLE: after the move and their state-reset methods -// CHECK-STABLLE: are also known, which allows us to predict -// CHECK-STABLLE: precisely when use-after-move is invalid. -// CHECK-STABLLE: Some STL objects are known to conform to -// CHECK-STABLLE: additional contracts after move, so they -// CHECK-STABLLE: are not tracked. However, smart pointers -// CHECK-STABLLE: specifically are tracked because we can -// CHECK-STABLLE: perform extra checking over them. In aggressive -// CHECK-STABLLE: mode, warn on any use-after-move because -// CHECK-STABLLE: the user has intentionally asked us to completely -// CHECK-STABLLE: eliminate use-after-move in his code. Values: -// CHECK-STABLLE: "KnownsOnly", "KnownsAndLocals", "All". -// CHECK-STABLLE: (default: KnownsAndLocals) +// CHECK-STABLE: on use-after-move of local variables (or +// CHECK-STABLE: local rvalue references) and of STL objects. +// CHECK-STABLE: The former is possible because local variables +// CHECK-STABLE: (or local rvalue references) are not tempting +// CHECK-STABLE: their user to re-use the storage. The latter +// CHECK-STABLE: is possible because STL objects are known +// CHECK-STABLE: to end up in a valid but unspecified state +// CHECK-STABLE: after the move and their state-reset methods +// CHECK-STABLE: are also known, which allows us to predict +// CHECK-STABLE: precisely when use-after-move is invalid. +// CHECK-STABLE: Some STL objects are known to conform to +// CHECK-STABLE: additional contracts after move, so they +// CHECK-STABLE: are not tracked. However, smart pointers +// CHECK-STABLE: specifically are tracked because we can +// CHECK-STABLE: perform extra checking over them. In aggressive +// CHECK-STABLE: mode, warn on any use-after-move because +// CHECK-STABLE: the user has intentionally asked us to completely +// CHECK-STABLE: eliminate use-after-move in his code. Values: +// CHECK-STABLE: "KnownsOnly", "KnownsAndLocals", "All". +// CHECK-STABLE: (default: KnownsAndLocals) // CHECK-STABLE-NOT: debug.AnalysisOrder:* // CHECK-DEVELOPER: debug.AnalysisOrder:* diff --git a/clang/test/CodeGen/PowerPC/ppc-tmmintrin.c b/clang/test/CodeGen/PowerPC/ppc-tmmintrin.c index 40d3839dcf026f..fafdf4ed91e2e9 100644 --- a/clang/test/CodeGen/PowerPC/ppc-tmmintrin.c +++ b/clang/test/CodeGen/PowerPC/ppc-tmmintrin.c @@ -71,7 +71,7 @@ test_alignr() { // CHECK-BE: call <16 x i8> @vec_sld(unsigned char vector[16], unsigned char vector[16], unsigned int) // CHECK-LE: call <16 x i8> @vec_reve(unsigned char vector[16]) // CHECK-LE: call <16 x i8> @vec_reve(unsigned char vector[16]) -// CHECk-LE: call <16 x i8> @vec_sld(unsigned char vector[16], unsigned char vector[16], unsigned int) +// CHECK-LE: call <16 x i8> @vec_sld(unsigned char vector[16], unsigned char vector[16], unsigned int) // CHECK-LE: call <16 x i8> @vec_reve(unsigned char vector[16]) // CHECK: store <16 x i8> zeroinitializer, ptr %{{[0-9a-zA-Z_.]+}}, align 16 // CHECK: store <2 x i64> zeroinitializer, ptr %{{[0-9a-zA-Z_.]+}}, align 16 diff --git a/clang/test/CodeGen/X86/avx-builtins.c b/clang/test/CodeGen/X86/avx-builtins.c index 4bf1213d9fca97..2f80a31c585dc5 100644 --- a/clang/test/CodeGen/X86/avx-builtins.c +++ b/clang/test/CodeGen/X86/avx-builtins.c @@ -1800,14 +1800,14 @@ void test_mm256_storeu_pd(double* A, __m256d B) { void test_mm256_storeu_ps(float* A, __m256 B) { // CHECK-LABEL: test_mm256_storeu_ps // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 1{{$}} - // CHECk-NEXT: ret void + // CHECK-NEXT: ret void _mm256_storeu_ps(A, B); } void test_mm256_storeu_si256(__m256i* A, __m256i B) { // CHECK-LABEL: test_mm256_storeu_si256 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} - // CHECk-NEXT: ret void + // CHECK-NEXT: ret void _mm256_storeu_si256(A, B); } diff --git a/clang/test/CodeGen/X86/avx512vl-builtins.c b/clang/test/CodeGen/X86/avx512vl-builtins.c index 6f544c21e798de..edace2176c154d 100644 --- a/clang/test/CodeGen/X86/avx512vl-builtins.c +++ b/clang/test/CodeGen/X86/avx512vl-builtins.c @@ -7021,8 +7021,8 @@ void test_mm256_mask_store_ps(void *__P, __mmask8 __U, __m256 __A) { } void test_mm_storeu_epi64(void *__p, __m128i __a) { - // check-label: @test_mm_storeu_epi64 - // check: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} + // CHECK-LABEL: @test_mm_storeu_epi64 + // CHECK: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm_storeu_epi64(__p, __a); } diff --git a/clang/test/CodeGen/X86/avx512vlbw-builtins.c b/clang/test/CodeGen/X86/avx512vlbw-builtins.c index e2ce348d0e077f..c95ddbec2e377a 100644 --- a/clang/test/CodeGen/X86/avx512vlbw-builtins.c +++ b/clang/test/CodeGen/X86/avx512vlbw-builtins.c @@ -2569,8 +2569,8 @@ __m256i test_mm256_maskz_loadu_epi8(__mmask32 __U, void const *__P) { } void test_mm_storeu_epi16(void *__p, __m128i __a) { - // check-label: @test_mm_storeu_epi16 - // check: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} + // CHECK-LABEL: @test_mm_storeu_epi16 + // CHECK: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm_storeu_epi16(__p, __a); } @@ -2593,8 +2593,8 @@ void test_mm256_mask_storeu_epi16(void *__P, __mmask16 __U, __m256i __A) { } void test_mm_storeu_epi8(void *__p, __m128i __a) { - // check-label: @test_mm_storeu_epi8 - // check: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} + // CHECK-LABEL: @test_mm_storeu_epi8 + // CHECK: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm_storeu_epi8(__p, __a); } diff --git a/clang/test/CodeGen/constantexpr-fneg.c b/clang/test/CodeGen/constantexpr-fneg.c index 3cd4db34f61acb..25eede7eab3fbb 100644 --- a/clang/test/CodeGen/constantexpr-fneg.c +++ b/clang/test/CodeGen/constantexpr-fneg.c @@ -4,7 +4,7 @@ // Test case for PR45426. Make sure we do not crash while writing bitcode // containing a simplify-able fneg constant expression. // -// CHECK-LABEL define i32 @main() +// CHECK-LABEL: define{{.*}} i32 @main() // CHECK: entry: // CHECK-NEXT: %retval = alloca i32 // CHECK-NEXT: store i32 0, ptr %retval diff --git a/clang/test/CodeGen/fp-floatcontrol-pragma.cpp b/clang/test/CodeGen/fp-floatcontrol-pragma.cpp index 966eaf6053970a..5861e93df59591 100644 --- a/clang/test/CodeGen/fp-floatcontrol-pragma.cpp +++ b/clang/test/CodeGen/fp-floatcontrol-pragma.cpp @@ -150,7 +150,7 @@ float check_precise(float x, float y) { } float fma_test2(float a, float b, float c) { -// CHECK-LABEL define{{.*}} float @_Z9fma_test2fff{{.*}} +// CHECK-LABEL: define{{.*}} float @_Z9fma_test2fff{{.*}} #pragma float_control(precise, off) float x = a * b + c; //CHECK: fmuladd @@ -158,7 +158,7 @@ float fma_test2(float a, float b, float c) { } float fma_test1(float a, float b, float c) { -// CHECK-LABEL define{{.*}} float @_Z9fma_test1fff{{.*}} +// CHECK-LABEL: define{{.*}} float @_Z9fma_test1fff{{.*}} #pragma float_control(precise, on) float x = a * b + c; //CHECK: fmuladd @@ -181,7 +181,7 @@ float test_OperatorCall() { return add(1.0f, 2.0f); //CHECK: llvm.experimental.constrained.fadd{{.*}}fpexcept.strict } -// CHECK-LABEL define{{.*}} float {{.*}}test_OperatorCall{{.*}} +// CHECK-LABEL: define{{.*}} float {{.*}}test_OperatorCall{{.*}} #if FENV_ON #pragma STDC FENV_ACCESS ON diff --git a/clang/test/CodeGen/paren-list-agg-init.cpp b/clang/test/CodeGen/paren-list-agg-init.cpp index 94d42431d125d4..78cab8a71110f5 100644 --- a/clang/test/CodeGen/paren-list-agg-init.cpp +++ b/clang/test/CodeGen/paren-list-agg-init.cpp @@ -382,7 +382,7 @@ void foo18() { // CHECK-NEXT: [[A:%.*a.*]] = getelementptr inbounds [[STRUCT_G]], ptr [[G]], i32 0, i32 0 // CHECK-NEXT: store i32 2, ptr [[A]], align 4 // CHECK-NEXT: [[F:%.*f.*]] = getelementptr inbounds [[STRUCT_G]], ptr [[G]], i32 0, i32 1 -// CHECk-NEXT: call void @{{.*F.*}}(ptr noundef nonnull align 1 dereferenceable(1)) [[F]], ie32 noundef 1) +// CHECK-NEXT: call void @_ZN1FC1Ei(ptr noundef nonnull align 1 dereferenceable(1) [[F]], i32 noundef 1) // CHECK: ret void void foo19() { G g(2); diff --git a/clang/test/CodeGenCXX/microsoft-abi-throw.cpp b/clang/test/CodeGenCXX/microsoft-abi-throw.cpp index 10a58b21fc101d..b861127430ae58 100644 --- a/clang/test/CodeGenCXX/microsoft-abi-throw.cpp +++ b/clang/test/CodeGenCXX/microsoft-abi-throw.cpp @@ -14,7 +14,7 @@ // CHECK-DAG: @"_TI5?AUY@@" = linkonce_odr unnamed_addr constant %eh.ThrowInfo { i32 0, ptr @"??_DY@@QAEXXZ", ptr null, ptr @"_CTA5?AUY@@" }, section ".xdata", comdat // CHECK-DAG: @"_CT??_R0?AUDefault@@@8??_ODefault@@QAEXAAU0@@Z1" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 0, ptr @"??_R0?AUDefault@@@8", i32 0, i32 -1, i32 0, i32 1, ptr @"??_ODefault@@QAEXAAU0@@Z" }, section ".xdata", comdat // CHECK-DAG: @"_CT??_R0?AUDeletedCopy@@@81" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 0, ptr @"??_R0?AUDeletedCopy@@@8", i32 0, i32 -1, i32 0, i32 1, ptr null }, section ".xdata", comdat -// CHECk-DAG: @"_CT??_R0?AUMoveOnly@@@84" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 0, ptr @"??_R0?AUMoveOnly@@@8", i32 0, i321-1, i32 0, i32 4, ptr null }, section ".xdata", comda +// CHECK-DAG: @"_CT??_R0?AUMoveOnly@@@84" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 0, ptr @"??_R0?AUMoveOnly@@@8", i32 0, i321-1, i32 0, i32 4, ptr null }, section ".xdata", comdat // CHECK-DAG: @"_CT??_R0?AUVariadic@@@8??_OVariadic@@QAEXAAU0@@Z1" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 0, ptr @"??_R0?AUVariadic@@@8", i32 0, i32 -1, i32 0, i32 1, ptr @"??_OVariadic@@QAEXAAU0@@Z" }, section ".xdata", comdat // CHECK-DAG: @"_CT??_R0?AUTemplateWithDefault@@@8??$?_OH@TemplateWithDefault@@QAEXAAU0@@Z1" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 0, ptr @"??_R0?AUTemplateWithDefault@@@8", i32 0, i32 -1, i32 0, i32 1, ptr @"??$?_OH@TemplateWithDefault@@QAEXAAU0@@Z" }, section ".xdata", comdat // CHECK-DAG: @"_CTA2$$T" = linkonce_odr unnamed_addr constant %eh.CatchableTypeArray.2 { i32 2, [2 x ptr] [ptr @"_CT??_R0$$T@84", ptr @"_CT??_R0PAX@84"] }, section ".xdata", comdat diff --git a/clang/test/CodeGenCXX/vtable-assume-load-address-space.cpp b/clang/test/CodeGenCXX/vtable-assume-load-address-space.cpp index ecafa99d8be00f..8022886bf9bc51 100644 --- a/clang/test/CodeGenCXX/vtable-assume-load-address-space.cpp +++ b/clang/test/CodeGenCXX/vtable-assume-load-address-space.cpp @@ -112,7 +112,7 @@ void g(B *a) { a->foo(); } // CHECK3: call{{.*}} void @_ZN5test31CC1Ev(ptr // CHECK3: %[[CMP:.*]] = icmp eq ptr addrspace(1) %{{.*}}, getelementptr inbounds inrange(-24, 8) ({ [4 x ptr addrspace(1)] }, ptr addrspace(1) @_ZTVN5test31CE, i32 0, i32 0, i32 3) // CHECK3: call void @llvm.assume(i1 %[[CMP]]) -// CHECK3-LABLEL: } +// CHECK3-LABEL: } void test() { C c; g(&c); diff --git a/clang/test/CodeGenCXX/vtable-assume-load.cpp b/clang/test/CodeGenCXX/vtable-assume-load.cpp index 6ce07d0db1b15a..21ed9233a74fae 100644 --- a/clang/test/CodeGenCXX/vtable-assume-load.cpp +++ b/clang/test/CodeGenCXX/vtable-assume-load.cpp @@ -111,7 +111,7 @@ void g(B *a) { a->foo(); } // CHECK3: call void @_ZN5test31CC1Ev(ptr // CHECK3: %[[CMP:.*]] = icmp eq ptr %{{.*}}, getelementptr inbounds inrange(-24, 8) ({ [4 x ptr] }, ptr @_ZTVN5test31CE, i32 0, i32 0, i32 3) // CHECK3: call void @llvm.assume(i1 %[[CMP]]) -// CHECK3-LABLEL: } +// CHECK3-LABEL: } void test() { C c; g(&c); diff --git a/clang/test/CodeGenOpenCL/builtins-amdgcn.cl b/clang/test/CodeGenOpenCL/builtins-amdgcn.cl index c2ef9ea947e93c..9df38c8d90c289 100644 --- a/clang/test/CodeGenOpenCL/builtins-amdgcn.cl +++ b/clang/test/CodeGenOpenCL/builtins-amdgcn.cl @@ -812,7 +812,7 @@ kernel void test_s_setreg(uint val) { __builtin_amdgcn_s_setreg(8193, val); } -// CHECK-LABEL test_atomic_inc_dec( +// CHECK-LABEL: test_atomic_inc_dec( void test_atomic_inc_dec(local uint *lptr, global uint *gptr, uint val) { uint res; @@ -832,14 +832,14 @@ void test_atomic_inc_dec(local uint *lptr, global uint *gptr, uint val) { res = __builtin_amdgcn_atomic_dec32((volatile global uint*)gptr, val, __ATOMIC_SEQ_CST, ""); } -// CHECK-LABEL test_wavefrontsize( +// CHECK-LABEL: test_wavefrontsize( unsigned test_wavefrontsize() { // CHECK: call i32 @llvm.amdgcn.wavefrontsize() return __builtin_amdgcn_wavefrontsize(); } -// CHECK-LABEL test_flt_rounds( +// CHECK-LABEL: test_flt_rounds( unsigned test_flt_rounds() { // CHECK: call i32 @llvm.get.rounding() @@ -851,13 +851,13 @@ unsigned test_flt_rounds() { return mode; } -// CHECK-LABEL test_get_fpenv( +// CHECK-LABEL: test_get_fpenv( unsigned long test_get_fpenv() { // CHECK: call i64 @llvm.get.fpenv.i64() return __builtin_amdgcn_get_fpenv(); } -// CHECK-LABEL test_set_fpenv( +// CHECK-LABEL: test_set_fpenv( void test_set_fpenv(unsigned long env) { // CHECK: call void @llvm.set.fpenv.i64(i64 %[[ENV:.+]]) __builtin_amdgcn_set_fpenv(env); diff --git a/clang/test/Driver/baremetal-sysroot.cpp b/clang/test/Driver/baremetal-sysroot.cpp index 18654be33b87c9..522f4a08f3fcec 100644 --- a/clang/test/Driver/baremetal-sysroot.cpp +++ b/clang/test/Driver/baremetal-sysroot.cpp @@ -14,7 +14,7 @@ // RUN: | FileCheck --check-prefix=CHECK-V6M-C %s // CHECK-V6M-C: "{{.*}}clang{{.*}}" "-cc1" "-triple" "thumbv6m-unknown-none-eabi" // CHECK-V6M-C-SAME: "-internal-isystem" "{{.*}}/baremetal_default_sysroot{{[/\\]+}}bin{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+}}armv6m-none-eabi{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1" -// CHECk-V6M-C-SAME: "-internal-isystem" "{{.*}}/baremetal_default_sysroot{{[/\\]+}}bin{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+}}armv6m-none-eabi{{[/\\]+}}include" +// CHECK-V6M-C-SAME: "-internal-isystem" "{{.*}}/baremetal_default_sysroot{{[/\\]+}}bin{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+}}armv6m-none-eabi{{[/\\]+}}include" // CHECK-V6M-C-SAME: "-x" "c++" "{{.*}}baremetal-sysroot.cpp" // CHECK-V6M-C-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic" // CHECK-V6M-C-SAME: "-L{{.*}}/baremetal_default_sysroot{{[/\\]+}}bin{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+}}armv6m-none-eabi{{[/\\]+}}lib" diff --git a/clang/test/Driver/baremetal.cpp b/clang/test/Driver/baremetal.cpp index cc14f045df3f9a..347dd359e37162 100644 --- a/clang/test/Driver/baremetal.cpp +++ b/clang/test/Driver/baremetal.cpp @@ -13,7 +13,7 @@ // CHECK-V6M-C-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-V6M-C-SAME: "-isysroot" "[[SYSROOT:[^"]*]]" // CHECK-V6M-C-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1" -// CHECk-V6M-C-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include" +// CHECK-V6M-C-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include" // CHECK-V6M-C-SAME: "-x" "c++" "{{.*}}baremetal.cpp" // CHECK-V6M-C-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL" // CHECK-V6M-C-SAME: "-T" "semihosted.lds" "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for" @@ -167,7 +167,7 @@ // CHECK-RV64-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-RV64-SAME: "-isysroot" "[[SYSROOT:[^"]*]]" // CHECK-RV64-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1" -// CHECk-RV64-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include" +// CHECK-RV64-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include" // CHECK-RV64-SAME: "-x" "c++" "{{.*}}baremetal.cpp" // CHECK-RV64-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" // CHECK-RV64-SAME: "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for" @@ -287,7 +287,7 @@ // CHECK-RV64FD-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-RV64FD-SAME: "-isysroot" "[[SYSROOT:[^"]*]]" // CHECK-RV64FD-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv64imafdc{{[/\\]+}}lp64d{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1" -// CHECk-RV64FD-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv64imafdc{{[/\\]+}}lp64d{{[/\\]+}}include" +// CHECK-RV64FD-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv64imafdc{{[/\\]+}}lp64d{{[/\\]+}}include" // CHECK-RV64FD-SAME: "-x" "c++" "{{.*}}baremetal.cpp" // CHECK-RV64FD-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" // CHECK-RV64FD-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}rv64imafdc{{[/\\]+}}lp64d{{[/\\]+}}lib" diff --git a/clang/test/Driver/save-stats.c b/clang/test/Driver/save-stats.c index ad7867a9916860..ee49668da01d97 100644 --- a/clang/test/Driver/save-stats.c +++ b/clang/test/Driver/save-stats.c @@ -4,9 +4,9 @@ // CHECK: "{{.*}}save-stats.c" // RUN: %clang -target x86_64-apple-darwin -S %s -### 2>&1 | FileCheck %s -check-prefix=NO-STATS -// NO-STATS-NO: -stats-file +// NO-STATS-NOT: -stats-file // NO-STATS: "{{.*}}save-stats.c" -// NO-STATS-NO: -stats-file +// NO-STATS-NOT: -stats-file // RUN: %clang -target x86_64-apple-darwin -save-stats=obj -c -o obj/dir/save-stats.o %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-OBJ // CHECK-OBJ: "-stats-file=obj/dir{{/|\\\\}}save-stats.stats" @@ -49,7 +49,7 @@ // RUN: env CC_PRINT_INTERNAL_STAT=1 \ // RUN: %clang -target x86_64-apple-darwin %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-ENV // CHECK-ENV: "-stats-file=-" -// CHECK-ENV-NO: "stats-file-append" +// CHECK-ENV-NOT: "stats-file-append" // RUN: env CC_PRINT_INTERNAL_STAT=1 \ // RUN: CC_PRINT_INTERNAL_STAT_FILE=/tmp/stats.json \ diff --git a/clang/test/Misc/pragma-attribute-strict-subjects.c b/clang/test/Misc/pragma-attribute-strict-subjects.c index 7c2548c7dfc26b..8310015ce65e1d 100644 --- a/clang/test/Misc/pragma-attribute-strict-subjects.c +++ b/clang/test/Misc/pragma-attribute-strict-subjects.c @@ -68,7 +68,7 @@ struct testRecoverExtraStruct { }; enum testNoEnumAbiTag { CaseCase }; // CHECK-LABEL: EnumDecl{{.*}} testNoEnumAbiTag -// CHECK-NO: AbiTagAttr +// CHECK-NOT: AbiTagAttr #pragma clang attribute pop diff --git a/clang/test/OpenMP/target_parallel_generic_loop_codegen-1.cpp b/clang/test/OpenMP/target_parallel_generic_loop_codegen-1.cpp index bbefab195b9ae7..41fe58a66dc237 100644 --- a/clang/test/OpenMP/target_parallel_generic_loop_codegen-1.cpp +++ b/clang/test/OpenMP/target_parallel_generic_loop_codegen-1.cpp @@ -41,7 +41,7 @@ // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix OMP-DEFAULT // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s // RUN: %clang_cc1 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix OMP-DEFAULT -// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix OMP-DEfAULT +// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix OMP-DEFAULT // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s // RUN: %clang_cc1 -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix OMP-DEFAULT @@ -3982,2237 +3982,2237 @@ int bar(int a){ // // // -// OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init -// OMP-DEfAULT-SAME: () #[[ATTR0:[0-9]+]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @_ZL2a1, ptr @__dso_handle) #[[ATTR2:[0-9]+]] -// OMP-DEfAULT-NEXT: ret void +// OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init +// OMP-DEFAULT-SAME: () #[[ATTR0:[0-9]+]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @_ZL2a1, ptr @__dso_handle) #[[ATTR2:[0-9]+]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SAC1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2SAC2Ev(ptr noundef nonnull align 4 dereferenceable(16) [[THIS1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SAD1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2SAD2Ev(ptr noundef nonnull align 4 dereferenceable(16) [[THIS1]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SAC2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 2 +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SAD2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 3 +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: ret void // // -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SAC1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2SAC2Ev(ptr noundef nonnull align 4 dereferenceable(16) [[THIS1]]) -// OMP-DEfAULT-NEXT: ret void +// OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.1 +// OMP-DEFAULT-SAME: () #[[ATTR0]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @a2) +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @a2, ptr @__dso_handle) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void // // -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SAD1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2SAD2Ev(ptr noundef nonnull align 4 dereferenceable(16) [[THIS1]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void +// OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.2 +// OMP-DEFAULT-SAME: () #[[ATTR0]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b1) +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b1, ptr @__dso_handle) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// // +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SBC1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2SBC2Ev(ptr noundef nonnull align 4 dereferenceable(32) [[THIS1]]) +// OMP-DEFAULT-NEXT: ret void // -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SAC2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 2 -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: ret void // +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SBD1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2SBD2Ev(ptr noundef nonnull align 4 dereferenceable(32) [[THIS1]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void // -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SAD2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 3 -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: ret void // +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SBC2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 5 +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: ret void // -// OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.1 -// OMP-DEfAULT-SAME: () #[[ATTR0]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @a2) -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @a2, ptr @__dso_handle) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void // +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SBD2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 6 +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.3 +// OMP-DEFAULT-SAME: () #[[ATTR0]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b2) +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b2, ptr @__dso_handle) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.4 +// OMP-DEFAULT-SAME: () #[[ATTR0]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: call void @_ZN2SCC1Ev(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SCD1Ev, ptr @_ZL2c1, ptr @__dso_handle) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SCC1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2SCC2Ev(ptr noundef nonnull align 4 dereferenceable(64) [[THIS1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SCD1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2SCD2Ev(ptr noundef nonnull align 4 dereferenceable(64) [[THIS1]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SCC2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 +// OMP-DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 +// OMP-DEFAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 +// OMP-DEFAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 +// OMP-DEFAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 +// OMP-DEFAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 +// OMP-DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 +// OMP-DEFAULT-NEXT: store ptr @.offload_sizes, ptr [[TMP13]], align 4 +// OMP-DEFAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 +// OMP-DEFAULT-NEXT: store ptr @.offload_maptypes, ptr [[TMP14]], align 4 +// OMP-DEFAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 +// OMP-DEFAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 +// OMP-DEFAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 +// OMP-DEFAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 +// OMP-DEFAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 +// OMP-DEFAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 +// OMP-DEFAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 +// OMP-DEFAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 +// OMP-DEFAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 +// OMP-DEFAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2:[0-9]+]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148.region_id, ptr [[KERNEL_ARGS]]) +// OMP-DEFAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 +// OMP-DEFAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] +// OMP-DEFAULT: omp_offload.failed: +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148(i32 [[TMP3]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] +// OMP-DEFAULT: omp_offload.cont: +// OMP-DEFAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148 +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3:[0-9]+]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 8 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SCD2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: ret void // -// OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.2 -// OMP-DEfAULT-SAME: () #[[ATTR0]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b1) -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b1, ptr @__dso_handle) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void // -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SBC1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2SBC2Ev(ptr noundef nonnull align 4 dereferenceable(32) [[THIS1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SBD1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2SBD2Ev(ptr noundef nonnull align 4 dereferenceable(32) [[THIS1]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SBC2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 5 -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SBD2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 6 -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.3 -// OMP-DEfAULT-SAME: () #[[ATTR0]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b2) -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b2, ptr @__dso_handle) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.4 -// OMP-DEfAULT-SAME: () #[[ATTR0]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: call void @_ZN2SCC1Ev(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SCD1Ev, ptr @_ZL2c1, ptr @__dso_handle) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SCC1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2SCC2Ev(ptr noundef nonnull align 4 dereferenceable(64) [[THIS1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SCD1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2SCD2Ev(ptr noundef nonnull align 4 dereferenceable(64) [[THIS1]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SCC2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 -// OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 -// OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 -// OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 -// OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 -// OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 -// OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 -// OMP-DEfAULT-NEXT: store ptr @.offload_sizes, ptr [[TMP13]], align 4 -// OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 -// OMP-DEfAULT-NEXT: store ptr @.offload_maptypes, ptr [[TMP14]], align 4 -// OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 -// OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 -// OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 -// OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 -// OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 -// OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 -// OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 -// OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 -// OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 -// OMP-DEfAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2:[0-9]+]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148.region_id, ptr [[KERNEL_ARGS]]) -// OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 -// OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] -// OMP-DEfAULT: omp_offload.failed: -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148(i32 [[TMP3]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] -// OMP-DEfAULT: omp_offload.cont: -// OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148 -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3:[0-9]+]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 8 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SCD2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.5 -// OMP-DEfAULT-SAME: () #[[ATTR0]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: call void @_ZN2SDC1Ev(ptr noundef nonnull align 4 dereferenceable(128) @d1) -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SDD1Ev, ptr @d1, ptr @__dso_handle) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SDC1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2SDC2Ev(ptr noundef nonnull align 4 dereferenceable(128) [[THIS1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SDD1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2SDD2Ev(ptr noundef nonnull align 4 dereferenceable(128) [[THIS1]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SDC2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 11 -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SDD2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 -// OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 -// OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 -// OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 -// OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 -// OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 -// OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 -// OMP-DEfAULT-NEXT: store ptr @.offload_sizes.6, ptr [[TMP13]], align 4 -// OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 -// OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.7, ptr [[TMP14]], align 4 -// OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 -// OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 -// OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 -// OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 -// OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 -// OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 -// OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 -// OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 -// OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 -// OMP-DEfAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174.region_id, ptr [[KERNEL_ARGS]]) -// OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 -// OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] -// OMP-DEfAULT: omp_offload.failed: -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174(i32 [[TMP3]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] -// OMP-DEfAULT: omp_offload.cont: -// OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174 -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 12 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.8 -// OMP-DEfAULT-SAME: () #[[ATTR0]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: call void @_ZN2SEC1Ev(ptr noundef nonnull align 4 dereferenceable(256) @e1) -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SED1Ev, ptr @e1, ptr @__dso_handle) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SEC1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2SEC2Ev(ptr noundef nonnull align 4 dereferenceable(256) [[THIS1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SED1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2SED2Ev(ptr noundef nonnull align 4 dereferenceable(256) [[THIS1]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SEC2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 -// OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 -// OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 -// OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 -// OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 -// OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 -// OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 -// OMP-DEfAULT-NEXT: store ptr @.offload_sizes.9, ptr [[TMP13]], align 4 -// OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 -// OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.10, ptr [[TMP14]], align 4 -// OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 -// OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 -// OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 -// OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 -// OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 -// OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 -// OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 -// OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 -// OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 -// OMP-DEfAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192.region_id, ptr [[KERNEL_ARGS]]) -// OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 -// OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] -// OMP-DEfAULT: omp_offload.failed: -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192(i32 [[TMP3]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] -// OMP-DEfAULT: omp_offload.cont: -// OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192 -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 14 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SED2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 -// OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 -// OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 -// OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 -// OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 -// OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 -// OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 -// OMP-DEfAULT-NEXT: store ptr @.offload_sizes.11, ptr [[TMP13]], align 4 -// OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 -// OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.12, ptr [[TMP14]], align 4 -// OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 -// OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 -// OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 -// OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 -// OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 -// OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 -// OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 -// OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 -// OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 -// OMP-DEfAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199.region_id, ptr [[KERNEL_ARGS]]) -// OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 -// OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] -// OMP-DEfAULT: omp_offload.failed: -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199(i32 [[TMP3]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] -// OMP-DEfAULT: omp_offload.cont: -// OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199 -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 15 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.13 -// OMP-DEfAULT-SAME: () #[[ATTR0]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: call void @_ZN2STILi100EEC1Ev(ptr noundef nonnull align 4 dereferenceable(912) @t1) -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi100EED1Ev, ptr @t1, ptr @__dso_handle) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EEC1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2STILi100EEC2Ev(ptr noundef nonnull align 4 dereferenceable(912) [[THIS1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EED1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2STILi100EED2Ev(ptr noundef nonnull align 4 dereferenceable(912) [[THIS1]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EEC2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 -// OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 -// OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 -// OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 -// OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 -// OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 -// OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 -// OMP-DEfAULT-NEXT: store ptr @.offload_sizes.14, ptr [[TMP13]], align 4 -// OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 -// OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.15, ptr [[TMP14]], align 4 -// OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 -// OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 -// OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 -// OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 -// OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 -// OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 -// OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 -// OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 -// OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 -// OMP-DEfAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218.region_id, ptr [[KERNEL_ARGS]]) -// OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 -// OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] -// OMP-DEfAULT: omp_offload.failed: -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218(i32 [[TMP3]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] -// OMP-DEfAULT: omp_offload.cont: -// OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218 -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 117 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EED2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 -// OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 -// OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 -// OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 -// OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 -// OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 -// OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 -// OMP-DEfAULT-NEXT: store ptr @.offload_sizes.16, ptr [[TMP13]], align 4 -// OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 -// OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.17, ptr [[TMP14]], align 4 -// OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 -// OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 -// OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 -// OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 -// OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 -// OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 -// OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 -// OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 -// OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 -// OMP-DEfAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225.region_id, ptr [[KERNEL_ARGS]]) -// OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 -// OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] -// OMP-DEfAULT: omp_offload.failed: -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225(i32 [[TMP3]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] -// OMP-DEfAULT: omp_offload.cont: -// OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225 -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 118 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.18 -// OMP-DEfAULT-SAME: () #[[ATTR0]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: call void @_ZN2STILi1000EEC1Ev(ptr noundef nonnull align 4 dereferenceable(4512) @t2) -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi1000EED1Ev, ptr @t2, ptr @__dso_handle) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EEC1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2STILi1000EEC2Ev(ptr noundef nonnull align 4 dereferenceable(4512) [[THIS1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EED1Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2STILi1000EED2Ev(ptr noundef nonnull align 4 dereferenceable(4512) [[THIS1]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EEC2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 -// OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 -// OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 -// OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 -// OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 -// OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 -// OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 -// OMP-DEfAULT-NEXT: store ptr @.offload_sizes.19, ptr [[TMP13]], align 4 -// OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 -// OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.20, ptr [[TMP14]], align 4 -// OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 -// OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 -// OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 -// OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 -// OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 -// OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 -// OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 -// OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 -// OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 -// OMP-DEfAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218.region_id, ptr [[KERNEL_ARGS]]) -// OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 -// OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] -// OMP-DEfAULT: omp_offload.failed: -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218(i32 [[TMP3]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] -// OMP-DEfAULT: omp_offload.cont: -// OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218 -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1017 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EED2Ev -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 -// OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 -// OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 -// OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 -// OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 -// OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 -// OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 -// OMP-DEfAULT-NEXT: store ptr @.offload_sizes.21, ptr [[TMP13]], align 4 -// OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 -// OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.22, ptr [[TMP14]], align 4 -// OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 -// OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 -// OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 -// OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 -// OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 -// OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 -// OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 -// OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 -// OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 -// OMP-DEfAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225.region_id, ptr [[KERNEL_ARGS]]) -// OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 -// OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] -// OMP-DEfAULT: omp_offload.failed: -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225(i32 [[TMP3]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] -// OMP-DEfAULT: omp_offload.cont: -// OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225 -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1018 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_Z3bari -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR1]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[R:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[R_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[R]], align 4 -// OMP-DEfAULT-NEXT: call void @_ZN2SA3fooEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) -// OMP-DEfAULT-NEXT: call void @_ZN2SA3fooEv(ptr noundef nonnull align 4 dereferenceable(16) @a2) -// OMP-DEfAULT-NEXT: call void @_ZN2SB3fooEv(ptr noundef nonnull align 4 dereferenceable(32) @b1) -// OMP-DEfAULT-NEXT: call void @_ZN2SB3fooEv(ptr noundef nonnull align 4 dereferenceable(32) @b2) -// OMP-DEfAULT-NEXT: call void @_ZN2SC3fooEv(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) -// OMP-DEfAULT-NEXT: call void @_ZN2SD3fooEv(ptr noundef nonnull align 4 dereferenceable(128) @d1) -// OMP-DEfAULT-NEXT: call void @_ZN2SE3fooEv(ptr noundef nonnull align 4 dereferenceable(256) @e1) -// OMP-DEfAULT-NEXT: call void @_ZN2STILi100EE3fooEv(ptr noundef nonnull align 4 dereferenceable(912) @t1) -// OMP-DEfAULT-NEXT: call void @_ZN2STILi1000EE3fooEv(ptr noundef nonnull align 4 dereferenceable(4512) @t2) -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[R]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[R_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[R_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[TMP3]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP8]], align 4 -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP9]], align 4 -// OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 -// OMP-DEfAULT-NEXT: store ptr [[TMP6]], ptr [[TMP10]], align 4 -// OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 -// OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 -// OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 -// OMP-DEfAULT-NEXT: store ptr @.offload_sizes.23, ptr [[TMP12]], align 4 -// OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 -// OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.24, ptr [[TMP13]], align 4 -// OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP14]], align 4 -// OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 -// OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP16]], align 8 -// OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 -// OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 -// OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP18]], align 4 -// OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 -// OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP19]], align 4 -// OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP20]], align 4 -// OMP-DEfAULT-NEXT: [[TMP21:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267.region_id, ptr [[KERNEL_ARGS]]) -// OMP-DEfAULT-NEXT: [[TMP22:%.*]] = icmp ne i32 [[TMP21]], 0 -// OMP-DEfAULT-NEXT: br i1 [[TMP22]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] -// OMP-DEfAULT: omp_offload.failed: -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267(i32 [[TMP2]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] -// OMP-DEfAULT: omp_offload.cont: -// OMP-DEfAULT-NEXT: [[TMP23:%.*]] = load i32, ptr [[R]], align 4 -// OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load i32, ptr [[TMP24]], align 4 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP25]] -// OMP-DEfAULT-NEXT: ret i32 [[ADD]] -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SA3fooEv -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SB3fooEv -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 -// OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 -// OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 -// OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 -// OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 -// OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 -// OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 -// OMP-DEfAULT-NEXT: store ptr @.offload_sizes.25, ptr [[TMP13]], align 4 -// OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 -// OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.26, ptr [[TMP14]], align 4 -// OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 -// OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 -// OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 -// OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 -// OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 -// OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 -// OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 -// OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 -// OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 -// OMP-DEfAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122.region_id, ptr [[KERNEL_ARGS]]) -// OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 -// OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] -// OMP-DEfAULT: omp_offload.failed: -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122(i32 [[TMP3]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] -// OMP-DEfAULT: omp_offload.cont: -// OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SC3fooEv -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 7 -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SD3fooEv -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 10 -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SE3fooEv -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185(i32 [[TMP3]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EE3fooEv -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 -// OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 -// OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 -// OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 -// OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 -// OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 -// OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 -// OMP-DEfAULT-NEXT: store ptr @.offload_sizes.27, ptr [[TMP13]], align 4 -// OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 -// OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.28, ptr [[TMP14]], align 4 -// OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 -// OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 -// OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 -// OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 -// OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 -// OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 -// OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 -// OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 -// OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 -// OMP-DEfAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211.region_id, ptr [[KERNEL_ARGS]]) -// OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 -// OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] -// OMP-DEfAULT: omp_offload.failed: -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211(i32 [[TMP3]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] -// OMP-DEfAULT: omp_offload.cont: -// OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EE3fooEv -// OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 -// OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 -// OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 -// OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 -// OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 -// OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 -// OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 -// OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 -// OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 -// OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 -// OMP-DEfAULT-NEXT: store ptr @.offload_sizes.29, ptr [[TMP13]], align 4 -// OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 -// OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.30, ptr [[TMP14]], align 4 -// OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 -// OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 -// OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 -// OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 -// OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 -// OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 -// OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 -// OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 -// OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 -// OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 -// OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 -// OMP-DEfAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211.region_id, ptr [[KERNEL_ARGS]]) -// OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 -// OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] -// OMP-DEfAULT: omp_offload.failed: -// OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211(i32 [[TMP3]]) #[[ATTR2]] -// OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] -// OMP-DEfAULT: omp_offload.cont: -// OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 -// OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267 -// OMP-DEfAULT-SAME: (i32 noundef [[R:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[R_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[R_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[R]], ptr [[R_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[R_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[R_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[R_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[R:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[R_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[R]], ptr [[R_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[R_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[INC:%.*]] = add nsw i32 [[TMP8]], 1 -// OMP-DEfAULT-NEXT: store i32 [[INC]], ptr [[R_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122 -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 4 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185 -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 13 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211 -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 116 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211 -// OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 -// OMP-DEfAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211.omp_outlined, i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211.omp_outlined -// OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 -// OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 -// OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 -// OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) -// OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 -// OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] -// OMP-DEfAULT: cond.true: -// OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] -// OMP-DEfAULT: cond.false: -// OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: br label [[COND_END]] -// OMP-DEfAULT: cond.end: -// OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] -// OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 -// OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] -// OMP-DEfAULT: omp.inner.for.cond: -// OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 -// OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] -// OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] -// OMP-DEfAULT: omp.inner.for.body: -// OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 -// OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] -// OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 -// OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1016 -// OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] -// OMP-DEfAULT: omp.body.continue: -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] -// OMP-DEfAULT: omp.inner.for.inc: -// OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 -// OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 -// OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] -// OMP-DEfAULT: omp.inner.for.end: -// OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] -// OMP-DEfAULT: omp.loop.exit: -// OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_GLOBAL__I_000500 -// OMP-DEfAULT-SAME: () #[[ATTR0]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: call void @__cxx_global_var_init() -// OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.2() -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_GLOBAL__I_000501 -// OMP-DEfAULT-SAME: () #[[ATTR0]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.3() -// OMP-DEfAULT-NEXT: ret void -// -// -// OMP-DEfAULT-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_target_parallel_generic_loop_codegen_1.cpp -// OMP-DEfAULT-SAME: () #[[ATTR0]] { -// OMP-DEfAULT-NEXT: entry: -// OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.1() -// OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.4() -// OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.5() -// OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.8() -// OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.13() -// OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.18() -// OMP-DEfAULT-NEXT: ret void +// OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.5 +// OMP-DEFAULT-SAME: () #[[ATTR0]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: call void @_ZN2SDC1Ev(ptr noundef nonnull align 4 dereferenceable(128) @d1) +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SDD1Ev, ptr @d1, ptr @__dso_handle) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SDC1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2SDC2Ev(ptr noundef nonnull align 4 dereferenceable(128) [[THIS1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SDD1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2SDD2Ev(ptr noundef nonnull align 4 dereferenceable(128) [[THIS1]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SDC2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 11 +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SDD2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 +// OMP-DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 +// OMP-DEFAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 +// OMP-DEFAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 +// OMP-DEFAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 +// OMP-DEFAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 +// OMP-DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 +// OMP-DEFAULT-NEXT: store ptr @.offload_sizes.6, ptr [[TMP13]], align 4 +// OMP-DEFAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 +// OMP-DEFAULT-NEXT: store ptr @.offload_maptypes.7, ptr [[TMP14]], align 4 +// OMP-DEFAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 +// OMP-DEFAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 +// OMP-DEFAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 +// OMP-DEFAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 +// OMP-DEFAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 +// OMP-DEFAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 +// OMP-DEFAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 +// OMP-DEFAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 +// OMP-DEFAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 +// OMP-DEFAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174.region_id, ptr [[KERNEL_ARGS]]) +// OMP-DEFAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 +// OMP-DEFAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] +// OMP-DEFAULT: omp_offload.failed: +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174(i32 [[TMP3]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] +// OMP-DEFAULT: omp_offload.cont: +// OMP-DEFAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174 +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 12 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.8 +// OMP-DEFAULT-SAME: () #[[ATTR0]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: call void @_ZN2SEC1Ev(ptr noundef nonnull align 4 dereferenceable(256) @e1) +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SED1Ev, ptr @e1, ptr @__dso_handle) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SEC1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2SEC2Ev(ptr noundef nonnull align 4 dereferenceable(256) [[THIS1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SED1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2SED2Ev(ptr noundef nonnull align 4 dereferenceable(256) [[THIS1]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SEC2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 +// OMP-DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 +// OMP-DEFAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 +// OMP-DEFAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 +// OMP-DEFAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 +// OMP-DEFAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 +// OMP-DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 +// OMP-DEFAULT-NEXT: store ptr @.offload_sizes.9, ptr [[TMP13]], align 4 +// OMP-DEFAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 +// OMP-DEFAULT-NEXT: store ptr @.offload_maptypes.10, ptr [[TMP14]], align 4 +// OMP-DEFAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 +// OMP-DEFAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 +// OMP-DEFAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 +// OMP-DEFAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 +// OMP-DEFAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 +// OMP-DEFAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 +// OMP-DEFAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 +// OMP-DEFAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 +// OMP-DEFAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 +// OMP-DEFAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192.region_id, ptr [[KERNEL_ARGS]]) +// OMP-DEFAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 +// OMP-DEFAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] +// OMP-DEFAULT: omp_offload.failed: +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192(i32 [[TMP3]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] +// OMP-DEFAULT: omp_offload.cont: +// OMP-DEFAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192 +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 14 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SED2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 +// OMP-DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 +// OMP-DEFAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 +// OMP-DEFAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 +// OMP-DEFAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 +// OMP-DEFAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 +// OMP-DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 +// OMP-DEFAULT-NEXT: store ptr @.offload_sizes.11, ptr [[TMP13]], align 4 +// OMP-DEFAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 +// OMP-DEFAULT-NEXT: store ptr @.offload_maptypes.12, ptr [[TMP14]], align 4 +// OMP-DEFAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 +// OMP-DEFAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 +// OMP-DEFAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 +// OMP-DEFAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 +// OMP-DEFAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 +// OMP-DEFAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 +// OMP-DEFAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 +// OMP-DEFAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 +// OMP-DEFAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 +// OMP-DEFAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199.region_id, ptr [[KERNEL_ARGS]]) +// OMP-DEFAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 +// OMP-DEFAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] +// OMP-DEFAULT: omp_offload.failed: +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199(i32 [[TMP3]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] +// OMP-DEFAULT: omp_offload.cont: +// OMP-DEFAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199 +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 15 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.13 +// OMP-DEFAULT-SAME: () #[[ATTR0]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: call void @_ZN2STILi100EEC1Ev(ptr noundef nonnull align 4 dereferenceable(912) @t1) +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi100EED1Ev, ptr @t1, ptr @__dso_handle) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EEC1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2STILi100EEC2Ev(ptr noundef nonnull align 4 dereferenceable(912) [[THIS1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EED1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2STILi100EED2Ev(ptr noundef nonnull align 4 dereferenceable(912) [[THIS1]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EEC2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 +// OMP-DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 +// OMP-DEFAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 +// OMP-DEFAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 +// OMP-DEFAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 +// OMP-DEFAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 +// OMP-DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 +// OMP-DEFAULT-NEXT: store ptr @.offload_sizes.14, ptr [[TMP13]], align 4 +// OMP-DEFAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 +// OMP-DEFAULT-NEXT: store ptr @.offload_maptypes.15, ptr [[TMP14]], align 4 +// OMP-DEFAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 +// OMP-DEFAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 +// OMP-DEFAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 +// OMP-DEFAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 +// OMP-DEFAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 +// OMP-DEFAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 +// OMP-DEFAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 +// OMP-DEFAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 +// OMP-DEFAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 +// OMP-DEFAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218.region_id, ptr [[KERNEL_ARGS]]) +// OMP-DEFAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 +// OMP-DEFAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] +// OMP-DEFAULT: omp_offload.failed: +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218(i32 [[TMP3]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] +// OMP-DEFAULT: omp_offload.cont: +// OMP-DEFAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218 +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 117 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EED2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 +// OMP-DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 +// OMP-DEFAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 +// OMP-DEFAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 +// OMP-DEFAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 +// OMP-DEFAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 +// OMP-DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 +// OMP-DEFAULT-NEXT: store ptr @.offload_sizes.16, ptr [[TMP13]], align 4 +// OMP-DEFAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 +// OMP-DEFAULT-NEXT: store ptr @.offload_maptypes.17, ptr [[TMP14]], align 4 +// OMP-DEFAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 +// OMP-DEFAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 +// OMP-DEFAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 +// OMP-DEFAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 +// OMP-DEFAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 +// OMP-DEFAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 +// OMP-DEFAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 +// OMP-DEFAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 +// OMP-DEFAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 +// OMP-DEFAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225.region_id, ptr [[KERNEL_ARGS]]) +// OMP-DEFAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 +// OMP-DEFAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] +// OMP-DEFAULT: omp_offload.failed: +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225(i32 [[TMP3]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] +// OMP-DEFAULT: omp_offload.cont: +// OMP-DEFAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225 +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 118 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.18 +// OMP-DEFAULT-SAME: () #[[ATTR0]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: call void @_ZN2STILi1000EEC1Ev(ptr noundef nonnull align 4 dereferenceable(4512) @t2) +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi1000EED1Ev, ptr @t2, ptr @__dso_handle) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EEC1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2STILi1000EEC2Ev(ptr noundef nonnull align 4 dereferenceable(4512) [[THIS1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EED1Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2STILi1000EED2Ev(ptr noundef nonnull align 4 dereferenceable(4512) [[THIS1]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EEC2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 +// OMP-DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 +// OMP-DEFAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 +// OMP-DEFAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 +// OMP-DEFAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 +// OMP-DEFAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 +// OMP-DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 +// OMP-DEFAULT-NEXT: store ptr @.offload_sizes.19, ptr [[TMP13]], align 4 +// OMP-DEFAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 +// OMP-DEFAULT-NEXT: store ptr @.offload_maptypes.20, ptr [[TMP14]], align 4 +// OMP-DEFAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 +// OMP-DEFAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 +// OMP-DEFAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 +// OMP-DEFAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 +// OMP-DEFAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 +// OMP-DEFAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 +// OMP-DEFAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 +// OMP-DEFAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 +// OMP-DEFAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 +// OMP-DEFAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218.region_id, ptr [[KERNEL_ARGS]]) +// OMP-DEFAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 +// OMP-DEFAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] +// OMP-DEFAULT: omp_offload.failed: +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218(i32 [[TMP3]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] +// OMP-DEFAULT: omp_offload.cont: +// OMP-DEFAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218 +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1017 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EED2Ev +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 +// OMP-DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 +// OMP-DEFAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 +// OMP-DEFAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 +// OMP-DEFAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 +// OMP-DEFAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 +// OMP-DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 +// OMP-DEFAULT-NEXT: store ptr @.offload_sizes.21, ptr [[TMP13]], align 4 +// OMP-DEFAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 +// OMP-DEFAULT-NEXT: store ptr @.offload_maptypes.22, ptr [[TMP14]], align 4 +// OMP-DEFAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 +// OMP-DEFAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 +// OMP-DEFAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 +// OMP-DEFAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 +// OMP-DEFAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 +// OMP-DEFAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 +// OMP-DEFAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 +// OMP-DEFAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 +// OMP-DEFAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 +// OMP-DEFAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225.region_id, ptr [[KERNEL_ARGS]]) +// OMP-DEFAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 +// OMP-DEFAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] +// OMP-DEFAULT: omp_offload.failed: +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225(i32 [[TMP3]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] +// OMP-DEFAULT: omp_offload.cont: +// OMP-DEFAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225 +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1018 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_Z3bari +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR1]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[R:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[R_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[R]], align 4 +// OMP-DEFAULT-NEXT: call void @_ZN2SA3fooEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) +// OMP-DEFAULT-NEXT: call void @_ZN2SA3fooEv(ptr noundef nonnull align 4 dereferenceable(16) @a2) +// OMP-DEFAULT-NEXT: call void @_ZN2SB3fooEv(ptr noundef nonnull align 4 dereferenceable(32) @b1) +// OMP-DEFAULT-NEXT: call void @_ZN2SB3fooEv(ptr noundef nonnull align 4 dereferenceable(32) @b2) +// OMP-DEFAULT-NEXT: call void @_ZN2SC3fooEv(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) +// OMP-DEFAULT-NEXT: call void @_ZN2SD3fooEv(ptr noundef nonnull align 4 dereferenceable(128) @d1) +// OMP-DEFAULT-NEXT: call void @_ZN2SE3fooEv(ptr noundef nonnull align 4 dereferenceable(256) @e1) +// OMP-DEFAULT-NEXT: call void @_ZN2STILi100EE3fooEv(ptr noundef nonnull align 4 dereferenceable(912) @t1) +// OMP-DEFAULT-NEXT: call void @_ZN2STILi1000EE3fooEv(ptr noundef nonnull align 4 dereferenceable(4512) @t2) +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[R]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[R_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[R_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[TMP3]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 3, ptr [[TMP8]], align 4 +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[TMP9]], align 4 +// OMP-DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 +// OMP-DEFAULT-NEXT: store ptr [[TMP6]], ptr [[TMP10]], align 4 +// OMP-DEFAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 +// OMP-DEFAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 +// OMP-DEFAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 +// OMP-DEFAULT-NEXT: store ptr @.offload_sizes.23, ptr [[TMP12]], align 4 +// OMP-DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 +// OMP-DEFAULT-NEXT: store ptr @.offload_maptypes.24, ptr [[TMP13]], align 4 +// OMP-DEFAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP14]], align 4 +// OMP-DEFAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 +// OMP-DEFAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP16]], align 8 +// OMP-DEFAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 +// OMP-DEFAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 +// OMP-DEFAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP18]], align 4 +// OMP-DEFAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 +// OMP-DEFAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP19]], align 4 +// OMP-DEFAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[TMP20]], align 4 +// OMP-DEFAULT-NEXT: [[TMP21:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267.region_id, ptr [[KERNEL_ARGS]]) +// OMP-DEFAULT-NEXT: [[TMP22:%.*]] = icmp ne i32 [[TMP21]], 0 +// OMP-DEFAULT-NEXT: br i1 [[TMP22]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] +// OMP-DEFAULT: omp_offload.failed: +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267(i32 [[TMP2]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] +// OMP-DEFAULT: omp_offload.cont: +// OMP-DEFAULT-NEXT: [[TMP23:%.*]] = load i32, ptr [[R]], align 4 +// OMP-DEFAULT-NEXT: [[TMP24:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP25:%.*]] = load i32, ptr [[TMP24]], align 4 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP25]] +// OMP-DEFAULT-NEXT: ret i32 [[ADD]] +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SA3fooEv +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SB3fooEv +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 +// OMP-DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 +// OMP-DEFAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 +// OMP-DEFAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 +// OMP-DEFAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 +// OMP-DEFAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 +// OMP-DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 +// OMP-DEFAULT-NEXT: store ptr @.offload_sizes.25, ptr [[TMP13]], align 4 +// OMP-DEFAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 +// OMP-DEFAULT-NEXT: store ptr @.offload_maptypes.26, ptr [[TMP14]], align 4 +// OMP-DEFAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 +// OMP-DEFAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 +// OMP-DEFAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 +// OMP-DEFAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 +// OMP-DEFAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 +// OMP-DEFAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 +// OMP-DEFAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 +// OMP-DEFAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 +// OMP-DEFAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 +// OMP-DEFAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122.region_id, ptr [[KERNEL_ARGS]]) +// OMP-DEFAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 +// OMP-DEFAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] +// OMP-DEFAULT: omp_offload.failed: +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122(i32 [[TMP3]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] +// OMP-DEFAULT: omp_offload.cont: +// OMP-DEFAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SC3fooEv +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 7 +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SD3fooEv +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 10 +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SE3fooEv +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185(i32 [[TMP3]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EE3fooEv +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 +// OMP-DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 +// OMP-DEFAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 +// OMP-DEFAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 +// OMP-DEFAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 +// OMP-DEFAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 +// OMP-DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 +// OMP-DEFAULT-NEXT: store ptr @.offload_sizes.27, ptr [[TMP13]], align 4 +// OMP-DEFAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 +// OMP-DEFAULT-NEXT: store ptr @.offload_maptypes.28, ptr [[TMP14]], align 4 +// OMP-DEFAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 +// OMP-DEFAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 +// OMP-DEFAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 +// OMP-DEFAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 +// OMP-DEFAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 +// OMP-DEFAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 +// OMP-DEFAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 +// OMP-DEFAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 +// OMP-DEFAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 +// OMP-DEFAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211.region_id, ptr [[KERNEL_ARGS]]) +// OMP-DEFAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 +// OMP-DEFAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] +// OMP-DEFAULT: omp_offload.failed: +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211(i32 [[TMP3]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] +// OMP-DEFAULT: omp_offload.cont: +// OMP-DEFAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EE3fooEv +// OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 +// OMP-DEFAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 +// OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 +// OMP-DEFAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 +// OMP-DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 +// OMP-DEFAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 +// OMP-DEFAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 +// OMP-DEFAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 +// OMP-DEFAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 +// OMP-DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 +// OMP-DEFAULT-NEXT: store ptr @.offload_sizes.29, ptr [[TMP13]], align 4 +// OMP-DEFAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 +// OMP-DEFAULT-NEXT: store ptr @.offload_maptypes.30, ptr [[TMP14]], align 4 +// OMP-DEFAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 +// OMP-DEFAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 +// OMP-DEFAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 +// OMP-DEFAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 +// OMP-DEFAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 +// OMP-DEFAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 +// OMP-DEFAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 +// OMP-DEFAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 +// OMP-DEFAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 +// OMP-DEFAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 +// OMP-DEFAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 +// OMP-DEFAULT-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB2]], i64 -1, i32 1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211.region_id, ptr [[KERNEL_ARGS]]) +// OMP-DEFAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 +// OMP-DEFAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] +// OMP-DEFAULT: omp_offload.failed: +// OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211(i32 [[TMP3]]) #[[ATTR2]] +// OMP-DEFAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] +// OMP-DEFAULT: omp_offload.cont: +// OMP-DEFAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 +// OMP-DEFAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267 +// OMP-DEFAULT-SAME: (i32 noundef [[R:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[R_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[R_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[R]], ptr [[R_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[R_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[R_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[R_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[R:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[R_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[R]], ptr [[R_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[R_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[INC:%.*]] = add nsw i32 [[TMP8]], 1 +// OMP-DEFAULT-NEXT: store i32 [[INC]], ptr [[R_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122 +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 4 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185 +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 13 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211 +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 116 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211 +// OMP-DEFAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 +// OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211.omp_outlined, i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211.omp_outlined +// OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 +// OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 +// OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 +// OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1) +// OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 +// OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] +// OMP-DEFAULT: cond.true: +// OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] +// OMP-DEFAULT: cond.false: +// OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: br label [[COND_END]] +// OMP-DEFAULT: cond.end: +// OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] +// OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 +// OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] +// OMP-DEFAULT: omp.inner.for.cond: +// OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 +// OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] +// OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] +// OMP-DEFAULT: omp.inner.for.body: +// OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 +// OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] +// OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 +// OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1016 +// OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] +// OMP-DEFAULT: omp.body.continue: +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] +// OMP-DEFAULT: omp.inner.for.inc: +// OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 +// OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 +// OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] +// OMP-DEFAULT: omp.inner.for.end: +// OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] +// OMP-DEFAULT: omp.loop.exit: +// OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_GLOBAL__I_000500 +// OMP-DEFAULT-SAME: () #[[ATTR0]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: call void @__cxx_global_var_init() +// OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.2() +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_GLOBAL__I_000501 +// OMP-DEFAULT-SAME: () #[[ATTR0]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.3() +// OMP-DEFAULT-NEXT: ret void +// +// +// OMP-DEFAULT-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_target_parallel_generic_loop_codegen_1.cpp +// OMP-DEFAULT-SAME: () #[[ATTR0]] { +// OMP-DEFAULT-NEXT: entry: +// OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.1() +// OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.4() +// OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.5() +// OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.8() +// OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.13() +// OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.18() +// OMP-DEFAULT-NEXT: ret void // // // diff --git a/clang/test/SemaHLSL/standard_conversion_sequences.hlsl b/clang/test/SemaHLSL/standard_conversion_sequences.hlsl index a0d398105f15d6..693dc1a4a2dc75 100644 --- a/clang/test/SemaHLSL/standard_conversion_sequences.hlsl +++ b/clang/test/SemaHLSL/standard_conversion_sequences.hlsl @@ -4,9 +4,9 @@ void test() { // CHECK: VarDecl {{.*}} used f3 'vector':'float __attribute__((ext_vector_type(3)))' cinit - // CHECK-NEXt: ImplicitCastExpr {{.*}} 'vector':'float __attribute__((ext_vector_type(3)))' - // CHECK-NEXt: ImplicitCastExpr {{.*}} 'float' - // CHECK-NEXt: FloatingLiteral {{.*}} 'double' 1.000000e+00 + // CHECK-NEXT: ImplicitCastExpr {{.*}} 'vector':'float __attribute__((ext_vector_type(3)))' + // CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' + // CHECK-NEXT: FloatingLiteral {{.*}} 'double' 1.000000e+00 vector f3 = 1.0; // No warning for splatting to a vector from a literal.