1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _ 2 // Test host codegen. 3 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s 4 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s 5 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -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 6 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s 7 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s 8 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -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 9 10 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s 11 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s 12 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s 13 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s 14 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s 15 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s 16 17 // Test target parallel for codegen - host bc file has to be created first. 18 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm-bc %s -o %t-ppc-host.bc 19 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s -check-prefix=TCHECK 20 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t %s 21 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s -check-prefix=TCHECK 22 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm-bc %s -o %t-x86-host.bc 23 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck %s -check-prefix=TCHECK 24 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o %t %s 25 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s -check-prefix=TCHECK 26 27 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm-bc %s -o %t-ppc-host.bc 28 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck --check-prefix SIMD-ONLY1 %s 29 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t %s 30 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s 31 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm-bc %s -o %t-x86-host.bc 32 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck --check-prefix SIMD-ONLY1 %s 33 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o %t %s 34 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s 35 36 // Check that no target code is emitted if no omptests flag was provided. 37 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK-NTARGET 38 39 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY2 %s 40 41 // 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 42 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s 43 // 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 44 // 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 45 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s 46 // 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 47 48 // RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s 49 // RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s 50 // RUN: %clang_cc1 -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s 51 // RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s 52 // RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s 53 // RUN: %clang_cc1 -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s 54 55 // Test target parallel for codegen - host bc file has to be created first. 56 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm-bc %s -o %t-ppc-host.bc 57 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s -check-prefix=TCHECK 58 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t %s 59 // RUN: %clang_cc1 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s -check-prefix=TCHECK 60 61 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm-bc %s -o %t-x86-host.bc 62 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck %s -check-prefix=TCHECK 63 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o %t %s 64 // RUN: %clang_cc1 -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s -check-prefix=TCHECK 65 66 // RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm-bc %s -o %t-ppc-host.bc 67 // RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck --check-prefix SIMD-ONLY1 %s 68 // RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t %s 69 // RUN: %clang_cc1 -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s 70 // RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm-bc %s -o %t-x86-host.bc 71 // RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck --check-prefix SIMD-ONLY1 %s 72 // RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o %t %s 73 // RUN: %clang_cc1 -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s 74 75 // Check that no target code is emitted if no omptests flag was provided. 76 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK-NTARGET-OMP-DEFAULT 77 78 // RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY2 %s 79 80 // expected-no-diagnostics 81 #ifndef HEADER 82 #define HEADER 83 84 85 86 87 88 // We have 7 target regions 89 90 91 92 93 94 // We have 4 initializers, one for the 500 priority, another one for 501, or more for the default priority, and the last one for the offloading registration function. 95 96 97 extern int *R; 98 99 struct SA { 100 int arr[4]; 101 void foo() { 102 int a = *R; 103 a += 1; 104 *R = a; 105 } 106 SA() { 107 int a = *R; 108 a += 2; 109 *R = a; 110 } 111 ~SA() { 112 int a = *R; 113 a += 3; 114 *R = a; 115 } 116 }; 117 118 struct SB { 119 int arr[8]; 120 void foo() { 121 int a = *R; 122 #pragma omp target parallel loop 123 for (int i = 0; i < 10; ++i) 124 a += 4; 125 *R = a; 126 } 127 SB() { 128 int a = *R; 129 a += 5; 130 *R = a; 131 } 132 ~SB() { 133 int a = *R; 134 a += 6; 135 *R = a; 136 } 137 }; 138 139 struct SC { 140 int arr[16]; 141 void foo() { 142 int a = *R; 143 a += 7; 144 *R = a; 145 } 146 SC() { 147 int a = *R; 148 #pragma omp target parallel loop 149 for (int i = 0; i < 10; ++i) 150 a += 8; 151 *R = a; 152 } 153 ~SC() { 154 int a = *R; 155 a += 9; 156 *R = a; 157 } 158 }; 159 160 struct SD { 161 int arr[32]; 162 void foo() { 163 int a = *R; 164 a += 10; 165 *R = a; 166 } 167 SD() { 168 int a = *R; 169 a += 11; 170 *R = a; 171 } 172 ~SD() { 173 int a = *R; 174 #pragma omp target parallel loop 175 for (int i = 0; i < 10; ++i) 176 a += 12; 177 *R = a; 178 } 179 }; 180 181 struct SE { 182 int arr[64]; 183 void foo() { 184 int a = *R; 185 #pragma omp target parallel loop if(target: 0) 186 for (int i = 0; i < 10; ++i) 187 a += 13; 188 *R = a; 189 } 190 SE() { 191 int a = *R; 192 #pragma omp target parallel loop 193 for (int i = 0; i < 10; ++i) 194 a += 14; 195 *R = a; 196 } 197 ~SE() { 198 int a = *R; 199 #pragma omp target parallel loop 200 for (int i = 0; i < 10; ++i) 201 a += 15; 202 *R = a; 203 } 204 }; 205 206 template <int x> 207 struct ST { 208 int arr[128 + x]; 209 void foo() { 210 int a = *R; 211 #pragma omp target parallel loop 212 for (int i = 0; i < 10; ++i) 213 a += 16 + x; 214 *R = a; 215 } 216 ST() { 217 int a = *R; 218 #pragma omp target parallel loop 219 for (int i = 0; i < 10; ++i) 220 a += 17 + x; 221 *R = a; 222 } 223 ~ST() { 224 int a = *R; 225 #pragma omp target parallel loop 226 for (int i = 0; i < 10; ++i) 227 a += 18 + x; 228 *R = a; 229 } 230 }; 231 232 // We have to make sure we us all the target regions: 233 234 235 236 237 // We have 2 initializers with priority 500 238 239 // We have 1 initializers with priority 501 240 241 // We have 6 initializers with default priority 242 243 static __attribute__((init_priority(500))) SA a1; 244 SA a2; 245 SB __attribute__((init_priority(500))) b1; 246 SB __attribute__((init_priority(501))) b2; 247 static SC c1; 248 SD d1; 249 SE e1; 250 ST<100> t1; 251 ST<1000> t2; 252 253 254 int bar(int a){ 255 int r = a; 256 257 a1.foo(); 258 a2.foo(); 259 b1.foo(); 260 b2.foo(); 261 c1.foo(); 262 d1.foo(); 263 e1.foo(); 264 t1.foo(); 265 t2.foo(); 266 267 #pragma omp target parallel loop 268 for (int i = 0; i < 10; ++i) 269 ++r; 270 271 return r + *R; 272 } 273 274 // Check metadata is properly generated: 275 276 277 #endif 278 // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init 279 // CHECK-SAME: () #[[ATTR3:[0-9]+]] { 280 // CHECK-NEXT: entry: 281 // CHECK-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) 282 // CHECK-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @_ZL2a1, ptr @__dso_handle) #[[ATTR2:[0-9]+]] 283 // CHECK-NEXT: ret void 284 // 285 // 286 // 287 // 288 // 289 // 290 // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.1 291 // CHECK-SAME: () #[[ATTR3]] { 292 // CHECK-NEXT: entry: 293 // CHECK-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @a2) 294 // CHECK-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @a2, ptr @__dso_handle) #[[ATTR2]] 295 // CHECK-NEXT: ret void 296 // 297 // 298 // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.2 299 // CHECK-SAME: () #[[ATTR3]] { 300 // CHECK-NEXT: entry: 301 // CHECK-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b1) 302 // CHECK-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b1, ptr @__dso_handle) #[[ATTR2]] 303 // CHECK-NEXT: ret void 304 // 305 // 306 // 307 // 308 // 309 // 310 // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.3 311 // CHECK-SAME: () #[[ATTR3]] { 312 // CHECK-NEXT: entry: 313 // CHECK-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b2) 314 // CHECK-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b2, ptr @__dso_handle) #[[ATTR2]] 315 // CHECK-NEXT: ret void 316 // 317 // 318 // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.4 319 // CHECK-SAME: () #[[ATTR3]] { 320 // CHECK-NEXT: entry: 321 // CHECK-NEXT: call void @_ZN2SCC1Ev(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) 322 // CHECK-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SCD1Ev, ptr @_ZL2c1, ptr @__dso_handle) #[[ATTR2]] 323 // CHECK-NEXT: ret void 324 // 325 // 326 // 327 // 328 // 329 // 330 // 331 // 332 // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.7 333 // CHECK-SAME: () #[[ATTR3]] { 334 // CHECK-NEXT: entry: 335 // CHECK-NEXT: call void @_ZN2SDC1Ev(ptr noundef nonnull align 4 dereferenceable(128) @d1) 336 // CHECK-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SDD1Ev, ptr @d1, ptr @__dso_handle) #[[ATTR2]] 337 // CHECK-NEXT: ret void 338 // 339 // 340 // 341 // 342 // 343 // 344 // 345 // 346 // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.10 347 // CHECK-SAME: () #[[ATTR3]] { 348 // CHECK-NEXT: entry: 349 // CHECK-NEXT: call void @_ZN2SEC1Ev(ptr noundef nonnull align 4 dereferenceable(256) @e1) 350 // CHECK-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SED1Ev, ptr @e1, ptr @__dso_handle) #[[ATTR2]] 351 // CHECK-NEXT: ret void 352 // 353 // 354 // 355 // 356 // 357 // 358 // 359 // 360 // 361 // 362 // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.15 363 // CHECK-SAME: () #[[ATTR3]] { 364 // CHECK-NEXT: entry: 365 // CHECK-NEXT: call void @_ZN2STILi100EEC1Ev(ptr noundef nonnull align 4 dereferenceable(912) @t1) 366 // CHECK-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi100EED1Ev, ptr @t1, ptr @__dso_handle) #[[ATTR2]] 367 // CHECK-NEXT: ret void 368 // 369 // 370 // 371 // 372 // 373 // 374 // 375 // 376 // 377 // 378 // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.20 379 // CHECK-SAME: () #[[ATTR3]] { 380 // CHECK-NEXT: entry: 381 // CHECK-NEXT: call void @_ZN2STILi1000EEC1Ev(ptr noundef nonnull align 4 dereferenceable(4512) @t2) 382 // CHECK-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi1000EED1Ev, ptr @t2, ptr @__dso_handle) #[[ATTR2]] 383 // CHECK-NEXT: ret void 384 // 385 // 386 // 387 // 388 // 389 // 390 // 391 // 392 // 393 // 394 // 395 // 396 // 397 // 398 // 399 // 400 // 401 // 402 // CHECK-LABEL: define {{[^@]+}}@_GLOBAL__I_000500 403 // CHECK-SAME: () #[[ATTR3]] { 404 // CHECK-NEXT: entry: 405 // CHECK-NEXT: call void @__cxx_global_var_init() 406 // CHECK-NEXT: call void @__cxx_global_var_init.2() 407 // CHECK-NEXT: ret void 408 // 409 // 410 // CHECK-LABEL: define {{[^@]+}}@_GLOBAL__I_000501 411 // CHECK-SAME: () #[[ATTR3]] { 412 // CHECK-NEXT: entry: 413 // CHECK-NEXT: call void @__cxx_global_var_init.3() 414 // CHECK-NEXT: ret void 415 // 416 // 417 // CHECK-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_target_parallel_generic_loop_codegen_1.cpp 418 // CHECK-SAME: () #[[ATTR3]] { 419 // CHECK-NEXT: entry: 420 // CHECK-NEXT: call void @__cxx_global_var_init.1() 421 // CHECK-NEXT: call void @__cxx_global_var_init.4() 422 // CHECK-NEXT: call void @__cxx_global_var_init.7() 423 // CHECK-NEXT: call void @__cxx_global_var_init.10() 424 // CHECK-NEXT: call void @__cxx_global_var_init.15() 425 // CHECK-NEXT: call void @__cxx_global_var_init.20() 426 // CHECK-NEXT: ret void 427 // 428 // 429 // 430 // 431 // 432 // 433 // 434 // 435 // 436 // 437 // 438 // 439 // 440 // 441 // 442 // 443 // 444 // 445 // 446 // 447 // 448 // 449 // 450 // 451 // 452 // 453 // 454 // 455 // 456 // 457 // 458 // 459 // 460 // 461 // 462 // 463 // 464 // 465 // 466 // 467 // 468 // 469 // 470 // 471 // 472 // 473 // 474 // 475 // 476 // 477 // 478 // 479 // 480 // 481 // 482 // 483 // 484 // 485 // 486 // 487 // 488 // 489 // 490 // 491 // 492 // 493 // 494 // 495 // 496 // 497 // 498 // 499 // 500 // 501 // 502 // 503 // 504 // 505 // 506 // 507 // 508 // 509 // 510 // 511 // 512 // 513 // 514 // 515 // 516 // 517 // 518 // 519 // 520 // 521 // 522 // 523 // 524 // 525 // 526 // 527 // 528 // 529 // 530 // 531 // 532 // 533 // 534 // 535 // 536 // 537 // 538 // 539 // 540 // 541 // 542 // 543 // 544 // 545 // 546 // 547 // 548 // 549 // 550 // 551 // 552 // 553 // 554 // 555 // 556 // 557 // 558 // 559 // 560 // 561 // 562 // 563 // 564 // 565 // 566 // 567 // 568 // 569 // 570 // 571 // 572 // 573 // 574 // 575 // 576 // 577 // 578 // 579 // 580 // 581 // 582 // 583 // 584 // 585 // 586 // 587 // 588 // 589 // 590 // 591 // 592 // 593 // 594 // 595 // 596 // 597 // 598 // 599 // 600 // 601 // 602 // 603 // 604 // 605 // 606 // 607 // 608 // 609 // 610 // 611 // 612 // 613 // 614 // 615 // SIMD-ONLY0-LABEL: define {{[^@]+}}@__cxx_global_var_init 616 // SIMD-ONLY0-SAME: () #[[ATTR0:[0-9]+]] { 617 // SIMD-ONLY0-NEXT: entry: 618 // SIMD-ONLY0-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) 619 // SIMD-ONLY0-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @_ZL2a1, ptr @__dso_handle) #[[ATTR2:[0-9]+]] 620 // SIMD-ONLY0-NEXT: ret void 621 // 622 // 623 // 624 // 625 // SIMD-ONLY0-LABEL: define {{[^@]+}}@__cxx_global_var_init.1 626 // SIMD-ONLY0-SAME: () #[[ATTR0]] { 627 // SIMD-ONLY0-NEXT: entry: 628 // SIMD-ONLY0-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @a2) 629 // SIMD-ONLY0-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @a2, ptr @__dso_handle) #[[ATTR2]] 630 // SIMD-ONLY0-NEXT: ret void 631 // 632 // 633 // SIMD-ONLY0-LABEL: define {{[^@]+}}@__cxx_global_var_init.2 634 // SIMD-ONLY0-SAME: () #[[ATTR0]] { 635 // SIMD-ONLY0-NEXT: entry: 636 // SIMD-ONLY0-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b1) 637 // SIMD-ONLY0-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b1, ptr @__dso_handle) #[[ATTR2]] 638 // SIMD-ONLY0-NEXT: ret void 639 // 640 // 641 // 642 // 643 // SIMD-ONLY0-LABEL: define {{[^@]+}}@__cxx_global_var_init.3 644 // SIMD-ONLY0-SAME: () #[[ATTR0]] { 645 // SIMD-ONLY0-NEXT: entry: 646 // SIMD-ONLY0-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b2) 647 // SIMD-ONLY0-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b2, ptr @__dso_handle) #[[ATTR2]] 648 // SIMD-ONLY0-NEXT: ret void 649 // 650 // 651 // SIMD-ONLY0-LABEL: define {{[^@]+}}@__cxx_global_var_init.4 652 // SIMD-ONLY0-SAME: () #[[ATTR0]] { 653 // SIMD-ONLY0-NEXT: entry: 654 // SIMD-ONLY0-NEXT: call void @_ZN2SCC1Ev(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) 655 // SIMD-ONLY0-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SCD1Ev, ptr @_ZL2c1, ptr @__dso_handle) #[[ATTR2]] 656 // SIMD-ONLY0-NEXT: ret void 657 // 658 // 659 // 660 // 661 // SIMD-ONLY0-LABEL: define {{[^@]+}}@__cxx_global_var_init.5 662 // SIMD-ONLY0-SAME: () #[[ATTR0]] { 663 // SIMD-ONLY0-NEXT: entry: 664 // SIMD-ONLY0-NEXT: call void @_ZN2SDC1Ev(ptr noundef nonnull align 4 dereferenceable(128) @d1) 665 // SIMD-ONLY0-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SDD1Ev, ptr @d1, ptr @__dso_handle) #[[ATTR2]] 666 // SIMD-ONLY0-NEXT: ret void 667 // 668 // 669 // 670 // 671 // SIMD-ONLY0-LABEL: define {{[^@]+}}@__cxx_global_var_init.6 672 // SIMD-ONLY0-SAME: () #[[ATTR0]] { 673 // SIMD-ONLY0-NEXT: entry: 674 // SIMD-ONLY0-NEXT: call void @_ZN2SEC1Ev(ptr noundef nonnull align 4 dereferenceable(256) @e1) 675 // SIMD-ONLY0-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SED1Ev, ptr @e1, ptr @__dso_handle) #[[ATTR2]] 676 // SIMD-ONLY0-NEXT: ret void 677 // 678 // 679 // 680 // 681 // SIMD-ONLY0-LABEL: define {{[^@]+}}@__cxx_global_var_init.7 682 // SIMD-ONLY0-SAME: () #[[ATTR0]] { 683 // SIMD-ONLY0-NEXT: entry: 684 // SIMD-ONLY0-NEXT: call void @_ZN2STILi100EEC1Ev(ptr noundef nonnull align 4 dereferenceable(912) @t1) 685 // SIMD-ONLY0-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi100EED1Ev, ptr @t1, ptr @__dso_handle) #[[ATTR2]] 686 // SIMD-ONLY0-NEXT: ret void 687 // 688 // 689 // 690 // 691 // SIMD-ONLY0-LABEL: define {{[^@]+}}@__cxx_global_var_init.8 692 // SIMD-ONLY0-SAME: () #[[ATTR0]] { 693 // SIMD-ONLY0-NEXT: entry: 694 // SIMD-ONLY0-NEXT: call void @_ZN2STILi1000EEC1Ev(ptr noundef nonnull align 4 dereferenceable(4512) @t2) 695 // SIMD-ONLY0-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi1000EED1Ev, ptr @t2, ptr @__dso_handle) #[[ATTR2]] 696 // SIMD-ONLY0-NEXT: ret void 697 // 698 // 699 // 700 // 701 // 702 // 703 // 704 // 705 // 706 // 707 // 708 // 709 // 710 // 711 // 712 // 713 // 714 // 715 // 716 // 717 // 718 // 719 // 720 // 721 // 722 // 723 // SIMD-ONLY0-LABEL: define {{[^@]+}}@_GLOBAL__I_000500 724 // SIMD-ONLY0-SAME: () #[[ATTR0]] { 725 // SIMD-ONLY0-NEXT: entry: 726 // SIMD-ONLY0-NEXT: call void @__cxx_global_var_init() 727 // SIMD-ONLY0-NEXT: call void @__cxx_global_var_init.2() 728 // SIMD-ONLY0-NEXT: ret void 729 // 730 // 731 // SIMD-ONLY0-LABEL: define {{[^@]+}}@_GLOBAL__I_000501 732 // SIMD-ONLY0-SAME: () #[[ATTR0]] { 733 // SIMD-ONLY0-NEXT: entry: 734 // SIMD-ONLY0-NEXT: call void @__cxx_global_var_init.3() 735 // SIMD-ONLY0-NEXT: ret void 736 // 737 // 738 // SIMD-ONLY0-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_target_parallel_generic_loop_codegen_1.cpp 739 // SIMD-ONLY0-SAME: () #[[ATTR0]] { 740 // SIMD-ONLY0-NEXT: entry: 741 // SIMD-ONLY0-NEXT: call void @__cxx_global_var_init.1() 742 // SIMD-ONLY0-NEXT: call void @__cxx_global_var_init.4() 743 // SIMD-ONLY0-NEXT: call void @__cxx_global_var_init.5() 744 // SIMD-ONLY0-NEXT: call void @__cxx_global_var_init.6() 745 // SIMD-ONLY0-NEXT: call void @__cxx_global_var_init.7() 746 // SIMD-ONLY0-NEXT: call void @__cxx_global_var_init.8() 747 // SIMD-ONLY0-NEXT: ret void 748 // 749 // 750 // 751 // 752 // 753 // 754 // 755 // 756 // 757 // 758 // 759 // 760 // 761 // 762 // 763 // 764 // 765 // 766 // 767 // 768 // 769 // 770 // 771 // 772 // 773 // 774 // 775 // 776 // 777 // 778 // 779 // 780 // 781 // 782 // 783 // 784 // 785 // 786 // 787 // 788 // 789 // 790 // 791 // 792 // 793 // 794 // 795 // 796 // 797 // 798 // 799 // 800 // 801 // 802 // 803 // 804 // 805 // 806 // 807 // 808 // 809 // 810 // 811 // 812 // 813 // 814 // 815 // 816 // 817 // 818 // 819 // 820 // 821 // 822 // 823 // 824 // 825 // 826 // 827 // 828 // 829 // 830 // 831 // 832 // 833 // 834 // 835 // 836 // 837 // 838 // 839 // 840 // 841 // 842 // 843 // 844 // 845 // 846 // 847 // 848 // 849 // 850 // 851 // 852 // 853 // 854 // 855 // 856 // 857 // 858 // 859 // 860 // 861 // 862 // 863 // 864 // 865 // 866 // 867 // 868 // 869 // 870 // 871 // 872 // 873 // 874 // 875 // 876 // 877 // 878 // 879 // 880 // 881 // 882 // 883 // 884 // 885 // 886 // 887 // 888 // 889 // 890 // 891 // 892 // 893 // 894 // 895 // 896 // 897 // 898 // 899 // 900 // 901 // 902 // 903 // 904 // 905 // 906 // 907 // 908 // 909 // 910 // 911 // 912 // 913 // 914 // 915 // 916 // 917 // 918 // 919 // 920 // 921 // 922 // 923 // 924 // 925 // 926 // 927 // 928 // 929 // 930 // 931 // 932 // 933 // 934 // 935 // 936 // 937 // 938 // 939 // 940 // 941 // 942 // 943 // 944 // 945 // 946 // 947 // 948 // 949 // 950 // 951 // 952 // 953 // 954 // SIMD-ONLY1-LABEL: define {{[^@]+}}@__cxx_global_var_init 955 // SIMD-ONLY1-SAME: () #[[ATTR0:[0-9]+]] { 956 // SIMD-ONLY1-NEXT: entry: 957 // SIMD-ONLY1-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) 958 // SIMD-ONLY1-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @_ZL2a1, ptr @__dso_handle) #[[ATTR2:[0-9]+]] 959 // SIMD-ONLY1-NEXT: ret void 960 // 961 // 962 // 963 // 964 // SIMD-ONLY1-LABEL: define {{[^@]+}}@__cxx_global_var_init.1 965 // SIMD-ONLY1-SAME: () #[[ATTR0]] { 966 // SIMD-ONLY1-NEXT: entry: 967 // SIMD-ONLY1-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @a2) 968 // SIMD-ONLY1-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @a2, ptr @__dso_handle) #[[ATTR2]] 969 // SIMD-ONLY1-NEXT: ret void 970 // 971 // 972 // SIMD-ONLY1-LABEL: define {{[^@]+}}@__cxx_global_var_init.2 973 // SIMD-ONLY1-SAME: () #[[ATTR0]] { 974 // SIMD-ONLY1-NEXT: entry: 975 // SIMD-ONLY1-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b1) 976 // SIMD-ONLY1-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b1, ptr @__dso_handle) #[[ATTR2]] 977 // SIMD-ONLY1-NEXT: ret void 978 // 979 // 980 // 981 // 982 // SIMD-ONLY1-LABEL: define {{[^@]+}}@__cxx_global_var_init.3 983 // SIMD-ONLY1-SAME: () #[[ATTR0]] { 984 // SIMD-ONLY1-NEXT: entry: 985 // SIMD-ONLY1-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b2) 986 // SIMD-ONLY1-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b2, ptr @__dso_handle) #[[ATTR2]] 987 // SIMD-ONLY1-NEXT: ret void 988 // 989 // 990 // SIMD-ONLY1-LABEL: define {{[^@]+}}@__cxx_global_var_init.4 991 // SIMD-ONLY1-SAME: () #[[ATTR0]] { 992 // SIMD-ONLY1-NEXT: entry: 993 // SIMD-ONLY1-NEXT: call void @_ZN2SCC1Ev(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) 994 // SIMD-ONLY1-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SCD1Ev, ptr @_ZL2c1, ptr @__dso_handle) #[[ATTR2]] 995 // SIMD-ONLY1-NEXT: ret void 996 // 997 // 998 // 999 // 1000 // SIMD-ONLY1-LABEL: define {{[^@]+}}@__cxx_global_var_init.5 1001 // SIMD-ONLY1-SAME: () #[[ATTR0]] { 1002 // SIMD-ONLY1-NEXT: entry: 1003 // SIMD-ONLY1-NEXT: call void @_ZN2SDC1Ev(ptr noundef nonnull align 4 dereferenceable(128) @d1) 1004 // SIMD-ONLY1-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SDD1Ev, ptr @d1, ptr @__dso_handle) #[[ATTR2]] 1005 // SIMD-ONLY1-NEXT: ret void 1006 // 1007 // 1008 // 1009 // 1010 // SIMD-ONLY1-LABEL: define {{[^@]+}}@__cxx_global_var_init.6 1011 // SIMD-ONLY1-SAME: () #[[ATTR0]] { 1012 // SIMD-ONLY1-NEXT: entry: 1013 // SIMD-ONLY1-NEXT: call void @_ZN2SEC1Ev(ptr noundef nonnull align 4 dereferenceable(256) @e1) 1014 // SIMD-ONLY1-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SED1Ev, ptr @e1, ptr @__dso_handle) #[[ATTR2]] 1015 // SIMD-ONLY1-NEXT: ret void 1016 // 1017 // 1018 // 1019 // 1020 // SIMD-ONLY1-LABEL: define {{[^@]+}}@__cxx_global_var_init.7 1021 // SIMD-ONLY1-SAME: () #[[ATTR0]] { 1022 // SIMD-ONLY1-NEXT: entry: 1023 // SIMD-ONLY1-NEXT: call void @_ZN2STILi100EEC1Ev(ptr noundef nonnull align 4 dereferenceable(912) @t1) 1024 // SIMD-ONLY1-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi100EED1Ev, ptr @t1, ptr @__dso_handle) #[[ATTR2]] 1025 // SIMD-ONLY1-NEXT: ret void 1026 // 1027 // 1028 // 1029 // 1030 // SIMD-ONLY1-LABEL: define {{[^@]+}}@__cxx_global_var_init.8 1031 // SIMD-ONLY1-SAME: () #[[ATTR0]] { 1032 // SIMD-ONLY1-NEXT: entry: 1033 // SIMD-ONLY1-NEXT: call void @_ZN2STILi1000EEC1Ev(ptr noundef nonnull align 4 dereferenceable(4512) @t2) 1034 // SIMD-ONLY1-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi1000EED1Ev, ptr @t2, ptr @__dso_handle) #[[ATTR2]] 1035 // SIMD-ONLY1-NEXT: ret void 1036 // 1037 // 1038 // 1039 // 1040 // 1041 // 1042 // 1043 // 1044 // 1045 // 1046 // 1047 // 1048 // 1049 // 1050 // 1051 // 1052 // 1053 // 1054 // 1055 // 1056 // 1057 // 1058 // 1059 // 1060 // 1061 // 1062 // SIMD-ONLY1-LABEL: define {{[^@]+}}@_GLOBAL__I_000500 1063 // SIMD-ONLY1-SAME: () #[[ATTR0]] { 1064 // SIMD-ONLY1-NEXT: entry: 1065 // SIMD-ONLY1-NEXT: call void @__cxx_global_var_init() 1066 // SIMD-ONLY1-NEXT: call void @__cxx_global_var_init.2() 1067 // SIMD-ONLY1-NEXT: ret void 1068 // 1069 // 1070 // SIMD-ONLY1-LABEL: define {{[^@]+}}@_GLOBAL__I_000501 1071 // SIMD-ONLY1-SAME: () #[[ATTR0]] { 1072 // SIMD-ONLY1-NEXT: entry: 1073 // SIMD-ONLY1-NEXT: call void @__cxx_global_var_init.3() 1074 // SIMD-ONLY1-NEXT: ret void 1075 // 1076 // 1077 // SIMD-ONLY1-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_target_parallel_generic_loop_codegen_1.cpp 1078 // SIMD-ONLY1-SAME: () #[[ATTR0]] { 1079 // SIMD-ONLY1-NEXT: entry: 1080 // SIMD-ONLY1-NEXT: call void @__cxx_global_var_init.1() 1081 // SIMD-ONLY1-NEXT: call void @__cxx_global_var_init.4() 1082 // SIMD-ONLY1-NEXT: call void @__cxx_global_var_init.5() 1083 // SIMD-ONLY1-NEXT: call void @__cxx_global_var_init.6() 1084 // SIMD-ONLY1-NEXT: call void @__cxx_global_var_init.7() 1085 // SIMD-ONLY1-NEXT: call void @__cxx_global_var_init.8() 1086 // SIMD-ONLY1-NEXT: ret void 1087 // 1088 // 1089 // 1090 // 1091 // 1092 // 1093 // 1094 // 1095 // 1096 // 1097 // 1098 // 1099 // 1100 // 1101 // 1102 // 1103 // 1104 // 1105 // 1106 // 1107 // 1108 // 1109 // 1110 // 1111 // 1112 // 1113 // 1114 // 1115 // 1116 // 1117 // 1118 // 1119 // 1120 // 1121 // 1122 // 1123 // 1124 // 1125 // 1126 // 1127 // 1128 // 1129 // 1130 // 1131 // 1132 // 1133 // 1134 // 1135 // 1136 // 1137 // 1138 // 1139 // 1140 // 1141 // 1142 // 1143 // 1144 // 1145 // 1146 // 1147 // 1148 // 1149 // 1150 // 1151 // 1152 // 1153 // 1154 // 1155 // 1156 // 1157 // 1158 // 1159 // 1160 // 1161 // 1162 // 1163 // 1164 // 1165 // 1166 // 1167 // 1168 // 1169 // 1170 // 1171 // 1172 // 1173 // 1174 // 1175 // 1176 // 1177 // 1178 // 1179 // 1180 // 1181 // 1182 // 1183 // 1184 // 1185 // 1186 // 1187 // 1188 // 1189 // 1190 // 1191 // 1192 // 1193 // 1194 // 1195 // 1196 // 1197 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_Z3bari 1198 // CHECK-NTARGET-SAME: (i32 noundef signext [[A:%.*]]) #[[ATTR0:[0-9]+]] { 1199 // CHECK-NTARGET-NEXT: entry: 1200 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 1201 // CHECK-NTARGET-NEXT: [[R:%.*]] = alloca i32, align 4 1202 // CHECK-NTARGET-NEXT: [[R_CASTED:%.*]] = alloca i64, align 8 1203 // CHECK-NTARGET-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 1204 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 1205 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[R]], align 4 1206 // CHECK-NTARGET-NEXT: call void @_ZN2SA3fooEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) 1207 // CHECK-NTARGET-NEXT: call void @_ZN2SA3fooEv(ptr noundef nonnull align 4 dereferenceable(16) @a2) 1208 // CHECK-NTARGET-NEXT: call void @_ZN2SB3fooEv(ptr noundef nonnull align 4 dereferenceable(32) @b1) 1209 // CHECK-NTARGET-NEXT: call void @_ZN2SB3fooEv(ptr noundef nonnull align 4 dereferenceable(32) @b2) 1210 // CHECK-NTARGET-NEXT: call void @_ZN2SC3fooEv(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) 1211 // CHECK-NTARGET-NEXT: call void @_ZN2SD3fooEv(ptr noundef nonnull align 4 dereferenceable(128) @d1) 1212 // CHECK-NTARGET-NEXT: call void @_ZN2SE3fooEv(ptr noundef nonnull align 4 dereferenceable(256) @e1) 1213 // CHECK-NTARGET-NEXT: call void @_ZN2STILi100EE3fooEv(ptr noundef nonnull align 4 dereferenceable(912) @t1) 1214 // CHECK-NTARGET-NEXT: call void @_ZN2STILi1000EE3fooEv(ptr noundef nonnull align 4 dereferenceable(4512) @t2) 1215 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[R]], align 4 1216 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[R_CASTED]], align 4 1217 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i64, ptr [[R_CASTED]], align 8 1218 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267(i64 [[TMP2]]) #[[ATTR2:[0-9]+]] 1219 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[R]], align 4 1220 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 1221 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 4 1222 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], [[TMP5]] 1223 // CHECK-NTARGET-NEXT: ret i32 [[ADD]] 1224 // 1225 // 1226 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SA3fooEv 1227 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) #[[ATTR0]] comdat { 1228 // CHECK-NTARGET-NEXT: entry: 1229 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1230 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1231 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1232 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1233 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1234 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1235 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1236 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1237 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 1 1238 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[A]], align 4 1239 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 1240 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 1241 // CHECK-NTARGET-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 1242 // CHECK-NTARGET-NEXT: ret void 1243 // 1244 // 1245 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SB3fooEv 1246 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) #[[ATTR0]] comdat { 1247 // CHECK-NTARGET-NEXT: entry: 1248 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1249 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1250 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 1251 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1252 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1253 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1254 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1255 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1256 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1257 // CHECK-NTARGET-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 1258 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 1259 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122(i64 [[TMP3]]) #[[ATTR2]] 1260 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 1261 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 1262 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 1263 // CHECK-NTARGET-NEXT: ret void 1264 // 1265 // 1266 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SC3fooEv 1267 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) #[[ATTR0]] comdat { 1268 // CHECK-NTARGET-NEXT: entry: 1269 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1270 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1271 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1272 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1273 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1274 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1275 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1276 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1277 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 7 1278 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[A]], align 4 1279 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 1280 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 1281 // CHECK-NTARGET-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 1282 // CHECK-NTARGET-NEXT: ret void 1283 // 1284 // 1285 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SD3fooEv 1286 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) #[[ATTR0]] comdat { 1287 // CHECK-NTARGET-NEXT: entry: 1288 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1289 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1290 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1291 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1292 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1293 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1294 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1295 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1296 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 10 1297 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[A]], align 4 1298 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 1299 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 1300 // CHECK-NTARGET-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 1301 // CHECK-NTARGET-NEXT: ret void 1302 // 1303 // 1304 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SE3fooEv 1305 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) #[[ATTR0]] comdat { 1306 // CHECK-NTARGET-NEXT: entry: 1307 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1308 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1309 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 1310 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1311 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1312 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1313 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1314 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1315 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1316 // CHECK-NTARGET-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 1317 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 1318 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185(i64 [[TMP3]]) #[[ATTR2]] 1319 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 1320 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 1321 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 1322 // CHECK-NTARGET-NEXT: ret void 1323 // 1324 // 1325 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2STILi100EE3fooEv 1326 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) #[[ATTR0]] comdat { 1327 // CHECK-NTARGET-NEXT: entry: 1328 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1329 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1330 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 1331 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1332 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1333 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1334 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1335 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1336 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1337 // CHECK-NTARGET-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 1338 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 1339 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211(i64 [[TMP3]]) #[[ATTR2]] 1340 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 1341 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 1342 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 1343 // CHECK-NTARGET-NEXT: ret void 1344 // 1345 // 1346 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2STILi1000EE3fooEv 1347 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) #[[ATTR0]] comdat { 1348 // CHECK-NTARGET-NEXT: entry: 1349 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1350 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1351 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 1352 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1353 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1354 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1355 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1356 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1357 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1358 // CHECK-NTARGET-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 1359 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 1360 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211(i64 [[TMP3]]) #[[ATTR2]] 1361 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 1362 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 1363 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 1364 // CHECK-NTARGET-NEXT: ret void 1365 // 1366 // 1367 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267 1368 // CHECK-NTARGET-SAME: (i64 noundef [[R:%.*]]) #[[ATTR1:[0-9]+]] { 1369 // CHECK-NTARGET-NEXT: entry: 1370 // CHECK-NTARGET-NEXT: [[R_ADDR:%.*]] = alloca i64, align 8 1371 // CHECK-NTARGET-NEXT: [[R_CASTED:%.*]] = alloca i64, align 8 1372 // CHECK-NTARGET-NEXT: store i64 [[R]], ptr [[R_ADDR]], align 8 1373 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[R_ADDR]], align 4 1374 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[R_CASTED]], align 4 1375 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[R_CASTED]], align 8 1376 // CHECK-NTARGET-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2:[0-9]+]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267.omp_outlined, i64 [[TMP1]]) 1377 // CHECK-NTARGET-NEXT: ret void 1378 // 1379 // 1380 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267.omp_outlined 1381 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[R:%.*]]) #[[ATTR1]] { 1382 // CHECK-NTARGET-NEXT: entry: 1383 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 1384 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 1385 // CHECK-NTARGET-NEXT: [[R_ADDR:%.*]] = alloca i64, align 8 1386 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 1387 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 1388 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 1389 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 1390 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 1391 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 1392 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 1393 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 1394 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 1395 // CHECK-NTARGET-NEXT: store i64 [[R]], ptr [[R_ADDR]], align 8 1396 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 1397 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 1398 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 1399 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 1400 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 1401 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1402 // CHECK-NTARGET-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) 1403 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 1404 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 1405 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 1406 // CHECK-NTARGET: cond.true: 1407 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 1408 // CHECK-NTARGET: cond.false: 1409 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 1410 // CHECK-NTARGET-NEXT: br label [[COND_END]] 1411 // CHECK-NTARGET: cond.end: 1412 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 1413 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 1414 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 1415 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 1416 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 1417 // CHECK-NTARGET: omp.inner.for.cond: 1418 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 1419 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 1420 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 1421 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 1422 // CHECK-NTARGET: omp.inner.for.body: 1423 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 1424 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 1425 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 1426 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 1427 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[R_ADDR]], align 4 1428 // CHECK-NTARGET-NEXT: [[INC:%.*]] = add nsw i32 [[TMP8]], 1 1429 // CHECK-NTARGET-NEXT: store i32 [[INC]], ptr [[R_ADDR]], align 4 1430 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 1431 // CHECK-NTARGET: omp.body.continue: 1432 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 1433 // CHECK-NTARGET: omp.inner.for.inc: 1434 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 1435 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP9]], 1 1436 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[DOTOMP_IV]], align 4 1437 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 1438 // CHECK-NTARGET: omp.inner.for.end: 1439 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 1440 // CHECK-NTARGET: omp.loop.exit: 1441 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 1442 // CHECK-NTARGET-NEXT: ret void 1443 // 1444 // 1445 // CHECK-NTARGET-LABEL: define {{[^@]+}}@__cxx_global_var_init 1446 // CHECK-NTARGET-SAME: () #[[ATTR3:[0-9]+]] { 1447 // CHECK-NTARGET-NEXT: entry: 1448 // CHECK-NTARGET-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) 1449 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @_ZL2a1, ptr @__dso_handle) #[[ATTR2]] 1450 // CHECK-NTARGET-NEXT: ret void 1451 // 1452 // 1453 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SAC1Ev 1454 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1455 // CHECK-NTARGET-NEXT: entry: 1456 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1457 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1458 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1459 // CHECK-NTARGET-NEXT: call void @_ZN2SAC2Ev(ptr noundef nonnull align 4 dereferenceable(16) [[THIS1]]) 1460 // CHECK-NTARGET-NEXT: ret void 1461 // 1462 // 1463 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SAD1Ev 1464 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1465 // CHECK-NTARGET-NEXT: entry: 1466 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1467 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1468 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1469 // CHECK-NTARGET-NEXT: call void @_ZN2SAD2Ev(ptr noundef nonnull align 4 dereferenceable(16) [[THIS1]]) #[[ATTR2]] 1470 // CHECK-NTARGET-NEXT: ret void 1471 // 1472 // 1473 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SAC2Ev 1474 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1475 // CHECK-NTARGET-NEXT: entry: 1476 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1477 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1478 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1479 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1480 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1481 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1482 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1483 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1484 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 2 1485 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[A]], align 4 1486 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 1487 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 1488 // CHECK-NTARGET-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 1489 // CHECK-NTARGET-NEXT: ret void 1490 // 1491 // 1492 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SAD2Ev 1493 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1494 // CHECK-NTARGET-NEXT: entry: 1495 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1496 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1497 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1498 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1499 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1500 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1501 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1502 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1503 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 3 1504 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[A]], align 4 1505 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 1506 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 1507 // CHECK-NTARGET-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 1508 // CHECK-NTARGET-NEXT: ret void 1509 // 1510 // 1511 // CHECK-NTARGET-LABEL: define {{[^@]+}}@__cxx_global_var_init.1 1512 // CHECK-NTARGET-SAME: () #[[ATTR3]] { 1513 // CHECK-NTARGET-NEXT: entry: 1514 // CHECK-NTARGET-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @a2) 1515 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @a2, ptr @__dso_handle) #[[ATTR2]] 1516 // CHECK-NTARGET-NEXT: ret void 1517 // 1518 // 1519 // CHECK-NTARGET-LABEL: define {{[^@]+}}@__cxx_global_var_init.2 1520 // CHECK-NTARGET-SAME: () #[[ATTR3]] { 1521 // CHECK-NTARGET-NEXT: entry: 1522 // CHECK-NTARGET-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b1) 1523 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b1, ptr @__dso_handle) #[[ATTR2]] 1524 // CHECK-NTARGET-NEXT: ret void 1525 // 1526 // 1527 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SBC1Ev 1528 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1529 // CHECK-NTARGET-NEXT: entry: 1530 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1531 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1532 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1533 // CHECK-NTARGET-NEXT: call void @_ZN2SBC2Ev(ptr noundef nonnull align 4 dereferenceable(32) [[THIS1]]) 1534 // CHECK-NTARGET-NEXT: ret void 1535 // 1536 // 1537 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SBD1Ev 1538 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1539 // CHECK-NTARGET-NEXT: entry: 1540 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1541 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1542 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1543 // CHECK-NTARGET-NEXT: call void @_ZN2SBD2Ev(ptr noundef nonnull align 4 dereferenceable(32) [[THIS1]]) #[[ATTR2]] 1544 // CHECK-NTARGET-NEXT: ret void 1545 // 1546 // 1547 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SBC2Ev 1548 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1549 // CHECK-NTARGET-NEXT: entry: 1550 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1551 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1552 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1553 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1554 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1555 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1556 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1557 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1558 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 5 1559 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[A]], align 4 1560 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 1561 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 1562 // CHECK-NTARGET-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 1563 // CHECK-NTARGET-NEXT: ret void 1564 // 1565 // 1566 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SBD2Ev 1567 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1568 // CHECK-NTARGET-NEXT: entry: 1569 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1570 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1571 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1572 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1573 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1574 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1575 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1576 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1577 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 6 1578 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[A]], align 4 1579 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 1580 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 1581 // CHECK-NTARGET-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 1582 // CHECK-NTARGET-NEXT: ret void 1583 // 1584 // 1585 // CHECK-NTARGET-LABEL: define {{[^@]+}}@__cxx_global_var_init.3 1586 // CHECK-NTARGET-SAME: () #[[ATTR3]] { 1587 // CHECK-NTARGET-NEXT: entry: 1588 // CHECK-NTARGET-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b2) 1589 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b2, ptr @__dso_handle) #[[ATTR2]] 1590 // CHECK-NTARGET-NEXT: ret void 1591 // 1592 // 1593 // CHECK-NTARGET-LABEL: define {{[^@]+}}@__cxx_global_var_init.4 1594 // CHECK-NTARGET-SAME: () #[[ATTR3]] { 1595 // CHECK-NTARGET-NEXT: entry: 1596 // CHECK-NTARGET-NEXT: call void @_ZN2SCC1Ev(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) 1597 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SCD1Ev, ptr @_ZL2c1, ptr @__dso_handle) #[[ATTR2]] 1598 // CHECK-NTARGET-NEXT: ret void 1599 // 1600 // 1601 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SCC1Ev 1602 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1603 // CHECK-NTARGET-NEXT: entry: 1604 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1605 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1606 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1607 // CHECK-NTARGET-NEXT: call void @_ZN2SCC2Ev(ptr noundef nonnull align 4 dereferenceable(64) [[THIS1]]) 1608 // CHECK-NTARGET-NEXT: ret void 1609 // 1610 // 1611 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SCD1Ev 1612 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1613 // CHECK-NTARGET-NEXT: entry: 1614 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1615 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1616 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1617 // CHECK-NTARGET-NEXT: call void @_ZN2SCD2Ev(ptr noundef nonnull align 4 dereferenceable(64) [[THIS1]]) #[[ATTR2]] 1618 // CHECK-NTARGET-NEXT: ret void 1619 // 1620 // 1621 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SCC2Ev 1622 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1623 // CHECK-NTARGET-NEXT: entry: 1624 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1625 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1626 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 1627 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1628 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1629 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1630 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1631 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1632 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1633 // CHECK-NTARGET-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 1634 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 1635 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148(i64 [[TMP3]]) #[[ATTR2]] 1636 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 1637 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 1638 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 1639 // CHECK-NTARGET-NEXT: ret void 1640 // 1641 // 1642 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148 1643 // CHECK-NTARGET-SAME: (i64 noundef [[A:%.*]]) #[[ATTR1]] { 1644 // CHECK-NTARGET-NEXT: entry: 1645 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 1646 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 1647 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 1648 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 1649 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 1650 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 1651 // CHECK-NTARGET-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, i64 [[TMP1]]) 1652 // CHECK-NTARGET-NEXT: ret void 1653 // 1654 // 1655 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148.omp_outlined 1656 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR1]] { 1657 // CHECK-NTARGET-NEXT: entry: 1658 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 1659 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 1660 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 1661 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 1662 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 1663 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 1664 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 1665 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 1666 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 1667 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 1668 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 1669 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 1670 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 1671 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 1672 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 1673 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 1674 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 1675 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 1676 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1677 // CHECK-NTARGET-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) 1678 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 1679 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 1680 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 1681 // CHECK-NTARGET: cond.true: 1682 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 1683 // CHECK-NTARGET: cond.false: 1684 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 1685 // CHECK-NTARGET-NEXT: br label [[COND_END]] 1686 // CHECK-NTARGET: cond.end: 1687 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 1688 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 1689 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 1690 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 1691 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 1692 // CHECK-NTARGET: omp.inner.for.cond: 1693 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 1694 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 1695 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 1696 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 1697 // CHECK-NTARGET: omp.inner.for.body: 1698 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 1699 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 1700 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 1701 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 1702 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 1703 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 8 1704 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 1705 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 1706 // CHECK-NTARGET: omp.body.continue: 1707 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 1708 // CHECK-NTARGET: omp.inner.for.inc: 1709 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 1710 // CHECK-NTARGET-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 1711 // CHECK-NTARGET-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 1712 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 1713 // CHECK-NTARGET: omp.inner.for.end: 1714 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 1715 // CHECK-NTARGET: omp.loop.exit: 1716 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 1717 // CHECK-NTARGET-NEXT: ret void 1718 // 1719 // 1720 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SCD2Ev 1721 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1722 // CHECK-NTARGET-NEXT: entry: 1723 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1724 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1725 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1726 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1727 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1728 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1729 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1730 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1731 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 9 1732 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[A]], align 4 1733 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 1734 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 1735 // CHECK-NTARGET-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 1736 // CHECK-NTARGET-NEXT: ret void 1737 // 1738 // 1739 // CHECK-NTARGET-LABEL: define {{[^@]+}}@__cxx_global_var_init.5 1740 // CHECK-NTARGET-SAME: () #[[ATTR3]] { 1741 // CHECK-NTARGET-NEXT: entry: 1742 // CHECK-NTARGET-NEXT: call void @_ZN2SDC1Ev(ptr noundef nonnull align 4 dereferenceable(128) @d1) 1743 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SDD1Ev, ptr @d1, ptr @__dso_handle) #[[ATTR2]] 1744 // CHECK-NTARGET-NEXT: ret void 1745 // 1746 // 1747 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SDC1Ev 1748 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1749 // CHECK-NTARGET-NEXT: entry: 1750 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1751 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1752 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1753 // CHECK-NTARGET-NEXT: call void @_ZN2SDC2Ev(ptr noundef nonnull align 4 dereferenceable(128) [[THIS1]]) 1754 // CHECK-NTARGET-NEXT: ret void 1755 // 1756 // 1757 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SDD1Ev 1758 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1759 // CHECK-NTARGET-NEXT: entry: 1760 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1761 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1762 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1763 // CHECK-NTARGET-NEXT: call void @_ZN2SDD2Ev(ptr noundef nonnull align 4 dereferenceable(128) [[THIS1]]) #[[ATTR2]] 1764 // CHECK-NTARGET-NEXT: ret void 1765 // 1766 // 1767 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SDC2Ev 1768 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1769 // CHECK-NTARGET-NEXT: entry: 1770 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1771 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1772 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1773 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1774 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1775 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1776 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1777 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1778 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 11 1779 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[A]], align 4 1780 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 1781 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 1782 // CHECK-NTARGET-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 1783 // CHECK-NTARGET-NEXT: ret void 1784 // 1785 // 1786 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SDD2Ev 1787 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1788 // CHECK-NTARGET-NEXT: entry: 1789 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1790 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1791 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 1792 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1793 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1794 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1795 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1796 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1797 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1798 // CHECK-NTARGET-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 1799 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 1800 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174(i64 [[TMP3]]) #[[ATTR2]] 1801 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 1802 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 1803 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 1804 // CHECK-NTARGET-NEXT: ret void 1805 // 1806 // 1807 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174 1808 // CHECK-NTARGET-SAME: (i64 noundef [[A:%.*]]) #[[ATTR1]] { 1809 // CHECK-NTARGET-NEXT: entry: 1810 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 1811 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 1812 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 1813 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 1814 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 1815 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 1816 // CHECK-NTARGET-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, i64 [[TMP1]]) 1817 // CHECK-NTARGET-NEXT: ret void 1818 // 1819 // 1820 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174.omp_outlined 1821 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR1]] { 1822 // CHECK-NTARGET-NEXT: entry: 1823 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 1824 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 1825 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 1826 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 1827 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 1828 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 1829 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 1830 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 1831 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 1832 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 1833 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 1834 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 1835 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 1836 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 1837 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 1838 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 1839 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 1840 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 1841 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1842 // CHECK-NTARGET-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) 1843 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 1844 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 1845 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 1846 // CHECK-NTARGET: cond.true: 1847 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 1848 // CHECK-NTARGET: cond.false: 1849 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 1850 // CHECK-NTARGET-NEXT: br label [[COND_END]] 1851 // CHECK-NTARGET: cond.end: 1852 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 1853 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 1854 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 1855 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 1856 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 1857 // CHECK-NTARGET: omp.inner.for.cond: 1858 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 1859 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 1860 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 1861 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 1862 // CHECK-NTARGET: omp.inner.for.body: 1863 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 1864 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 1865 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 1866 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 1867 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 1868 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 12 1869 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 1870 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 1871 // CHECK-NTARGET: omp.body.continue: 1872 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 1873 // CHECK-NTARGET: omp.inner.for.inc: 1874 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 1875 // CHECK-NTARGET-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 1876 // CHECK-NTARGET-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 1877 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 1878 // CHECK-NTARGET: omp.inner.for.end: 1879 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 1880 // CHECK-NTARGET: omp.loop.exit: 1881 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 1882 // CHECK-NTARGET-NEXT: ret void 1883 // 1884 // 1885 // CHECK-NTARGET-LABEL: define {{[^@]+}}@__cxx_global_var_init.6 1886 // CHECK-NTARGET-SAME: () #[[ATTR3]] { 1887 // CHECK-NTARGET-NEXT: entry: 1888 // CHECK-NTARGET-NEXT: call void @_ZN2SEC1Ev(ptr noundef nonnull align 4 dereferenceable(256) @e1) 1889 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SED1Ev, ptr @e1, ptr @__dso_handle) #[[ATTR2]] 1890 // CHECK-NTARGET-NEXT: ret void 1891 // 1892 // 1893 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SEC1Ev 1894 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1895 // CHECK-NTARGET-NEXT: entry: 1896 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1897 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1898 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1899 // CHECK-NTARGET-NEXT: call void @_ZN2SEC2Ev(ptr noundef nonnull align 4 dereferenceable(256) [[THIS1]]) 1900 // CHECK-NTARGET-NEXT: ret void 1901 // 1902 // 1903 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SED1Ev 1904 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1905 // CHECK-NTARGET-NEXT: entry: 1906 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1907 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1908 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1909 // CHECK-NTARGET-NEXT: call void @_ZN2SED2Ev(ptr noundef nonnull align 4 dereferenceable(256) [[THIS1]]) #[[ATTR2]] 1910 // CHECK-NTARGET-NEXT: ret void 1911 // 1912 // 1913 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SEC2Ev 1914 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 1915 // CHECK-NTARGET-NEXT: entry: 1916 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 1917 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 1918 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 1919 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 1920 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 1921 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 1922 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1923 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 1924 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 1925 // CHECK-NTARGET-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 1926 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 1927 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192(i64 [[TMP3]]) #[[ATTR2]] 1928 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 1929 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 1930 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 1931 // CHECK-NTARGET-NEXT: ret void 1932 // 1933 // 1934 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192 1935 // CHECK-NTARGET-SAME: (i64 noundef [[A:%.*]]) #[[ATTR1]] { 1936 // CHECK-NTARGET-NEXT: entry: 1937 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 1938 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 1939 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 1940 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 1941 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 1942 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 1943 // CHECK-NTARGET-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, i64 [[TMP1]]) 1944 // CHECK-NTARGET-NEXT: ret void 1945 // 1946 // 1947 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192.omp_outlined 1948 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR1]] { 1949 // CHECK-NTARGET-NEXT: entry: 1950 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 1951 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 1952 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 1953 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 1954 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 1955 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 1956 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 1957 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 1958 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 1959 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 1960 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 1961 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 1962 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 1963 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 1964 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 1965 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 1966 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 1967 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 1968 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 1969 // CHECK-NTARGET-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) 1970 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 1971 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 1972 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 1973 // CHECK-NTARGET: cond.true: 1974 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 1975 // CHECK-NTARGET: cond.false: 1976 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 1977 // CHECK-NTARGET-NEXT: br label [[COND_END]] 1978 // CHECK-NTARGET: cond.end: 1979 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 1980 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 1981 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 1982 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 1983 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 1984 // CHECK-NTARGET: omp.inner.for.cond: 1985 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 1986 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 1987 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 1988 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 1989 // CHECK-NTARGET: omp.inner.for.body: 1990 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 1991 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 1992 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 1993 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 1994 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 1995 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 14 1996 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 1997 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 1998 // CHECK-NTARGET: omp.body.continue: 1999 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 2000 // CHECK-NTARGET: omp.inner.for.inc: 2001 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2002 // CHECK-NTARGET-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 2003 // CHECK-NTARGET-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 2004 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 2005 // CHECK-NTARGET: omp.inner.for.end: 2006 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 2007 // CHECK-NTARGET: omp.loop.exit: 2008 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 2009 // CHECK-NTARGET-NEXT: ret void 2010 // 2011 // 2012 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2SED2Ev 2013 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 2014 // CHECK-NTARGET-NEXT: entry: 2015 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2016 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 2017 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2018 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2019 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2020 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 2021 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2022 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 2023 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 2024 // CHECK-NTARGET-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 2025 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 2026 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199(i64 [[TMP3]]) #[[ATTR2]] 2027 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 2028 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 2029 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 2030 // CHECK-NTARGET-NEXT: ret void 2031 // 2032 // 2033 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199 2034 // CHECK-NTARGET-SAME: (i64 noundef [[A:%.*]]) #[[ATTR1]] { 2035 // CHECK-NTARGET-NEXT: entry: 2036 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2037 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2038 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2039 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 2040 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 2041 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 2042 // CHECK-NTARGET-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, i64 [[TMP1]]) 2043 // CHECK-NTARGET-NEXT: ret void 2044 // 2045 // 2046 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199.omp_outlined 2047 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR1]] { 2048 // CHECK-NTARGET-NEXT: entry: 2049 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 2050 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 2051 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2052 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 2053 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 2054 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 2055 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 2056 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 2057 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 2058 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 2059 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 2060 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 2061 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2062 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 2063 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 2064 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 2065 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 2066 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 2067 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2068 // CHECK-NTARGET-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) 2069 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2070 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 2071 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 2072 // CHECK-NTARGET: cond.true: 2073 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 2074 // CHECK-NTARGET: cond.false: 2075 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2076 // CHECK-NTARGET-NEXT: br label [[COND_END]] 2077 // CHECK-NTARGET: cond.end: 2078 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 2079 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 2080 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 2081 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 2082 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 2083 // CHECK-NTARGET: omp.inner.for.cond: 2084 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2085 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2086 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 2087 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 2088 // CHECK-NTARGET: omp.inner.for.body: 2089 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2090 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 2091 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 2092 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 2093 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 2094 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 15 2095 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 2096 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 2097 // CHECK-NTARGET: omp.body.continue: 2098 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 2099 // CHECK-NTARGET: omp.inner.for.inc: 2100 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2101 // CHECK-NTARGET-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 2102 // CHECK-NTARGET-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 2103 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 2104 // CHECK-NTARGET: omp.inner.for.end: 2105 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 2106 // CHECK-NTARGET: omp.loop.exit: 2107 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 2108 // CHECK-NTARGET-NEXT: ret void 2109 // 2110 // 2111 // CHECK-NTARGET-LABEL: define {{[^@]+}}@__cxx_global_var_init.7 2112 // CHECK-NTARGET-SAME: () #[[ATTR3]] { 2113 // CHECK-NTARGET-NEXT: entry: 2114 // CHECK-NTARGET-NEXT: call void @_ZN2STILi100EEC1Ev(ptr noundef nonnull align 4 dereferenceable(912) @t1) 2115 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi100EED1Ev, ptr @t1, ptr @__dso_handle) #[[ATTR2]] 2116 // CHECK-NTARGET-NEXT: ret void 2117 // 2118 // 2119 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2STILi100EEC1Ev 2120 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 2121 // CHECK-NTARGET-NEXT: entry: 2122 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2123 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2124 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2125 // CHECK-NTARGET-NEXT: call void @_ZN2STILi100EEC2Ev(ptr noundef nonnull align 4 dereferenceable(912) [[THIS1]]) 2126 // CHECK-NTARGET-NEXT: ret void 2127 // 2128 // 2129 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2STILi100EED1Ev 2130 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 2131 // CHECK-NTARGET-NEXT: entry: 2132 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2133 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2134 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2135 // CHECK-NTARGET-NEXT: call void @_ZN2STILi100EED2Ev(ptr noundef nonnull align 4 dereferenceable(912) [[THIS1]]) #[[ATTR2]] 2136 // CHECK-NTARGET-NEXT: ret void 2137 // 2138 // 2139 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2STILi100EEC2Ev 2140 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 2141 // CHECK-NTARGET-NEXT: entry: 2142 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2143 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 2144 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2145 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2146 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2147 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 2148 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2149 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 2150 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 2151 // CHECK-NTARGET-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 2152 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 2153 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218(i64 [[TMP3]]) #[[ATTR2]] 2154 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 2155 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 2156 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 2157 // CHECK-NTARGET-NEXT: ret void 2158 // 2159 // 2160 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218 2161 // CHECK-NTARGET-SAME: (i64 noundef [[A:%.*]]) #[[ATTR1]] { 2162 // CHECK-NTARGET-NEXT: entry: 2163 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2164 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2165 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2166 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 2167 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 2168 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 2169 // CHECK-NTARGET-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, i64 [[TMP1]]) 2170 // CHECK-NTARGET-NEXT: ret void 2171 // 2172 // 2173 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218.omp_outlined 2174 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR1]] { 2175 // CHECK-NTARGET-NEXT: entry: 2176 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 2177 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 2178 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2179 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 2180 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 2181 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 2182 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 2183 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 2184 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 2185 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 2186 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 2187 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 2188 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2189 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 2190 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 2191 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 2192 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 2193 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 2194 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2195 // CHECK-NTARGET-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) 2196 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2197 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 2198 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 2199 // CHECK-NTARGET: cond.true: 2200 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 2201 // CHECK-NTARGET: cond.false: 2202 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2203 // CHECK-NTARGET-NEXT: br label [[COND_END]] 2204 // CHECK-NTARGET: cond.end: 2205 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 2206 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 2207 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 2208 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 2209 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 2210 // CHECK-NTARGET: omp.inner.for.cond: 2211 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2212 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2213 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 2214 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 2215 // CHECK-NTARGET: omp.inner.for.body: 2216 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2217 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 2218 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 2219 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 2220 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 2221 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 117 2222 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 2223 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 2224 // CHECK-NTARGET: omp.body.continue: 2225 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 2226 // CHECK-NTARGET: omp.inner.for.inc: 2227 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2228 // CHECK-NTARGET-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 2229 // CHECK-NTARGET-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 2230 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 2231 // CHECK-NTARGET: omp.inner.for.end: 2232 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 2233 // CHECK-NTARGET: omp.loop.exit: 2234 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 2235 // CHECK-NTARGET-NEXT: ret void 2236 // 2237 // 2238 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2STILi100EED2Ev 2239 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 2240 // CHECK-NTARGET-NEXT: entry: 2241 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2242 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 2243 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2244 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2245 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2246 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 2247 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2248 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 2249 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 2250 // CHECK-NTARGET-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 2251 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 2252 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225(i64 [[TMP3]]) #[[ATTR2]] 2253 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 2254 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 2255 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 2256 // CHECK-NTARGET-NEXT: ret void 2257 // 2258 // 2259 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225 2260 // CHECK-NTARGET-SAME: (i64 noundef [[A:%.*]]) #[[ATTR1]] { 2261 // CHECK-NTARGET-NEXT: entry: 2262 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2263 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2264 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2265 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 2266 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 2267 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 2268 // CHECK-NTARGET-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, i64 [[TMP1]]) 2269 // CHECK-NTARGET-NEXT: ret void 2270 // 2271 // 2272 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225.omp_outlined 2273 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR1]] { 2274 // CHECK-NTARGET-NEXT: entry: 2275 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 2276 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 2277 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2278 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 2279 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 2280 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 2281 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 2282 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 2283 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 2284 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 2285 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 2286 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 2287 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2288 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 2289 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 2290 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 2291 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 2292 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 2293 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2294 // CHECK-NTARGET-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) 2295 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2296 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 2297 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 2298 // CHECK-NTARGET: cond.true: 2299 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 2300 // CHECK-NTARGET: cond.false: 2301 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2302 // CHECK-NTARGET-NEXT: br label [[COND_END]] 2303 // CHECK-NTARGET: cond.end: 2304 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 2305 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 2306 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 2307 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 2308 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 2309 // CHECK-NTARGET: omp.inner.for.cond: 2310 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2311 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2312 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 2313 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 2314 // CHECK-NTARGET: omp.inner.for.body: 2315 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2316 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 2317 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 2318 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 2319 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 2320 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 118 2321 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 2322 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 2323 // CHECK-NTARGET: omp.body.continue: 2324 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 2325 // CHECK-NTARGET: omp.inner.for.inc: 2326 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2327 // CHECK-NTARGET-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 2328 // CHECK-NTARGET-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 2329 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 2330 // CHECK-NTARGET: omp.inner.for.end: 2331 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 2332 // CHECK-NTARGET: omp.loop.exit: 2333 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 2334 // CHECK-NTARGET-NEXT: ret void 2335 // 2336 // 2337 // CHECK-NTARGET-LABEL: define {{[^@]+}}@__cxx_global_var_init.8 2338 // CHECK-NTARGET-SAME: () #[[ATTR3]] { 2339 // CHECK-NTARGET-NEXT: entry: 2340 // CHECK-NTARGET-NEXT: call void @_ZN2STILi1000EEC1Ev(ptr noundef nonnull align 4 dereferenceable(4512) @t2) 2341 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi1000EED1Ev, ptr @t2, ptr @__dso_handle) #[[ATTR2]] 2342 // CHECK-NTARGET-NEXT: ret void 2343 // 2344 // 2345 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2STILi1000EEC1Ev 2346 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 2347 // CHECK-NTARGET-NEXT: entry: 2348 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2349 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2350 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2351 // CHECK-NTARGET-NEXT: call void @_ZN2STILi1000EEC2Ev(ptr noundef nonnull align 4 dereferenceable(4512) [[THIS1]]) 2352 // CHECK-NTARGET-NEXT: ret void 2353 // 2354 // 2355 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2STILi1000EED1Ev 2356 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 2357 // CHECK-NTARGET-NEXT: entry: 2358 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2359 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2360 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2361 // CHECK-NTARGET-NEXT: call void @_ZN2STILi1000EED2Ev(ptr noundef nonnull align 4 dereferenceable(4512) [[THIS1]]) #[[ATTR2]] 2362 // CHECK-NTARGET-NEXT: ret void 2363 // 2364 // 2365 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2STILi1000EEC2Ev 2366 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 2367 // CHECK-NTARGET-NEXT: entry: 2368 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2369 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 2370 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2371 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2372 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2373 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 2374 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2375 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 2376 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 2377 // CHECK-NTARGET-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 2378 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 2379 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218(i64 [[TMP3]]) #[[ATTR2]] 2380 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 2381 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 2382 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 2383 // CHECK-NTARGET-NEXT: ret void 2384 // 2385 // 2386 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218 2387 // CHECK-NTARGET-SAME: (i64 noundef [[A:%.*]]) #[[ATTR1]] { 2388 // CHECK-NTARGET-NEXT: entry: 2389 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2390 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2391 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2392 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 2393 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 2394 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 2395 // CHECK-NTARGET-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, i64 [[TMP1]]) 2396 // CHECK-NTARGET-NEXT: ret void 2397 // 2398 // 2399 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218.omp_outlined 2400 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR1]] { 2401 // CHECK-NTARGET-NEXT: entry: 2402 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 2403 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 2404 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2405 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 2406 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 2407 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 2408 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 2409 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 2410 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 2411 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 2412 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 2413 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 2414 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2415 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 2416 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 2417 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 2418 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 2419 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 2420 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2421 // CHECK-NTARGET-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) 2422 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2423 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 2424 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 2425 // CHECK-NTARGET: cond.true: 2426 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 2427 // CHECK-NTARGET: cond.false: 2428 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2429 // CHECK-NTARGET-NEXT: br label [[COND_END]] 2430 // CHECK-NTARGET: cond.end: 2431 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 2432 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 2433 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 2434 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 2435 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 2436 // CHECK-NTARGET: omp.inner.for.cond: 2437 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2438 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2439 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 2440 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 2441 // CHECK-NTARGET: omp.inner.for.body: 2442 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2443 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 2444 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 2445 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 2446 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 2447 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1017 2448 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 2449 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 2450 // CHECK-NTARGET: omp.body.continue: 2451 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 2452 // CHECK-NTARGET: omp.inner.for.inc: 2453 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2454 // CHECK-NTARGET-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 2455 // CHECK-NTARGET-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 2456 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 2457 // CHECK-NTARGET: omp.inner.for.end: 2458 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 2459 // CHECK-NTARGET: omp.loop.exit: 2460 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 2461 // CHECK-NTARGET-NEXT: ret void 2462 // 2463 // 2464 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_ZN2STILi1000EED2Ev 2465 // CHECK-NTARGET-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat { 2466 // CHECK-NTARGET-NEXT: entry: 2467 // CHECK-NTARGET-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2468 // CHECK-NTARGET-NEXT: [[A:%.*]] = alloca i32, align 4 2469 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2470 // CHECK-NTARGET-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2471 // CHECK-NTARGET-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2472 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 2473 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2474 // CHECK-NTARGET-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 2475 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 2476 // CHECK-NTARGET-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 2477 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 2478 // CHECK-NTARGET-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225(i64 [[TMP3]]) #[[ATTR2]] 2479 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 2480 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 2481 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 2482 // CHECK-NTARGET-NEXT: ret void 2483 // 2484 // 2485 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225 2486 // CHECK-NTARGET-SAME: (i64 noundef [[A:%.*]]) #[[ATTR1]] { 2487 // CHECK-NTARGET-NEXT: entry: 2488 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2489 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2490 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2491 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 2492 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 2493 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 2494 // CHECK-NTARGET-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, i64 [[TMP1]]) 2495 // CHECK-NTARGET-NEXT: ret void 2496 // 2497 // 2498 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225.omp_outlined 2499 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR1]] { 2500 // CHECK-NTARGET-NEXT: entry: 2501 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 2502 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 2503 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2504 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 2505 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 2506 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 2507 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 2508 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 2509 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 2510 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 2511 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 2512 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 2513 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2514 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 2515 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 2516 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 2517 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 2518 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 2519 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2520 // CHECK-NTARGET-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) 2521 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2522 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 2523 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 2524 // CHECK-NTARGET: cond.true: 2525 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 2526 // CHECK-NTARGET: cond.false: 2527 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2528 // CHECK-NTARGET-NEXT: br label [[COND_END]] 2529 // CHECK-NTARGET: cond.end: 2530 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 2531 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 2532 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 2533 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 2534 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 2535 // CHECK-NTARGET: omp.inner.for.cond: 2536 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2537 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2538 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 2539 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 2540 // CHECK-NTARGET: omp.inner.for.body: 2541 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2542 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 2543 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 2544 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 2545 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 2546 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1018 2547 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 2548 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 2549 // CHECK-NTARGET: omp.body.continue: 2550 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 2551 // CHECK-NTARGET: omp.inner.for.inc: 2552 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2553 // CHECK-NTARGET-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 2554 // CHECK-NTARGET-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 2555 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 2556 // CHECK-NTARGET: omp.inner.for.end: 2557 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 2558 // CHECK-NTARGET: omp.loop.exit: 2559 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 2560 // CHECK-NTARGET-NEXT: ret void 2561 // 2562 // 2563 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122 2564 // CHECK-NTARGET-SAME: (i64 noundef [[A:%.*]]) #[[ATTR1]] { 2565 // CHECK-NTARGET-NEXT: entry: 2566 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2567 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2568 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2569 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 2570 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 2571 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 2572 // CHECK-NTARGET-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, i64 [[TMP1]]) 2573 // CHECK-NTARGET-NEXT: ret void 2574 // 2575 // 2576 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122.omp_outlined 2577 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR1]] { 2578 // CHECK-NTARGET-NEXT: entry: 2579 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 2580 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 2581 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2582 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 2583 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 2584 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 2585 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 2586 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 2587 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 2588 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 2589 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 2590 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 2591 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2592 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 2593 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 2594 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 2595 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 2596 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 2597 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2598 // CHECK-NTARGET-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) 2599 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2600 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 2601 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 2602 // CHECK-NTARGET: cond.true: 2603 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 2604 // CHECK-NTARGET: cond.false: 2605 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2606 // CHECK-NTARGET-NEXT: br label [[COND_END]] 2607 // CHECK-NTARGET: cond.end: 2608 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 2609 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 2610 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 2611 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 2612 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 2613 // CHECK-NTARGET: omp.inner.for.cond: 2614 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2615 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2616 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 2617 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 2618 // CHECK-NTARGET: omp.inner.for.body: 2619 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2620 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 2621 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 2622 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 2623 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 2624 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 4 2625 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 2626 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 2627 // CHECK-NTARGET: omp.body.continue: 2628 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 2629 // CHECK-NTARGET: omp.inner.for.inc: 2630 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2631 // CHECK-NTARGET-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 2632 // CHECK-NTARGET-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 2633 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 2634 // CHECK-NTARGET: omp.inner.for.end: 2635 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 2636 // CHECK-NTARGET: omp.loop.exit: 2637 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 2638 // CHECK-NTARGET-NEXT: ret void 2639 // 2640 // 2641 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185 2642 // CHECK-NTARGET-SAME: (i64 noundef [[A:%.*]]) #[[ATTR1]] { 2643 // CHECK-NTARGET-NEXT: entry: 2644 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2645 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2646 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2647 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 2648 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 2649 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 2650 // CHECK-NTARGET-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, i64 [[TMP1]]) 2651 // CHECK-NTARGET-NEXT: ret void 2652 // 2653 // 2654 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185.omp_outlined 2655 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR1]] { 2656 // CHECK-NTARGET-NEXT: entry: 2657 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 2658 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 2659 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2660 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 2661 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 2662 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 2663 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 2664 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 2665 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 2666 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 2667 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 2668 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 2669 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2670 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 2671 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 2672 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 2673 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 2674 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 2675 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2676 // CHECK-NTARGET-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) 2677 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2678 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 2679 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 2680 // CHECK-NTARGET: cond.true: 2681 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 2682 // CHECK-NTARGET: cond.false: 2683 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2684 // CHECK-NTARGET-NEXT: br label [[COND_END]] 2685 // CHECK-NTARGET: cond.end: 2686 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 2687 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 2688 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 2689 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 2690 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 2691 // CHECK-NTARGET: omp.inner.for.cond: 2692 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2693 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2694 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 2695 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 2696 // CHECK-NTARGET: omp.inner.for.body: 2697 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2698 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 2699 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 2700 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 2701 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 2702 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 13 2703 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 2704 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 2705 // CHECK-NTARGET: omp.body.continue: 2706 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 2707 // CHECK-NTARGET: omp.inner.for.inc: 2708 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2709 // CHECK-NTARGET-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 2710 // CHECK-NTARGET-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 2711 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 2712 // CHECK-NTARGET: omp.inner.for.end: 2713 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 2714 // CHECK-NTARGET: omp.loop.exit: 2715 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 2716 // CHECK-NTARGET-NEXT: ret void 2717 // 2718 // 2719 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211 2720 // CHECK-NTARGET-SAME: (i64 noundef [[A:%.*]]) #[[ATTR1]] { 2721 // CHECK-NTARGET-NEXT: entry: 2722 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2723 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2724 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2725 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 2726 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 2727 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 2728 // CHECK-NTARGET-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, i64 [[TMP1]]) 2729 // CHECK-NTARGET-NEXT: ret void 2730 // 2731 // 2732 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211.omp_outlined 2733 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR1]] { 2734 // CHECK-NTARGET-NEXT: entry: 2735 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 2736 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 2737 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2738 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 2739 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 2740 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 2741 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 2742 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 2743 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 2744 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 2745 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 2746 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 2747 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2748 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 2749 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 2750 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 2751 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 2752 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 2753 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2754 // CHECK-NTARGET-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) 2755 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2756 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 2757 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 2758 // CHECK-NTARGET: cond.true: 2759 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 2760 // CHECK-NTARGET: cond.false: 2761 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2762 // CHECK-NTARGET-NEXT: br label [[COND_END]] 2763 // CHECK-NTARGET: cond.end: 2764 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 2765 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 2766 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 2767 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 2768 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 2769 // CHECK-NTARGET: omp.inner.for.cond: 2770 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2771 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2772 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 2773 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 2774 // CHECK-NTARGET: omp.inner.for.body: 2775 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2776 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 2777 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 2778 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 2779 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 2780 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 116 2781 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 2782 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 2783 // CHECK-NTARGET: omp.body.continue: 2784 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 2785 // CHECK-NTARGET: omp.inner.for.inc: 2786 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2787 // CHECK-NTARGET-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 2788 // CHECK-NTARGET-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 2789 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 2790 // CHECK-NTARGET: omp.inner.for.end: 2791 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 2792 // CHECK-NTARGET: omp.loop.exit: 2793 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 2794 // CHECK-NTARGET-NEXT: ret void 2795 // 2796 // 2797 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211 2798 // CHECK-NTARGET-SAME: (i64 noundef [[A:%.*]]) #[[ATTR1]] { 2799 // CHECK-NTARGET-NEXT: entry: 2800 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2801 // CHECK-NTARGET-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 2802 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2803 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 2804 // CHECK-NTARGET-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 2805 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 2806 // CHECK-NTARGET-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, i64 [[TMP1]]) 2807 // CHECK-NTARGET-NEXT: ret void 2808 // 2809 // 2810 // CHECK-NTARGET-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211.omp_outlined 2811 // CHECK-NTARGET-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR1]] { 2812 // CHECK-NTARGET-NEXT: entry: 2813 // CHECK-NTARGET-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 2814 // CHECK-NTARGET-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 2815 // CHECK-NTARGET-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 2816 // CHECK-NTARGET-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 2817 // CHECK-NTARGET-NEXT: [[TMP:%.*]] = alloca i32, align 4 2818 // CHECK-NTARGET-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 2819 // CHECK-NTARGET-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 2820 // CHECK-NTARGET-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 2821 // CHECK-NTARGET-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 2822 // CHECK-NTARGET-NEXT: [[I:%.*]] = alloca i32, align 4 2823 // CHECK-NTARGET-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 2824 // CHECK-NTARGET-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 2825 // CHECK-NTARGET-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 2826 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 2827 // CHECK-NTARGET-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 2828 // CHECK-NTARGET-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 2829 // CHECK-NTARGET-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 2830 // CHECK-NTARGET-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 2831 // CHECK-NTARGET-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 2832 // CHECK-NTARGET-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) 2833 // CHECK-NTARGET-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2834 // CHECK-NTARGET-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 2835 // CHECK-NTARGET-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 2836 // CHECK-NTARGET: cond.true: 2837 // CHECK-NTARGET-NEXT: br label [[COND_END:%.*]] 2838 // CHECK-NTARGET: cond.false: 2839 // CHECK-NTARGET-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2840 // CHECK-NTARGET-NEXT: br label [[COND_END]] 2841 // CHECK-NTARGET: cond.end: 2842 // CHECK-NTARGET-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 2843 // CHECK-NTARGET-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 2844 // CHECK-NTARGET-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 2845 // CHECK-NTARGET-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 2846 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 2847 // CHECK-NTARGET: omp.inner.for.cond: 2848 // CHECK-NTARGET-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2849 // CHECK-NTARGET-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 2850 // CHECK-NTARGET-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 2851 // CHECK-NTARGET-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 2852 // CHECK-NTARGET: omp.inner.for.body: 2853 // CHECK-NTARGET-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2854 // CHECK-NTARGET-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 2855 // CHECK-NTARGET-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 2856 // CHECK-NTARGET-NEXT: store i32 [[ADD]], ptr [[I]], align 4 2857 // CHECK-NTARGET-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 2858 // CHECK-NTARGET-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1016 2859 // CHECK-NTARGET-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 2860 // CHECK-NTARGET-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 2861 // CHECK-NTARGET: omp.body.continue: 2862 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 2863 // CHECK-NTARGET: omp.inner.for.inc: 2864 // CHECK-NTARGET-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 2865 // CHECK-NTARGET-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 2866 // CHECK-NTARGET-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 2867 // CHECK-NTARGET-NEXT: br label [[OMP_INNER_FOR_COND]] 2868 // CHECK-NTARGET: omp.inner.for.end: 2869 // CHECK-NTARGET-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 2870 // CHECK-NTARGET: omp.loop.exit: 2871 // CHECK-NTARGET-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 2872 // CHECK-NTARGET-NEXT: ret void 2873 // 2874 // 2875 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_GLOBAL__I_000500 2876 // CHECK-NTARGET-SAME: () #[[ATTR3]] { 2877 // CHECK-NTARGET-NEXT: entry: 2878 // CHECK-NTARGET-NEXT: call void @__cxx_global_var_init() 2879 // CHECK-NTARGET-NEXT: call void @__cxx_global_var_init.2() 2880 // CHECK-NTARGET-NEXT: ret void 2881 // 2882 // 2883 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_GLOBAL__I_000501 2884 // CHECK-NTARGET-SAME: () #[[ATTR3]] { 2885 // CHECK-NTARGET-NEXT: entry: 2886 // CHECK-NTARGET-NEXT: call void @__cxx_global_var_init.3() 2887 // CHECK-NTARGET-NEXT: ret void 2888 // 2889 // 2890 // CHECK-NTARGET-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_target_parallel_generic_loop_codegen_1.cpp 2891 // CHECK-NTARGET-SAME: () #[[ATTR3]] { 2892 // CHECK-NTARGET-NEXT: entry: 2893 // CHECK-NTARGET-NEXT: call void @__cxx_global_var_init.1() 2894 // CHECK-NTARGET-NEXT: call void @__cxx_global_var_init.4() 2895 // CHECK-NTARGET-NEXT: call void @__cxx_global_var_init.5() 2896 // CHECK-NTARGET-NEXT: call void @__cxx_global_var_init.6() 2897 // CHECK-NTARGET-NEXT: call void @__cxx_global_var_init.7() 2898 // CHECK-NTARGET-NEXT: call void @__cxx_global_var_init.8() 2899 // CHECK-NTARGET-NEXT: ret void 2900 // 2901 // 2902 // SIMD-ONLY2-LABEL: define {{[^@]+}}@__cxx_global_var_init 2903 // SIMD-ONLY2-SAME: () #[[ATTR0:[0-9]+]] { 2904 // SIMD-ONLY2-NEXT: entry: 2905 // SIMD-ONLY2-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) 2906 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @_ZL2a1, ptr @__dso_handle) #[[ATTR2:[0-9]+]] 2907 // SIMD-ONLY2-NEXT: ret void 2908 // 2909 // 2910 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SAC1Ev 2911 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat { 2912 // SIMD-ONLY2-NEXT: entry: 2913 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2914 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2915 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2916 // SIMD-ONLY2-NEXT: call void @_ZN2SAC2Ev(ptr noundef nonnull align 4 dereferenceable(16) [[THIS1]]) 2917 // SIMD-ONLY2-NEXT: ret void 2918 // 2919 // 2920 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SAD1Ev 2921 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 2922 // SIMD-ONLY2-NEXT: entry: 2923 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2924 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2925 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2926 // SIMD-ONLY2-NEXT: call void @_ZN2SAD2Ev(ptr noundef nonnull align 4 dereferenceable(16) [[THIS1]]) #[[ATTR2]] 2927 // SIMD-ONLY2-NEXT: ret void 2928 // 2929 // 2930 // SIMD-ONLY2-LABEL: define {{[^@]+}}@__cxx_global_var_init.1 2931 // SIMD-ONLY2-SAME: () #[[ATTR0]] { 2932 // SIMD-ONLY2-NEXT: entry: 2933 // SIMD-ONLY2-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @a2) 2934 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @a2, ptr @__dso_handle) #[[ATTR2]] 2935 // SIMD-ONLY2-NEXT: ret void 2936 // 2937 // 2938 // SIMD-ONLY2-LABEL: define {{[^@]+}}@__cxx_global_var_init.2 2939 // SIMD-ONLY2-SAME: () #[[ATTR0]] { 2940 // SIMD-ONLY2-NEXT: entry: 2941 // SIMD-ONLY2-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b1) 2942 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b1, ptr @__dso_handle) #[[ATTR2]] 2943 // SIMD-ONLY2-NEXT: ret void 2944 // 2945 // 2946 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SBC1Ev 2947 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 2948 // SIMD-ONLY2-NEXT: entry: 2949 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2950 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2951 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2952 // SIMD-ONLY2-NEXT: call void @_ZN2SBC2Ev(ptr noundef nonnull align 4 dereferenceable(32) [[THIS1]]) 2953 // SIMD-ONLY2-NEXT: ret void 2954 // 2955 // 2956 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SBD1Ev 2957 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 2958 // SIMD-ONLY2-NEXT: entry: 2959 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2960 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2961 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2962 // SIMD-ONLY2-NEXT: call void @_ZN2SBD2Ev(ptr noundef nonnull align 4 dereferenceable(32) [[THIS1]]) #[[ATTR2]] 2963 // SIMD-ONLY2-NEXT: ret void 2964 // 2965 // 2966 // SIMD-ONLY2-LABEL: define {{[^@]+}}@__cxx_global_var_init.3 2967 // SIMD-ONLY2-SAME: () #[[ATTR0]] { 2968 // SIMD-ONLY2-NEXT: entry: 2969 // SIMD-ONLY2-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b2) 2970 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b2, ptr @__dso_handle) #[[ATTR2]] 2971 // SIMD-ONLY2-NEXT: ret void 2972 // 2973 // 2974 // SIMD-ONLY2-LABEL: define {{[^@]+}}@__cxx_global_var_init.4 2975 // SIMD-ONLY2-SAME: () #[[ATTR0]] { 2976 // SIMD-ONLY2-NEXT: entry: 2977 // SIMD-ONLY2-NEXT: call void @_ZN2SCC1Ev(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) 2978 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SCD1Ev, ptr @_ZL2c1, ptr @__dso_handle) #[[ATTR2]] 2979 // SIMD-ONLY2-NEXT: ret void 2980 // 2981 // 2982 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SCC1Ev 2983 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 2984 // SIMD-ONLY2-NEXT: entry: 2985 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2986 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2987 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2988 // SIMD-ONLY2-NEXT: call void @_ZN2SCC2Ev(ptr noundef nonnull align 4 dereferenceable(64) [[THIS1]]) 2989 // SIMD-ONLY2-NEXT: ret void 2990 // 2991 // 2992 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SCD1Ev 2993 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 2994 // SIMD-ONLY2-NEXT: entry: 2995 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 2996 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 2997 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 2998 // SIMD-ONLY2-NEXT: call void @_ZN2SCD2Ev(ptr noundef nonnull align 4 dereferenceable(64) [[THIS1]]) #[[ATTR2]] 2999 // SIMD-ONLY2-NEXT: ret void 3000 // 3001 // 3002 // SIMD-ONLY2-LABEL: define {{[^@]+}}@__cxx_global_var_init.5 3003 // SIMD-ONLY2-SAME: () #[[ATTR0]] { 3004 // SIMD-ONLY2-NEXT: entry: 3005 // SIMD-ONLY2-NEXT: call void @_ZN2SDC1Ev(ptr noundef nonnull align 4 dereferenceable(128) @d1) 3006 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SDD1Ev, ptr @d1, ptr @__dso_handle) #[[ATTR2]] 3007 // SIMD-ONLY2-NEXT: ret void 3008 // 3009 // 3010 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SDC1Ev 3011 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3012 // SIMD-ONLY2-NEXT: entry: 3013 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3014 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3015 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3016 // SIMD-ONLY2-NEXT: call void @_ZN2SDC2Ev(ptr noundef nonnull align 4 dereferenceable(128) [[THIS1]]) 3017 // SIMD-ONLY2-NEXT: ret void 3018 // 3019 // 3020 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SDD1Ev 3021 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3022 // SIMD-ONLY2-NEXT: entry: 3023 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3024 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3025 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3026 // SIMD-ONLY2-NEXT: call void @_ZN2SDD2Ev(ptr noundef nonnull align 4 dereferenceable(128) [[THIS1]]) #[[ATTR2]] 3027 // SIMD-ONLY2-NEXT: ret void 3028 // 3029 // 3030 // SIMD-ONLY2-LABEL: define {{[^@]+}}@__cxx_global_var_init.6 3031 // SIMD-ONLY2-SAME: () #[[ATTR0]] { 3032 // SIMD-ONLY2-NEXT: entry: 3033 // SIMD-ONLY2-NEXT: call void @_ZN2SEC1Ev(ptr noundef nonnull align 4 dereferenceable(256) @e1) 3034 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SED1Ev, ptr @e1, ptr @__dso_handle) #[[ATTR2]] 3035 // SIMD-ONLY2-NEXT: ret void 3036 // 3037 // 3038 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SEC1Ev 3039 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3040 // SIMD-ONLY2-NEXT: entry: 3041 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3042 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3043 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3044 // SIMD-ONLY2-NEXT: call void @_ZN2SEC2Ev(ptr noundef nonnull align 4 dereferenceable(256) [[THIS1]]) 3045 // SIMD-ONLY2-NEXT: ret void 3046 // 3047 // 3048 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SED1Ev 3049 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3050 // SIMD-ONLY2-NEXT: entry: 3051 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3052 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3053 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3054 // SIMD-ONLY2-NEXT: call void @_ZN2SED2Ev(ptr noundef nonnull align 4 dereferenceable(256) [[THIS1]]) #[[ATTR2]] 3055 // SIMD-ONLY2-NEXT: ret void 3056 // 3057 // 3058 // SIMD-ONLY2-LABEL: define {{[^@]+}}@__cxx_global_var_init.7 3059 // SIMD-ONLY2-SAME: () #[[ATTR0]] { 3060 // SIMD-ONLY2-NEXT: entry: 3061 // SIMD-ONLY2-NEXT: call void @_ZN2STILi100EEC1Ev(ptr noundef nonnull align 4 dereferenceable(912) @t1) 3062 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi100EED1Ev, ptr @t1, ptr @__dso_handle) #[[ATTR2]] 3063 // SIMD-ONLY2-NEXT: ret void 3064 // 3065 // 3066 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2STILi100EEC1Ev 3067 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3068 // SIMD-ONLY2-NEXT: entry: 3069 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3070 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3071 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3072 // SIMD-ONLY2-NEXT: call void @_ZN2STILi100EEC2Ev(ptr noundef nonnull align 4 dereferenceable(912) [[THIS1]]) 3073 // SIMD-ONLY2-NEXT: ret void 3074 // 3075 // 3076 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2STILi100EED1Ev 3077 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3078 // SIMD-ONLY2-NEXT: entry: 3079 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3080 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3081 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3082 // SIMD-ONLY2-NEXT: call void @_ZN2STILi100EED2Ev(ptr noundef nonnull align 4 dereferenceable(912) [[THIS1]]) #[[ATTR2]] 3083 // SIMD-ONLY2-NEXT: ret void 3084 // 3085 // 3086 // SIMD-ONLY2-LABEL: define {{[^@]+}}@__cxx_global_var_init.8 3087 // SIMD-ONLY2-SAME: () #[[ATTR0]] { 3088 // SIMD-ONLY2-NEXT: entry: 3089 // SIMD-ONLY2-NEXT: call void @_ZN2STILi1000EEC1Ev(ptr noundef nonnull align 4 dereferenceable(4512) @t2) 3090 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi1000EED1Ev, ptr @t2, ptr @__dso_handle) #[[ATTR2]] 3091 // SIMD-ONLY2-NEXT: ret void 3092 // 3093 // 3094 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2STILi1000EEC1Ev 3095 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3096 // SIMD-ONLY2-NEXT: entry: 3097 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3098 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3099 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3100 // SIMD-ONLY2-NEXT: call void @_ZN2STILi1000EEC2Ev(ptr noundef nonnull align 4 dereferenceable(4512) [[THIS1]]) 3101 // SIMD-ONLY2-NEXT: ret void 3102 // 3103 // 3104 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2STILi1000EED1Ev 3105 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3106 // SIMD-ONLY2-NEXT: entry: 3107 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3108 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3109 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3110 // SIMD-ONLY2-NEXT: call void @_ZN2STILi1000EED2Ev(ptr noundef nonnull align 4 dereferenceable(4512) [[THIS1]]) #[[ATTR2]] 3111 // SIMD-ONLY2-NEXT: ret void 3112 // 3113 // 3114 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_Z3bari 3115 // SIMD-ONLY2-SAME: (i32 noundef signext [[A:%.*]]) #[[ATTR1]] { 3116 // SIMD-ONLY2-NEXT: entry: 3117 // SIMD-ONLY2-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 3118 // SIMD-ONLY2-NEXT: [[R:%.*]] = alloca i32, align 4 3119 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3120 // SIMD-ONLY2-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 3121 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 3122 // SIMD-ONLY2-NEXT: store i32 [[TMP0]], ptr [[R]], align 4 3123 // SIMD-ONLY2-NEXT: call void @_ZN2SA3fooEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) 3124 // SIMD-ONLY2-NEXT: call void @_ZN2SA3fooEv(ptr noundef nonnull align 4 dereferenceable(16) @a2) 3125 // SIMD-ONLY2-NEXT: call void @_ZN2SB3fooEv(ptr noundef nonnull align 4 dereferenceable(32) @b1) 3126 // SIMD-ONLY2-NEXT: call void @_ZN2SB3fooEv(ptr noundef nonnull align 4 dereferenceable(32) @b2) 3127 // SIMD-ONLY2-NEXT: call void @_ZN2SC3fooEv(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) 3128 // SIMD-ONLY2-NEXT: call void @_ZN2SD3fooEv(ptr noundef nonnull align 4 dereferenceable(128) @d1) 3129 // SIMD-ONLY2-NEXT: call void @_ZN2SE3fooEv(ptr noundef nonnull align 4 dereferenceable(256) @e1) 3130 // SIMD-ONLY2-NEXT: call void @_ZN2STILi100EE3fooEv(ptr noundef nonnull align 4 dereferenceable(912) @t1) 3131 // SIMD-ONLY2-NEXT: call void @_ZN2STILi1000EE3fooEv(ptr noundef nonnull align 4 dereferenceable(4512) @t2) 3132 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3133 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3134 // SIMD-ONLY2: for.cond: 3135 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[I]], align 4 3136 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP1]], 10 3137 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3138 // SIMD-ONLY2: for.body: 3139 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[R]], align 4 3140 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP2]], 1 3141 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[R]], align 4 3142 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3143 // SIMD-ONLY2: for.inc: 3144 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[I]], align 4 3145 // SIMD-ONLY2-NEXT: [[INC1:%.*]] = add nsw i32 [[TMP3]], 1 3146 // SIMD-ONLY2-NEXT: store i32 [[INC1]], ptr [[I]], align 4 3147 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP2:![0-9]+]] 3148 // SIMD-ONLY2: for.end: 3149 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[R]], align 4 3150 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 3151 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load i32, ptr [[TMP5]], align 4 3152 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP4]], [[TMP6]] 3153 // SIMD-ONLY2-NEXT: ret i32 [[ADD]] 3154 // 3155 // 3156 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SA3fooEv 3157 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) #[[ATTR1]] comdat { 3158 // SIMD-ONLY2-NEXT: entry: 3159 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3160 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3161 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3162 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3163 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3164 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3165 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3166 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 3167 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 1 3168 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3169 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3170 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 3171 // SIMD-ONLY2-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 3172 // SIMD-ONLY2-NEXT: ret void 3173 // 3174 // 3175 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SB3fooEv 3176 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) #[[ATTR1]] comdat { 3177 // SIMD-ONLY2-NEXT: entry: 3178 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3179 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3180 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3181 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3182 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3183 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3184 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3185 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3186 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3187 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3188 // SIMD-ONLY2: for.cond: 3189 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 3190 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 10 3191 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3192 // SIMD-ONLY2: for.body: 3193 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3194 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], 4 3195 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3196 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3197 // SIMD-ONLY2: for.inc: 3198 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[I]], align 4 3199 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1 3200 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[I]], align 4 3201 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP4:![0-9]+]] 3202 // SIMD-ONLY2: for.end: 3203 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 4 3204 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load ptr, ptr @R, align 8 3205 // SIMD-ONLY2-NEXT: store i32 [[TMP5]], ptr [[TMP6]], align 4 3206 // SIMD-ONLY2-NEXT: ret void 3207 // 3208 // 3209 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SC3fooEv 3210 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) #[[ATTR1]] comdat { 3211 // SIMD-ONLY2-NEXT: entry: 3212 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3213 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3214 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3215 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3216 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3217 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3218 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3219 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 3220 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 7 3221 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3222 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3223 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 3224 // SIMD-ONLY2-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 3225 // SIMD-ONLY2-NEXT: ret void 3226 // 3227 // 3228 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SD3fooEv 3229 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) #[[ATTR1]] comdat { 3230 // SIMD-ONLY2-NEXT: entry: 3231 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3232 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3233 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3234 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3235 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3236 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3237 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3238 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 3239 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 10 3240 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3241 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3242 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 3243 // SIMD-ONLY2-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 3244 // SIMD-ONLY2-NEXT: ret void 3245 // 3246 // 3247 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SE3fooEv 3248 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) #[[ATTR1]] comdat { 3249 // SIMD-ONLY2-NEXT: entry: 3250 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3251 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3252 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3253 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3254 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3255 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3256 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3257 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3258 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3259 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3260 // SIMD-ONLY2: for.cond: 3261 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 3262 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 10 3263 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3264 // SIMD-ONLY2: for.body: 3265 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3266 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], 13 3267 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3268 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3269 // SIMD-ONLY2: for.inc: 3270 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[I]], align 4 3271 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1 3272 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[I]], align 4 3273 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP5:![0-9]+]] 3274 // SIMD-ONLY2: for.end: 3275 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 4 3276 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load ptr, ptr @R, align 8 3277 // SIMD-ONLY2-NEXT: store i32 [[TMP5]], ptr [[TMP6]], align 4 3278 // SIMD-ONLY2-NEXT: ret void 3279 // 3280 // 3281 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2STILi100EE3fooEv 3282 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) #[[ATTR1]] comdat { 3283 // SIMD-ONLY2-NEXT: entry: 3284 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3285 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3286 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3287 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3288 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3289 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3290 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3291 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3292 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3293 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3294 // SIMD-ONLY2: for.cond: 3295 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 3296 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 10 3297 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3298 // SIMD-ONLY2: for.body: 3299 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3300 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], 116 3301 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3302 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3303 // SIMD-ONLY2: for.inc: 3304 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[I]], align 4 3305 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1 3306 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[I]], align 4 3307 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP6:![0-9]+]] 3308 // SIMD-ONLY2: for.end: 3309 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 4 3310 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load ptr, ptr @R, align 8 3311 // SIMD-ONLY2-NEXT: store i32 [[TMP5]], ptr [[TMP6]], align 4 3312 // SIMD-ONLY2-NEXT: ret void 3313 // 3314 // 3315 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2STILi1000EE3fooEv 3316 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) #[[ATTR1]] comdat { 3317 // SIMD-ONLY2-NEXT: entry: 3318 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3319 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3320 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3321 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3322 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3323 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3324 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3325 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3326 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3327 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3328 // SIMD-ONLY2: for.cond: 3329 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 3330 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 10 3331 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3332 // SIMD-ONLY2: for.body: 3333 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3334 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], 1016 3335 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3336 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3337 // SIMD-ONLY2: for.inc: 3338 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[I]], align 4 3339 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1 3340 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[I]], align 4 3341 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP7:![0-9]+]] 3342 // SIMD-ONLY2: for.end: 3343 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 4 3344 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load ptr, ptr @R, align 8 3345 // SIMD-ONLY2-NEXT: store i32 [[TMP5]], ptr [[TMP6]], align 4 3346 // SIMD-ONLY2-NEXT: ret void 3347 // 3348 // 3349 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SAC2Ev 3350 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3351 // SIMD-ONLY2-NEXT: entry: 3352 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3353 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3354 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3355 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3356 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3357 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3358 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3359 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 3360 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 2 3361 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3362 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3363 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 3364 // SIMD-ONLY2-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 3365 // SIMD-ONLY2-NEXT: ret void 3366 // 3367 // 3368 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SAD2Ev 3369 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3370 // SIMD-ONLY2-NEXT: entry: 3371 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3372 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3373 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3374 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3375 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3376 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3377 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3378 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 3379 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 3 3380 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3381 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3382 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 3383 // SIMD-ONLY2-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 3384 // SIMD-ONLY2-NEXT: ret void 3385 // 3386 // 3387 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SBC2Ev 3388 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3389 // SIMD-ONLY2-NEXT: entry: 3390 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3391 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3392 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3393 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3394 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3395 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3396 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3397 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 3398 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 5 3399 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3400 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3401 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 3402 // SIMD-ONLY2-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 3403 // SIMD-ONLY2-NEXT: ret void 3404 // 3405 // 3406 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SBD2Ev 3407 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3408 // SIMD-ONLY2-NEXT: entry: 3409 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3410 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3411 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3412 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3413 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3414 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3415 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3416 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 3417 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 6 3418 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3419 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3420 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 3421 // SIMD-ONLY2-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 3422 // SIMD-ONLY2-NEXT: ret void 3423 // 3424 // 3425 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SCC2Ev 3426 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3427 // SIMD-ONLY2-NEXT: entry: 3428 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3429 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3430 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3431 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3432 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3433 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3434 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3435 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3436 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3437 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3438 // SIMD-ONLY2: for.cond: 3439 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 3440 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 10 3441 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3442 // SIMD-ONLY2: for.body: 3443 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3444 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], 8 3445 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3446 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3447 // SIMD-ONLY2: for.inc: 3448 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[I]], align 4 3449 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1 3450 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[I]], align 4 3451 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP8:![0-9]+]] 3452 // SIMD-ONLY2: for.end: 3453 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 4 3454 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load ptr, ptr @R, align 8 3455 // SIMD-ONLY2-NEXT: store i32 [[TMP5]], ptr [[TMP6]], align 4 3456 // SIMD-ONLY2-NEXT: ret void 3457 // 3458 // 3459 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SCD2Ev 3460 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3461 // SIMD-ONLY2-NEXT: entry: 3462 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3463 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3464 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3465 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3466 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3467 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3468 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3469 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 3470 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 9 3471 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3472 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3473 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 3474 // SIMD-ONLY2-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 3475 // SIMD-ONLY2-NEXT: ret void 3476 // 3477 // 3478 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SDC2Ev 3479 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3480 // SIMD-ONLY2-NEXT: entry: 3481 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3482 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3483 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3484 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3485 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3486 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3487 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3488 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 3489 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 11 3490 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3491 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3492 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 3493 // SIMD-ONLY2-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 3494 // SIMD-ONLY2-NEXT: ret void 3495 // 3496 // 3497 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SDD2Ev 3498 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3499 // SIMD-ONLY2-NEXT: entry: 3500 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3501 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3502 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3503 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3504 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3505 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3506 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3507 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3508 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3509 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3510 // SIMD-ONLY2: for.cond: 3511 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 3512 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 10 3513 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3514 // SIMD-ONLY2: for.body: 3515 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3516 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], 12 3517 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3518 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3519 // SIMD-ONLY2: for.inc: 3520 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[I]], align 4 3521 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1 3522 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[I]], align 4 3523 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP9:![0-9]+]] 3524 // SIMD-ONLY2: for.end: 3525 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 4 3526 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load ptr, ptr @R, align 8 3527 // SIMD-ONLY2-NEXT: store i32 [[TMP5]], ptr [[TMP6]], align 4 3528 // SIMD-ONLY2-NEXT: ret void 3529 // 3530 // 3531 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SEC2Ev 3532 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3533 // SIMD-ONLY2-NEXT: entry: 3534 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3535 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3536 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3537 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3538 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3539 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3540 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3541 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3542 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3543 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3544 // SIMD-ONLY2: for.cond: 3545 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 3546 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 10 3547 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3548 // SIMD-ONLY2: for.body: 3549 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3550 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], 14 3551 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3552 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3553 // SIMD-ONLY2: for.inc: 3554 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[I]], align 4 3555 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1 3556 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[I]], align 4 3557 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP10:![0-9]+]] 3558 // SIMD-ONLY2: for.end: 3559 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 4 3560 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load ptr, ptr @R, align 8 3561 // SIMD-ONLY2-NEXT: store i32 [[TMP5]], ptr [[TMP6]], align 4 3562 // SIMD-ONLY2-NEXT: ret void 3563 // 3564 // 3565 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2SED2Ev 3566 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3567 // SIMD-ONLY2-NEXT: entry: 3568 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3569 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3570 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3571 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3572 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3573 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3574 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3575 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3576 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3577 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3578 // SIMD-ONLY2: for.cond: 3579 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 3580 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 10 3581 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3582 // SIMD-ONLY2: for.body: 3583 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3584 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], 15 3585 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3586 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3587 // SIMD-ONLY2: for.inc: 3588 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[I]], align 4 3589 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1 3590 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[I]], align 4 3591 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP11:![0-9]+]] 3592 // SIMD-ONLY2: for.end: 3593 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 4 3594 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load ptr, ptr @R, align 8 3595 // SIMD-ONLY2-NEXT: store i32 [[TMP5]], ptr [[TMP6]], align 4 3596 // SIMD-ONLY2-NEXT: ret void 3597 // 3598 // 3599 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2STILi100EEC2Ev 3600 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3601 // SIMD-ONLY2-NEXT: entry: 3602 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3603 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3604 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3605 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3606 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3607 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3608 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3609 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3610 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3611 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3612 // SIMD-ONLY2: for.cond: 3613 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 3614 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 10 3615 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3616 // SIMD-ONLY2: for.body: 3617 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3618 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], 117 3619 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3620 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3621 // SIMD-ONLY2: for.inc: 3622 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[I]], align 4 3623 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1 3624 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[I]], align 4 3625 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP12:![0-9]+]] 3626 // SIMD-ONLY2: for.end: 3627 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 4 3628 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load ptr, ptr @R, align 8 3629 // SIMD-ONLY2-NEXT: store i32 [[TMP5]], ptr [[TMP6]], align 4 3630 // SIMD-ONLY2-NEXT: ret void 3631 // 3632 // 3633 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2STILi100EED2Ev 3634 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3635 // SIMD-ONLY2-NEXT: entry: 3636 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3637 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3638 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3639 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3640 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3641 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3642 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3643 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3644 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3645 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3646 // SIMD-ONLY2: for.cond: 3647 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 3648 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 10 3649 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3650 // SIMD-ONLY2: for.body: 3651 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3652 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], 118 3653 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3654 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3655 // SIMD-ONLY2: for.inc: 3656 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[I]], align 4 3657 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1 3658 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[I]], align 4 3659 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP13:![0-9]+]] 3660 // SIMD-ONLY2: for.end: 3661 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 4 3662 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load ptr, ptr @R, align 8 3663 // SIMD-ONLY2-NEXT: store i32 [[TMP5]], ptr [[TMP6]], align 4 3664 // SIMD-ONLY2-NEXT: ret void 3665 // 3666 // 3667 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2STILi1000EEC2Ev 3668 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3669 // SIMD-ONLY2-NEXT: entry: 3670 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3671 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3672 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3673 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3674 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3675 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3676 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3677 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3678 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3679 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3680 // SIMD-ONLY2: for.cond: 3681 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 3682 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 10 3683 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3684 // SIMD-ONLY2: for.body: 3685 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3686 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], 1017 3687 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3688 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3689 // SIMD-ONLY2: for.inc: 3690 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[I]], align 4 3691 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1 3692 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[I]], align 4 3693 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP14:![0-9]+]] 3694 // SIMD-ONLY2: for.end: 3695 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 4 3696 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load ptr, ptr @R, align 8 3697 // SIMD-ONLY2-NEXT: store i32 [[TMP5]], ptr [[TMP6]], align 4 3698 // SIMD-ONLY2-NEXT: ret void 3699 // 3700 // 3701 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_ZN2STILi1000EED2Ev 3702 // SIMD-ONLY2-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 3703 // SIMD-ONLY2-NEXT: entry: 3704 // SIMD-ONLY2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 3705 // SIMD-ONLY2-NEXT: [[A:%.*]] = alloca i32, align 4 3706 // SIMD-ONLY2-NEXT: [[I:%.*]] = alloca i32, align 4 3707 // SIMD-ONLY2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 3708 // SIMD-ONLY2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 3709 // SIMD-ONLY2-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 3710 // SIMD-ONLY2-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 3711 // SIMD-ONLY2-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 3712 // SIMD-ONLY2-NEXT: store i32 0, ptr [[I]], align 4 3713 // SIMD-ONLY2-NEXT: br label [[FOR_COND:%.*]] 3714 // SIMD-ONLY2: for.cond: 3715 // SIMD-ONLY2-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 3716 // SIMD-ONLY2-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 10 3717 // SIMD-ONLY2-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 3718 // SIMD-ONLY2: for.body: 3719 // SIMD-ONLY2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 3720 // SIMD-ONLY2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], 1018 3721 // SIMD-ONLY2-NEXT: store i32 [[ADD]], ptr [[A]], align 4 3722 // SIMD-ONLY2-NEXT: br label [[FOR_INC:%.*]] 3723 // SIMD-ONLY2: for.inc: 3724 // SIMD-ONLY2-NEXT: [[TMP4:%.*]] = load i32, ptr [[I]], align 4 3725 // SIMD-ONLY2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1 3726 // SIMD-ONLY2-NEXT: store i32 [[INC]], ptr [[I]], align 4 3727 // SIMD-ONLY2-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP15:![0-9]+]] 3728 // SIMD-ONLY2: for.end: 3729 // SIMD-ONLY2-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 4 3730 // SIMD-ONLY2-NEXT: [[TMP6:%.*]] = load ptr, ptr @R, align 8 3731 // SIMD-ONLY2-NEXT: store i32 [[TMP5]], ptr [[TMP6]], align 4 3732 // SIMD-ONLY2-NEXT: ret void 3733 // 3734 // 3735 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_GLOBAL__I_000500 3736 // SIMD-ONLY2-SAME: () #[[ATTR0]] { 3737 // SIMD-ONLY2-NEXT: entry: 3738 // SIMD-ONLY2-NEXT: call void @__cxx_global_var_init() 3739 // SIMD-ONLY2-NEXT: call void @__cxx_global_var_init.2() 3740 // SIMD-ONLY2-NEXT: ret void 3741 // 3742 // 3743 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_GLOBAL__I_000501 3744 // SIMD-ONLY2-SAME: () #[[ATTR0]] { 3745 // SIMD-ONLY2-NEXT: entry: 3746 // SIMD-ONLY2-NEXT: call void @__cxx_global_var_init.3() 3747 // SIMD-ONLY2-NEXT: ret void 3748 // 3749 // 3750 // SIMD-ONLY2-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_target_parallel_generic_loop_codegen_1.cpp 3751 // SIMD-ONLY2-SAME: () #[[ATTR0]] { 3752 // SIMD-ONLY2-NEXT: entry: 3753 // SIMD-ONLY2-NEXT: call void @__cxx_global_var_init.1() 3754 // SIMD-ONLY2-NEXT: call void @__cxx_global_var_init.4() 3755 // SIMD-ONLY2-NEXT: call void @__cxx_global_var_init.5() 3756 // SIMD-ONLY2-NEXT: call void @__cxx_global_var_init.6() 3757 // SIMD-ONLY2-NEXT: call void @__cxx_global_var_init.7() 3758 // SIMD-ONLY2-NEXT: call void @__cxx_global_var_init.8() 3759 // SIMD-ONLY2-NEXT: ret void 3760 // 3761 // 3762 // OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init 3763 // OMP-DEFAULT-SAME: () #[[ATTR0:[0-9]+]] { 3764 // OMP-DEFAULT-NEXT: entry: 3765 // OMP-DEFAULT-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) 3766 // OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @_ZL2a1, ptr @__dso_handle) #[[ATTR2:[0-9]+]] 3767 // OMP-DEFAULT-NEXT: ret void 3768 // 3769 // 3770 // 3771 // 3772 // 3773 // 3774 // OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.1 3775 // OMP-DEFAULT-SAME: () #[[ATTR0]] { 3776 // OMP-DEFAULT-NEXT: entry: 3777 // OMP-DEFAULT-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @a2) 3778 // OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @a2, ptr @__dso_handle) #[[ATTR2]] 3779 // OMP-DEFAULT-NEXT: ret void 3780 // 3781 // 3782 // OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.2 3783 // OMP-DEFAULT-SAME: () #[[ATTR0]] { 3784 // OMP-DEFAULT-NEXT: entry: 3785 // OMP-DEFAULT-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b1) 3786 // OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b1, ptr @__dso_handle) #[[ATTR2]] 3787 // OMP-DEFAULT-NEXT: ret void 3788 // 3789 // 3790 // 3791 // 3792 // 3793 // 3794 // OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.3 3795 // OMP-DEFAULT-SAME: () #[[ATTR0]] { 3796 // OMP-DEFAULT-NEXT: entry: 3797 // OMP-DEFAULT-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b2) 3798 // OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b2, ptr @__dso_handle) #[[ATTR2]] 3799 // OMP-DEFAULT-NEXT: ret void 3800 // 3801 // 3802 // OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.4 3803 // OMP-DEFAULT-SAME: () #[[ATTR0]] { 3804 // OMP-DEFAULT-NEXT: entry: 3805 // OMP-DEFAULT-NEXT: call void @_ZN2SCC1Ev(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) 3806 // OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SCD1Ev, ptr @_ZL2c1, ptr @__dso_handle) #[[ATTR2]] 3807 // OMP-DEFAULT-NEXT: ret void 3808 // 3809 // 3810 // 3811 // 3812 // 3813 // 3814 // 3815 // 3816 // OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.5 3817 // OMP-DEFAULT-SAME: () #[[ATTR0]] { 3818 // OMP-DEFAULT-NEXT: entry: 3819 // OMP-DEFAULT-NEXT: call void @_ZN2SDC1Ev(ptr noundef nonnull align 4 dereferenceable(128) @d1) 3820 // OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SDD1Ev, ptr @d1, ptr @__dso_handle) #[[ATTR2]] 3821 // OMP-DEFAULT-NEXT: ret void 3822 // 3823 // 3824 // 3825 // 3826 // 3827 // 3828 // 3829 // 3830 // OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.8 3831 // OMP-DEFAULT-SAME: () #[[ATTR0]] { 3832 // OMP-DEFAULT-NEXT: entry: 3833 // OMP-DEFAULT-NEXT: call void @_ZN2SEC1Ev(ptr noundef nonnull align 4 dereferenceable(256) @e1) 3834 // OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SED1Ev, ptr @e1, ptr @__dso_handle) #[[ATTR2]] 3835 // OMP-DEFAULT-NEXT: ret void 3836 // 3837 // 3838 // 3839 // 3840 // 3841 // 3842 // 3843 // 3844 // 3845 // 3846 // OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.13 3847 // OMP-DEFAULT-SAME: () #[[ATTR0]] { 3848 // OMP-DEFAULT-NEXT: entry: 3849 // OMP-DEFAULT-NEXT: call void @_ZN2STILi100EEC1Ev(ptr noundef nonnull align 4 dereferenceable(912) @t1) 3850 // OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi100EED1Ev, ptr @t1, ptr @__dso_handle) #[[ATTR2]] 3851 // OMP-DEFAULT-NEXT: ret void 3852 // 3853 // 3854 // 3855 // 3856 // 3857 // 3858 // 3859 // 3860 // 3861 // 3862 // OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.18 3863 // OMP-DEFAULT-SAME: () #[[ATTR0]] { 3864 // OMP-DEFAULT-NEXT: entry: 3865 // OMP-DEFAULT-NEXT: call void @_ZN2STILi1000EEC1Ev(ptr noundef nonnull align 4 dereferenceable(4512) @t2) 3866 // OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi1000EED1Ev, ptr @t2, ptr @__dso_handle) #[[ATTR2]] 3867 // OMP-DEFAULT-NEXT: ret void 3868 // 3869 // 3870 // 3871 // 3872 // 3873 // 3874 // 3875 // 3876 // 3877 // 3878 // 3879 // 3880 // 3881 // 3882 // 3883 // 3884 // 3885 // 3886 // 3887 // 3888 // 3889 // 3890 // 3891 // 3892 // 3893 // 3894 // 3895 // 3896 // OMP-DEFAULT-LABEL: define {{[^@]+}}@_GLOBAL__I_000500 3897 // OMP-DEFAULT-SAME: () #[[ATTR0]] { 3898 // OMP-DEFAULT-NEXT: entry: 3899 // OMP-DEFAULT-NEXT: call void @__cxx_global_var_init() 3900 // OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.2() 3901 // OMP-DEFAULT-NEXT: ret void 3902 // 3903 // 3904 // OMP-DEFAULT-LABEL: define {{[^@]+}}@_GLOBAL__I_000501 3905 // OMP-DEFAULT-SAME: () #[[ATTR0]] { 3906 // OMP-DEFAULT-NEXT: entry: 3907 // OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.3() 3908 // OMP-DEFAULT-NEXT: ret void 3909 // 3910 // 3911 // OMP-DEFAULT-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_target_parallel_generic_loop_codegen_1.cpp 3912 // OMP-DEFAULT-SAME: () #[[ATTR0]] { 3913 // OMP-DEFAULT-NEXT: entry: 3914 // OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.1() 3915 // OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.4() 3916 // OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.5() 3917 // OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.8() 3918 // OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.13() 3919 // OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.18() 3920 // OMP-DEFAULT-NEXT: ret void 3921 // 3922 // 3923 // 3924 // 3925 // 3926 // 3927 // 3928 // 3929 // 3930 // 3931 // 3932 // 3933 // 3934 // 3935 // 3936 // 3937 // 3938 // 3939 // 3940 // 3941 // 3942 // 3943 // 3944 // 3945 // 3946 // 3947 // 3948 // 3949 // 3950 // 3951 // 3952 // 3953 // 3954 // 3955 // 3956 // 3957 // 3958 // 3959 // 3960 // 3961 // 3962 // 3963 // 3964 // 3965 // 3966 // 3967 // 3968 // 3969 // 3970 // 3971 // 3972 // 3973 // 3974 // 3975 // 3976 // 3977 // 3978 // 3979 // 3980 // 3981 // 3982 // 3983 // 3984 // 3985 // OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init 3986 // OMP-DEfAULT-SAME: () #[[ATTR0:[0-9]+]] { 3987 // OMP-DEfAULT-NEXT: entry: 3988 // OMP-DEfAULT-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) 3989 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @_ZL2a1, ptr @__dso_handle) #[[ATTR2:[0-9]+]] 3990 // OMP-DEfAULT-NEXT: ret void 3991 // 3992 // 3993 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SAC1Ev 3994 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 { 3995 // OMP-DEfAULT-NEXT: entry: 3996 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 3997 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 3998 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 3999 // OMP-DEfAULT-NEXT: call void @_ZN2SAC2Ev(ptr noundef nonnull align 4 dereferenceable(16) [[THIS1]]) 4000 // OMP-DEfAULT-NEXT: ret void 4001 // 4002 // 4003 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SAD1Ev 4004 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4005 // OMP-DEfAULT-NEXT: entry: 4006 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4007 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4008 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4009 // OMP-DEfAULT-NEXT: call void @_ZN2SAD2Ev(ptr noundef nonnull align 4 dereferenceable(16) [[THIS1]]) #[[ATTR2]] 4010 // OMP-DEfAULT-NEXT: ret void 4011 // 4012 // 4013 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SAC2Ev 4014 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4015 // OMP-DEfAULT-NEXT: entry: 4016 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4017 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 4018 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4019 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4020 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 4021 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4022 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 4023 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 4024 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 2 4025 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 4026 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 4027 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 4028 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 4029 // OMP-DEfAULT-NEXT: ret void 4030 // 4031 // 4032 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SAD2Ev 4033 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4034 // OMP-DEfAULT-NEXT: entry: 4035 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4036 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 4037 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4038 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4039 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 4040 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4041 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 4042 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 4043 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 3 4044 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 4045 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 4046 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 4047 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 4048 // OMP-DEfAULT-NEXT: ret void 4049 // 4050 // 4051 // OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.1 4052 // OMP-DEfAULT-SAME: () #[[ATTR0]] { 4053 // OMP-DEfAULT-NEXT: entry: 4054 // OMP-DEfAULT-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @a2) 4055 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @a2, ptr @__dso_handle) #[[ATTR2]] 4056 // OMP-DEfAULT-NEXT: ret void 4057 // 4058 // 4059 // OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.2 4060 // OMP-DEfAULT-SAME: () #[[ATTR0]] { 4061 // OMP-DEfAULT-NEXT: entry: 4062 // OMP-DEfAULT-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b1) 4063 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b1, ptr @__dso_handle) #[[ATTR2]] 4064 // OMP-DEfAULT-NEXT: ret void 4065 // 4066 // 4067 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SBC1Ev 4068 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4069 // OMP-DEfAULT-NEXT: entry: 4070 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4071 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4072 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4073 // OMP-DEfAULT-NEXT: call void @_ZN2SBC2Ev(ptr noundef nonnull align 4 dereferenceable(32) [[THIS1]]) 4074 // OMP-DEfAULT-NEXT: ret void 4075 // 4076 // 4077 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SBD1Ev 4078 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4079 // OMP-DEfAULT-NEXT: entry: 4080 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4081 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4082 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4083 // OMP-DEfAULT-NEXT: call void @_ZN2SBD2Ev(ptr noundef nonnull align 4 dereferenceable(32) [[THIS1]]) #[[ATTR2]] 4084 // OMP-DEfAULT-NEXT: ret void 4085 // 4086 // 4087 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SBC2Ev 4088 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4089 // OMP-DEfAULT-NEXT: entry: 4090 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4091 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 4092 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4093 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4094 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 4095 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4096 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 4097 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 4098 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 5 4099 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 4100 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 4101 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 4102 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 4103 // OMP-DEfAULT-NEXT: ret void 4104 // 4105 // 4106 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SBD2Ev 4107 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4108 // OMP-DEfAULT-NEXT: entry: 4109 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4110 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 4111 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4112 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4113 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 4114 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4115 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 4116 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 4117 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 6 4118 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 4119 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 4120 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 4121 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 4122 // OMP-DEfAULT-NEXT: ret void 4123 // 4124 // 4125 // OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.3 4126 // OMP-DEfAULT-SAME: () #[[ATTR0]] { 4127 // OMP-DEfAULT-NEXT: entry: 4128 // OMP-DEfAULT-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b2) 4129 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b2, ptr @__dso_handle) #[[ATTR2]] 4130 // OMP-DEfAULT-NEXT: ret void 4131 // 4132 // 4133 // OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.4 4134 // OMP-DEfAULT-SAME: () #[[ATTR0]] { 4135 // OMP-DEfAULT-NEXT: entry: 4136 // OMP-DEfAULT-NEXT: call void @_ZN2SCC1Ev(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) 4137 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SCD1Ev, ptr @_ZL2c1, ptr @__dso_handle) #[[ATTR2]] 4138 // OMP-DEfAULT-NEXT: ret void 4139 // 4140 // 4141 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SCC1Ev 4142 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4143 // OMP-DEfAULT-NEXT: entry: 4144 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4145 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4146 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4147 // OMP-DEfAULT-NEXT: call void @_ZN2SCC2Ev(ptr noundef nonnull align 4 dereferenceable(64) [[THIS1]]) 4148 // OMP-DEfAULT-NEXT: ret void 4149 // 4150 // 4151 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SCD1Ev 4152 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4153 // OMP-DEfAULT-NEXT: entry: 4154 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4155 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4156 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4157 // OMP-DEfAULT-NEXT: call void @_ZN2SCD2Ev(ptr noundef nonnull align 4 dereferenceable(64) [[THIS1]]) #[[ATTR2]] 4158 // OMP-DEfAULT-NEXT: ret void 4159 // 4160 // 4161 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SCC2Ev 4162 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4163 // OMP-DEfAULT-NEXT: entry: 4164 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4165 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 4166 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 4167 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 4168 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 4169 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 4170 // OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 4171 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4172 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4173 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 4174 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4175 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 4176 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 4177 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 4178 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 4179 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 4180 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 4181 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 4182 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 4183 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 4184 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 4185 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 4186 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 4187 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 4188 // OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 4189 // OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 4190 // OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 4191 // OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 4192 // OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 4193 // OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 4194 // OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 4195 // OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 4196 // OMP-DEfAULT-NEXT: store ptr @.offload_sizes, ptr [[TMP13]], align 4 4197 // OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 4198 // OMP-DEfAULT-NEXT: store ptr @.offload_maptypes, ptr [[TMP14]], align 4 4199 // OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 4200 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 4201 // OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 4202 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 4203 // OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 4204 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 4205 // OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 4206 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 4207 // OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 4208 // OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 4209 // OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 4210 // OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 4211 // OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 4212 // OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 4213 // 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]]) 4214 // OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 4215 // OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 4216 // OMP-DEfAULT: omp_offload.failed: 4217 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148(i32 [[TMP3]]) #[[ATTR2]] 4218 // OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] 4219 // OMP-DEfAULT: omp_offload.cont: 4220 // OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 4221 // OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 4222 // OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 4223 // OMP-DEfAULT-NEXT: ret void 4224 // 4225 // 4226 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148 4227 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3:[0-9]+]] { 4228 // OMP-DEfAULT-NEXT: entry: 4229 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 4230 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 4231 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 4232 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 4233 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 4234 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 4235 // 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]]) 4236 // OMP-DEfAULT-NEXT: ret void 4237 // 4238 // 4239 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148.omp_outlined 4240 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { 4241 // OMP-DEfAULT-NEXT: entry: 4242 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 4243 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 4244 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 4245 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 4246 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 4247 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 4248 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 4249 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 4250 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 4251 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 4252 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 4253 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 4254 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 4255 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 4256 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 4257 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 4258 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 4259 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 4260 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4261 // 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) 4262 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4263 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 4264 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 4265 // OMP-DEfAULT: cond.true: 4266 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 4267 // OMP-DEfAULT: cond.false: 4268 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4269 // OMP-DEfAULT-NEXT: br label [[COND_END]] 4270 // OMP-DEfAULT: cond.end: 4271 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 4272 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 4273 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 4274 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 4275 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 4276 // OMP-DEfAULT: omp.inner.for.cond: 4277 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4278 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4279 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 4280 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 4281 // OMP-DEfAULT: omp.inner.for.body: 4282 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4283 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 4284 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 4285 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 4286 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 4287 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 8 4288 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 4289 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 4290 // OMP-DEfAULT: omp.body.continue: 4291 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 4292 // OMP-DEfAULT: omp.inner.for.inc: 4293 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4294 // OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 4295 // OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 4296 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 4297 // OMP-DEfAULT: omp.inner.for.end: 4298 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 4299 // OMP-DEfAULT: omp.loop.exit: 4300 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 4301 // OMP-DEfAULT-NEXT: ret void 4302 // 4303 // 4304 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SCD2Ev 4305 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4306 // OMP-DEfAULT-NEXT: entry: 4307 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4308 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 4309 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4310 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4311 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 4312 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4313 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 4314 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 4315 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 9 4316 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 4317 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 4318 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 4319 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 4320 // OMP-DEfAULT-NEXT: ret void 4321 // 4322 // 4323 // OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.5 4324 // OMP-DEfAULT-SAME: () #[[ATTR0]] { 4325 // OMP-DEfAULT-NEXT: entry: 4326 // OMP-DEfAULT-NEXT: call void @_ZN2SDC1Ev(ptr noundef nonnull align 4 dereferenceable(128) @d1) 4327 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SDD1Ev, ptr @d1, ptr @__dso_handle) #[[ATTR2]] 4328 // OMP-DEfAULT-NEXT: ret void 4329 // 4330 // 4331 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SDC1Ev 4332 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4333 // OMP-DEfAULT-NEXT: entry: 4334 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4335 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4336 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4337 // OMP-DEfAULT-NEXT: call void @_ZN2SDC2Ev(ptr noundef nonnull align 4 dereferenceable(128) [[THIS1]]) 4338 // OMP-DEfAULT-NEXT: ret void 4339 // 4340 // 4341 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SDD1Ev 4342 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4343 // OMP-DEfAULT-NEXT: entry: 4344 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4345 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4346 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4347 // OMP-DEfAULT-NEXT: call void @_ZN2SDD2Ev(ptr noundef nonnull align 4 dereferenceable(128) [[THIS1]]) #[[ATTR2]] 4348 // OMP-DEfAULT-NEXT: ret void 4349 // 4350 // 4351 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SDC2Ev 4352 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4353 // OMP-DEfAULT-NEXT: entry: 4354 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4355 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 4356 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4357 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4358 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 4359 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4360 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 4361 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 4362 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 11 4363 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 4364 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 4365 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 4366 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 4367 // OMP-DEfAULT-NEXT: ret void 4368 // 4369 // 4370 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SDD2Ev 4371 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4372 // OMP-DEfAULT-NEXT: entry: 4373 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4374 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 4375 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 4376 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 4377 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 4378 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 4379 // OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 4380 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4381 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4382 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 4383 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4384 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 4385 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 4386 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 4387 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 4388 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 4389 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 4390 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 4391 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 4392 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 4393 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 4394 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 4395 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 4396 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 4397 // OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 4398 // OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 4399 // OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 4400 // OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 4401 // OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 4402 // OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 4403 // OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 4404 // OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 4405 // OMP-DEfAULT-NEXT: store ptr @.offload_sizes.6, ptr [[TMP13]], align 4 4406 // OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 4407 // OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.7, ptr [[TMP14]], align 4 4408 // OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 4409 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 4410 // OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 4411 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 4412 // OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 4413 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 4414 // OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 4415 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 4416 // OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 4417 // OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 4418 // OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 4419 // OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 4420 // OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 4421 // OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 4422 // 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]]) 4423 // OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 4424 // OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 4425 // OMP-DEfAULT: omp_offload.failed: 4426 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174(i32 [[TMP3]]) #[[ATTR2]] 4427 // OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] 4428 // OMP-DEfAULT: omp_offload.cont: 4429 // OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 4430 // OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 4431 // OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 4432 // OMP-DEfAULT-NEXT: ret void 4433 // 4434 // 4435 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174 4436 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { 4437 // OMP-DEfAULT-NEXT: entry: 4438 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 4439 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 4440 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 4441 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 4442 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 4443 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 4444 // 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]]) 4445 // OMP-DEfAULT-NEXT: ret void 4446 // 4447 // 4448 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174.omp_outlined 4449 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { 4450 // OMP-DEfAULT-NEXT: entry: 4451 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 4452 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 4453 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 4454 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 4455 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 4456 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 4457 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 4458 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 4459 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 4460 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 4461 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 4462 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 4463 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 4464 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 4465 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 4466 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 4467 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 4468 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 4469 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4470 // 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) 4471 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4472 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 4473 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 4474 // OMP-DEfAULT: cond.true: 4475 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 4476 // OMP-DEfAULT: cond.false: 4477 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4478 // OMP-DEfAULT-NEXT: br label [[COND_END]] 4479 // OMP-DEfAULT: cond.end: 4480 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 4481 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 4482 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 4483 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 4484 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 4485 // OMP-DEfAULT: omp.inner.for.cond: 4486 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4487 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4488 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 4489 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 4490 // OMP-DEfAULT: omp.inner.for.body: 4491 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4492 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 4493 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 4494 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 4495 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 4496 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 12 4497 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 4498 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 4499 // OMP-DEfAULT: omp.body.continue: 4500 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 4501 // OMP-DEfAULT: omp.inner.for.inc: 4502 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4503 // OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 4504 // OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 4505 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 4506 // OMP-DEfAULT: omp.inner.for.end: 4507 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 4508 // OMP-DEfAULT: omp.loop.exit: 4509 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 4510 // OMP-DEfAULT-NEXT: ret void 4511 // 4512 // 4513 // OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.8 4514 // OMP-DEfAULT-SAME: () #[[ATTR0]] { 4515 // OMP-DEfAULT-NEXT: entry: 4516 // OMP-DEfAULT-NEXT: call void @_ZN2SEC1Ev(ptr noundef nonnull align 4 dereferenceable(256) @e1) 4517 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SED1Ev, ptr @e1, ptr @__dso_handle) #[[ATTR2]] 4518 // OMP-DEfAULT-NEXT: ret void 4519 // 4520 // 4521 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SEC1Ev 4522 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4523 // OMP-DEfAULT-NEXT: entry: 4524 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4525 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4526 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4527 // OMP-DEfAULT-NEXT: call void @_ZN2SEC2Ev(ptr noundef nonnull align 4 dereferenceable(256) [[THIS1]]) 4528 // OMP-DEfAULT-NEXT: ret void 4529 // 4530 // 4531 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SED1Ev 4532 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4533 // OMP-DEfAULT-NEXT: entry: 4534 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4535 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4536 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4537 // OMP-DEfAULT-NEXT: call void @_ZN2SED2Ev(ptr noundef nonnull align 4 dereferenceable(256) [[THIS1]]) #[[ATTR2]] 4538 // OMP-DEfAULT-NEXT: ret void 4539 // 4540 // 4541 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SEC2Ev 4542 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4543 // OMP-DEfAULT-NEXT: entry: 4544 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4545 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 4546 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 4547 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 4548 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 4549 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 4550 // OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 4551 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4552 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4553 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 4554 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4555 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 4556 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 4557 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 4558 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 4559 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 4560 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 4561 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 4562 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 4563 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 4564 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 4565 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 4566 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 4567 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 4568 // OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 4569 // OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 4570 // OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 4571 // OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 4572 // OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 4573 // OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 4574 // OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 4575 // OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 4576 // OMP-DEfAULT-NEXT: store ptr @.offload_sizes.9, ptr [[TMP13]], align 4 4577 // OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 4578 // OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.10, ptr [[TMP14]], align 4 4579 // OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 4580 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 4581 // OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 4582 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 4583 // OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 4584 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 4585 // OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 4586 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 4587 // OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 4588 // OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 4589 // OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 4590 // OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 4591 // OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 4592 // OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 4593 // 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]]) 4594 // OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 4595 // OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 4596 // OMP-DEfAULT: omp_offload.failed: 4597 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192(i32 [[TMP3]]) #[[ATTR2]] 4598 // OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] 4599 // OMP-DEfAULT: omp_offload.cont: 4600 // OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 4601 // OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 4602 // OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 4603 // OMP-DEfAULT-NEXT: ret void 4604 // 4605 // 4606 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192 4607 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { 4608 // OMP-DEfAULT-NEXT: entry: 4609 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 4610 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 4611 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 4612 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 4613 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 4614 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 4615 // 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]]) 4616 // OMP-DEfAULT-NEXT: ret void 4617 // 4618 // 4619 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192.omp_outlined 4620 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { 4621 // OMP-DEfAULT-NEXT: entry: 4622 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 4623 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 4624 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 4625 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 4626 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 4627 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 4628 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 4629 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 4630 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 4631 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 4632 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 4633 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 4634 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 4635 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 4636 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 4637 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 4638 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 4639 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 4640 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4641 // 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) 4642 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4643 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 4644 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 4645 // OMP-DEfAULT: cond.true: 4646 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 4647 // OMP-DEfAULT: cond.false: 4648 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4649 // OMP-DEfAULT-NEXT: br label [[COND_END]] 4650 // OMP-DEfAULT: cond.end: 4651 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 4652 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 4653 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 4654 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 4655 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 4656 // OMP-DEfAULT: omp.inner.for.cond: 4657 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4658 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4659 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 4660 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 4661 // OMP-DEfAULT: omp.inner.for.body: 4662 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4663 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 4664 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 4665 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 4666 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 4667 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 14 4668 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 4669 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 4670 // OMP-DEfAULT: omp.body.continue: 4671 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 4672 // OMP-DEfAULT: omp.inner.for.inc: 4673 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4674 // OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 4675 // OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 4676 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 4677 // OMP-DEfAULT: omp.inner.for.end: 4678 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 4679 // OMP-DEfAULT: omp.loop.exit: 4680 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 4681 // OMP-DEfAULT-NEXT: ret void 4682 // 4683 // 4684 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SED2Ev 4685 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4686 // OMP-DEfAULT-NEXT: entry: 4687 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4688 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 4689 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 4690 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 4691 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 4692 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 4693 // OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 4694 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4695 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4696 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 4697 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4698 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 4699 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 4700 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 4701 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 4702 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 4703 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 4704 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 4705 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 4706 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 4707 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 4708 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 4709 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 4710 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 4711 // OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 4712 // OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 4713 // OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 4714 // OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 4715 // OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 4716 // OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 4717 // OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 4718 // OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 4719 // OMP-DEfAULT-NEXT: store ptr @.offload_sizes.11, ptr [[TMP13]], align 4 4720 // OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 4721 // OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.12, ptr [[TMP14]], align 4 4722 // OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 4723 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 4724 // OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 4725 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 4726 // OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 4727 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 4728 // OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 4729 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 4730 // OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 4731 // OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 4732 // OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 4733 // OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 4734 // OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 4735 // OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 4736 // 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]]) 4737 // OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 4738 // OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 4739 // OMP-DEfAULT: omp_offload.failed: 4740 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199(i32 [[TMP3]]) #[[ATTR2]] 4741 // OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] 4742 // OMP-DEfAULT: omp_offload.cont: 4743 // OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 4744 // OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 4745 // OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 4746 // OMP-DEfAULT-NEXT: ret void 4747 // 4748 // 4749 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199 4750 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { 4751 // OMP-DEfAULT-NEXT: entry: 4752 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 4753 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 4754 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 4755 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 4756 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 4757 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 4758 // 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]]) 4759 // OMP-DEfAULT-NEXT: ret void 4760 // 4761 // 4762 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199.omp_outlined 4763 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { 4764 // OMP-DEfAULT-NEXT: entry: 4765 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 4766 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 4767 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 4768 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 4769 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 4770 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 4771 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 4772 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 4773 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 4774 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 4775 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 4776 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 4777 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 4778 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 4779 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 4780 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 4781 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 4782 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 4783 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4784 // 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) 4785 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4786 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 4787 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 4788 // OMP-DEfAULT: cond.true: 4789 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 4790 // OMP-DEfAULT: cond.false: 4791 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4792 // OMP-DEfAULT-NEXT: br label [[COND_END]] 4793 // OMP-DEfAULT: cond.end: 4794 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 4795 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 4796 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 4797 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 4798 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 4799 // OMP-DEfAULT: omp.inner.for.cond: 4800 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4801 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4802 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 4803 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 4804 // OMP-DEfAULT: omp.inner.for.body: 4805 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4806 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 4807 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 4808 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 4809 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 4810 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 15 4811 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 4812 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 4813 // OMP-DEfAULT: omp.body.continue: 4814 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 4815 // OMP-DEfAULT: omp.inner.for.inc: 4816 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4817 // OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 4818 // OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 4819 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 4820 // OMP-DEfAULT: omp.inner.for.end: 4821 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 4822 // OMP-DEfAULT: omp.loop.exit: 4823 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 4824 // OMP-DEfAULT-NEXT: ret void 4825 // 4826 // 4827 // OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.13 4828 // OMP-DEfAULT-SAME: () #[[ATTR0]] { 4829 // OMP-DEfAULT-NEXT: entry: 4830 // OMP-DEfAULT-NEXT: call void @_ZN2STILi100EEC1Ev(ptr noundef nonnull align 4 dereferenceable(912) @t1) 4831 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi100EED1Ev, ptr @t1, ptr @__dso_handle) #[[ATTR2]] 4832 // OMP-DEfAULT-NEXT: ret void 4833 // 4834 // 4835 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EEC1Ev 4836 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4837 // OMP-DEfAULT-NEXT: entry: 4838 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4839 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4840 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4841 // OMP-DEfAULT-NEXT: call void @_ZN2STILi100EEC2Ev(ptr noundef nonnull align 4 dereferenceable(912) [[THIS1]]) 4842 // OMP-DEfAULT-NEXT: ret void 4843 // 4844 // 4845 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EED1Ev 4846 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4847 // OMP-DEfAULT-NEXT: entry: 4848 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4849 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4850 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4851 // OMP-DEfAULT-NEXT: call void @_ZN2STILi100EED2Ev(ptr noundef nonnull align 4 dereferenceable(912) [[THIS1]]) #[[ATTR2]] 4852 // OMP-DEfAULT-NEXT: ret void 4853 // 4854 // 4855 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EEC2Ev 4856 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 4857 // OMP-DEfAULT-NEXT: entry: 4858 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 4859 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 4860 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 4861 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 4862 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 4863 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 4864 // OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 4865 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 4866 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 4867 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 4868 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4869 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 4870 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 4871 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 4872 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 4873 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 4874 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 4875 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 4876 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 4877 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 4878 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 4879 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 4880 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 4881 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 4882 // OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 4883 // OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 4884 // OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 4885 // OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 4886 // OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 4887 // OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 4888 // OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 4889 // OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 4890 // OMP-DEfAULT-NEXT: store ptr @.offload_sizes.14, ptr [[TMP13]], align 4 4891 // OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 4892 // OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.15, ptr [[TMP14]], align 4 4893 // OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 4894 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 4895 // OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 4896 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 4897 // OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 4898 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 4899 // OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 4900 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 4901 // OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 4902 // OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 4903 // OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 4904 // OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 4905 // OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 4906 // OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 4907 // 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]]) 4908 // OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 4909 // OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 4910 // OMP-DEfAULT: omp_offload.failed: 4911 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218(i32 [[TMP3]]) #[[ATTR2]] 4912 // OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] 4913 // OMP-DEfAULT: omp_offload.cont: 4914 // OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 4915 // OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 4916 // OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 4917 // OMP-DEfAULT-NEXT: ret void 4918 // 4919 // 4920 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218 4921 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { 4922 // OMP-DEfAULT-NEXT: entry: 4923 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 4924 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 4925 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 4926 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 4927 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 4928 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 4929 // 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]]) 4930 // OMP-DEfAULT-NEXT: ret void 4931 // 4932 // 4933 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218.omp_outlined 4934 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { 4935 // OMP-DEfAULT-NEXT: entry: 4936 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 4937 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 4938 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 4939 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 4940 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 4941 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 4942 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 4943 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 4944 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 4945 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 4946 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 4947 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 4948 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 4949 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 4950 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 4951 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 4952 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 4953 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 4954 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 4955 // 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) 4956 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4957 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 4958 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 4959 // OMP-DEfAULT: cond.true: 4960 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 4961 // OMP-DEfAULT: cond.false: 4962 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4963 // OMP-DEfAULT-NEXT: br label [[COND_END]] 4964 // OMP-DEfAULT: cond.end: 4965 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 4966 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 4967 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 4968 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 4969 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 4970 // OMP-DEfAULT: omp.inner.for.cond: 4971 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4972 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 4973 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 4974 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 4975 // OMP-DEfAULT: omp.inner.for.body: 4976 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4977 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 4978 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 4979 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 4980 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 4981 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 117 4982 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 4983 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 4984 // OMP-DEfAULT: omp.body.continue: 4985 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 4986 // OMP-DEfAULT: omp.inner.for.inc: 4987 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 4988 // OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 4989 // OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 4990 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 4991 // OMP-DEfAULT: omp.inner.for.end: 4992 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 4993 // OMP-DEfAULT: omp.loop.exit: 4994 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 4995 // OMP-DEfAULT-NEXT: ret void 4996 // 4997 // 4998 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EED2Ev 4999 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 5000 // OMP-DEfAULT-NEXT: entry: 5001 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 5002 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 5003 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 5004 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 5005 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 5006 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 5007 // OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 5008 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 5009 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 5010 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 5011 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5012 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 5013 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 5014 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 5015 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 5016 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5017 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 5018 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5019 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 5020 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 5021 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 5022 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5023 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5024 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 5025 // OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 5026 // OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 5027 // OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 5028 // OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 5029 // OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 5030 // OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 5031 // OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 5032 // OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 5033 // OMP-DEfAULT-NEXT: store ptr @.offload_sizes.16, ptr [[TMP13]], align 4 5034 // OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 5035 // OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.17, ptr [[TMP14]], align 4 5036 // OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 5037 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 5038 // OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 5039 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 5040 // OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 5041 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 5042 // OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 5043 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 5044 // OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 5045 // OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 5046 // OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 5047 // OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 5048 // OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 5049 // OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 5050 // 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]]) 5051 // OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 5052 // OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 5053 // OMP-DEfAULT: omp_offload.failed: 5054 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225(i32 [[TMP3]]) #[[ATTR2]] 5055 // OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] 5056 // OMP-DEfAULT: omp_offload.cont: 5057 // OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 5058 // OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 5059 // OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 5060 // OMP-DEfAULT-NEXT: ret void 5061 // 5062 // 5063 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225 5064 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { 5065 // OMP-DEfAULT-NEXT: entry: 5066 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 5067 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 5068 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 5069 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 5070 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 5071 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 5072 // 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]]) 5073 // OMP-DEfAULT-NEXT: ret void 5074 // 5075 // 5076 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225.omp_outlined 5077 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { 5078 // OMP-DEfAULT-NEXT: entry: 5079 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 5080 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 5081 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 5082 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 5083 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 5084 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 5085 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 5086 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 5087 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 5088 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 5089 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 5090 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 5091 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 5092 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 5093 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 5094 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 5095 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 5096 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 5097 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5098 // 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) 5099 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5100 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 5101 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 5102 // OMP-DEfAULT: cond.true: 5103 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 5104 // OMP-DEfAULT: cond.false: 5105 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5106 // OMP-DEfAULT-NEXT: br label [[COND_END]] 5107 // OMP-DEfAULT: cond.end: 5108 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 5109 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 5110 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 5111 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 5112 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 5113 // OMP-DEfAULT: omp.inner.for.cond: 5114 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5115 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5116 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 5117 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 5118 // OMP-DEfAULT: omp.inner.for.body: 5119 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5120 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 5121 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 5122 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 5123 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 5124 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 118 5125 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 5126 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 5127 // OMP-DEfAULT: omp.body.continue: 5128 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 5129 // OMP-DEfAULT: omp.inner.for.inc: 5130 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5131 // OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 5132 // OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 5133 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 5134 // OMP-DEfAULT: omp.inner.for.end: 5135 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 5136 // OMP-DEfAULT: omp.loop.exit: 5137 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 5138 // OMP-DEfAULT-NEXT: ret void 5139 // 5140 // 5141 // OMP-DEfAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.18 5142 // OMP-DEfAULT-SAME: () #[[ATTR0]] { 5143 // OMP-DEfAULT-NEXT: entry: 5144 // OMP-DEfAULT-NEXT: call void @_ZN2STILi1000EEC1Ev(ptr noundef nonnull align 4 dereferenceable(4512) @t2) 5145 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi1000EED1Ev, ptr @t2, ptr @__dso_handle) #[[ATTR2]] 5146 // OMP-DEfAULT-NEXT: ret void 5147 // 5148 // 5149 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EEC1Ev 5150 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 5151 // OMP-DEfAULT-NEXT: entry: 5152 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 5153 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 5154 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 5155 // OMP-DEfAULT-NEXT: call void @_ZN2STILi1000EEC2Ev(ptr noundef nonnull align 4 dereferenceable(4512) [[THIS1]]) 5156 // OMP-DEfAULT-NEXT: ret void 5157 // 5158 // 5159 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EED1Ev 5160 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 5161 // OMP-DEfAULT-NEXT: entry: 5162 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 5163 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 5164 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 5165 // OMP-DEfAULT-NEXT: call void @_ZN2STILi1000EED2Ev(ptr noundef nonnull align 4 dereferenceable(4512) [[THIS1]]) #[[ATTR2]] 5166 // OMP-DEfAULT-NEXT: ret void 5167 // 5168 // 5169 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EEC2Ev 5170 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 5171 // OMP-DEfAULT-NEXT: entry: 5172 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 5173 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 5174 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 5175 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 5176 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 5177 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 5178 // OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 5179 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 5180 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 5181 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 5182 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5183 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 5184 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 5185 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 5186 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 5187 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5188 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 5189 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5190 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 5191 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 5192 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 5193 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5194 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5195 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 5196 // OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 5197 // OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 5198 // OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 5199 // OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 5200 // OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 5201 // OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 5202 // OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 5203 // OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 5204 // OMP-DEfAULT-NEXT: store ptr @.offload_sizes.19, ptr [[TMP13]], align 4 5205 // OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 5206 // OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.20, ptr [[TMP14]], align 4 5207 // OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 5208 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 5209 // OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 5210 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 5211 // OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 5212 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 5213 // OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 5214 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 5215 // OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 5216 // OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 5217 // OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 5218 // OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 5219 // OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 5220 // OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 5221 // 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]]) 5222 // OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 5223 // OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 5224 // OMP-DEfAULT: omp_offload.failed: 5225 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218(i32 [[TMP3]]) #[[ATTR2]] 5226 // OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] 5227 // OMP-DEfAULT: omp_offload.cont: 5228 // OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 5229 // OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 5230 // OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 5231 // OMP-DEfAULT-NEXT: ret void 5232 // 5233 // 5234 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218 5235 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { 5236 // OMP-DEfAULT-NEXT: entry: 5237 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 5238 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 5239 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 5240 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 5241 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 5242 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 5243 // 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]]) 5244 // OMP-DEfAULT-NEXT: ret void 5245 // 5246 // 5247 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218.omp_outlined 5248 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { 5249 // OMP-DEfAULT-NEXT: entry: 5250 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 5251 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 5252 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 5253 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 5254 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 5255 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 5256 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 5257 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 5258 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 5259 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 5260 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 5261 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 5262 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 5263 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 5264 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 5265 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 5266 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 5267 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 5268 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5269 // 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) 5270 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5271 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 5272 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 5273 // OMP-DEfAULT: cond.true: 5274 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 5275 // OMP-DEfAULT: cond.false: 5276 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5277 // OMP-DEfAULT-NEXT: br label [[COND_END]] 5278 // OMP-DEfAULT: cond.end: 5279 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 5280 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 5281 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 5282 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 5283 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 5284 // OMP-DEfAULT: omp.inner.for.cond: 5285 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5286 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5287 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 5288 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 5289 // OMP-DEfAULT: omp.inner.for.body: 5290 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5291 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 5292 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 5293 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 5294 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 5295 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1017 5296 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 5297 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 5298 // OMP-DEfAULT: omp.body.continue: 5299 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 5300 // OMP-DEfAULT: omp.inner.for.inc: 5301 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5302 // OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 5303 // OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 5304 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 5305 // OMP-DEfAULT: omp.inner.for.end: 5306 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 5307 // OMP-DEfAULT: omp.loop.exit: 5308 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 5309 // OMP-DEfAULT-NEXT: ret void 5310 // 5311 // 5312 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EED2Ev 5313 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 { 5314 // OMP-DEfAULT-NEXT: entry: 5315 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 5316 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 5317 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 5318 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 5319 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 5320 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 5321 // OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 5322 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 5323 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 5324 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 5325 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5326 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 5327 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 5328 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 5329 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 5330 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5331 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 5332 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5333 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 5334 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 5335 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 5336 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5337 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5338 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 5339 // OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 5340 // OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 5341 // OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 5342 // OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 5343 // OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 5344 // OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 5345 // OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 5346 // OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 5347 // OMP-DEfAULT-NEXT: store ptr @.offload_sizes.21, ptr [[TMP13]], align 4 5348 // OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 5349 // OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.22, ptr [[TMP14]], align 4 5350 // OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 5351 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 5352 // OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 5353 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 5354 // OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 5355 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 5356 // OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 5357 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 5358 // OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 5359 // OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 5360 // OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 5361 // OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 5362 // OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 5363 // OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 5364 // 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]]) 5365 // OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 5366 // OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 5367 // OMP-DEfAULT: omp_offload.failed: 5368 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225(i32 [[TMP3]]) #[[ATTR2]] 5369 // OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] 5370 // OMP-DEfAULT: omp_offload.cont: 5371 // OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 5372 // OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 5373 // OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 5374 // OMP-DEfAULT-NEXT: ret void 5375 // 5376 // 5377 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225 5378 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { 5379 // OMP-DEfAULT-NEXT: entry: 5380 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 5381 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 5382 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 5383 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 5384 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 5385 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 5386 // 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]]) 5387 // OMP-DEfAULT-NEXT: ret void 5388 // 5389 // 5390 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225.omp_outlined 5391 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { 5392 // OMP-DEfAULT-NEXT: entry: 5393 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 5394 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 5395 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 5396 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 5397 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 5398 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 5399 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 5400 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 5401 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 5402 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 5403 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 5404 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 5405 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 5406 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 5407 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 5408 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 5409 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 5410 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 5411 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5412 // 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) 5413 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5414 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 5415 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 5416 // OMP-DEfAULT: cond.true: 5417 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 5418 // OMP-DEfAULT: cond.false: 5419 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5420 // OMP-DEfAULT-NEXT: br label [[COND_END]] 5421 // OMP-DEfAULT: cond.end: 5422 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 5423 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 5424 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 5425 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 5426 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 5427 // OMP-DEfAULT: omp.inner.for.cond: 5428 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5429 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5430 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 5431 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 5432 // OMP-DEfAULT: omp.inner.for.body: 5433 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5434 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 5435 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 5436 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 5437 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 5438 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1018 5439 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 5440 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 5441 // OMP-DEfAULT: omp.body.continue: 5442 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 5443 // OMP-DEfAULT: omp.inner.for.inc: 5444 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5445 // OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 5446 // OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 5447 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 5448 // OMP-DEfAULT: omp.inner.for.end: 5449 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 5450 // OMP-DEfAULT: omp.loop.exit: 5451 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 5452 // OMP-DEfAULT-NEXT: ret void 5453 // 5454 // 5455 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_Z3bari 5456 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR1]] { 5457 // OMP-DEfAULT-NEXT: entry: 5458 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 5459 // OMP-DEfAULT-NEXT: [[R:%.*]] = alloca i32, align 4 5460 // OMP-DEfAULT-NEXT: [[R_CASTED:%.*]] = alloca i32, align 4 5461 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 5462 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 5463 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 5464 // OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 5465 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 5466 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 5467 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[R]], align 4 5468 // OMP-DEfAULT-NEXT: call void @_ZN2SA3fooEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) 5469 // OMP-DEfAULT-NEXT: call void @_ZN2SA3fooEv(ptr noundef nonnull align 4 dereferenceable(16) @a2) 5470 // OMP-DEfAULT-NEXT: call void @_ZN2SB3fooEv(ptr noundef nonnull align 4 dereferenceable(32) @b1) 5471 // OMP-DEfAULT-NEXT: call void @_ZN2SB3fooEv(ptr noundef nonnull align 4 dereferenceable(32) @b2) 5472 // OMP-DEfAULT-NEXT: call void @_ZN2SC3fooEv(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) 5473 // OMP-DEfAULT-NEXT: call void @_ZN2SD3fooEv(ptr noundef nonnull align 4 dereferenceable(128) @d1) 5474 // OMP-DEfAULT-NEXT: call void @_ZN2SE3fooEv(ptr noundef nonnull align 4 dereferenceable(256) @e1) 5475 // OMP-DEfAULT-NEXT: call void @_ZN2STILi100EE3fooEv(ptr noundef nonnull align 4 dereferenceable(912) @t1) 5476 // OMP-DEfAULT-NEXT: call void @_ZN2STILi1000EE3fooEv(ptr noundef nonnull align 4 dereferenceable(4512) @t2) 5477 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[R]], align 4 5478 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[R_CASTED]], align 4 5479 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[R_CASTED]], align 4 5480 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5481 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[TMP3]], align 4 5482 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5483 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[TMP4]], align 4 5484 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 5485 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP5]], align 4 5486 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5487 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5488 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 5489 // OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP8]], align 4 5490 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 5491 // OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP9]], align 4 5492 // OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 5493 // OMP-DEfAULT-NEXT: store ptr [[TMP6]], ptr [[TMP10]], align 4 5494 // OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 5495 // OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 5496 // OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 5497 // OMP-DEfAULT-NEXT: store ptr @.offload_sizes.23, ptr [[TMP12]], align 4 5498 // OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 5499 // OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.24, ptr [[TMP13]], align 4 5500 // OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 5501 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP14]], align 4 5502 // OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 5503 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 5504 // OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 5505 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP16]], align 8 5506 // OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 5507 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 5508 // OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 5509 // OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP18]], align 4 5510 // OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 5511 // OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP19]], align 4 5512 // OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 5513 // OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP20]], align 4 5514 // 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]]) 5515 // OMP-DEfAULT-NEXT: [[TMP22:%.*]] = icmp ne i32 [[TMP21]], 0 5516 // OMP-DEfAULT-NEXT: br i1 [[TMP22]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 5517 // OMP-DEfAULT: omp_offload.failed: 5518 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267(i32 [[TMP2]]) #[[ATTR2]] 5519 // OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] 5520 // OMP-DEfAULT: omp_offload.cont: 5521 // OMP-DEfAULT-NEXT: [[TMP23:%.*]] = load i32, ptr [[R]], align 4 5522 // OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load ptr, ptr @R, align 4 5523 // OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load i32, ptr [[TMP24]], align 4 5524 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP25]] 5525 // OMP-DEfAULT-NEXT: ret i32 [[ADD]] 5526 // 5527 // 5528 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SA3fooEv 5529 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { 5530 // OMP-DEfAULT-NEXT: entry: 5531 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 5532 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 5533 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 5534 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 5535 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 5536 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5537 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 5538 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 5539 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 1 5540 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 5541 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 5542 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 5543 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 5544 // OMP-DEfAULT-NEXT: ret void 5545 // 5546 // 5547 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SB3fooEv 5548 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { 5549 // OMP-DEfAULT-NEXT: entry: 5550 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 5551 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 5552 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 5553 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 5554 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 5555 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 5556 // OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 5557 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 5558 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 5559 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 5560 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5561 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 5562 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 5563 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 5564 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 5565 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5566 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 5567 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5568 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 5569 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 5570 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 5571 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5572 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5573 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 5574 // OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 5575 // OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 5576 // OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 5577 // OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 5578 // OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 5579 // OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 5580 // OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 5581 // OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 5582 // OMP-DEfAULT-NEXT: store ptr @.offload_sizes.25, ptr [[TMP13]], align 4 5583 // OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 5584 // OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.26, ptr [[TMP14]], align 4 5585 // OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 5586 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 5587 // OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 5588 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 5589 // OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 5590 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 5591 // OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 5592 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 5593 // OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 5594 // OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 5595 // OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 5596 // OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 5597 // OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 5598 // OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 5599 // 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]]) 5600 // OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 5601 // OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 5602 // OMP-DEfAULT: omp_offload.failed: 5603 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122(i32 [[TMP3]]) #[[ATTR2]] 5604 // OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] 5605 // OMP-DEfAULT: omp_offload.cont: 5606 // OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 5607 // OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 5608 // OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 5609 // OMP-DEfAULT-NEXT: ret void 5610 // 5611 // 5612 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SC3fooEv 5613 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { 5614 // OMP-DEfAULT-NEXT: entry: 5615 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 5616 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 5617 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 5618 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 5619 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 5620 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5621 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 5622 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 5623 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 7 5624 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 5625 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 5626 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 5627 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 5628 // OMP-DEfAULT-NEXT: ret void 5629 // 5630 // 5631 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SD3fooEv 5632 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { 5633 // OMP-DEfAULT-NEXT: entry: 5634 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 5635 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 5636 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 5637 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 5638 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 5639 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5640 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 5641 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 5642 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 10 5643 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 5644 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 5645 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 4 5646 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 5647 // OMP-DEfAULT-NEXT: ret void 5648 // 5649 // 5650 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2SE3fooEv 5651 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { 5652 // OMP-DEfAULT-NEXT: entry: 5653 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 5654 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 5655 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 5656 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 5657 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 5658 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 5659 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5660 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 5661 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 5662 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 5663 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 5664 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185(i32 [[TMP3]]) #[[ATTR2]] 5665 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 5666 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 4 5667 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 5668 // OMP-DEfAULT-NEXT: ret void 5669 // 5670 // 5671 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EE3fooEv 5672 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { 5673 // OMP-DEfAULT-NEXT: entry: 5674 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 5675 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 5676 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 5677 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 5678 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 5679 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 5680 // OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 5681 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 5682 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 5683 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 5684 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5685 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 5686 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 5687 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 5688 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 5689 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5690 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 5691 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5692 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 5693 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 5694 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 5695 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5696 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5697 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 5698 // OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 5699 // OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 5700 // OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 5701 // OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 5702 // OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 5703 // OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 5704 // OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 5705 // OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 5706 // OMP-DEfAULT-NEXT: store ptr @.offload_sizes.27, ptr [[TMP13]], align 4 5707 // OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 5708 // OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.28, ptr [[TMP14]], align 4 5709 // OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 5710 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 5711 // OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 5712 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 5713 // OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 5714 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 5715 // OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 5716 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 5717 // OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 5718 // OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 5719 // OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 5720 // OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 5721 // OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 5722 // OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 5723 // 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]]) 5724 // OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 5725 // OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 5726 // OMP-DEfAULT: omp_offload.failed: 5727 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211(i32 [[TMP3]]) #[[ATTR2]] 5728 // OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] 5729 // OMP-DEfAULT: omp_offload.cont: 5730 // OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 5731 // OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 5732 // OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 5733 // OMP-DEfAULT-NEXT: ret void 5734 // 5735 // 5736 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EE3fooEv 5737 // OMP-DEfAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 { 5738 // OMP-DEfAULT-NEXT: entry: 5739 // OMP-DEfAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4 5740 // OMP-DEfAULT-NEXT: [[A:%.*]] = alloca i32, align 4 5741 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 5742 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4 5743 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4 5744 // OMP-DEfAULT-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4 5745 // OMP-DEfAULT-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8 5746 // OMP-DEfAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4 5747 // OMP-DEfAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4 5748 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 4 5749 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5750 // OMP-DEfAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 5751 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 5752 // OMP-DEfAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 5753 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4 5754 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5755 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 5756 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5757 // OMP-DEfAULT-NEXT: store i32 [[TMP3]], ptr [[TMP5]], align 4 5758 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 5759 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP6]], align 4 5760 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 5761 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0 5762 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0 5763 // OMP-DEfAULT-NEXT: store i32 3, ptr [[TMP9]], align 4 5764 // OMP-DEfAULT-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1 5765 // OMP-DEfAULT-NEXT: store i32 1, ptr [[TMP10]], align 4 5766 // OMP-DEfAULT-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2 5767 // OMP-DEfAULT-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 4 5768 // OMP-DEfAULT-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3 5769 // OMP-DEfAULT-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 4 5770 // OMP-DEfAULT-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4 5771 // OMP-DEfAULT-NEXT: store ptr @.offload_sizes.29, ptr [[TMP13]], align 4 5772 // OMP-DEfAULT-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5 5773 // OMP-DEfAULT-NEXT: store ptr @.offload_maptypes.30, ptr [[TMP14]], align 4 5774 // OMP-DEfAULT-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6 5775 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP15]], align 4 5776 // OMP-DEfAULT-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7 5777 // OMP-DEfAULT-NEXT: store ptr null, ptr [[TMP16]], align 4 5778 // OMP-DEfAULT-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8 5779 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP17]], align 8 5780 // OMP-DEfAULT-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9 5781 // OMP-DEfAULT-NEXT: store i64 0, ptr [[TMP18]], align 8 5782 // OMP-DEfAULT-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10 5783 // OMP-DEfAULT-NEXT: store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP19]], align 4 5784 // OMP-DEfAULT-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11 5785 // OMP-DEfAULT-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP20]], align 4 5786 // OMP-DEfAULT-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12 5787 // OMP-DEfAULT-NEXT: store i32 0, ptr [[TMP21]], align 4 5788 // 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]]) 5789 // OMP-DEfAULT-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0 5790 // OMP-DEfAULT-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 5791 // OMP-DEfAULT: omp_offload.failed: 5792 // OMP-DEfAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211(i32 [[TMP3]]) #[[ATTR2]] 5793 // OMP-DEfAULT-NEXT: br label [[OMP_OFFLOAD_CONT]] 5794 // OMP-DEfAULT: omp_offload.cont: 5795 // OMP-DEfAULT-NEXT: [[TMP24:%.*]] = load i32, ptr [[A]], align 4 5796 // OMP-DEfAULT-NEXT: [[TMP25:%.*]] = load ptr, ptr @R, align 4 5797 // OMP-DEfAULT-NEXT: store i32 [[TMP24]], ptr [[TMP25]], align 4 5798 // OMP-DEfAULT-NEXT: ret void 5799 // 5800 // 5801 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267 5802 // OMP-DEfAULT-SAME: (i32 noundef [[R:%.*]]) #[[ATTR3]] { 5803 // OMP-DEfAULT-NEXT: entry: 5804 // OMP-DEfAULT-NEXT: [[R_ADDR:%.*]] = alloca i32, align 4 5805 // OMP-DEfAULT-NEXT: [[R_CASTED:%.*]] = alloca i32, align 4 5806 // OMP-DEfAULT-NEXT: store i32 [[R]], ptr [[R_ADDR]], align 4 5807 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[R_ADDR]], align 4 5808 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[R_CASTED]], align 4 5809 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[R_CASTED]], align 4 5810 // 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]]) 5811 // OMP-DEfAULT-NEXT: ret void 5812 // 5813 // 5814 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267.omp_outlined 5815 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[R:%.*]]) #[[ATTR3]] { 5816 // OMP-DEfAULT-NEXT: entry: 5817 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 5818 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 5819 // OMP-DEfAULT-NEXT: [[R_ADDR:%.*]] = alloca i32, align 4 5820 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 5821 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 5822 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 5823 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 5824 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 5825 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 5826 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 5827 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 5828 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 5829 // OMP-DEfAULT-NEXT: store i32 [[R]], ptr [[R_ADDR]], align 4 5830 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 5831 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 5832 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 5833 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 5834 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 5835 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5836 // 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) 5837 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5838 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 5839 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 5840 // OMP-DEfAULT: cond.true: 5841 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 5842 // OMP-DEfAULT: cond.false: 5843 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5844 // OMP-DEfAULT-NEXT: br label [[COND_END]] 5845 // OMP-DEfAULT: cond.end: 5846 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 5847 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 5848 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 5849 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 5850 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 5851 // OMP-DEfAULT: omp.inner.for.cond: 5852 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5853 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5854 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 5855 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 5856 // OMP-DEfAULT: omp.inner.for.body: 5857 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5858 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 5859 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 5860 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 5861 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[R_ADDR]], align 4 5862 // OMP-DEfAULT-NEXT: [[INC:%.*]] = add nsw i32 [[TMP8]], 1 5863 // OMP-DEfAULT-NEXT: store i32 [[INC]], ptr [[R_ADDR]], align 4 5864 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 5865 // OMP-DEfAULT: omp.body.continue: 5866 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 5867 // OMP-DEfAULT: omp.inner.for.inc: 5868 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5869 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP9]], 1 5870 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[DOTOMP_IV]], align 4 5871 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 5872 // OMP-DEfAULT: omp.inner.for.end: 5873 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 5874 // OMP-DEfAULT: omp.loop.exit: 5875 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 5876 // OMP-DEfAULT-NEXT: ret void 5877 // 5878 // 5879 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122 5880 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { 5881 // OMP-DEfAULT-NEXT: entry: 5882 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 5883 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 5884 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 5885 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 5886 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 5887 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 5888 // 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]]) 5889 // OMP-DEfAULT-NEXT: ret void 5890 // 5891 // 5892 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122.omp_outlined 5893 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { 5894 // OMP-DEfAULT-NEXT: entry: 5895 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 5896 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 5897 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 5898 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 5899 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 5900 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 5901 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 5902 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 5903 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 5904 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 5905 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 5906 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 5907 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 5908 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 5909 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 5910 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 5911 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 5912 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 5913 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5914 // 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) 5915 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5916 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 5917 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 5918 // OMP-DEfAULT: cond.true: 5919 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 5920 // OMP-DEfAULT: cond.false: 5921 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5922 // OMP-DEfAULT-NEXT: br label [[COND_END]] 5923 // OMP-DEfAULT: cond.end: 5924 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 5925 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 5926 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 5927 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 5928 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 5929 // OMP-DEfAULT: omp.inner.for.cond: 5930 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5931 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5932 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 5933 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 5934 // OMP-DEfAULT: omp.inner.for.body: 5935 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5936 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 5937 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 5938 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 5939 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 5940 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 4 5941 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 5942 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 5943 // OMP-DEfAULT: omp.body.continue: 5944 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 5945 // OMP-DEfAULT: omp.inner.for.inc: 5946 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 5947 // OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 5948 // OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 5949 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 5950 // OMP-DEfAULT: omp.inner.for.end: 5951 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 5952 // OMP-DEfAULT: omp.loop.exit: 5953 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 5954 // OMP-DEfAULT-NEXT: ret void 5955 // 5956 // 5957 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185 5958 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { 5959 // OMP-DEfAULT-NEXT: entry: 5960 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 5961 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 5962 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 5963 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 5964 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 5965 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 5966 // 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]]) 5967 // OMP-DEfAULT-NEXT: ret void 5968 // 5969 // 5970 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185.omp_outlined 5971 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { 5972 // OMP-DEfAULT-NEXT: entry: 5973 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 5974 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 5975 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 5976 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 5977 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 5978 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 5979 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 5980 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 5981 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 5982 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 5983 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 5984 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 5985 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 5986 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 5987 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 5988 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 5989 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 5990 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 5991 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 5992 // 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) 5993 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 5994 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 5995 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 5996 // OMP-DEfAULT: cond.true: 5997 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 5998 // OMP-DEfAULT: cond.false: 5999 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 6000 // OMP-DEfAULT-NEXT: br label [[COND_END]] 6001 // OMP-DEfAULT: cond.end: 6002 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 6003 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 6004 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 6005 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 6006 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 6007 // OMP-DEfAULT: omp.inner.for.cond: 6008 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 6009 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 6010 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 6011 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 6012 // OMP-DEfAULT: omp.inner.for.body: 6013 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 6014 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 6015 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 6016 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 6017 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 6018 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 13 6019 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 6020 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 6021 // OMP-DEfAULT: omp.body.continue: 6022 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 6023 // OMP-DEfAULT: omp.inner.for.inc: 6024 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 6025 // OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 6026 // OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 6027 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 6028 // OMP-DEfAULT: omp.inner.for.end: 6029 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 6030 // OMP-DEfAULT: omp.loop.exit: 6031 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 6032 // OMP-DEfAULT-NEXT: ret void 6033 // 6034 // 6035 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211 6036 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { 6037 // OMP-DEfAULT-NEXT: entry: 6038 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 6039 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 6040 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 6041 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 6042 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 6043 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 6044 // 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]]) 6045 // OMP-DEfAULT-NEXT: ret void 6046 // 6047 // 6048 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211.omp_outlined 6049 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { 6050 // OMP-DEfAULT-NEXT: entry: 6051 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 6052 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 6053 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 6054 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 6055 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 6056 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 6057 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 6058 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 6059 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 6060 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 6061 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 6062 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 6063 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 6064 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 6065 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 6066 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 6067 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 6068 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 6069 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 6070 // 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) 6071 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 6072 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 6073 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 6074 // OMP-DEfAULT: cond.true: 6075 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 6076 // OMP-DEfAULT: cond.false: 6077 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 6078 // OMP-DEfAULT-NEXT: br label [[COND_END]] 6079 // OMP-DEfAULT: cond.end: 6080 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 6081 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 6082 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 6083 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 6084 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 6085 // OMP-DEfAULT: omp.inner.for.cond: 6086 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 6087 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 6088 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 6089 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 6090 // OMP-DEfAULT: omp.inner.for.body: 6091 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 6092 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 6093 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 6094 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 6095 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 6096 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 116 6097 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 6098 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 6099 // OMP-DEfAULT: omp.body.continue: 6100 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 6101 // OMP-DEfAULT: omp.inner.for.inc: 6102 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 6103 // OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 6104 // OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 6105 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 6106 // OMP-DEfAULT: omp.inner.for.end: 6107 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 6108 // OMP-DEfAULT: omp.loop.exit: 6109 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 6110 // OMP-DEfAULT-NEXT: ret void 6111 // 6112 // 6113 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211 6114 // OMP-DEfAULT-SAME: (i32 noundef [[A:%.*]]) #[[ATTR3]] { 6115 // OMP-DEfAULT-NEXT: entry: 6116 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 6117 // OMP-DEfAULT-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4 6118 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 6119 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 6120 // OMP-DEfAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 6121 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_CASTED]], align 4 6122 // 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]]) 6123 // OMP-DEfAULT-NEXT: ret void 6124 // 6125 // 6126 // OMP-DEfAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211.omp_outlined 6127 // OMP-DEfAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]]) #[[ATTR3]] { 6128 // OMP-DEfAULT-NEXT: entry: 6129 // OMP-DEfAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4 6130 // OMP-DEfAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4 6131 // OMP-DEfAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 6132 // OMP-DEfAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 6133 // OMP-DEfAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 6134 // OMP-DEfAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 6135 // OMP-DEfAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 6136 // OMP-DEfAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 6137 // OMP-DEfAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 6138 // OMP-DEfAULT-NEXT: [[I:%.*]] = alloca i32, align 4 6139 // OMP-DEfAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4 6140 // OMP-DEfAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4 6141 // OMP-DEfAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 6142 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 6143 // OMP-DEfAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 6144 // OMP-DEfAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 6145 // OMP-DEfAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 6146 // OMP-DEfAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 4 6147 // OMP-DEfAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 6148 // 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) 6149 // OMP-DEfAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 6150 // OMP-DEfAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 6151 // OMP-DEfAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 6152 // OMP-DEfAULT: cond.true: 6153 // OMP-DEfAULT-NEXT: br label [[COND_END:%.*]] 6154 // OMP-DEfAULT: cond.false: 6155 // OMP-DEfAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 6156 // OMP-DEfAULT-NEXT: br label [[COND_END]] 6157 // OMP-DEfAULT: cond.end: 6158 // OMP-DEfAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 6159 // OMP-DEfAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 6160 // OMP-DEfAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 6161 // OMP-DEfAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 6162 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 6163 // OMP-DEfAULT: omp.inner.for.cond: 6164 // OMP-DEfAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 6165 // OMP-DEfAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 6166 // OMP-DEfAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 6167 // OMP-DEfAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 6168 // OMP-DEfAULT: omp.inner.for.body: 6169 // OMP-DEfAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 6170 // OMP-DEfAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 6171 // OMP-DEfAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 6172 // OMP-DEfAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 6173 // OMP-DEfAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 6174 // OMP-DEfAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1016 6175 // OMP-DEfAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 6176 // OMP-DEfAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 6177 // OMP-DEfAULT: omp.body.continue: 6178 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 6179 // OMP-DEfAULT: omp.inner.for.inc: 6180 // OMP-DEfAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 6181 // OMP-DEfAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 6182 // OMP-DEfAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 6183 // OMP-DEfAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 6184 // OMP-DEfAULT: omp.inner.for.end: 6185 // OMP-DEfAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 6186 // OMP-DEfAULT: omp.loop.exit: 6187 // OMP-DEfAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 6188 // OMP-DEfAULT-NEXT: ret void 6189 // 6190 // 6191 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_GLOBAL__I_000500 6192 // OMP-DEfAULT-SAME: () #[[ATTR0]] { 6193 // OMP-DEfAULT-NEXT: entry: 6194 // OMP-DEfAULT-NEXT: call void @__cxx_global_var_init() 6195 // OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.2() 6196 // OMP-DEfAULT-NEXT: ret void 6197 // 6198 // 6199 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_GLOBAL__I_000501 6200 // OMP-DEfAULT-SAME: () #[[ATTR0]] { 6201 // OMP-DEfAULT-NEXT: entry: 6202 // OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.3() 6203 // OMP-DEfAULT-NEXT: ret void 6204 // 6205 // 6206 // OMP-DEfAULT-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_target_parallel_generic_loop_codegen_1.cpp 6207 // OMP-DEfAULT-SAME: () #[[ATTR0]] { 6208 // OMP-DEfAULT-NEXT: entry: 6209 // OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.1() 6210 // OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.4() 6211 // OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.5() 6212 // OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.8() 6213 // OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.13() 6214 // OMP-DEfAULT-NEXT: call void @__cxx_global_var_init.18() 6215 // OMP-DEfAULT-NEXT: ret void 6216 // 6217 // 6218 // 6219 // 6220 // 6221 // 6222 // 6223 // 6224 // 6225 // 6226 // 6227 // 6228 // 6229 // 6230 // 6231 // 6232 // 6233 // 6234 // 6235 // 6236 // 6237 // 6238 // 6239 // 6240 // 6241 // 6242 // 6243 // 6244 // 6245 // 6246 // 6247 // 6248 // 6249 // 6250 // 6251 // 6252 // 6253 // 6254 // 6255 // 6256 // 6257 // 6258 // 6259 // 6260 // 6261 // 6262 // 6263 // 6264 // 6265 // 6266 // 6267 // 6268 // 6269 // 6270 // 6271 // 6272 // 6273 // 6274 // 6275 // 6276 // 6277 // 6278 // 6279 // 6280 // 6281 // 6282 // 6283 // 6284 // 6285 // 6286 // 6287 // 6288 // 6289 // 6290 // 6291 // 6292 // 6293 // 6294 // 6295 // 6296 // 6297 // 6298 // 6299 // 6300 // 6301 // 6302 // 6303 // 6304 // 6305 // 6306 // 6307 // 6308 // 6309 // 6310 // 6311 // 6312 // 6313 // 6314 // 6315 // 6316 // 6317 // 6318 // 6319 // 6320 // 6321 // 6322 // 6323 // 6324 // 6325 // 6326 // 6327 // 6328 // 6329 // 6330 // 6331 // 6332 // 6333 // 6334 // 6335 // 6336 // 6337 // 6338 // 6339 // 6340 // 6341 // 6342 // 6343 // 6344 // 6345 // 6346 // 6347 // 6348 // 6349 // 6350 // 6351 // 6352 // 6353 // 6354 // 6355 // 6356 // 6357 // 6358 // 6359 // 6360 // 6361 // 6362 // 6363 // 6364 // 6365 // 6366 // 6367 // 6368 // 6369 // 6370 // 6371 // 6372 // 6373 // 6374 // 6375 // 6376 // 6377 // 6378 // 6379 // 6380 // 6381 // 6382 // 6383 // 6384 // 6385 // 6386 // 6387 // 6388 // 6389 // 6390 // 6391 // 6392 // 6393 // 6394 // 6395 // 6396 // 6397 // 6398 // 6399 // 6400 // 6401 // 6402 // 6403 // 6404 // 6405 // 6406 // 6407 // 6408 // 6409 // 6410 // 6411 // 6412 // 6413 // 6414 // 6415 // 6416 // 6417 // 6418 // 6419 // 6420 // 6421 // 6422 // 6423 // 6424 // 6425 // 6426 // 6427 // 6428 // 6429 // 6430 // 6431 // 6432 // 6433 // 6434 // 6435 // 6436 // 6437 // 6438 // 6439 // 6440 // 6441 // 6442 // 6443 // 6444 // 6445 // 6446 // 6447 // 6448 // 6449 // 6450 // 6451 // 6452 // 6453 // 6454 // 6455 // 6456 // 6457 // 6458 // 6459 // 6460 // 6461 // 6462 // 6463 // 6464 // 6465 // 6466 // 6467 // 6468 // 6469 // 6470 // 6471 // 6472 // 6473 // 6474 // 6475 // 6476 // 6477 // 6478 // 6479 // 6480 // 6481 // 6482 // 6483 // 6484 // 6485 // 6486 // 6487 // 6488 // 6489 // 6490 // 6491 // 6492 // 6493 // 6494 // 6495 // 6496 // 6497 // 6498 // 6499 // 6500 // 6501 // 6502 // 6503 // 6504 // 6505 // 6506 // 6507 // 6508 // 6509 // 6510 // 6511 // 6512 // 6513 // 6514 // 6515 // 6516 // 6517 // 6518 // 6519 // 6520 // 6521 // 6522 // 6523 // 6524 // 6525 // 6526 // 6527 // 6528 // 6529 // 6530 // 6531 // 6532 // 6533 // 6534 // 6535 // 6536 // 6537 // 6538 // 6539 // 6540 // 6541 // 6542 // 6543 // 6544 // 6545 // 6546 // 6547 // 6548 // 6549 // 6550 // 6551 // 6552 // 6553 // 6554 // 6555 // 6556 // 6557 // 6558 // 6559 // 6560 // 6561 // 6562 // 6563 // 6564 // 6565 // 6566 // 6567 // 6568 // 6569 // 6570 // 6571 // 6572 // 6573 // 6574 // 6575 // 6576 // 6577 // 6578 // 6579 // 6580 // 6581 // 6582 // 6583 // 6584 // 6585 // 6586 // 6587 // 6588 // 6589 // 6590 // 6591 // 6592 // 6593 // 6594 // 6595 // 6596 // 6597 // 6598 // 6599 // 6600 // 6601 // 6602 // 6603 // 6604 // 6605 // 6606 // 6607 // 6608 // 6609 // 6610 // 6611 // 6612 // 6613 // 6614 // 6615 // 6616 // 6617 // 6618 // 6619 // 6620 // 6621 // 6622 // 6623 // 6624 // 6625 // 6626 // 6627 // 6628 // 6629 // 6630 // 6631 // 6632 // 6633 // 6634 // 6635 // 6636 // 6637 // 6638 // 6639 // 6640 // 6641 // 6642 // 6643 // 6644 // 6645 // 6646 // 6647 // 6648 // 6649 // 6650 // 6651 // 6652 // 6653 // 6654 // 6655 // 6656 // 6657 // 6658 // 6659 // 6660 // 6661 // 6662 // 6663 // 6664 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init 6665 // CHECK-NTARGET-OMP-DEFAULT-SAME: () #[[ATTR0:[0-9]+]] { 6666 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6667 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) 6668 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @_ZL2a1, ptr @__dso_handle) #[[ATTR2:[0-9]+]] 6669 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6670 // 6671 // 6672 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SAC1Ev 6673 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat { 6674 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6675 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6676 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6677 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6678 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SAC2Ev(ptr noundef nonnull align 4 dereferenceable(16) [[THIS1]]) 6679 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6680 // 6681 // 6682 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SAD1Ev 6683 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6684 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6685 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6686 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6687 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6688 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SAD2Ev(ptr noundef nonnull align 4 dereferenceable(16) [[THIS1]]) #[[ATTR2]] 6689 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6690 // 6691 // 6692 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SAC2Ev 6693 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6694 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6695 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6696 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 6697 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6698 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6699 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 6700 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 6701 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 6702 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 6703 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 2 6704 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 6705 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 6706 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 6707 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 6708 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6709 // 6710 // 6711 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SAD2Ev 6712 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6713 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6714 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6715 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 6716 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6717 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6718 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 6719 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 6720 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 6721 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 6722 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 3 6723 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 6724 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 6725 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 6726 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 6727 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6728 // 6729 // 6730 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.1 6731 // CHECK-NTARGET-OMP-DEFAULT-SAME: () #[[ATTR0]] { 6732 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6733 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SAC1Ev(ptr noundef nonnull align 4 dereferenceable(16) @a2) 6734 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SAD1Ev, ptr @a2, ptr @__dso_handle) #[[ATTR2]] 6735 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6736 // 6737 // 6738 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.2 6739 // CHECK-NTARGET-OMP-DEFAULT-SAME: () #[[ATTR0]] { 6740 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6741 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b1) 6742 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b1, ptr @__dso_handle) #[[ATTR2]] 6743 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6744 // 6745 // 6746 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SBC1Ev 6747 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6748 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6749 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6750 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6751 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6752 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SBC2Ev(ptr noundef nonnull align 4 dereferenceable(32) [[THIS1]]) 6753 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6754 // 6755 // 6756 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SBD1Ev 6757 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6758 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6759 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6760 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6761 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6762 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SBD2Ev(ptr noundef nonnull align 4 dereferenceable(32) [[THIS1]]) #[[ATTR2]] 6763 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6764 // 6765 // 6766 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SBC2Ev 6767 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6768 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6769 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6770 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 6771 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6772 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6773 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 6774 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 6775 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 6776 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 6777 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 5 6778 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 6779 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 6780 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 6781 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 6782 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6783 // 6784 // 6785 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SBD2Ev 6786 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6787 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6788 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6789 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 6790 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6791 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6792 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 6793 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 6794 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 6795 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 6796 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 6 6797 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 6798 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 6799 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 6800 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 6801 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6802 // 6803 // 6804 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.3 6805 // CHECK-NTARGET-OMP-DEFAULT-SAME: () #[[ATTR0]] { 6806 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6807 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SBC1Ev(ptr noundef nonnull align 4 dereferenceable(32) @b2) 6808 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SBD1Ev, ptr @b2, ptr @__dso_handle) #[[ATTR2]] 6809 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6810 // 6811 // 6812 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.4 6813 // CHECK-NTARGET-OMP-DEFAULT-SAME: () #[[ATTR0]] { 6814 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6815 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SCC1Ev(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) 6816 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SCD1Ev, ptr @_ZL2c1, ptr @__dso_handle) #[[ATTR2]] 6817 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6818 // 6819 // 6820 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SCC1Ev 6821 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6822 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6823 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6824 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6825 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6826 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SCC2Ev(ptr noundef nonnull align 4 dereferenceable(64) [[THIS1]]) 6827 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6828 // 6829 // 6830 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SCD1Ev 6831 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6832 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6833 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6834 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6835 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6836 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SCD2Ev(ptr noundef nonnull align 4 dereferenceable(64) [[THIS1]]) #[[ATTR2]] 6837 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6838 // 6839 // 6840 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SCC2Ev 6841 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6842 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6843 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6844 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 6845 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 6846 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6847 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6848 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 6849 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 6850 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 6851 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 6852 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 6853 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 6854 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148(i64 [[TMP3]]) #[[ATTR2]] 6855 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 6856 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 6857 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 6858 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6859 // 6860 // 6861 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148 6862 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[A:%.*]]) #[[ATTR3:[0-9]+]] { 6863 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6864 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 6865 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 6866 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 6867 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 6868 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 6869 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 6870 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2:[0-9]+]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148.omp_outlined, i64 [[TMP1]]) 6871 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6872 // 6873 // 6874 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SCC1Ev_l148.omp_outlined 6875 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR3]] { 6876 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6877 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 6878 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 6879 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 6880 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 6881 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 6882 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 6883 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 6884 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 6885 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 6886 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 6887 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 6888 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 6889 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 6890 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 6891 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 6892 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 6893 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 6894 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 6895 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 6896 // CHECK-NTARGET-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) 6897 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 6898 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 6899 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 6900 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 6901 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 6902 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 6903 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 6904 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 6905 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 6906 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 6907 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 6908 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 6909 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 6910 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 6911 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 6912 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 6913 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 6914 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 6915 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 6916 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 6917 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 6918 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 6919 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 6920 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 6921 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 6922 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 8 6923 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 6924 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 6925 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 6926 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 6927 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 6928 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 6929 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 6930 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 6931 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 6932 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 6933 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 6934 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 6935 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 6936 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6937 // 6938 // 6939 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SCD2Ev 6940 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6941 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6942 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6943 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 6944 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6945 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6946 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 6947 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 6948 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 6949 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 6950 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 9 6951 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 6952 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 6953 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 6954 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 6955 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6956 // 6957 // 6958 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.5 6959 // CHECK-NTARGET-OMP-DEFAULT-SAME: () #[[ATTR0]] { 6960 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6961 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SDC1Ev(ptr noundef nonnull align 4 dereferenceable(128) @d1) 6962 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SDD1Ev, ptr @d1, ptr @__dso_handle) #[[ATTR2]] 6963 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6964 // 6965 // 6966 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SDC1Ev 6967 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6968 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6969 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6970 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6971 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6972 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SDC2Ev(ptr noundef nonnull align 4 dereferenceable(128) [[THIS1]]) 6973 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6974 // 6975 // 6976 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SDD1Ev 6977 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6978 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6979 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6980 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6981 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6982 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SDD2Ev(ptr noundef nonnull align 4 dereferenceable(128) [[THIS1]]) #[[ATTR2]] 6983 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 6984 // 6985 // 6986 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SDC2Ev 6987 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 6988 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 6989 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 6990 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 6991 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 6992 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 6993 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 6994 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 6995 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 6996 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 6997 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 11 6998 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 6999 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 7000 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 7001 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 7002 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7003 // 7004 // 7005 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SDD2Ev 7006 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7007 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7008 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7009 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7010 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7011 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7012 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7013 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7014 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7015 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7016 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7017 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 7018 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 7019 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174(i64 [[TMP3]]) #[[ATTR2]] 7020 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 7021 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 7022 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 7023 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7024 // 7025 // 7026 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174 7027 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[A:%.*]]) #[[ATTR3]] { 7028 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7029 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7030 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7031 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7032 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 7033 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 7034 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 7035 // CHECK-NTARGET-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, i64 [[TMP1]]) 7036 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7037 // 7038 // 7039 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SDD1Ev_l174.omp_outlined 7040 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR3]] { 7041 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7042 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 7043 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 7044 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7045 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 7046 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 7047 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 7048 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 7049 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 7050 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 7051 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 7052 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 7053 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 7054 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7055 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 7056 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 7057 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 7058 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 7059 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 7060 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7061 // CHECK-NTARGET-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) 7062 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7063 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 7064 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 7065 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 7066 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 7067 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 7068 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7069 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 7070 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 7071 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 7072 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 7073 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 7074 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 7075 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 7076 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 7077 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7078 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7079 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 7080 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 7081 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 7082 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7083 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 7084 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 7085 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 7086 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 7087 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 12 7088 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 7089 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 7090 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 7091 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 7092 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 7093 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7094 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 7095 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 7096 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 7097 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 7098 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 7099 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 7100 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 7101 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7102 // 7103 // 7104 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.6 7105 // CHECK-NTARGET-OMP-DEFAULT-SAME: () #[[ATTR0]] { 7106 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7107 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SEC1Ev(ptr noundef nonnull align 4 dereferenceable(256) @e1) 7108 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2SED1Ev, ptr @e1, ptr @__dso_handle) #[[ATTR2]] 7109 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7110 // 7111 // 7112 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SEC1Ev 7113 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7114 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7115 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7116 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7117 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7118 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SEC2Ev(ptr noundef nonnull align 4 dereferenceable(256) [[THIS1]]) 7119 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7120 // 7121 // 7122 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SED1Ev 7123 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7124 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7125 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7126 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7127 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7128 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SED2Ev(ptr noundef nonnull align 4 dereferenceable(256) [[THIS1]]) #[[ATTR2]] 7129 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7130 // 7131 // 7132 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SEC2Ev 7133 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7134 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7135 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7136 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7137 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7138 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7139 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7140 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7141 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7142 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7143 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7144 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 7145 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 7146 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192(i64 [[TMP3]]) #[[ATTR2]] 7147 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 7148 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 7149 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 7150 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7151 // 7152 // 7153 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192 7154 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[A:%.*]]) #[[ATTR3]] { 7155 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7156 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7157 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7158 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7159 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 7160 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 7161 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 7162 // CHECK-NTARGET-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, i64 [[TMP1]]) 7163 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7164 // 7165 // 7166 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SEC1Ev_l192.omp_outlined 7167 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR3]] { 7168 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7169 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 7170 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 7171 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7172 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 7173 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 7174 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 7175 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 7176 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 7177 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 7178 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 7179 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 7180 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 7181 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7182 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 7183 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 7184 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 7185 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 7186 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 7187 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7188 // CHECK-NTARGET-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) 7189 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7190 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 7191 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 7192 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 7193 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 7194 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 7195 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7196 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 7197 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 7198 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 7199 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 7200 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 7201 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 7202 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 7203 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 7204 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7205 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7206 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 7207 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 7208 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 7209 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7210 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 7211 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 7212 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 7213 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 7214 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 14 7215 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 7216 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 7217 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 7218 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 7219 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 7220 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7221 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 7222 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 7223 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 7224 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 7225 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 7226 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 7227 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 7228 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7229 // 7230 // 7231 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SED2Ev 7232 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7233 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7234 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7235 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7236 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7237 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7238 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7239 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7240 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7241 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7242 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7243 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 7244 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 7245 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199(i64 [[TMP3]]) #[[ATTR2]] 7246 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 7247 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 7248 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 7249 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7250 // 7251 // 7252 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199 7253 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[A:%.*]]) #[[ATTR3]] { 7254 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7255 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7256 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7257 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7258 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 7259 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 7260 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 7261 // CHECK-NTARGET-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, i64 [[TMP1]]) 7262 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7263 // 7264 // 7265 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SED1Ev_l199.omp_outlined 7266 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR3]] { 7267 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7268 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 7269 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 7270 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7271 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 7272 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 7273 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 7274 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 7275 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 7276 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 7277 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 7278 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 7279 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 7280 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7281 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 7282 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 7283 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 7284 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 7285 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 7286 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7287 // CHECK-NTARGET-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) 7288 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7289 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 7290 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 7291 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 7292 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 7293 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 7294 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7295 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 7296 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 7297 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 7298 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 7299 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 7300 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 7301 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 7302 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 7303 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7304 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7305 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 7306 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 7307 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 7308 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7309 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 7310 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 7311 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 7312 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 7313 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 15 7314 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 7315 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 7316 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 7317 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 7318 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 7319 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7320 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 7321 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 7322 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 7323 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 7324 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 7325 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 7326 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 7327 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7328 // 7329 // 7330 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.7 7331 // CHECK-NTARGET-OMP-DEFAULT-SAME: () #[[ATTR0]] { 7332 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7333 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2STILi100EEC1Ev(ptr noundef nonnull align 4 dereferenceable(912) @t1) 7334 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi100EED1Ev, ptr @t1, ptr @__dso_handle) #[[ATTR2]] 7335 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7336 // 7337 // 7338 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EEC1Ev 7339 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7340 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7341 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7342 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7343 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7344 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2STILi100EEC2Ev(ptr noundef nonnull align 4 dereferenceable(912) [[THIS1]]) 7345 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7346 // 7347 // 7348 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EED1Ev 7349 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7350 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7351 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7352 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7353 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7354 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2STILi100EED2Ev(ptr noundef nonnull align 4 dereferenceable(912) [[THIS1]]) #[[ATTR2]] 7355 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7356 // 7357 // 7358 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EEC2Ev 7359 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7360 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7361 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7362 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7363 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7364 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7365 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7366 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7367 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7368 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7369 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7370 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 7371 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 7372 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218(i64 [[TMP3]]) #[[ATTR2]] 7373 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 7374 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 7375 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 7376 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7377 // 7378 // 7379 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218 7380 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[A:%.*]]) #[[ATTR3]] { 7381 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7382 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7383 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7384 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7385 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 7386 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 7387 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 7388 // CHECK-NTARGET-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, i64 [[TMP1]]) 7389 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7390 // 7391 // 7392 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EEC1Ev_l218.omp_outlined 7393 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR3]] { 7394 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7395 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 7396 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 7397 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7398 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 7399 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 7400 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 7401 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 7402 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 7403 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 7404 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 7405 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 7406 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 7407 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7408 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 7409 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 7410 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 7411 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 7412 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 7413 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7414 // CHECK-NTARGET-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) 7415 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7416 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 7417 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 7418 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 7419 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 7420 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 7421 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7422 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 7423 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 7424 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 7425 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 7426 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 7427 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 7428 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 7429 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 7430 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7431 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7432 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 7433 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 7434 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 7435 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7436 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 7437 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 7438 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 7439 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 7440 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 117 7441 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 7442 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 7443 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 7444 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 7445 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 7446 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7447 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 7448 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 7449 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 7450 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 7451 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 7452 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 7453 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 7454 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7455 // 7456 // 7457 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EED2Ev 7458 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7459 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7460 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7461 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7462 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7463 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7464 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7465 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7466 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7467 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7468 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7469 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 7470 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 7471 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225(i64 [[TMP3]]) #[[ATTR2]] 7472 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 7473 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 7474 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 7475 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7476 // 7477 // 7478 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225 7479 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[A:%.*]]) #[[ATTR3]] { 7480 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7481 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7482 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7483 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7484 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 7485 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 7486 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 7487 // CHECK-NTARGET-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, i64 [[TMP1]]) 7488 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7489 // 7490 // 7491 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EED1Ev_l225.omp_outlined 7492 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR3]] { 7493 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7494 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 7495 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 7496 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7497 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 7498 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 7499 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 7500 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 7501 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 7502 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 7503 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 7504 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 7505 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 7506 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7507 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 7508 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 7509 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 7510 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 7511 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 7512 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7513 // CHECK-NTARGET-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) 7514 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7515 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 7516 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 7517 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 7518 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 7519 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 7520 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7521 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 7522 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 7523 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 7524 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 7525 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 7526 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 7527 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 7528 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 7529 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7530 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7531 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 7532 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 7533 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 7534 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7535 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 7536 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 7537 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 7538 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 7539 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 118 7540 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 7541 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 7542 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 7543 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 7544 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 7545 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7546 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 7547 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 7548 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 7549 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 7550 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 7551 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 7552 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 7553 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7554 // 7555 // 7556 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@__cxx_global_var_init.8 7557 // CHECK-NTARGET-OMP-DEFAULT-SAME: () #[[ATTR0]] { 7558 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7559 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2STILi1000EEC1Ev(ptr noundef nonnull align 4 dereferenceable(4512) @t2) 7560 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = call i32 @__cxa_atexit(ptr @_ZN2STILi1000EED1Ev, ptr @t2, ptr @__dso_handle) #[[ATTR2]] 7561 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7562 // 7563 // 7564 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EEC1Ev 7565 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7566 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7567 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7568 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7569 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7570 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2STILi1000EEC2Ev(ptr noundef nonnull align 4 dereferenceable(4512) [[THIS1]]) 7571 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7572 // 7573 // 7574 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EED1Ev 7575 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7576 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7577 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7578 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7579 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7580 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2STILi1000EED2Ev(ptr noundef nonnull align 4 dereferenceable(4512) [[THIS1]]) #[[ATTR2]] 7581 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7582 // 7583 // 7584 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EEC2Ev 7585 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7586 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7587 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7588 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7589 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7590 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7591 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7592 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7593 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7594 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7595 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7596 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 7597 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 7598 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218(i64 [[TMP3]]) #[[ATTR2]] 7599 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 7600 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 7601 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 7602 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7603 // 7604 // 7605 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218 7606 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[A:%.*]]) #[[ATTR3]] { 7607 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7608 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7609 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7610 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7611 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 7612 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 7613 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 7614 // CHECK-NTARGET-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, i64 [[TMP1]]) 7615 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7616 // 7617 // 7618 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EEC1Ev_l218.omp_outlined 7619 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR3]] { 7620 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7621 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 7622 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 7623 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7624 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 7625 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 7626 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 7627 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 7628 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 7629 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 7630 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 7631 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 7632 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 7633 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7634 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 7635 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 7636 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 7637 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 7638 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 7639 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7640 // CHECK-NTARGET-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) 7641 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7642 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 7643 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 7644 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 7645 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 7646 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 7647 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7648 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 7649 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 7650 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 7651 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 7652 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 7653 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 7654 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 7655 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 7656 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7657 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7658 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 7659 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 7660 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 7661 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7662 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 7663 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 7664 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 7665 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 7666 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1017 7667 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 7668 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 7669 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 7670 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 7671 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 7672 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7673 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 7674 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 7675 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 7676 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 7677 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 7678 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 7679 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 7680 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7681 // 7682 // 7683 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EED2Ev 7684 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat { 7685 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7686 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7687 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7688 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7689 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7690 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7691 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7692 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7693 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7694 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7695 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 7696 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 7697 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225(i64 [[TMP3]]) #[[ATTR2]] 7698 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 7699 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 7700 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 7701 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7702 // 7703 // 7704 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225 7705 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[A:%.*]]) #[[ATTR3]] { 7706 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7707 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7708 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7709 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7710 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 7711 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 7712 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 7713 // CHECK-NTARGET-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, i64 [[TMP1]]) 7714 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7715 // 7716 // 7717 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EED1Ev_l225.omp_outlined 7718 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR3]] { 7719 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7720 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 7721 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 7722 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 7723 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 7724 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 7725 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 7726 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 7727 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 7728 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 7729 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 7730 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 7731 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 7732 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 7733 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 7734 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 7735 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 7736 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 7737 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 7738 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7739 // CHECK-NTARGET-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) 7740 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7741 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 7742 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 7743 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 7744 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 7745 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 7746 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7747 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 7748 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 7749 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 7750 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 7751 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 7752 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 7753 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 7754 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 7755 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7756 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7757 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 7758 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 7759 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 7760 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7761 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 7762 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 7763 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 7764 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 7765 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1018 7766 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 7767 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 7768 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 7769 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 7770 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 7771 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 7772 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 7773 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 7774 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 7775 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 7776 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 7777 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 7778 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 7779 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7780 // 7781 // 7782 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_Z3bari 7783 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i32 noundef signext [[A:%.*]]) #[[ATTR1]] { 7784 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7785 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 7786 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[R:%.*]] = alloca i32, align 4 7787 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[R_CASTED:%.*]] = alloca i64, align 8 7788 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 7789 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 7790 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[R]], align 4 7791 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SA3fooEv(ptr noundef nonnull align 4 dereferenceable(16) @_ZL2a1) 7792 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SA3fooEv(ptr noundef nonnull align 4 dereferenceable(16) @a2) 7793 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SB3fooEv(ptr noundef nonnull align 4 dereferenceable(32) @b1) 7794 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SB3fooEv(ptr noundef nonnull align 4 dereferenceable(32) @b2) 7795 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SC3fooEv(ptr noundef nonnull align 4 dereferenceable(64) @_ZL2c1) 7796 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SD3fooEv(ptr noundef nonnull align 4 dereferenceable(128) @d1) 7797 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2SE3fooEv(ptr noundef nonnull align 4 dereferenceable(256) @e1) 7798 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2STILi100EE3fooEv(ptr noundef nonnull align 4 dereferenceable(912) @t1) 7799 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @_ZN2STILi1000EE3fooEv(ptr noundef nonnull align 4 dereferenceable(4512) @t2) 7800 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[R]], align 4 7801 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[R_CASTED]], align 4 7802 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i64, ptr [[R_CASTED]], align 8 7803 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267(i64 [[TMP2]]) #[[ATTR2]] 7804 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[R]], align 4 7805 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 7806 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 4 7807 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP3]], [[TMP5]] 7808 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret i32 [[ADD]] 7809 // 7810 // 7811 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SA3fooEv 7812 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(16) [[THIS:%.*]]) #[[ATTR1]] comdat { 7813 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7814 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7815 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7816 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7817 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7818 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7819 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7820 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7821 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7822 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 1 7823 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 7824 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 7825 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 7826 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 7827 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7828 // 7829 // 7830 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SB3fooEv 7831 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(32) [[THIS:%.*]]) #[[ATTR1]] comdat { 7832 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7833 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7834 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7835 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7836 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7837 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7838 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7839 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7840 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7841 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7842 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 7843 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 7844 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122(i64 [[TMP3]]) #[[ATTR2]] 7845 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 7846 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 7847 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 7848 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7849 // 7850 // 7851 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SC3fooEv 7852 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(64) [[THIS:%.*]]) #[[ATTR1]] comdat { 7853 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7854 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7855 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7856 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7857 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7858 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7859 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7860 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7861 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7862 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 7 7863 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 7864 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 7865 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 7866 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 7867 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7868 // 7869 // 7870 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SD3fooEv 7871 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(128) [[THIS:%.*]]) #[[ATTR1]] comdat { 7872 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7873 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7874 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7875 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7876 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7877 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7878 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7879 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7880 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7881 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 10 7882 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[A]], align 4 7883 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[A]], align 4 7884 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load ptr, ptr @R, align 8 7885 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP3]], ptr [[TMP4]], align 4 7886 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7887 // 7888 // 7889 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2SE3fooEv 7890 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(256) [[THIS:%.*]]) #[[ATTR1]] comdat { 7891 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7892 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7893 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7894 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7895 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7896 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7897 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7898 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7899 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7900 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7901 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 7902 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 7903 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185(i64 [[TMP3]]) #[[ATTR2]] 7904 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 7905 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 7906 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 7907 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7908 // 7909 // 7910 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi100EE3fooEv 7911 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(912) [[THIS:%.*]]) #[[ATTR1]] comdat { 7912 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7913 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7914 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7915 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7916 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7917 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7918 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7919 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7920 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7921 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7922 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 7923 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 7924 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211(i64 [[TMP3]]) #[[ATTR2]] 7925 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 7926 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 7927 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 7928 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7929 // 7930 // 7931 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_ZN2STILi1000EE3fooEv 7932 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noundef nonnull align 4 dereferenceable(4512) [[THIS:%.*]]) #[[ATTR1]] comdat { 7933 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7934 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8 7935 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A:%.*]] = alloca i32, align 4 7936 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 7937 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8 7938 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8 7939 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr @R, align 8 7940 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7941 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP1]], ptr [[A]], align 4 7942 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4 7943 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP2]], ptr [[A_CASTED]], align 4 7944 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8 7945 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211(i64 [[TMP3]]) #[[ATTR2]] 7946 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 4 7947 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load ptr, ptr @R, align 8 7948 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[TMP5]], align 4 7949 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7950 // 7951 // 7952 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267 7953 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[R:%.*]]) #[[ATTR3]] { 7954 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7955 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[R_ADDR:%.*]] = alloca i64, align 8 7956 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[R_CASTED:%.*]] = alloca i64, align 8 7957 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[R]], ptr [[R_ADDR]], align 8 7958 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[R_ADDR]], align 4 7959 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[R_CASTED]], align 4 7960 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[R_CASTED]], align 8 7961 // CHECK-NTARGET-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, i64 [[TMP1]]) 7962 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 7963 // 7964 // 7965 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3bari_l267.omp_outlined 7966 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[R:%.*]]) #[[ATTR3]] { 7967 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 7968 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 7969 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 7970 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[R_ADDR:%.*]] = alloca i64, align 8 7971 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 7972 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 7973 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 7974 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 7975 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 7976 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 7977 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 7978 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 7979 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 7980 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[R]], ptr [[R_ADDR]], align 8 7981 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 7982 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 7983 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 7984 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 7985 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 7986 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 7987 // CHECK-NTARGET-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) 7988 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7989 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 7990 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 7991 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 7992 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 7993 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 7994 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 7995 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 7996 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 7997 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 7998 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 7999 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 8000 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 8001 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 8002 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 8003 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8004 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8005 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 8006 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 8007 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 8008 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8009 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 8010 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 8011 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 8012 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[R_ADDR]], align 4 8013 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[INC:%.*]] = add nsw i32 [[TMP8]], 1 8014 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[INC]], ptr [[R_ADDR]], align 4 8015 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 8016 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 8017 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 8018 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 8019 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8020 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP9]], 1 8021 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[DOTOMP_IV]], align 4 8022 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 8023 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 8024 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 8025 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 8026 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 8027 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 8028 // 8029 // 8030 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122 8031 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[A:%.*]]) #[[ATTR3]] { 8032 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 8033 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 8034 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 8035 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 8036 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 8037 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 8038 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 8039 // CHECK-NTARGET-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, i64 [[TMP1]]) 8040 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 8041 // 8042 // 8043 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SB3fooEv_l122.omp_outlined 8044 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR3]] { 8045 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 8046 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 8047 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 8048 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 8049 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 8050 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 8051 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 8052 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 8053 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 8054 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 8055 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 8056 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 8057 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 8058 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 8059 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 8060 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 8061 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 8062 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 8063 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 8064 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 8065 // CHECK-NTARGET-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) 8066 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8067 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 8068 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 8069 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 8070 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 8071 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 8072 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8073 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 8074 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 8075 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 8076 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 8077 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 8078 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 8079 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 8080 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 8081 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8082 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8083 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 8084 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 8085 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 8086 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8087 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 8088 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 8089 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 8090 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 8091 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 4 8092 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 8093 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 8094 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 8095 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 8096 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 8097 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8098 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 8099 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 8100 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 8101 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 8102 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 8103 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 8104 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 8105 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 8106 // 8107 // 8108 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185 8109 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[A:%.*]]) #[[ATTR3]] { 8110 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 8111 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 8112 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 8113 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 8114 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 8115 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 8116 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 8117 // CHECK-NTARGET-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, i64 [[TMP1]]) 8118 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 8119 // 8120 // 8121 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SE3fooEv_l185.omp_outlined 8122 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR3]] { 8123 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 8124 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 8125 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 8126 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 8127 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 8128 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 8129 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 8130 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 8131 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 8132 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 8133 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 8134 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 8135 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 8136 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 8137 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 8138 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 8139 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 8140 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 8141 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 8142 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 8143 // CHECK-NTARGET-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) 8144 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8145 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 8146 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 8147 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 8148 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 8149 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 8150 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8151 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 8152 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 8153 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 8154 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 8155 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 8156 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 8157 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 8158 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 8159 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8160 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8161 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 8162 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 8163 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 8164 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8165 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 8166 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 8167 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 8168 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 8169 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 13 8170 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 8171 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 8172 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 8173 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 8174 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 8175 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8176 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 8177 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 8178 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 8179 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 8180 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 8181 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 8182 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 8183 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 8184 // 8185 // 8186 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211 8187 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[A:%.*]]) #[[ATTR3]] { 8188 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 8189 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 8190 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 8191 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 8192 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 8193 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 8194 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 8195 // CHECK-NTARGET-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, i64 [[TMP1]]) 8196 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 8197 // 8198 // 8199 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi100EE3fooEv_l211.omp_outlined 8200 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR3]] { 8201 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 8202 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 8203 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 8204 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 8205 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 8206 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 8207 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 8208 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 8209 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 8210 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 8211 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 8212 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 8213 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 8214 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 8215 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 8216 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 8217 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 8218 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 8219 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 8220 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 8221 // CHECK-NTARGET-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) 8222 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8223 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 8224 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 8225 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 8226 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 8227 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 8228 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8229 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 8230 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 8231 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 8232 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 8233 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 8234 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 8235 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 8236 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 8237 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8238 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8239 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 8240 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 8241 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 8242 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8243 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 8244 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 8245 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 8246 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 8247 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 116 8248 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 8249 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 8250 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 8251 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 8252 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 8253 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8254 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 8255 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 8256 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 8257 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 8258 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 8259 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 8260 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 8261 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 8262 // 8263 // 8264 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211 8265 // CHECK-NTARGET-OMP-DEFAULT-SAME: (i64 noundef [[A:%.*]]) #[[ATTR3]] { 8266 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 8267 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 8268 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_CASTED:%.*]] = alloca i64, align 8 8269 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 8270 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4 8271 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP0]], ptr [[A_CASTED]], align 4 8272 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i64, ptr [[A_CASTED]], align 8 8273 // CHECK-NTARGET-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, i64 [[TMP1]]) 8274 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 8275 // 8276 // 8277 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STILi1000EE3fooEv_l211.omp_outlined 8278 // CHECK-NTARGET-OMP-DEFAULT-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[A:%.*]]) #[[ATTR3]] { 8279 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 8280 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8 8281 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8 8282 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 8283 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 8284 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP:%.*]] = alloca i32, align 4 8285 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 8286 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 8287 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 8288 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 8289 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[I:%.*]] = alloca i32, align 4 8290 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8 8291 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8 8292 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8 8293 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_LB]], align 4 8294 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 9, ptr [[DOTOMP_UB]], align 4 8295 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 1, ptr [[DOTOMP_STRIDE]], align 4 8296 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 0, ptr [[DOTOMP_IS_LAST]], align 4 8297 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8 8298 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4 8299 // CHECK-NTARGET-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) 8300 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8301 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9 8302 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 8303 // CHECK-NTARGET-OMP-DEFAULT: cond.true: 8304 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END:%.*]] 8305 // CHECK-NTARGET-OMP-DEFAULT: cond.false: 8306 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8307 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[COND_END]] 8308 // CHECK-NTARGET-OMP-DEFAULT: cond.end: 8309 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 8310 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[COND]], ptr [[DOTOMP_UB]], align 4 8311 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4 8312 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4 8313 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 8314 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.cond: 8315 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8316 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4 8317 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 8318 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 8319 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.body: 8320 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8321 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 8322 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 8323 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD]], ptr [[I]], align 4 8324 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP8:%.*]] = load i32, ptr [[A_ADDR]], align 4 8325 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP8]], 1016 8326 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD2]], ptr [[A_ADDR]], align 4 8327 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 8328 // CHECK-NTARGET-OMP-DEFAULT: omp.body.continue: 8329 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 8330 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.inc: 8331 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4 8332 // CHECK-NTARGET-OMP-DEFAULT-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], 1 8333 // CHECK-NTARGET-OMP-DEFAULT-NEXT: store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4 8334 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_INNER_FOR_COND]] 8335 // CHECK-NTARGET-OMP-DEFAULT: omp.inner.for.end: 8336 // CHECK-NTARGET-OMP-DEFAULT-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 8337 // CHECK-NTARGET-OMP-DEFAULT: omp.loop.exit: 8338 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]]) 8339 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 8340 // 8341 // 8342 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_GLOBAL__I_000500 8343 // CHECK-NTARGET-OMP-DEFAULT-SAME: () #[[ATTR0]] { 8344 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 8345 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__cxx_global_var_init() 8346 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.2() 8347 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 8348 // 8349 // 8350 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_GLOBAL__I_000501 8351 // CHECK-NTARGET-OMP-DEFAULT-SAME: () #[[ATTR0]] { 8352 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 8353 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.3() 8354 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 8355 // 8356 // 8357 // CHECK-NTARGET-OMP-DEFAULT-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_target_parallel_generic_loop_codegen_1.cpp 8358 // CHECK-NTARGET-OMP-DEFAULT-SAME: () #[[ATTR0]] { 8359 // CHECK-NTARGET-OMP-DEFAULT-NEXT: entry: 8360 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.1() 8361 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.4() 8362 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.5() 8363 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.6() 8364 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.7() 8365 // CHECK-NTARGET-OMP-DEFAULT-NEXT: call void @__cxx_global_var_init.8() 8366 // CHECK-NTARGET-OMP-DEFAULT-NEXT: ret void 8367 // 8368 //// NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 8369 // TCHECK: {{.*}} 8370