brintos

brintos / llvm-project-archived public Read only

0
0
Text · 65.2 KiB · 10d83a4 Raw
1907 lines · plain
1; RUN: opt < %s -passes=loop-vectorize,dce,instcombine -force-vector-interleave=1 -force-vector-width=4 -S | FileCheck %s2 3define void @sqrt_f32(i32 %n, ptr %y, ptr %x) {4; CHECK-LABEL: @sqrt_f32(5; CHECK: llvm.sqrt.v4f326; CHECK: ret void7;8entry:9  %cmp6 = icmp sgt i32 %n, 010  br i1 %cmp6, label %for.body, label %for.end11 12for.body:                                         ; preds = %entry, %for.body13  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]14  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv15  %0 = load float, ptr %arrayidx, align 416  %call = tail call float @llvm.sqrt.f32(float %0)17  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv18  store float %call, ptr %arrayidx2, align 419  %indvars.iv.next = add i64 %indvars.iv, 120  %lftr.wideiv = trunc i64 %indvars.iv.next to i3221  %exitcond = icmp eq i32 %lftr.wideiv, %n22  br i1 %exitcond, label %for.end, label %for.body23 24for.end:                                          ; preds = %for.body, %entry25  ret void26}27 28declare float @llvm.sqrt.f32(float)29 30define void @sqrt_f64(i32 %n, ptr %y, ptr %x) {31; CHECK-LABEL: @sqrt_f64(32; CHECK: llvm.sqrt.v4f6433; CHECK: ret void34;35entry:36  %cmp6 = icmp sgt i32 %n, 037  br i1 %cmp6, label %for.body, label %for.end38 39for.body:                                         ; preds = %entry, %for.body40  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]41  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv42  %0 = load double, ptr %arrayidx, align 843  %call = tail call double @llvm.sqrt.f64(double %0)44  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv45  store double %call, ptr %arrayidx2, align 846  %indvars.iv.next = add i64 %indvars.iv, 147  %lftr.wideiv = trunc i64 %indvars.iv.next to i3248  %exitcond = icmp eq i32 %lftr.wideiv, %n49  br i1 %exitcond, label %for.end, label %for.body50 51for.end:                                          ; preds = %for.body, %entry52  ret void53}54 55declare double @llvm.sqrt.f64(double)56 57define void @sin_f32(i32 %n, ptr %y, ptr %x) {58; CHECK-LABEL: @sin_f32(59; CHECK: llvm.sin.v4f3260; CHECK: ret void61;62entry:63  %cmp6 = icmp sgt i32 %n, 064  br i1 %cmp6, label %for.body, label %for.end65 66for.body:                                         ; preds = %entry, %for.body67  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]68  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv69  %0 = load float, ptr %arrayidx, align 470  %call = tail call float @llvm.sin.f32(float %0)71  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv72  store float %call, ptr %arrayidx2, align 473  %indvars.iv.next = add i64 %indvars.iv, 174  %lftr.wideiv = trunc i64 %indvars.iv.next to i3275  %exitcond = icmp eq i32 %lftr.wideiv, %n76  br i1 %exitcond, label %for.end, label %for.body77 78for.end:                                          ; preds = %for.body, %entry79  ret void80}81 82declare float @llvm.sin.f32(float)83 84define void @sin_f64(i32 %n, ptr %y, ptr %x) {85; CHECK-LABEL: @sin_f64(86; CHECK: llvm.sin.v4f6487; CHECK: ret void88;89entry:90  %cmp6 = icmp sgt i32 %n, 091  br i1 %cmp6, label %for.body, label %for.end92 93for.body:                                         ; preds = %entry, %for.body94  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]95  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv96  %0 = load double, ptr %arrayidx, align 897  %call = tail call double @llvm.sin.f64(double %0)98  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv99  store double %call, ptr %arrayidx2, align 8100  %indvars.iv.next = add i64 %indvars.iv, 1101  %lftr.wideiv = trunc i64 %indvars.iv.next to i32102  %exitcond = icmp eq i32 %lftr.wideiv, %n103  br i1 %exitcond, label %for.end, label %for.body104 105for.end:                                          ; preds = %for.body, %entry106  ret void107}108 109declare double @llvm.sin.f64(double)110 111define void @cos_f32(i32 %n, ptr %y, ptr %x) {112; CHECK-LABEL: @cos_f32(113; CHECK: llvm.cos.v4f32114; CHECK: ret void115;116entry:117  %cmp6 = icmp sgt i32 %n, 0118  br i1 %cmp6, label %for.body, label %for.end119 120for.body:                                         ; preds = %entry, %for.body121  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]122  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv123  %0 = load float, ptr %arrayidx, align 4124  %call = tail call float @llvm.cos.f32(float %0)125  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv126  store float %call, ptr %arrayidx2, align 4127  %indvars.iv.next = add i64 %indvars.iv, 1128  %lftr.wideiv = trunc i64 %indvars.iv.next to i32129  %exitcond = icmp eq i32 %lftr.wideiv, %n130  br i1 %exitcond, label %for.end, label %for.body131 132for.end:                                          ; preds = %for.body, %entry133  ret void134}135 136declare float @llvm.cos.f32(float)137 138define void @cos_f64(i32 %n, ptr %y, ptr %x) {139; CHECK-LABEL: @cos_f64(140; CHECK: llvm.cos.v4f64141; CHECK: ret void142;143entry:144  %cmp6 = icmp sgt i32 %n, 0145  br i1 %cmp6, label %for.body, label %for.end146 147for.body:                                         ; preds = %entry, %for.body148  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]149  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv150  %0 = load double, ptr %arrayidx, align 8151  %call = tail call double @llvm.cos.f64(double %0)152  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv153  store double %call, ptr %arrayidx2, align 8154  %indvars.iv.next = add i64 %indvars.iv, 1155  %lftr.wideiv = trunc i64 %indvars.iv.next to i32156  %exitcond = icmp eq i32 %lftr.wideiv, %n157  br i1 %exitcond, label %for.end, label %for.body158 159for.end:                                          ; preds = %for.body, %entry160  ret void161}162 163declare double @llvm.cos.f64(double)164 165define void @tan_f32(i32 %n, ptr %y, ptr %x) {166; CHECK-LABEL: @tan_f32(167; CHECK: llvm.tan.v4f32168; CHECK: ret void169;170entry:171  %cmp6 = icmp sgt i32 %n, 0172  br i1 %cmp6, label %for.body, label %for.end173 174for.body:                                         ; preds = %entry, %for.body175  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]176  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv177  %0 = load float, ptr %arrayidx, align 4178  %call = tail call float @llvm.tan.f32(float %0)179  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv180  store float %call, ptr %arrayidx2, align 4181  %indvars.iv.next = add i64 %indvars.iv, 1182  %lftr.wideiv = trunc i64 %indvars.iv.next to i32183  %exitcond = icmp eq i32 %lftr.wideiv, %n184  br i1 %exitcond, label %for.end, label %for.body185 186for.end:                                          ; preds = %for.body, %entry187  ret void188}189 190declare float @llvm.tan.f32(float)191 192define void @tan_f64(i32 %n, ptr %y, ptr %x) {193; CHECK-LABEL: @tan_f64(194; CHECK: llvm.tan.v4f64195; CHECK: ret void196;197entry:198  %cmp6 = icmp sgt i32 %n, 0199  br i1 %cmp6, label %for.body, label %for.end200 201for.body:                                         ; preds = %entry, %for.body202  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]203  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv204  %0 = load double, ptr %arrayidx, align 8205  %call = tail call double @llvm.tan.f64(double %0)206  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv207  store double %call, ptr %arrayidx2, align 8208  %indvars.iv.next = add i64 %indvars.iv, 1209  %lftr.wideiv = trunc i64 %indvars.iv.next to i32210  %exitcond = icmp eq i32 %lftr.wideiv, %n211  br i1 %exitcond, label %for.end, label %for.body212 213for.end:                                          ; preds = %for.body, %entry214  ret void215}216 217declare double @llvm.tan.f64(double)218 219define void @exp_f32(i32 %n, ptr %y, ptr %x) {220; CHECK-LABEL: @exp_f32(221; CHECK: llvm.exp.v4f32222; CHECK: ret void223;224entry:225  %cmp6 = icmp sgt i32 %n, 0226  br i1 %cmp6, label %for.body, label %for.end227 228for.body:                                         ; preds = %entry, %for.body229  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]230  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv231  %0 = load float, ptr %arrayidx, align 4232  %call = tail call float @llvm.exp.f32(float %0)233  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv234  store float %call, ptr %arrayidx2, align 4235  %indvars.iv.next = add i64 %indvars.iv, 1236  %lftr.wideiv = trunc i64 %indvars.iv.next to i32237  %exitcond = icmp eq i32 %lftr.wideiv, %n238  br i1 %exitcond, label %for.end, label %for.body239 240for.end:                                          ; preds = %for.body, %entry241  ret void242}243 244declare float @llvm.exp.f32(float)245 246define void @exp_f64(i32 %n, ptr %y, ptr %x) {247; CHECK-LABEL: @exp_f64(248; CHECK: llvm.exp.v4f64249; CHECK: ret void250;251entry:252  %cmp6 = icmp sgt i32 %n, 0253  br i1 %cmp6, label %for.body, label %for.end254 255for.body:                                         ; preds = %entry, %for.body256  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]257  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv258  %0 = load double, ptr %arrayidx, align 8259  %call = tail call double @llvm.exp.f64(double %0)260  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv261  store double %call, ptr %arrayidx2, align 8262  %indvars.iv.next = add i64 %indvars.iv, 1263  %lftr.wideiv = trunc i64 %indvars.iv.next to i32264  %exitcond = icmp eq i32 %lftr.wideiv, %n265  br i1 %exitcond, label %for.end, label %for.body266 267for.end:                                          ; preds = %for.body, %entry268  ret void269}270 271declare double @llvm.exp.f64(double)272 273define void @exp2_f32(i32 %n, ptr %y, ptr %x) {274; CHECK-LABEL: @exp2_f32(275; CHECK: llvm.exp2.v4f32276; CHECK: ret void277;278entry:279  %cmp6 = icmp sgt i32 %n, 0280  br i1 %cmp6, label %for.body, label %for.end281 282for.body:                                         ; preds = %entry, %for.body283  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]284  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv285  %0 = load float, ptr %arrayidx, align 4286  %call = tail call float @llvm.exp2.f32(float %0)287  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv288  store float %call, ptr %arrayidx2, align 4289  %indvars.iv.next = add i64 %indvars.iv, 1290  %lftr.wideiv = trunc i64 %indvars.iv.next to i32291  %exitcond = icmp eq i32 %lftr.wideiv, %n292  br i1 %exitcond, label %for.end, label %for.body293 294for.end:                                          ; preds = %for.body, %entry295  ret void296}297 298declare float @llvm.exp2.f32(float)299 300define void @exp2_f64(i32 %n, ptr %y, ptr %x) {301; CHECK-LABEL: @exp2_f64(302; CHECK: llvm.exp2.v4f64303; CHECK: ret void304;305entry:306  %cmp6 = icmp sgt i32 %n, 0307  br i1 %cmp6, label %for.body, label %for.end308 309for.body:                                         ; preds = %entry, %for.body310  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]311  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv312  %0 = load double, ptr %arrayidx, align 8313  %call = tail call double @llvm.exp2.f64(double %0)314  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv315  store double %call, ptr %arrayidx2, align 8316  %indvars.iv.next = add i64 %indvars.iv, 1317  %lftr.wideiv = trunc i64 %indvars.iv.next to i32318  %exitcond = icmp eq i32 %lftr.wideiv, %n319  br i1 %exitcond, label %for.end, label %for.body320 321for.end:                                          ; preds = %for.body, %entry322  ret void323}324 325declare double @llvm.exp2.f64(double)326 327define void @ldexp_f32i32(i32 %n, ptr %y, ptr %x, i32 %exp) {328; CHECK-LABEL: @ldexp_f32i32(329; CHECK: llvm.ldexp.v4f32.v4i32330; CHECK: ret void331;332entry:333  br label %for.body334 335for.body:                                         ; preds = %entry, %for.body336  %iv = phi i32 [ 0, %entry ], [ %iv.next, %for.body ]337  %arrayidx = getelementptr inbounds float, ptr %y, i32 %iv338  %0 = load float, ptr %arrayidx, align 4339  %call = tail call float @llvm.ldexp.f32.i32(float %0, i32 %exp)340  %arrayidx2 = getelementptr inbounds float, ptr %x, i32 %iv341  store float %call, ptr %arrayidx2, align 4342  %iv.next = add i32 %iv, 1343  %exitcond = icmp eq i32 %iv.next, %n344  br i1 %exitcond, label %for.end, label %for.body345 346for.end:                                          ; preds = %for.body, %entry347  ret void348}349 350declare float @llvm.ldexp.f32.i32(float, i32)351 352define void @ldexp_f64i32(i32 %n, ptr %y, ptr %x, i32 %exp) {353; CHECK-LABEL: @ldexp_f64i32(354; CHECK: llvm.ldexp.v4f64.v4i32355; CHECK: ret void356;357entry:358  br label %for.body359 360for.body:                                         ; preds = %entry, %for.body361  %iv = phi i32 [ 0, %entry ], [ %iv.next, %for.body ]362  %arrayidx = getelementptr inbounds double, ptr %y, i32 %iv363  %0 = load double, ptr %arrayidx, align 8364  %call = tail call double @llvm.ldexp.f64.i32(double %0, i32 %exp)365  %arrayidx2 = getelementptr inbounds double, ptr %x, i32 %iv366  store double %call, ptr %arrayidx2, align 8367  %iv.next = add i32 %iv, 1368  %exitcond = icmp eq i32 %iv.next, %n369  br i1 %exitcond, label %for.end, label %for.body370 371for.end:                                          ; preds = %for.body, %entry372  ret void373}374 375declare double @llvm.ldexp.f64.i32(double, i32)376 377define void @log_f32(i32 %n, ptr %y, ptr %x) {378; CHECK-LABEL: @log_f32(379; CHECK: llvm.log.v4f32380; CHECK: ret void381;382entry:383  %cmp6 = icmp sgt i32 %n, 0384  br i1 %cmp6, label %for.body, label %for.end385 386for.body:                                         ; preds = %entry, %for.body387  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]388  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv389  %0 = load float, ptr %arrayidx, align 4390  %call = tail call float @llvm.log.f32(float %0)391  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv392  store float %call, ptr %arrayidx2, align 4393  %indvars.iv.next = add i64 %indvars.iv, 1394  %lftr.wideiv = trunc i64 %indvars.iv.next to i32395  %exitcond = icmp eq i32 %lftr.wideiv, %n396  br i1 %exitcond, label %for.end, label %for.body397 398for.end:                                          ; preds = %for.body, %entry399  ret void400}401 402declare float @llvm.log.f32(float)403 404define void @log_f64(i32 %n, ptr %y, ptr %x) {405; CHECK-LABEL: @log_f64(406; CHECK: llvm.log.v4f64407; CHECK: ret void408;409entry:410  %cmp6 = icmp sgt i32 %n, 0411  br i1 %cmp6, label %for.body, label %for.end412 413for.body:                                         ; preds = %entry, %for.body414  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]415  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv416  %0 = load double, ptr %arrayidx, align 8417  %call = tail call double @llvm.log.f64(double %0)418  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv419  store double %call, ptr %arrayidx2, align 8420  %indvars.iv.next = add i64 %indvars.iv, 1421  %lftr.wideiv = trunc i64 %indvars.iv.next to i32422  %exitcond = icmp eq i32 %lftr.wideiv, %n423  br i1 %exitcond, label %for.end, label %for.body424 425for.end:                                          ; preds = %for.body, %entry426  ret void427}428 429declare double @llvm.log.f64(double)430 431define void @log10_f32(i32 %n, ptr %y, ptr %x) {432; CHECK-LABEL: @log10_f32(433; CHECK: llvm.log10.v4f32434; CHECK: ret void435;436entry:437  %cmp6 = icmp sgt i32 %n, 0438  br i1 %cmp6, label %for.body, label %for.end439 440for.body:                                         ; preds = %entry, %for.body441  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]442  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv443  %0 = load float, ptr %arrayidx, align 4444  %call = tail call float @llvm.log10.f32(float %0)445  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv446  store float %call, ptr %arrayidx2, align 4447  %indvars.iv.next = add i64 %indvars.iv, 1448  %lftr.wideiv = trunc i64 %indvars.iv.next to i32449  %exitcond = icmp eq i32 %lftr.wideiv, %n450  br i1 %exitcond, label %for.end, label %for.body451 452for.end:                                          ; preds = %for.body, %entry453  ret void454}455 456declare float @llvm.log10.f32(float)457 458define void @log10_f64(i32 %n, ptr %y, ptr %x) {459; CHECK-LABEL: @log10_f64(460; CHECK: llvm.log10.v4f64461; CHECK: ret void462;463entry:464  %cmp6 = icmp sgt i32 %n, 0465  br i1 %cmp6, label %for.body, label %for.end466 467for.body:                                         ; preds = %entry, %for.body468  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]469  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv470  %0 = load double, ptr %arrayidx, align 8471  %call = tail call double @llvm.log10.f64(double %0)472  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv473  store double %call, ptr %arrayidx2, align 8474  %indvars.iv.next = add i64 %indvars.iv, 1475  %lftr.wideiv = trunc i64 %indvars.iv.next to i32476  %exitcond = icmp eq i32 %lftr.wideiv, %n477  br i1 %exitcond, label %for.end, label %for.body478 479for.end:                                          ; preds = %for.body, %entry480  ret void481}482 483declare double @llvm.log10.f64(double)484 485define void @log2_f32(i32 %n, ptr %y, ptr %x) {486; CHECK-LABEL: @log2_f32(487; CHECK: llvm.log2.v4f32488; CHECK: ret void489;490entry:491  %cmp6 = icmp sgt i32 %n, 0492  br i1 %cmp6, label %for.body, label %for.end493 494for.body:                                         ; preds = %entry, %for.body495  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]496  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv497  %0 = load float, ptr %arrayidx, align 4498  %call = tail call float @llvm.log2.f32(float %0)499  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv500  store float %call, ptr %arrayidx2, align 4501  %indvars.iv.next = add i64 %indvars.iv, 1502  %lftr.wideiv = trunc i64 %indvars.iv.next to i32503  %exitcond = icmp eq i32 %lftr.wideiv, %n504  br i1 %exitcond, label %for.end, label %for.body505 506for.end:                                          ; preds = %for.body, %entry507  ret void508}509 510declare float @llvm.log2.f32(float)511 512define void @log2_f64(i32 %n, ptr %y, ptr %x) {513; CHECK-LABEL: @log2_f64(514; CHECK: llvm.log2.v4f64515; CHECK: ret void516;517entry:518  %cmp6 = icmp sgt i32 %n, 0519  br i1 %cmp6, label %for.body, label %for.end520 521for.body:                                         ; preds = %entry, %for.body522  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]523  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv524  %0 = load double, ptr %arrayidx, align 8525  %call = tail call double @llvm.log2.f64(double %0)526  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv527  store double %call, ptr %arrayidx2, align 8528  %indvars.iv.next = add i64 %indvars.iv, 1529  %lftr.wideiv = trunc i64 %indvars.iv.next to i32530  %exitcond = icmp eq i32 %lftr.wideiv, %n531  br i1 %exitcond, label %for.end, label %for.body532 533for.end:                                          ; preds = %for.body, %entry534  ret void535}536 537declare double @llvm.log2.f64(double)538 539define void @fabs_f32(i32 %n, ptr %y, ptr %x) {540; CHECK-LABEL: @fabs_f32(541; CHECK: llvm.fabs.v4f32542; CHECK: ret void543;544entry:545  %cmp6 = icmp sgt i32 %n, 0546  br i1 %cmp6, label %for.body, label %for.end547 548for.body:                                         ; preds = %entry, %for.body549  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]550  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv551  %0 = load float, ptr %arrayidx, align 4552  %call = tail call float @llvm.fabs.f32(float %0)553  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv554  store float %call, ptr %arrayidx2, align 4555  %indvars.iv.next = add i64 %indvars.iv, 1556  %lftr.wideiv = trunc i64 %indvars.iv.next to i32557  %exitcond = icmp eq i32 %lftr.wideiv, %n558  br i1 %exitcond, label %for.end, label %for.body559 560for.end:                                          ; preds = %for.body, %entry561  ret void562}563 564declare float @llvm.fabs.f32(float)565 566define void @fabs_f64(i32 %n, ptr %y, ptr %x) {567; CHECK-LABEL: @fabs_f64(568; CHECK: llvm.fabs.v4f64569; CHECK: ret void570;571entry:572  %cmp6 = icmp sgt i32 %n, 0573  br i1 %cmp6, label %for.body, label %for.end574 575for.body:                                         ; preds = %entry, %for.body576  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]577  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv578  %0 = load double, ptr %arrayidx, align 8579  %call = tail call double @llvm.fabs(double %0)580  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv581  store double %call, ptr %arrayidx2, align 8582  %indvars.iv.next = add i64 %indvars.iv, 1583  %lftr.wideiv = trunc i64 %indvars.iv.next to i32584  %exitcond = icmp eq i32 %lftr.wideiv, %n585  br i1 %exitcond, label %for.end, label %for.body586 587for.end:                                          ; preds = %for.body, %entry588  ret void589}590 591declare double @llvm.fabs(double)592 593define void @copysign_f32(i32 %n, ptr %y, ptr %x, ptr %z) {594; CHECK-LABEL: @copysign_f32(595; CHECK: llvm.copysign.v4f32596; CHECK: ret void597;598entry:599  %cmp6 = icmp sgt i32 %n, 0600  br i1 %cmp6, label %for.body, label %for.end601 602for.body:                                         ; preds = %entry, %for.body603  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]604  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv605  %0 = load float, ptr %arrayidx, align 4606  %arrayidx1 = getelementptr inbounds float, ptr %z, i64 %indvars.iv607  %1 = load float, ptr %arrayidx1, align 4608  %call = tail call float @llvm.copysign.f32(float %0, float %1)609  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv610  store float %call, ptr %arrayidx2, align 4611  %indvars.iv.next = add i64 %indvars.iv, 1612  %lftr.wideiv = trunc i64 %indvars.iv.next to i32613  %exitcond = icmp eq i32 %lftr.wideiv, %n614  br i1 %exitcond, label %for.end, label %for.body615 616for.end:                                          ; preds = %for.body, %entry617  ret void618}619 620declare float @llvm.copysign.f32(float, float)621 622define void @copysign_f64(i32 %n, ptr %y, ptr %x, ptr %z) {623; CHECK-LABEL: @copysign_f64(624; CHECK: llvm.copysign.v4f64625; CHECK: ret void626;627entry:628  %cmp6 = icmp sgt i32 %n, 0629  br i1 %cmp6, label %for.body, label %for.end630 631for.body:                                         ; preds = %entry, %for.body632  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]633  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv634  %0 = load double, ptr %arrayidx, align 8635  %arrayidx1 = getelementptr inbounds double, ptr %z, i64 %indvars.iv636  %1 = load double, ptr %arrayidx1, align 8637  %call = tail call double @llvm.copysign(double %0, double %1)638  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv639  store double %call, ptr %arrayidx2, align 8640  %indvars.iv.next = add i64 %indvars.iv, 1641  %lftr.wideiv = trunc i64 %indvars.iv.next to i32642  %exitcond = icmp eq i32 %lftr.wideiv, %n643  br i1 %exitcond, label %for.end, label %for.body644 645for.end:                                          ; preds = %for.body, %entry646  ret void647}648 649declare double @llvm.copysign(double, double)650 651define void @floor_f32(i32 %n, ptr %y, ptr %x) {652; CHECK-LABEL: @floor_f32(653; CHECK: llvm.floor.v4f32654; CHECK: ret void655;656entry:657  %cmp6 = icmp sgt i32 %n, 0658  br i1 %cmp6, label %for.body, label %for.end659 660for.body:                                         ; preds = %entry, %for.body661  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]662  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv663  %0 = load float, ptr %arrayidx, align 4664  %call = tail call float @llvm.floor.f32(float %0)665  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv666  store float %call, ptr %arrayidx2, align 4667  %indvars.iv.next = add i64 %indvars.iv, 1668  %lftr.wideiv = trunc i64 %indvars.iv.next to i32669  %exitcond = icmp eq i32 %lftr.wideiv, %n670  br i1 %exitcond, label %for.end, label %for.body671 672for.end:                                          ; preds = %for.body, %entry673  ret void674}675 676declare float @llvm.floor.f32(float)677 678define void @floor_f64(i32 %n, ptr %y, ptr %x) {679; CHECK-LABEL: @floor_f64(680; CHECK: llvm.floor.v4f64681; CHECK: ret void682;683entry:684  %cmp6 = icmp sgt i32 %n, 0685  br i1 %cmp6, label %for.body, label %for.end686 687for.body:                                         ; preds = %entry, %for.body688  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]689  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv690  %0 = load double, ptr %arrayidx, align 8691  %call = tail call double @llvm.floor.f64(double %0)692  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv693  store double %call, ptr %arrayidx2, align 8694  %indvars.iv.next = add i64 %indvars.iv, 1695  %lftr.wideiv = trunc i64 %indvars.iv.next to i32696  %exitcond = icmp eq i32 %lftr.wideiv, %n697  br i1 %exitcond, label %for.end, label %for.body698 699for.end:                                          ; preds = %for.body, %entry700  ret void701}702 703declare double @llvm.floor.f64(double)704 705define void @ceil_f32(i32 %n, ptr %y, ptr %x) {706; CHECK-LABEL: @ceil_f32(707; CHECK: llvm.ceil.v4f32708; CHECK: ret void709;710entry:711  %cmp6 = icmp sgt i32 %n, 0712  br i1 %cmp6, label %for.body, label %for.end713 714for.body:                                         ; preds = %entry, %for.body715  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]716  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv717  %0 = load float, ptr %arrayidx, align 4718  %call = tail call float @llvm.ceil.f32(float %0)719  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv720  store float %call, ptr %arrayidx2, align 4721  %indvars.iv.next = add i64 %indvars.iv, 1722  %lftr.wideiv = trunc i64 %indvars.iv.next to i32723  %exitcond = icmp eq i32 %lftr.wideiv, %n724  br i1 %exitcond, label %for.end, label %for.body725 726for.end:                                          ; preds = %for.body, %entry727  ret void728}729 730declare float @llvm.ceil.f32(float)731 732define void @ceil_f64(i32 %n, ptr %y, ptr %x) {733; CHECK-LABEL: @ceil_f64(734; CHECK: llvm.ceil.v4f64735; CHECK: ret void736;737entry:738  %cmp6 = icmp sgt i32 %n, 0739  br i1 %cmp6, label %for.body, label %for.end740 741for.body:                                         ; preds = %entry, %for.body742  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]743  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv744  %0 = load double, ptr %arrayidx, align 8745  %call = tail call double @llvm.ceil.f64(double %0)746  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv747  store double %call, ptr %arrayidx2, align 8748  %indvars.iv.next = add i64 %indvars.iv, 1749  %lftr.wideiv = trunc i64 %indvars.iv.next to i32750  %exitcond = icmp eq i32 %lftr.wideiv, %n751  br i1 %exitcond, label %for.end, label %for.body752 753for.end:                                          ; preds = %for.body, %entry754  ret void755}756 757declare double @llvm.ceil.f64(double)758 759define void @trunc_f32(i32 %n, ptr %y, ptr %x) {760; CHECK-LABEL: @trunc_f32(761; CHECK: llvm.trunc.v4f32762; CHECK: ret void763;764entry:765  %cmp6 = icmp sgt i32 %n, 0766  br i1 %cmp6, label %for.body, label %for.end767 768for.body:                                         ; preds = %entry, %for.body769  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]770  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv771  %0 = load float, ptr %arrayidx, align 4772  %call = tail call float @llvm.trunc.f32(float %0)773  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv774  store float %call, ptr %arrayidx2, align 4775  %indvars.iv.next = add i64 %indvars.iv, 1776  %lftr.wideiv = trunc i64 %indvars.iv.next to i32777  %exitcond = icmp eq i32 %lftr.wideiv, %n778  br i1 %exitcond, label %for.end, label %for.body779 780for.end:                                          ; preds = %for.body, %entry781  ret void782}783 784declare float @llvm.trunc.f32(float)785 786define void @trunc_f64(i32 %n, ptr %y, ptr %x) {787; CHECK-LABEL: @trunc_f64(788; CHECK: llvm.trunc.v4f64789; CHECK: ret void790;791entry:792  %cmp6 = icmp sgt i32 %n, 0793  br i1 %cmp6, label %for.body, label %for.end794 795for.body:                                         ; preds = %entry, %for.body796  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]797  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv798  %0 = load double, ptr %arrayidx, align 8799  %call = tail call double @llvm.trunc.f64(double %0)800  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv801  store double %call, ptr %arrayidx2, align 8802  %indvars.iv.next = add i64 %indvars.iv, 1803  %lftr.wideiv = trunc i64 %indvars.iv.next to i32804  %exitcond = icmp eq i32 %lftr.wideiv, %n805  br i1 %exitcond, label %for.end, label %for.body806 807for.end:                                          ; preds = %for.body, %entry808  ret void809}810 811declare double @llvm.trunc.f64(double)812 813define void @rint_f32(i32 %n, ptr %y, ptr %x) {814; CHECK-LABEL: @rint_f32(815; CHECK: llvm.rint.v4f32816; CHECK: ret void817;818entry:819  %cmp6 = icmp sgt i32 %n, 0820  br i1 %cmp6, label %for.body, label %for.end821 822for.body:                                         ; preds = %entry, %for.body823  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]824  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv825  %0 = load float, ptr %arrayidx, align 4826  %call = tail call float @llvm.rint.f32(float %0)827  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv828  store float %call, ptr %arrayidx2, align 4829  %indvars.iv.next = add i64 %indvars.iv, 1830  %lftr.wideiv = trunc i64 %indvars.iv.next to i32831  %exitcond = icmp eq i32 %lftr.wideiv, %n832  br i1 %exitcond, label %for.end, label %for.body833 834for.end:                                          ; preds = %for.body, %entry835  ret void836}837 838declare float @llvm.rint.f32(float)839 840define void @rint_f64(i32 %n, ptr %y, ptr %x) {841; CHECK-LABEL: @rint_f64(842; CHECK: llvm.rint.v4f64843; CHECK: ret void844;845entry:846  %cmp6 = icmp sgt i32 %n, 0847  br i1 %cmp6, label %for.body, label %for.end848 849for.body:                                         ; preds = %entry, %for.body850  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]851  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv852  %0 = load double, ptr %arrayidx, align 8853  %call = tail call double @llvm.rint.f64(double %0)854  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv855  store double %call, ptr %arrayidx2, align 8856  %indvars.iv.next = add i64 %indvars.iv, 1857  %lftr.wideiv = trunc i64 %indvars.iv.next to i32858  %exitcond = icmp eq i32 %lftr.wideiv, %n859  br i1 %exitcond, label %for.end, label %for.body860 861for.end:                                          ; preds = %for.body, %entry862  ret void863}864 865declare double @llvm.rint.f64(double)866 867define void @nearbyint_f32(i32 %n, ptr %y, ptr %x) {868; CHECK-LABEL: @nearbyint_f32(869; CHECK: llvm.nearbyint.v4f32870; CHECK: ret void871;872entry:873  %cmp6 = icmp sgt i32 %n, 0874  br i1 %cmp6, label %for.body, label %for.end875 876for.body:                                         ; preds = %entry, %for.body877  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]878  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv879  %0 = load float, ptr %arrayidx, align 4880  %call = tail call float @llvm.nearbyint.f32(float %0)881  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv882  store float %call, ptr %arrayidx2, align 4883  %indvars.iv.next = add i64 %indvars.iv, 1884  %lftr.wideiv = trunc i64 %indvars.iv.next to i32885  %exitcond = icmp eq i32 %lftr.wideiv, %n886  br i1 %exitcond, label %for.end, label %for.body887 888for.end:                                          ; preds = %for.body, %entry889  ret void890}891 892declare float @llvm.nearbyint.f32(float)893 894define void @nearbyint_f64(i32 %n, ptr %y, ptr %x) {895; CHECK-LABEL: @nearbyint_f64(896; CHECK: llvm.nearbyint.v4f64897; CHECK: ret void898;899entry:900  %cmp6 = icmp sgt i32 %n, 0901  br i1 %cmp6, label %for.body, label %for.end902 903for.body:                                         ; preds = %entry, %for.body904  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]905  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv906  %0 = load double, ptr %arrayidx, align 8907  %call = tail call double @llvm.nearbyint.f64(double %0)908  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv909  store double %call, ptr %arrayidx2, align 8910  %indvars.iv.next = add i64 %indvars.iv, 1911  %lftr.wideiv = trunc i64 %indvars.iv.next to i32912  %exitcond = icmp eq i32 %lftr.wideiv, %n913  br i1 %exitcond, label %for.end, label %for.body914 915for.end:                                          ; preds = %for.body, %entry916  ret void917}918 919declare double @llvm.nearbyint.f64(double)920 921define void @round_f32(i32 %n, ptr %y, ptr %x) {922; CHECK-LABEL: @round_f32(923; CHECK: llvm.round.v4f32924; CHECK: ret void925;926entry:927  %cmp6 = icmp sgt i32 %n, 0928  br i1 %cmp6, label %for.body, label %for.end929 930for.body:                                         ; preds = %entry, %for.body931  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]932  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv933  %0 = load float, ptr %arrayidx, align 4934  %call = tail call float @llvm.round.f32(float %0)935  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv936  store float %call, ptr %arrayidx2, align 4937  %indvars.iv.next = add i64 %indvars.iv, 1938  %lftr.wideiv = trunc i64 %indvars.iv.next to i32939  %exitcond = icmp eq i32 %lftr.wideiv, %n940  br i1 %exitcond, label %for.end, label %for.body941 942for.end:                                          ; preds = %for.body, %entry943  ret void944}945 946declare float @llvm.round.f32(float)947 948define void @round_f64(i32 %n, ptr %y, ptr %x) {949; CHECK-LABEL: @round_f64(950; CHECK: llvm.round.v4f64951; CHECK: ret void952;953entry:954  %cmp6 = icmp sgt i32 %n, 0955  br i1 %cmp6, label %for.body, label %for.end956 957for.body:                                         ; preds = %entry, %for.body958  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]959  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv960  %0 = load double, ptr %arrayidx, align 8961  %call = tail call double @llvm.round.f64(double %0)962  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv963  store double %call, ptr %arrayidx2, align 8964  %indvars.iv.next = add i64 %indvars.iv, 1965  %lftr.wideiv = trunc i64 %indvars.iv.next to i32966  %exitcond = icmp eq i32 %lftr.wideiv, %n967  br i1 %exitcond, label %for.end, label %for.body968 969for.end:                                          ; preds = %for.body, %entry970  ret void971}972 973declare double @llvm.round.f64(double)974 975define void @roundeven_f32(i32 %n, ptr %y, ptr %x) {976; CHECK-LABEL: @roundeven_f32(977; CHECK: llvm.roundeven.v4f32978; CHECK: ret void979;980entry:981  %cmp6 = icmp sgt i32 %n, 0982  br i1 %cmp6, label %for.body, label %for.end983 984for.body:                                         ; preds = %entry, %for.body985  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]986  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv987  %0 = load float, ptr %arrayidx, align 4988  %call = tail call float @llvm.roundeven.f32(float %0)989  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv990  store float %call, ptr %arrayidx2, align 4991  %indvars.iv.next = add i64 %indvars.iv, 1992  %lftr.wideiv = trunc i64 %indvars.iv.next to i32993  %exitcond = icmp eq i32 %lftr.wideiv, %n994  br i1 %exitcond, label %for.end, label %for.body995 996for.end:                                          ; preds = %for.body, %entry997  ret void998}999 1000declare float @llvm.roundeven.f32(float)1001 1002define void @roundeven_f64(i32 %n, ptr %y, ptr %x) {1003; CHECK-LABEL: @roundeven_f64(1004; CHECK: llvm.roundeven.v4f641005; CHECK: ret void1006;1007entry:1008  %cmp6 = icmp sgt i32 %n, 01009  br i1 %cmp6, label %for.body, label %for.end1010 1011for.body:                                         ; preds = %entry, %for.body1012  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1013  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv1014  %0 = load double, ptr %arrayidx, align 81015  %call = tail call double @llvm.roundeven.f64(double %0)1016  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv1017  store double %call, ptr %arrayidx2, align 81018  %indvars.iv.next = add i64 %indvars.iv, 11019  %lftr.wideiv = trunc i64 %indvars.iv.next to i321020  %exitcond = icmp eq i32 %lftr.wideiv, %n1021  br i1 %exitcond, label %for.end, label %for.body1022 1023for.end:                                          ; preds = %for.body, %entry1024  ret void1025}1026 1027declare double @llvm.roundeven.f64(double)1028 1029 1030define void @lround_i32f32(i32 %n, ptr %y, ptr %x) {1031; CHECK-LABEL: @lround_i32f32(1032; CHECK: llvm.lround.v4i32.v4f321033; CHECK: ret void1034;1035entry:1036  br label %for.body1037 1038for.body:                                         ; preds = %entry, %for.body1039  %iv = phi i32 [ 0, %entry ], [ %iv.next, %for.body ]1040  %arrayidx = getelementptr inbounds float, ptr %y, i32 %iv1041  %0 = load float, ptr %arrayidx, align 41042  %call = tail call i32 @llvm.lround.i32.f32(float %0)1043  %arrayidx2 = getelementptr inbounds i32, ptr %x, i32 %iv1044  store i32 %call, ptr %arrayidx2, align 41045  %iv.next = add i32 %iv, 11046  %exitcond = icmp eq i32 %iv.next, %n1047  br i1 %exitcond, label %for.end, label %for.body1048 1049for.end:                                          ; preds = %for.body, %entry1050  ret void1051}1052 1053declare i32 @llvm.lround.i32.f32(float)1054 1055define void @lround_i32f64(i32 %n, ptr %y, ptr %x) {1056; CHECK-LABEL: @lround_i32f64(1057; CHECK: llvm.lround.v4i32.v4f641058; CHECK: ret void1059;1060entry:1061  br label %for.body1062 1063for.body:                                         ; preds = %entry, %for.body1064  %iv = phi i32 [ 0, %entry ], [ %iv.next, %for.body ]1065  %arrayidx = getelementptr inbounds double, ptr %y, i32 %iv1066  %0 = load double, ptr %arrayidx, align 81067  %call = tail call i32 @llvm.lround.i32.f64(double %0)1068  %arrayidx2 = getelementptr inbounds i32, ptr %x, i32 %iv1069  store i32 %call, ptr %arrayidx2, align 81070  %iv.next = add i32 %iv, 11071  %exitcond = icmp eq i32 %iv.next, %n1072  br i1 %exitcond, label %for.end, label %for.body1073 1074for.end:                                          ; preds = %for.body, %entry1075  ret void1076}1077 1078declare i32 @llvm.lround.i32.f64(double)1079 1080define void @lround_i64f32(i32 %n, ptr %y, ptr %x) {1081; CHECK-LABEL: @lround_i64f32(1082; CHECK: llvm.lround.v4i64.v4f321083; CHECK: ret void1084;1085entry:1086  br label %for.body1087 1088for.body:                                         ; preds = %entry, %for.body1089  %iv = phi i32 [ 0, %entry ], [ %iv.next, %for.body ]1090  %arrayidx = getelementptr inbounds float, ptr %y, i32 %iv1091  %0 = load float, ptr %arrayidx, align 41092  %call = tail call i64 @llvm.lround.i64.f32(float %0)1093  %arrayidx2 = getelementptr inbounds i64, ptr %x, i32 %iv1094  store i64 %call, ptr %arrayidx2, align 41095  %iv.next = add i32 %iv, 11096  %exitcond = icmp eq i32 %iv.next, %n1097  br i1 %exitcond, label %for.end, label %for.body1098 1099for.end:                                          ; preds = %for.body, %entry1100  ret void1101}1102 1103declare i64 @llvm.lround.i64.f32(float)1104 1105define void @lround_i64f64(i32 %n, ptr %y, ptr %x) {1106; CHECK-LABEL: @lround_i64f64(1107; CHECK: llvm.lround.v4i64.v4f641108; CHECK: ret void1109;1110entry:1111  br label %for.body1112 1113for.body:                                         ; preds = %entry, %for.body1114  %iv = phi i32 [ 0, %entry ], [ %iv.next, %for.body ]1115  %arrayidx = getelementptr inbounds double, ptr %y, i32 %iv1116  %0 = load double, ptr %arrayidx, align 81117  %call = tail call i64 @llvm.lround.i64.f64(double %0)1118  %arrayidx2 = getelementptr inbounds i64, ptr %x, i32 %iv1119  store i64 %call, ptr %arrayidx2, align 81120  %iv.next = add i32 %iv, 11121  %exitcond = icmp eq i32 %iv.next, %n1122  br i1 %exitcond, label %for.end, label %for.body1123 1124for.end:                                          ; preds = %for.body, %entry1125  ret void1126}1127 1128declare i64 @llvm.lround.i64.f64(double)1129 1130define void @llround_i64f32(i32 %n, ptr %y, ptr %x) {1131; CHECK-LABEL: @llround_i64f32(1132; CHECK: llvm.llround.v4i64.v4f321133; CHECK: ret void1134;1135entry:1136  br label %for.body1137 1138for.body:                                         ; preds = %entry, %for.body1139  %iv = phi i32 [ 0, %entry ], [ %iv.next, %for.body ]1140  %arrayidx = getelementptr inbounds float, ptr %y, i32 %iv1141  %0 = load float, ptr %arrayidx, align 41142  %call = tail call i64 @llvm.llround.i64.f32(float %0)1143  %arrayidx2 = getelementptr inbounds i64, ptr %x, i32 %iv1144  store i64 %call, ptr %arrayidx2, align 41145  %iv.next = add i32 %iv, 11146  %exitcond = icmp eq i32 %iv.next, %n1147  br i1 %exitcond, label %for.end, label %for.body1148 1149for.end:                                          ; preds = %for.body, %entry1150  ret void1151}1152 1153declare i64 @llvm.llround.i64.f32(float)1154 1155define void @llround_i64f64(i32 %n, ptr %y, ptr %x) {1156; CHECK-LABEL: @llround_i64f64(1157; CHECK: llvm.llround.v4i64.v4f641158; CHECK: ret void1159;1160entry:1161  br label %for.body1162 1163for.body:                                         ; preds = %entry, %for.body1164  %iv = phi i32 [ 0, %entry ], [ %iv.next, %for.body ]1165  %arrayidx = getelementptr inbounds double, ptr %y, i32 %iv1166  %0 = load double, ptr %arrayidx, align 81167  %call = tail call i64 @llvm.llround.i64.f64(double %0)1168  %arrayidx2 = getelementptr inbounds i64, ptr %x, i32 %iv1169  store i64 %call, ptr %arrayidx2, align 81170  %iv.next = add i32 %iv, 11171  %exitcond = icmp eq i32 %iv.next, %n1172  br i1 %exitcond, label %for.end, label %for.body1173 1174for.end:                                          ; preds = %for.body, %entry1175  ret void1176}1177 1178declare i64 @llvm.llround.i64.f64(double)1179 1180define void @fma_f32(i32 %n, ptr %y, ptr %x, ptr %z, ptr %w) {1181; CHECK-LABEL: @fma_f32(1182; CHECK: llvm.fma.v4f321183; CHECK: ret void1184;1185entry:1186  %cmp12 = icmp sgt i32 %n, 01187  br i1 %cmp12, label %for.body, label %for.end1188 1189for.body:                                         ; preds = %entry, %for.body1190  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1191  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv1192  %0 = load float, ptr %arrayidx, align 41193  %arrayidx2 = getelementptr inbounds float, ptr %w, i64 %indvars.iv1194  %1 = load float, ptr %arrayidx2, align 41195  %arrayidx4 = getelementptr inbounds float, ptr %z, i64 %indvars.iv1196  %2 = load float, ptr %arrayidx4, align 41197  %3 = tail call float @llvm.fma.f32(float %0, float %2, float %1)1198  %arrayidx6 = getelementptr inbounds float, ptr %x, i64 %indvars.iv1199  store float %3, ptr %arrayidx6, align 41200  %indvars.iv.next = add i64 %indvars.iv, 11201  %lftr.wideiv = trunc i64 %indvars.iv.next to i321202  %exitcond = icmp eq i32 %lftr.wideiv, %n1203  br i1 %exitcond, label %for.end, label %for.body1204 1205for.end:                                          ; preds = %for.body, %entry1206  ret void1207}1208 1209declare float @llvm.fma.f32(float, float, float)1210 1211define void @fma_f64(i32 %n, ptr %y, ptr %x, ptr %z, ptr %w) {1212; CHECK-LABEL: @fma_f64(1213; CHECK: llvm.fma.v4f641214; CHECK: ret void1215;1216entry:1217  %cmp12 = icmp sgt i32 %n, 01218  br i1 %cmp12, label %for.body, label %for.end1219 1220for.body:                                         ; preds = %entry, %for.body1221  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1222  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv1223  %0 = load double, ptr %arrayidx, align 81224  %arrayidx2 = getelementptr inbounds double, ptr %w, i64 %indvars.iv1225  %1 = load double, ptr %arrayidx2, align 81226  %arrayidx4 = getelementptr inbounds double, ptr %z, i64 %indvars.iv1227  %2 = load double, ptr %arrayidx4, align 81228  %3 = tail call double @llvm.fma.f64(double %0, double %2, double %1)1229  %arrayidx6 = getelementptr inbounds double, ptr %x, i64 %indvars.iv1230  store double %3, ptr %arrayidx6, align 81231  %indvars.iv.next = add i64 %indvars.iv, 11232  %lftr.wideiv = trunc i64 %indvars.iv.next to i321233  %exitcond = icmp eq i32 %lftr.wideiv, %n1234  br i1 %exitcond, label %for.end, label %for.body1235 1236for.end:                                          ; preds = %for.body, %entry1237  ret void1238}1239 1240declare double @llvm.fma.f64(double, double, double)1241 1242define void @fmuladd_f32(i32 %n, ptr %y, ptr %x, ptr %z, ptr %w) {1243; CHECK-LABEL: @fmuladd_f32(1244; CHECK: llvm.fmuladd.v4f321245; CHECK: ret void1246;1247entry:1248  %cmp12 = icmp sgt i32 %n, 01249  br i1 %cmp12, label %for.body, label %for.end1250 1251for.body:                                         ; preds = %entry, %for.body1252  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1253  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv1254  %0 = load float, ptr %arrayidx, align 41255  %arrayidx2 = getelementptr inbounds float, ptr %w, i64 %indvars.iv1256  %1 = load float, ptr %arrayidx2, align 41257  %arrayidx4 = getelementptr inbounds float, ptr %z, i64 %indvars.iv1258  %2 = load float, ptr %arrayidx4, align 41259  %3 = tail call float @llvm.fmuladd.f32(float %0, float %2, float %1)1260  %arrayidx6 = getelementptr inbounds float, ptr %x, i64 %indvars.iv1261  store float %3, ptr %arrayidx6, align 41262  %indvars.iv.next = add i64 %indvars.iv, 11263  %lftr.wideiv = trunc i64 %indvars.iv.next to i321264  %exitcond = icmp eq i32 %lftr.wideiv, %n1265  br i1 %exitcond, label %for.end, label %for.body1266 1267for.end:                                          ; preds = %for.body, %entry1268  ret void1269}1270 1271declare float @llvm.fmuladd.f32(float, float, float)1272 1273define void @fmuladd_f64(i32 %n, ptr %y, ptr %x, ptr %z, ptr %w) {1274; CHECK-LABEL: @fmuladd_f64(1275; CHECK: llvm.fmuladd.v4f641276; CHECK: ret void1277;1278entry:1279  %cmp12 = icmp sgt i32 %n, 01280  br i1 %cmp12, label %for.body, label %for.end1281 1282for.body:                                         ; preds = %entry, %for.body1283  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1284  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv1285  %0 = load double, ptr %arrayidx, align 81286  %arrayidx2 = getelementptr inbounds double, ptr %w, i64 %indvars.iv1287  %1 = load double, ptr %arrayidx2, align 81288  %arrayidx4 = getelementptr inbounds double, ptr %z, i64 %indvars.iv1289  %2 = load double, ptr %arrayidx4, align 81290  %3 = tail call double @llvm.fmuladd.f64(double %0, double %2, double %1)1291  %arrayidx6 = getelementptr inbounds double, ptr %x, i64 %indvars.iv1292  store double %3, ptr %arrayidx6, align 81293  %indvars.iv.next = add i64 %indvars.iv, 11294  %lftr.wideiv = trunc i64 %indvars.iv.next to i321295  %exitcond = icmp eq i32 %lftr.wideiv, %n1296  br i1 %exitcond, label %for.end, label %for.body1297 1298for.end:                                          ; preds = %for.body, %entry1299  ret void1300}1301 1302declare double @llvm.fmuladd.f64(double, double, double)1303 1304define void @pow_f32(i32 %n, ptr %y, ptr %x, ptr %z) {1305; CHECK-LABEL: @pow_f32(1306; CHECK: llvm.pow.v4f321307; CHECK: ret void1308;1309entry:1310  %cmp9 = icmp sgt i32 %n, 01311  br i1 %cmp9, label %for.body, label %for.end1312 1313for.body:                                         ; preds = %entry, %for.body1314  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1315  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv1316  %0 = load float, ptr %arrayidx, align 41317  %arrayidx2 = getelementptr inbounds float, ptr %z, i64 %indvars.iv1318  %1 = load float, ptr %arrayidx2, align 41319  %call = tail call float @llvm.pow.f32(float %0, float %1)1320  %arrayidx4 = getelementptr inbounds float, ptr %x, i64 %indvars.iv1321  store float %call, ptr %arrayidx4, align 41322  %indvars.iv.next = add i64 %indvars.iv, 11323  %lftr.wideiv = trunc i64 %indvars.iv.next to i321324  %exitcond = icmp eq i32 %lftr.wideiv, %n1325  br i1 %exitcond, label %for.end, label %for.body1326 1327for.end:                                          ; preds = %for.body, %entry1328  ret void1329}1330 1331declare float @llvm.pow.f32(float, float)1332 1333define void @pow_f64(i32 %n, ptr %y, ptr %x, ptr %z) {1334; CHECK-LABEL: @pow_f64(1335; CHECK: llvm.pow.v4f641336; CHECK: ret void1337;1338entry:1339  %cmp9 = icmp sgt i32 %n, 01340  br i1 %cmp9, label %for.body, label %for.end1341 1342for.body:                                         ; preds = %entry, %for.body1343  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1344  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv1345  %0 = load double, ptr %arrayidx, align 81346  %arrayidx2 = getelementptr inbounds double, ptr %z, i64 %indvars.iv1347  %1 = load double, ptr %arrayidx2, align 81348  %call = tail call double @llvm.pow.f64(double %0, double %1)1349  %arrayidx4 = getelementptr inbounds double, ptr %x, i64 %indvars.iv1350  store double %call, ptr %arrayidx4, align 81351  %indvars.iv.next = add i64 %indvars.iv, 11352  %lftr.wideiv = trunc i64 %indvars.iv.next to i321353  %exitcond = icmp eq i32 %lftr.wideiv, %n1354  br i1 %exitcond, label %for.end, label %for.body1355 1356for.end:                                          ; preds = %for.body, %entry1357  ret void1358}1359 1360define void @fabs_libm(ptr %x) {1361; CHECK: fabs_libm1362; CHECK: call <4 x float> @llvm.fabs.v4f321363; CHECK: ret void1364;1365entry:1366  br label %for.body1367 1368for.body:                                         ; preds = %entry, %for.body1369  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]1370  %arrayidx = getelementptr inbounds float, ptr %x, i64 %indvars.iv1371  %0 = load float, ptr %arrayidx, align 41372  %call = tail call float @fabsf(float %0) nounwind readnone1373  store float %call, ptr %arrayidx, align 41374  %indvars.iv.next = add i64 %indvars.iv, 11375  %lftr.wideiv = trunc i64 %indvars.iv.next to i321376  %exitcond = icmp eq i32 %lftr.wideiv, 10241377  br i1 %exitcond, label %for.end, label %for.body1378 1379for.end:                                          ; preds = %for.body1380  ret void1381}1382 1383declare float @fabsf(float) nounwind readnone1384 1385declare double @llvm.pow.f64(double, double)1386 1387; Make sure we don't replace calls to functions with standard library function1388; signatures but defined with internal linkage.1389 1390define internal float @roundf(float %x) {1391  ret float 0.000000001392}1393define void @internal_round(ptr %x) {1394; CHECK-LABEL: internal_round1395; CHECK-NOT:  load <4 x float>1396; CHECK: ret void1397;1398entry:1399  br label %for.body1400 1401for.body:                                         ; preds = %entry, %for.body1402  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]1403  %arrayidx = getelementptr inbounds float, ptr %x, i64 %indvars.iv1404  %0 = load float, ptr %arrayidx, align 41405  %call = tail call float @roundf(float %0)1406  store float %call, ptr %arrayidx, align 41407  %indvars.iv.next = add i64 %indvars.iv, 11408  %lftr.wideiv = trunc i64 %indvars.iv.next to i321409  %exitcond = icmp eq i32 %lftr.wideiv, 10241410  br i1 %exitcond, label %for.end, label %for.body1411 1412for.end:                                          ; preds = %for.body1413  ret void1414}1415 1416; Make sure we don't replace calls to functions with standard library names but1417; different signatures.1418 1419declare void @round(double %f)1420 1421define void @wrong_signature(ptr %x) {1422; CHECK-LABEL: wrong_signature1423; CHECK-NOT:  load <4 x double>1424; CHECK: ret void1425;1426entry:1427  br label %for.body1428 1429for.body:                                         ; preds = %entry, %for.body1430  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]1431  %arrayidx = getelementptr inbounds double, ptr %x, i64 %indvars.iv1432  %0 = load double, ptr %arrayidx, align 41433  store double %0, ptr %arrayidx, align 41434  tail call void @round(double %0)1435  %indvars.iv.next = add i64 %indvars.iv, 11436  %lftr.wideiv = trunc i64 %indvars.iv.next to i321437  %exitcond = icmp eq i32 %lftr.wideiv, 10241438  br i1 %exitcond, label %for.end, label %for.body1439 1440for.end:                                          ; preds = %for.body1441  ret void1442}1443 1444declare double @llvm.powi.f64.i32(double %Val, i32 %power)1445 1446define void @powi_f64(i32 %n, ptr %y, ptr %x, i32 %P) {1447; CHECK-LABEL: @powi_f64(1448; CHECK: llvm.powi.v4f641449; CHECK: ret void1450;1451entry:1452  %cmp9 = icmp sgt i32 %n, 01453  br i1 %cmp9, label %for.body, label %for.end1454 1455for.body:                                         ; preds = %entry, %for.body1456  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1457  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv1458  %0 = load double, ptr %arrayidx, align 81459  %call = tail call double @llvm.powi.f64.i32(double %0, i32  %P)1460  %arrayidx4 = getelementptr inbounds double, ptr %x, i64 %indvars.iv1461  store double %call, ptr %arrayidx4, align 81462  %indvars.iv.next = add i64 %indvars.iv, 11463  %lftr.wideiv = trunc i64 %indvars.iv.next to i321464  %exitcond = icmp eq i32 %lftr.wideiv, %n1465  br i1 %exitcond, label %for.end, label %for.body1466 1467for.end:                                          ; preds = %for.body, %entry1468  ret void1469}1470 1471define void @powi_f64_neg(i32 %n, ptr %y, ptr %x) {1472; CHECK-LABEL: @powi_f64_neg(1473; CHECK-NOT: llvm.powi.v4f641474; CHECK: ret void1475;1476entry:1477  %cmp9 = icmp sgt i32 %n, 01478  br i1 %cmp9, label %for.body, label %for.end1479 1480for.body:                                         ; preds = %entry, %for.body1481  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1482  %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv1483  %0 = load double, ptr %arrayidx, align 81484  %1 = trunc i64 %indvars.iv to i321485  %call = tail call double @llvm.powi.f64.i32(double %0, i32  %1)1486  %arrayidx4 = getelementptr inbounds double, ptr %x, i64 %indvars.iv1487  store double %call, ptr %arrayidx4, align 81488  %indvars.iv.next = add i64 %indvars.iv, 11489  %lftr.wideiv = trunc i64 %indvars.iv.next to i321490  %exitcond = icmp eq i32 %lftr.wideiv, %n1491  br i1 %exitcond, label %for.end, label %for.body1492 1493for.end:                                          ; preds = %for.body, %entry1494  ret void1495}1496 1497declare i64  @llvm.cttz.i64 (i64, i1)1498 1499define void @cttz_f64(i32 %n, ptr %y, ptr %x) {1500; CHECK-LABEL: @cttz_f64(1501; CHECK: llvm.cttz.v4i641502; CHECK: ret void1503;1504entry:1505  %cmp9 = icmp sgt i32 %n, 01506  br i1 %cmp9, label %for.body, label %for.end1507 1508for.body:                                         ; preds = %entry, %for.body1509  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1510  %arrayidx = getelementptr inbounds i64, ptr %y, i64 %indvars.iv1511  %0 = load i64, ptr %arrayidx, align 81512  %call = tail call i64 @llvm.cttz.i64(i64 %0, i1 true)1513  %arrayidx4 = getelementptr inbounds i64, ptr %x, i64 %indvars.iv1514  store i64 %call, ptr %arrayidx4, align 81515  %indvars.iv.next = add i64 %indvars.iv, 11516  %lftr.wideiv = trunc i64 %indvars.iv.next to i321517  %exitcond = icmp eq i32 %lftr.wideiv, %n1518  br i1 %exitcond, label %for.end, label %for.body1519 1520for.end:                                          ; preds = %for.body, %entry1521  ret void1522}1523 1524declare i64  @llvm.ctlz.i64 (i64, i1)1525 1526define void @ctlz_f64(i32 %n, ptr %y, ptr %x) {1527; CHECK-LABEL: @ctlz_f64(1528; CHECK: llvm.ctlz.v4i641529; CHECK: ret void1530;1531entry:1532  %cmp9 = icmp sgt i32 %n, 01533  br i1 %cmp9, label %for.body, label %for.end1534 1535for.body:                                         ; preds = %entry, %for.body1536  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1537  %arrayidx = getelementptr inbounds i64, ptr %y, i64 %indvars.iv1538  %0 = load i64, ptr %arrayidx, align 81539  %call = tail call i64 @llvm.ctlz.i64(i64 %0, i1 true)1540  %arrayidx4 = getelementptr inbounds i64, ptr %x, i64 %indvars.iv1541  store i64 %call, ptr %arrayidx4, align 81542  %indvars.iv.next = add i64 %indvars.iv, 11543  %lftr.wideiv = trunc i64 %indvars.iv.next to i321544  %exitcond = icmp eq i32 %lftr.wideiv, %n1545  br i1 %exitcond, label %for.end, label %for.body1546 1547for.end:                                          ; preds = %for.body, %entry1548  ret void1549}1550 1551declare i64 @llvm.abs.i64 (i64, i1)1552 1553define void @abs_i64(i32 %n, ptr %y, ptr %x) {1554; CHECK-LABEL: @abs_i64(1555; CHECK: llvm.abs.v4i64(<4 x i64> [[WIDE_LOADX:%.*]], i1 true)1556; CHECK: ret void1557;1558entry:1559  %cmp9 = icmp sgt i32 %n, 01560  br i1 %cmp9, label %for.body, label %for.end1561 1562for.body:                                         ; preds = %entry, %for.body1563  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1564  %arrayidx = getelementptr inbounds i64, ptr %y, i64 %indvars.iv1565  %0 = load i64, ptr %arrayidx, align 81566  %call = tail call i64 @llvm.abs.i64(i64 %0, i1 true)1567  %arrayidx4 = getelementptr inbounds i64, ptr %x, i64 %indvars.iv1568  store i64 %call, ptr %arrayidx4, align 81569  %indvars.iv.next = add i64 %indvars.iv, 11570  %lftr.wideiv = trunc i64 %indvars.iv.next to i321571  %exitcond = icmp eq i32 %lftr.wideiv, %n1572  br i1 %exitcond, label %for.end, label %for.body1573 1574for.end:                                          ; preds = %for.body, %entry1575  ret void1576}1577 1578declare i32 @llvm.smin.i32 (i32, i32)1579 1580define void @smin_i32(i32 %n, ptr %x, ptr %y) {1581; CHECK-LABEL: @smin_i32(1582; CHECK:         call <4 x i32> @llvm.smin.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]])1583; CHECK:         ret void1584;1585entry:1586  %cmp = icmp sgt i32 %n, 01587  br i1 %cmp, label %loop, label %end1588 1589loop:1590  %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]1591  %xi = getelementptr inbounds i32, ptr %x, i32 %iv1592  %yi = getelementptr inbounds i32, ptr %y, i32 %iv1593  %xld = load i32, ptr %xi, align 41594  %yld = load i32, ptr %yi, align 41595  %call = tail call i32 @llvm.smin.i32(i32 %xld, i32 %yld)1596  store i32 %call, ptr %xi, align 41597  %iv.next = add i32 %iv, 11598  %exitcond = icmp eq i32 %iv.next, %n1599  br i1 %exitcond, label %end, label %loop1600 1601end:1602  ret void1603}1604 1605declare i32 @llvm.smax.i32 (i32, i32)1606 1607define void @smax_i32(i32 %n, ptr %x, ptr %y) {1608; CHECK-LABEL: @smax_i32(1609; CHECK:         call <4 x i32> @llvm.smax.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]])1610; CHECK:         ret void1611;1612entry:1613  %cmp = icmp sgt i32 %n, 01614  br i1 %cmp, label %loop, label %end1615 1616loop:1617  %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]1618  %xi = getelementptr inbounds i32, ptr %x, i32 %iv1619  %yi = getelementptr inbounds i32, ptr %y, i32 %iv1620  %xld = load i32, ptr %xi, align 41621  %yld = load i32, ptr %yi, align 41622  %call = tail call i32 @llvm.smax.i32(i32 %xld, i32 %yld)1623  store i32 %call, ptr %xi, align 41624  %iv.next = add i32 %iv, 11625  %exitcond = icmp eq i32 %iv.next, %n1626  br i1 %exitcond, label %end, label %loop1627 1628end:1629  ret void1630}1631 1632declare i32 @llvm.umin.i32 (i32, i32)1633 1634define void @umin_i32(i32 %n, ptr %x, ptr %y) {1635; CHECK-LABEL: @umin_i32(1636; CHECK:         call <4 x i32> @llvm.umin.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]])1637; CHECK:         ret void1638;1639entry:1640  %cmp = icmp sgt i32 %n, 01641  br i1 %cmp, label %loop, label %end1642 1643loop:1644  %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]1645  %xi = getelementptr inbounds i32, ptr %x, i32 %iv1646  %yi = getelementptr inbounds i32, ptr %y, i32 %iv1647  %xld = load i32, ptr %xi, align 41648  %yld = load i32, ptr %yi, align 41649  %call = tail call i32 @llvm.umin.i32(i32 %xld, i32 %yld)1650  store i32 %call, ptr %xi, align 41651  %iv.next = add i32 %iv, 11652  %exitcond = icmp eq i32 %iv.next, %n1653  br i1 %exitcond, label %end, label %loop1654 1655end:1656  ret void1657}1658 1659declare i32 @llvm.umax.i32 (i32, i32)1660 1661define void @umax_i32(i32 %n, ptr %x, ptr %y) {1662; CHECK-LABEL: @umax_i32(1663; CHECK:         call <4 x i32> @llvm.umax.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]])1664; CHECK:         ret void1665;1666entry:1667  %cmp = icmp sgt i32 %n, 01668  br i1 %cmp, label %loop, label %end1669 1670loop:1671  %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]1672  %xi = getelementptr inbounds i32, ptr %x, i32 %iv1673  %yi = getelementptr inbounds i32, ptr %y, i32 %iv1674  %xld = load i32, ptr %xi, align 41675  %yld = load i32, ptr %yi, align 41676  %call = tail call i32 @llvm.umax.i32(i32 %xld, i32 %yld)1677  store i32 %call, ptr %xi, align 41678  %iv.next = add i32 %iv, 11679  %exitcond = icmp eq i32 %iv.next, %n1680  br i1 %exitcond, label %end, label %loop1681 1682end:1683  ret void1684}1685 1686declare i32 @llvm.fshl.i32 (i32, i32, i32)1687 1688define void @fshl_i32(i32 %n, ptr %x, ptr %y, i32 %shAmt) {1689; CHECK-LABEL: @fshl_i32(1690; CHECK:         call <4 x i32> @llvm.fshl.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]], <4 x i32> [[SPLAT:%.*]])1691; CHECK:         ret void1692;1693entry:1694  %cmp = icmp sgt i32 %n, 01695  br i1 %cmp, label %loop, label %end1696 1697loop:1698  %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]1699  %xi = getelementptr inbounds i32, ptr %x, i32 %iv1700  %yi = getelementptr inbounds i32, ptr %y, i32 %iv1701  %xld = load i32, ptr %xi, align 41702  %yld = load i32, ptr %yi, align 41703  %call = tail call i32 @llvm.fshl.i32(i32 %xld, i32 %yld, i32 %shAmt)1704  store i32 %call, ptr %xi, align 41705  %iv.next = add i32 %iv, 11706  %exitcond = icmp eq i32 %iv.next, %n1707  br i1 %exitcond, label %end, label %loop1708 1709end:1710  ret void1711}1712 1713declare i32 @llvm.fshr.i32 (i32, i32, i32)1714 1715define void @fshr_i32(i32 %n, ptr %x, ptr %y, i32 %shAmt) {1716; CHECK-LABEL: @fshr_i32(1717; CHECK:         call <4 x i32> @llvm.fshr.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]], <4 x i32> [[SPLAT:%.*]])1718; CHECK:         ret void1719;1720entry:1721  %cmp = icmp sgt i32 %n, 01722  br i1 %cmp, label %loop, label %end1723 1724loop:1725  %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]1726  %xi = getelementptr inbounds i32, ptr %x, i32 %iv1727  %yi = getelementptr inbounds i32, ptr %y, i32 %iv1728  %xld = load i32, ptr %xi, align 41729  %yld = load i32, ptr %yi, align 41730  %call = tail call i32 @llvm.fshr.i32(i32 %xld, i32 %yld, i32 %shAmt)1731  store i32 %call, ptr %xi, align 41732  %iv.next = add i32 %iv, 11733  %exitcond = icmp eq i32 %iv.next, %n1734  br i1 %exitcond, label %end, label %loop1735 1736end:1737  ret void1738}1739 1740declare float @llvm.minnum.f32(float, float)1741 1742define void @minnum_f32(i32 %n, ptr %y, ptr %x, ptr %z) {1743; CHECK-LABEL: @minnum_f32(1744; CHECK: llvm.minnum.v4f321745; CHECK: ret void1746;1747entry:1748  %cmp9 = icmp sgt i32 %n, 01749  br i1 %cmp9, label %for.body, label %for.end1750 1751for.body:                                         ; preds = %entry, %for.body1752  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1753  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv1754  %0 = load float, ptr %arrayidx, align 41755  %arrayidx2 = getelementptr inbounds float, ptr %z, i64 %indvars.iv1756  %1 = load float, ptr %arrayidx2, align 41757  %call = tail call float @llvm.minnum.f32(float %0, float %1)1758  %arrayidx4 = getelementptr inbounds float, ptr %x, i64 %indvars.iv1759  store float %call, ptr %arrayidx4, align 41760  %indvars.iv.next = add i64 %indvars.iv, 11761  %lftr.wideiv = trunc i64 %indvars.iv.next to i321762  %exitcond = icmp eq i32 %lftr.wideiv, %n1763  br i1 %exitcond, label %for.end, label %for.body1764 1765for.end:                                          ; preds = %for.body, %entry1766  ret void1767}1768 1769declare float @llvm.maxnum.f32(float, float)1770 1771define void @maxnum_f32(i32 %n, ptr %y, ptr %x, ptr %z) {1772; CHECK-LABEL: @maxnum_f32(1773; CHECK: llvm.maxnum.v4f321774; CHECK: ret void1775;1776entry:1777  %cmp9 = icmp sgt i32 %n, 01778  br i1 %cmp9, label %for.body, label %for.end1779 1780for.body:                                         ; preds = %entry, %for.body1781  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1782  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv1783  %0 = load float, ptr %arrayidx, align 41784  %arrayidx2 = getelementptr inbounds float, ptr %z, i64 %indvars.iv1785  %1 = load float, ptr %arrayidx2, align 41786  %call = tail call float @llvm.maxnum.f32(float %0, float %1)1787  %arrayidx4 = getelementptr inbounds float, ptr %x, i64 %indvars.iv1788  store float %call, ptr %arrayidx4, align 41789  %indvars.iv.next = add i64 %indvars.iv, 11790  %lftr.wideiv = trunc i64 %indvars.iv.next to i321791  %exitcond = icmp eq i32 %lftr.wideiv, %n1792  br i1 %exitcond, label %for.end, label %for.body1793 1794for.end:                                          ; preds = %for.body, %entry1795  ret void1796}1797 1798declare float @llvm.minimum.f32(float, float)1799 1800define void @minimum_f32(i32 %n, ptr %y, ptr %x, ptr %z) {1801; CHECK-LABEL: @minimum_f32(1802; CHECK: llvm.minimum.v4f321803; CHECK: ret void1804;1805entry:1806  %cmp9 = icmp sgt i32 %n, 01807  br i1 %cmp9, label %for.body, label %for.end1808 1809for.body:                                         ; preds = %entry, %for.body1810  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1811  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv1812  %0 = load float, ptr %arrayidx, align 41813  %arrayidx2 = getelementptr inbounds float, ptr %z, i64 %indvars.iv1814  %1 = load float, ptr %arrayidx2, align 41815  %call = tail call float @llvm.minimum.f32(float %0, float %1)1816  %arrayidx4 = getelementptr inbounds float, ptr %x, i64 %indvars.iv1817  store float %call, ptr %arrayidx4, align 41818  %indvars.iv.next = add i64 %indvars.iv, 11819  %lftr.wideiv = trunc i64 %indvars.iv.next to i321820  %exitcond = icmp eq i32 %lftr.wideiv, %n1821  br i1 %exitcond, label %for.end, label %for.body1822 1823for.end:                                          ; preds = %for.body, %entry1824  ret void1825}1826 1827declare float @llvm.maximum.f32(float, float)1828 1829define void @maximum_f32(i32 %n, ptr %y, ptr %x, ptr %z) {1830; CHECK-LABEL: @maximum_f32(1831; CHECK: llvm.maximum.v4f321832; CHECK: ret void1833;1834entry:1835  %cmp9 = icmp sgt i32 %n, 01836  br i1 %cmp9, label %for.body, label %for.end1837 1838for.body:                                         ; preds = %entry, %for.body1839  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]1840  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv1841  %0 = load float, ptr %arrayidx, align 41842  %arrayidx2 = getelementptr inbounds float, ptr %z, i64 %indvars.iv1843  %1 = load float, ptr %arrayidx2, align 41844  %call = tail call float @llvm.maximum.f32(float %0, float %1)1845  %arrayidx4 = getelementptr inbounds float, ptr %x, i64 %indvars.iv1846  store float %call, ptr %arrayidx4, align 41847  %indvars.iv.next = add i64 %indvars.iv, 11848  %lftr.wideiv = trunc i64 %indvars.iv.next to i321849  %exitcond = icmp eq i32 %lftr.wideiv, %n1850  br i1 %exitcond, label %for.end, label %for.body1851 1852for.end:                                          ; preds = %for.body, %entry1853  ret void1854}1855 1856declare i32 @llvm.lrint.i32.f32(float)1857 1858define void @lrint_i32_f32(ptr %x, ptr %y, i64 %n) {1859; CHECK-LABEL: @lrint_i32_f32(1860; CHECK: llvm.lrint.v4i32.v4f321861; CHECK: ret void1862;1863entry:1864  %cmp = icmp sgt i64 %n, 01865  br i1 %cmp, label %for.body, label %exit1866 1867for.body:                                         ; preds = %entry, %for.body1868  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1869  %gep.load = getelementptr inbounds float, ptr %x, i64 %iv1870  %0 = load float, ptr %gep.load, align 41871  %1 = tail call i32 @llvm.lrint.i32.f32(float %0)1872  %gep.store = getelementptr inbounds i32, ptr %y, i64 %iv1873  store i32 %1, ptr %gep.store, align 41874  %iv.next = add nuw nsw i64 %iv, 11875  %exitcond = icmp eq i64 %iv.next, %n1876  br i1 %exitcond, label %exit, label %for.body1877 1878exit:                                            ; preds = %for.body, %entry1879  ret void1880}1881 1882declare i64 @llvm.llrint.i64.f32(float)1883 1884define void @llrint_i64_f32(ptr %x, ptr %y, i64 %n) {1885; CHECK-LABEL: @llrint_i64_f32(1886; CHECK: llvm.llrint.v4i64.v4f321887; CHECK: ret void1888;1889entry:1890  %cmp = icmp sgt i64 %n, 01891  br i1 %cmp, label %for.body, label %exit1892 1893for.body:                                         ; preds = %entry, %for.body1894  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1895  %gep.load = getelementptr inbounds float, ptr %x, i64 %iv1896  %0 = load float, ptr %gep.load, align 41897  %1 = tail call i64 @llvm.llrint.i64.f32(float %0)1898  %gep.store = getelementptr inbounds i64, ptr %y, i64 %iv1899  store i64 %1, ptr %gep.store, align 41900  %iv.next = add nuw nsw i64 %iv, 11901  %exitcond = icmp eq i64 %iv.next, %n1902  br i1 %exitcond, label %exit, label %for.body1903 1904exit:                                            ; preds = %for.body, %entry1905  ret void1906}1907