1; RUN: opt -vector-library=SVML -loop-vectorize -force-vector-width=4 -force-vector-interleave=1 -mattr=avx -S < %s | FileCheck %s 2 3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 4target triple = "x86_64-unknown-linux-gnu" 5 6declare double @sin(double) #0 7declare float @sinf(float) #0 8declare double @llvm.sin.f64(double) #0 9declare float @llvm.sin.f32(float) #0 10 11declare double @cos(double) #0 12declare float @cosf(float) #0 13declare double @llvm.cos.f64(double) #0 14declare float @llvm.cos.f32(float) #0 15 16declare double @pow(double, double) #0 17declare float @powf(float, float) #0 18declare double @llvm.pow.f64(double, double) #0 19declare float @llvm.pow.f32(float, float) #0 20 21declare double @exp(double) #0 22declare float @expf(float) #0 23declare double @llvm.exp.f64(double) #0 24declare float @llvm.exp.f32(float) #0 25 26declare double @log(double) #0 27declare float @logf(float) #0 28declare double @llvm.log.f64(double) #0 29declare float @llvm.log.f32(float) #0 30 31declare double @exp2(double) #0 32declare float @exp2f(float) #0 33declare double @llvm.exp2.f64(double) #0 34declare float @llvm.exp2.f32(float) #0 35 36define void @sin_f64(double* nocapture %varray) { 37; CHECK-LABEL: @sin_f64( 38; CHECK: [[TMP5:%.*]] = call <4 x double> @__svml_sin4(<4 x double> [[TMP4:%.*]]) 39; CHECK: ret void 40; 41entry: 42 br label %for.body 43 44for.body: 45 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 46 %tmp = trunc i64 %iv to i32 47 %conv = sitofp i32 %tmp to double 48 %call = tail call double @sin(double %conv) 49 %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv 50 store double %call, double* %arrayidx, align 4 51 %iv.next = add nuw nsw i64 %iv, 1 52 %exitcond = icmp eq i64 %iv.next, 1000 53 br i1 %exitcond, label %for.end, label %for.body 54 55for.end: 56 ret void 57} 58 59define void @sin_f32(float* nocapture %varray) { 60; CHECK-LABEL: @sin_f32( 61; CHECK: [[TMP5:%.*]] = call <4 x float> @__svml_sinf4(<4 x float> [[TMP4:%.*]]) 62; CHECK: ret void 63; 64entry: 65 br label %for.body 66 67for.body: 68 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 69 %tmp = trunc i64 %iv to i32 70 %conv = sitofp i32 %tmp to float 71 %call = tail call float @sinf(float %conv) 72 %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv 73 store float %call, float* %arrayidx, align 4 74 %iv.next = add nuw nsw i64 %iv, 1 75 %exitcond = icmp eq i64 %iv.next, 1000 76 br i1 %exitcond, label %for.end, label %for.body 77 78for.end: 79 ret void 80} 81 82define void @sin_f64_intrinsic(double* nocapture %varray) { 83; CHECK-LABEL: @sin_f64_intrinsic( 84; CHECK: [[TMP5:%.*]] = call <4 x double> @__svml_sin4(<4 x double> [[TMP4:%.*]]) 85; CHECK: ret void 86; 87entry: 88 br label %for.body 89 90for.body: 91 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 92 %tmp = trunc i64 %iv to i32 93 %conv = sitofp i32 %tmp to double 94 %call = tail call double @llvm.sin.f64(double %conv) 95 %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv 96 store double %call, double* %arrayidx, align 4 97 %iv.next = add nuw nsw i64 %iv, 1 98 %exitcond = icmp eq i64 %iv.next, 1000 99 br i1 %exitcond, label %for.end, label %for.body 100 101for.end: 102 ret void 103} 104 105define void @sin_f32_intrinsic(float* nocapture %varray) { 106; CHECK-LABEL: @sin_f32_intrinsic( 107; CHECK: [[TMP5:%.*]] = call <4 x float> @__svml_sinf4(<4 x float> [[TMP4:%.*]]) 108; CHECK: ret void 109; 110entry: 111 br label %for.body 112 113for.body: 114 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 115 %tmp = trunc i64 %iv to i32 116 %conv = sitofp i32 %tmp to float 117 %call = tail call float @llvm.sin.f32(float %conv) 118 %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv 119 store float %call, float* %arrayidx, align 4 120 %iv.next = add nuw nsw i64 %iv, 1 121 %exitcond = icmp eq i64 %iv.next, 1000 122 br i1 %exitcond, label %for.end, label %for.body 123 124for.end: 125 ret void 126} 127 128define void @cos_f64(double* nocapture %varray) { 129; CHECK-LABEL: @cos_f64( 130; CHECK: [[TMP5:%.*]] = call <4 x double> @__svml_cos4(<4 x double> [[TMP4:%.*]]) 131; CHECK: ret void 132; 133entry: 134 br label %for.body 135 136for.body: 137 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 138 %tmp = trunc i64 %iv to i32 139 %conv = sitofp i32 %tmp to double 140 %call = tail call double @cos(double %conv) 141 %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv 142 store double %call, double* %arrayidx, align 4 143 %iv.next = add nuw nsw i64 %iv, 1 144 %exitcond = icmp eq i64 %iv.next, 1000 145 br i1 %exitcond, label %for.end, label %for.body 146 147for.end: 148 ret void 149} 150 151define void @cos_f32(float* nocapture %varray) { 152; CHECK-LABEL: @cos_f32( 153; CHECK: [[TMP5:%.*]] = call <4 x float> @__svml_cosf4(<4 x float> [[TMP4:%.*]]) 154; CHECK: ret void 155; 156entry: 157 br label %for.body 158 159for.body: 160 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 161 %tmp = trunc i64 %iv to i32 162 %conv = sitofp i32 %tmp to float 163 %call = tail call float @cosf(float %conv) 164 %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv 165 store float %call, float* %arrayidx, align 4 166 %iv.next = add nuw nsw i64 %iv, 1 167 %exitcond = icmp eq i64 %iv.next, 1000 168 br i1 %exitcond, label %for.end, label %for.body 169 170for.end: 171 ret void 172} 173 174define void @cos_f64_intrinsic(double* nocapture %varray) { 175; CHECK-LABEL: @cos_f64_intrinsic( 176; CHECK: [[TMP5:%.*]] = call <4 x double> @__svml_cos4(<4 x double> [[TMP4:%.*]]) 177; CHECK: ret void 178; 179entry: 180 br label %for.body 181 182for.body: 183 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 184 %tmp = trunc i64 %iv to i32 185 %conv = sitofp i32 %tmp to double 186 %call = tail call double @llvm.cos.f64(double %conv) 187 %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv 188 store double %call, double* %arrayidx, align 4 189 %iv.next = add nuw nsw i64 %iv, 1 190 %exitcond = icmp eq i64 %iv.next, 1000 191 br i1 %exitcond, label %for.end, label %for.body 192 193for.end: 194 ret void 195} 196 197define void @cos_f32_intrinsic(float* nocapture %varray) { 198; CHECK-LABEL: @cos_f32_intrinsic( 199; CHECK: [[TMP5:%.*]] = call <4 x float> @__svml_cosf4(<4 x float> [[TMP4:%.*]]) 200; CHECK: ret void 201; 202entry: 203 br label %for.body 204 205for.body: 206 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 207 %tmp = trunc i64 %iv to i32 208 %conv = sitofp i32 %tmp to float 209 %call = tail call float @llvm.cos.f32(float %conv) 210 %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv 211 store float %call, float* %arrayidx, align 4 212 %iv.next = add nuw nsw i64 %iv, 1 213 %exitcond = icmp eq i64 %iv.next, 1000 214 br i1 %exitcond, label %for.end, label %for.body 215 216for.end: 217 ret void 218} 219 220define void @pow_f64(double* nocapture %varray, double* nocapture readonly %exp) { 221; CHECK-LABEL: @pow_f64( 222; CHECK: [[TMP8:%.*]] = call <4 x double> @__svml_pow4(<4 x double> [[TMP4:%.*]], <4 x double> [[WIDE_LOAD:%.*]]) 223; CHECK: ret void 224; 225entry: 226 br label %for.body 227 228for.body: 229 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 230 %tmp = trunc i64 %iv to i32 231 %conv = sitofp i32 %tmp to double 232 %arrayidx = getelementptr inbounds double, double* %exp, i64 %iv 233 %tmp1 = load double, double* %arrayidx, align 4 234 %tmp2 = tail call double @pow(double %conv, double %tmp1) 235 %arrayidx2 = getelementptr inbounds double, double* %varray, i64 %iv 236 store double %tmp2, double* %arrayidx2, align 4 237 %iv.next = add nuw nsw i64 %iv, 1 238 %exitcond = icmp eq i64 %iv.next, 1000 239 br i1 %exitcond, label %for.end, label %for.body 240 241for.end: 242 ret void 243} 244 245define void @pow_f64_intrinsic(double* nocapture %varray, double* nocapture readonly %exp) { 246; CHECK-LABEL: @pow_f64_intrinsic( 247; CHECK: [[TMP8:%.*]] = call <4 x double> @__svml_pow4(<4 x double> [[TMP4:%.*]], <4 x double> [[WIDE_LOAD:%.*]]) 248; CHECK: ret void 249; 250entry: 251 br label %for.body 252 253for.body: 254 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 255 %tmp = trunc i64 %iv to i32 256 %conv = sitofp i32 %tmp to double 257 %arrayidx = getelementptr inbounds double, double* %exp, i64 %iv 258 %tmp1 = load double, double* %arrayidx, align 4 259 %tmp2 = tail call double @llvm.pow.f64(double %conv, double %tmp1) 260 %arrayidx2 = getelementptr inbounds double, double* %varray, i64 %iv 261 store double %tmp2, double* %arrayidx2, align 4 262 %iv.next = add nuw nsw i64 %iv, 1 263 %exitcond = icmp eq i64 %iv.next, 1000 264 br i1 %exitcond, label %for.end, label %for.body 265 266for.end: 267 ret void 268} 269 270define void @pow_f32(float* nocapture %varray, float* nocapture readonly %exp) { 271; CHECK-LABEL: @pow_f32( 272; CHECK: [[TMP8:%.*]] = call <4 x float> @__svml_powf4(<4 x float> [[TMP4:%.*]], <4 x float> [[WIDE_LOAD:%.*]]) 273; CHECK: ret void 274; 275entry: 276 br label %for.body 277 278for.body: 279 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 280 %tmp = trunc i64 %iv to i32 281 %conv = sitofp i32 %tmp to float 282 %arrayidx = getelementptr inbounds float, float* %exp, i64 %iv 283 %tmp1 = load float, float* %arrayidx, align 4 284 %tmp2 = tail call float @powf(float %conv, float %tmp1) 285 %arrayidx2 = getelementptr inbounds float, float* %varray, i64 %iv 286 store float %tmp2, float* %arrayidx2, align 4 287 %iv.next = add nuw nsw i64 %iv, 1 288 %exitcond = icmp eq i64 %iv.next, 1000 289 br i1 %exitcond, label %for.end, label %for.body 290 291for.end: 292 ret void 293} 294 295define void @pow_f32_intrinsic(float* nocapture %varray, float* nocapture readonly %exp) { 296; CHECK-LABEL: @pow_f32_intrinsic( 297; CHECK: [[TMP8:%.*]] = call <4 x float> @__svml_powf4(<4 x float> [[TMP4:%.*]], <4 x float> [[WIDE_LOAD:%.*]]) 298; CHECK: ret void 299; 300entry: 301 br label %for.body 302 303for.body: 304 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 305 %tmp = trunc i64 %iv to i32 306 %conv = sitofp i32 %tmp to float 307 %arrayidx = getelementptr inbounds float, float* %exp, i64 %iv 308 %tmp1 = load float, float* %arrayidx, align 4 309 %tmp2 = tail call float @llvm.pow.f32(float %conv, float %tmp1) 310 %arrayidx2 = getelementptr inbounds float, float* %varray, i64 %iv 311 store float %tmp2, float* %arrayidx2, align 4 312 %iv.next = add nuw nsw i64 %iv, 1 313 %exitcond = icmp eq i64 %iv.next, 1000 314 br i1 %exitcond, label %for.end, label %for.body 315 316for.end: 317 ret void 318} 319 320define void @exp_f64(double* nocapture %varray) { 321; CHECK-LABEL: @exp_f64( 322; CHECK: [[TMP5:%.*]] = call <4 x double> @__svml_exp4(<4 x double> [[TMP4:%.*]]) 323; CHECK: ret void 324; 325entry: 326 br label %for.body 327 328for.body: 329 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 330 %tmp = trunc i64 %iv to i32 331 %conv = sitofp i32 %tmp to double 332 %call = tail call double @exp(double %conv) 333 %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv 334 store double %call, double* %arrayidx, align 4 335 %iv.next = add nuw nsw i64 %iv, 1 336 %exitcond = icmp eq i64 %iv.next, 1000 337 br i1 %exitcond, label %for.end, label %for.body 338 339for.end: 340 ret void 341} 342 343define void @exp_f32(float* nocapture %varray) { 344; CHECK-LABEL: @exp_f32( 345; CHECK: [[TMP5:%.*]] = call <4 x float> @__svml_expf4(<4 x float> [[TMP4:%.*]]) 346; CHECK: ret void 347; 348entry: 349 br label %for.body 350 351for.body: 352 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 353 %tmp = trunc i64 %iv to i32 354 %conv = sitofp i32 %tmp to float 355 %call = tail call float @expf(float %conv) 356 %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv 357 store float %call, float* %arrayidx, align 4 358 %iv.next = add nuw nsw i64 %iv, 1 359 %exitcond = icmp eq i64 %iv.next, 1000 360 br i1 %exitcond, label %for.end, label %for.body 361 362for.end: 363 ret void 364} 365 366define void @exp_f64_intrinsic(double* nocapture %varray) { 367; CHECK-LABEL: @exp_f64_intrinsic( 368; CHECK: [[TMP5:%.*]] = call <4 x double> @__svml_exp4(<4 x double> [[TMP4:%.*]]) 369; CHECK: ret void 370; 371entry: 372 br label %for.body 373 374for.body: 375 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 376 %tmp = trunc i64 %iv to i32 377 %conv = sitofp i32 %tmp to double 378 %call = tail call double @llvm.exp.f64(double %conv) 379 %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv 380 store double %call, double* %arrayidx, align 4 381 %iv.next = add nuw nsw i64 %iv, 1 382 %exitcond = icmp eq i64 %iv.next, 1000 383 br i1 %exitcond, label %for.end, label %for.body 384 385for.end: 386 ret void 387} 388 389define void @exp_f32_intrinsic(float* nocapture %varray) { 390; CHECK-LABEL: @exp_f32_intrinsic( 391; CHECK: [[TMP5:%.*]] = call <4 x float> @__svml_expf4(<4 x float> [[TMP4:%.*]]) 392; CHECK: ret void 393; 394entry: 395 br label %for.body 396 397for.body: 398 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 399 %tmp = trunc i64 %iv to i32 400 %conv = sitofp i32 %tmp to float 401 %call = tail call float @llvm.exp.f32(float %conv) 402 %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv 403 store float %call, float* %arrayidx, align 4 404 %iv.next = add nuw nsw i64 %iv, 1 405 %exitcond = icmp eq i64 %iv.next, 1000 406 br i1 %exitcond, label %for.end, label %for.body 407 408for.end: 409 ret void 410} 411 412define void @log_f64(double* nocapture %varray) { 413; CHECK-LABEL: @log_f64( 414; CHECK: [[TMP5:%.*]] = call <4 x double> @__svml_log4(<4 x double> [[TMP4:%.*]]) 415; CHECK: ret void 416; 417entry: 418 br label %for.body 419 420for.body: 421 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 422 %tmp = trunc i64 %iv to i32 423 %conv = sitofp i32 %tmp to double 424 %call = tail call double @log(double %conv) 425 %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv 426 store double %call, double* %arrayidx, align 4 427 %iv.next = add nuw nsw i64 %iv, 1 428 %exitcond = icmp eq i64 %iv.next, 1000 429 br i1 %exitcond, label %for.end, label %for.body 430 431for.end: 432 ret void 433} 434 435define void @log_f32(float* nocapture %varray) { 436; CHECK-LABEL: @log_f32( 437; CHECK: [[TMP5:%.*]] = call <4 x float> @__svml_logf4(<4 x float> [[TMP4:%.*]]) 438; CHECK: ret void 439; 440entry: 441 br label %for.body 442 443for.body: 444 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 445 %tmp = trunc i64 %iv to i32 446 %conv = sitofp i32 %tmp to float 447 %call = tail call float @logf(float %conv) 448 %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv 449 store float %call, float* %arrayidx, align 4 450 %iv.next = add nuw nsw i64 %iv, 1 451 %exitcond = icmp eq i64 %iv.next, 1000 452 br i1 %exitcond, label %for.end, label %for.body 453 454for.end: 455 ret void 456} 457 458define void @log_f64_intrinsic(double* nocapture %varray) { 459; CHECK-LABEL: @log_f64_intrinsic( 460; CHECK: [[TMP5:%.*]] = call <4 x double> @__svml_log4(<4 x double> [[TMP4:%.*]]) 461; CHECK: ret void 462; 463entry: 464 br label %for.body 465 466for.body: 467 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 468 %tmp = trunc i64 %iv to i32 469 %conv = sitofp i32 %tmp to double 470 %call = tail call double @llvm.log.f64(double %conv) 471 %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv 472 store double %call, double* %arrayidx, align 4 473 %iv.next = add nuw nsw i64 %iv, 1 474 %exitcond = icmp eq i64 %iv.next, 1000 475 br i1 %exitcond, label %for.end, label %for.body 476 477for.end: 478 ret void 479} 480 481define void @log_f32_intrinsic(float* nocapture %varray) { 482; CHECK-LABEL: @log_f32_intrinsic( 483; CHECK: [[TMP5:%.*]] = call <4 x float> @__svml_logf4(<4 x float> [[TMP4:%.*]]) 484; CHECK: ret void 485; 486entry: 487 br label %for.body 488 489for.body: 490 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 491 %tmp = trunc i64 %iv to i32 492 %conv = sitofp i32 %tmp to float 493 %call = tail call float @llvm.log.f32(float %conv) 494 %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv 495 store float %call, float* %arrayidx, align 4 496 %iv.next = add nuw nsw i64 %iv, 1 497 %exitcond = icmp eq i64 %iv.next, 1000 498 br i1 %exitcond, label %for.end, label %for.body 499 500for.end: 501 ret void 502} 503 504define void @exp2_f64(double* nocapture %varray) { 505; CHECK-LABEL: @exp2_f64( 506; CHECK: [[TMP5:%.*]] = call <4 x double> @__svml_exp24(<4 x double> [[TMP4:%.*]]) 507; CHECK: ret void 508; 509entry: 510 br label %for.body 511 512for.body: 513 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 514 %tmp = trunc i64 %iv to i32 515 %conv = sitofp i32 %tmp to double 516 %call = tail call double @exp2(double %conv) 517 %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv 518 store double %call, double* %arrayidx, align 4 519 %iv.next = add nuw nsw i64 %iv, 1 520 %exitcond = icmp eq i64 %iv.next, 1000 521 br i1 %exitcond, label %for.end, label %for.body 522 523for.end: 524 ret void 525} 526 527define void @exp2_f32(float* nocapture %varray) { 528; CHECK-LABEL: @exp2_f32( 529; CHECK: [[TMP5:%.*]] = call <4 x float> @__svml_exp2f4(<4 x float> [[TMP4:%.*]]) 530; CHECK: ret void 531; 532entry: 533 br label %for.body 534 535for.body: 536 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 537 %tmp = trunc i64 %iv to i32 538 %conv = sitofp i32 %tmp to float 539 %call = tail call float @exp2f(float %conv) 540 %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv 541 store float %call, float* %arrayidx, align 4 542 %iv.next = add nuw nsw i64 %iv, 1 543 %exitcond = icmp eq i64 %iv.next, 1000 544 br i1 %exitcond, label %for.end, label %for.body 545 546for.end: 547 ret void 548} 549 550define void @exp2_f64_intrinsic(double* nocapture %varray) { 551; CHECK-LABEL: @exp2_f64_intrinsic( 552; CHECK: [[TMP5:%.*]] = call <4 x double> @__svml_exp24(<4 x double> [[TMP4:%.*]]) 553; CHECK: ret void 554; 555entry: 556 br label %for.body 557 558for.body: 559 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 560 %tmp = trunc i64 %iv to i32 561 %conv = sitofp i32 %tmp to double 562 %call = tail call double @llvm.exp2.f64(double %conv) 563 %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv 564 store double %call, double* %arrayidx, align 4 565 %iv.next = add nuw nsw i64 %iv, 1 566 %exitcond = icmp eq i64 %iv.next, 1000 567 br i1 %exitcond, label %for.end, label %for.body 568 569for.end: 570 ret void 571} 572 573define void @exp2_f32_intrinsic(float* nocapture %varray) { 574; CHECK-LABEL: @exp2_f32_intrinsic( 575; CHECK: [[TMP5:%.*]] = call <4 x float> @__svml_exp2f4(<4 x float> [[TMP4:%.*]]) 576; CHECK: ret void 577; 578entry: 579 br label %for.body 580 581for.body: 582 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] 583 %tmp = trunc i64 %iv to i32 584 %conv = sitofp i32 %tmp to float 585 %call = tail call float @llvm.exp2.f32(float %conv) 586 %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv 587 store float %call, float* %arrayidx, align 4 588 %iv.next = add nuw nsw i64 %iv, 1 589 %exitcond = icmp eq i64 %iv.next, 1000 590 br i1 %exitcond, label %for.end, label %for.body 591 592for.end: 593 ret void 594} 595 596attributes #0 = { nounwind readnone } 597