brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.1 KiB · b3a5836 Raw
808 lines · plain
1; RUN: opt < %s -vector-library=Accelerate -passes=inject-tli-mappings,loop-vectorize -S | FileCheck %s2 3target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"4target triple = "x86_64-unknown-linux-gnu"5 6;CHECK-LABEL: @sqrt_f32(7;CHECK: vsqrtf{{.*}}<4 x float>8;CHECK: ret void9declare float @sqrtf(float) nounwind readnone10define void @sqrt_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {11entry:12  %cmp6 = icmp sgt i32 %n, 013  br i1 %cmp6, label %for.body, label %for.end14 15for.body:                                         ; preds = %entry, %for.body16  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]17  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv18  %0 = load float, ptr %arrayidx, align 419  %call = tail call float @sqrtf(float %0) nounwind readnone20  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv21  store float %call, ptr %arrayidx2, align 422  %indvars.iv.next = add i64 %indvars.iv, 123  %lftr.wideiv = trunc i64 %indvars.iv.next to i3224  %exitcond = icmp eq i32 %lftr.wideiv, %n25  br i1 %exitcond, label %for.end, label %for.body26 27for.end:                                          ; preds = %for.body, %entry28  ret void29}30 31;CHECK-LABEL: @exp_f32(32;CHECK: vexpf{{.*}}<4 x float>33;CHECK: ret void34declare float @expf(float) nounwind readnone35define void @exp_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {36entry:37  %cmp6 = icmp sgt i32 %n, 038  br i1 %cmp6, label %for.body, label %for.end39 40for.body:                                         ; preds = %entry, %for.body41  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]42  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv43  %0 = load float, ptr %arrayidx, align 444  %call = tail call float @expf(float %0) nounwind readnone45  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv46  store float %call, ptr %arrayidx2, align 447  %indvars.iv.next = add i64 %indvars.iv, 148  %lftr.wideiv = trunc i64 %indvars.iv.next to i3249  %exitcond = icmp eq i32 %lftr.wideiv, %n50  br i1 %exitcond, label %for.end, label %for.body51 52for.end:                                          ; preds = %for.body, %entry53  ret void54}55 56;CHECK-LABEL: @log_f32(57;CHECK: vlogf{{.*}}<4 x float>58;CHECK: ret void59declare float @logf(float) nounwind readnone60define void @log_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {61entry:62  %cmp6 = icmp sgt i32 %n, 063  br i1 %cmp6, label %for.body, label %for.end64 65for.body:                                         ; preds = %entry, %for.body66  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]67  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv68  %0 = load float, ptr %arrayidx, align 469  %call = tail call float @logf(float %0) nounwind readnone70  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv71  store float %call, ptr %arrayidx2, align 472  %indvars.iv.next = add i64 %indvars.iv, 173  %lftr.wideiv = trunc i64 %indvars.iv.next to i3274  %exitcond = icmp eq i32 %lftr.wideiv, %n75  br i1 %exitcond, label %for.end, label %for.body76 77for.end:                                          ; preds = %for.body, %entry78  ret void79}80 81; For abs instruction we'll generate vector intrinsic, as it's cheaper than a lib call.82;CHECK-LABEL: @fabs_f32(83;CHECK: fabs{{.*}}<4 x float>84;CHECK: ret void85declare float @fabsf(float) nounwind readnone86define void @fabs_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {87entry:88  %cmp6 = icmp sgt i32 %n, 089  br i1 %cmp6, label %for.body, label %for.end90 91for.body:                                         ; preds = %entry, %for.body92  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]93  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv94  %0 = load float, ptr %arrayidx, align 495  %call = tail call float @fabsf(float %0) nounwind readnone96  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv97  store float %call, ptr %arrayidx2, align 498  %indvars.iv.next = add i64 %indvars.iv, 199  %lftr.wideiv = trunc i64 %indvars.iv.next to i32100  %exitcond = icmp eq i32 %lftr.wideiv, %n101  br i1 %exitcond, label %for.end, label %for.body102 103for.end:                                          ; preds = %for.body, %entry104  ret void105}106 107; Test that we can vectorize an intrinsic into a vector call.108;CHECK-LABEL: @exp_f32_intrin(109;CHECK: vexpf{{.*}}<4 x float>110;CHECK: ret void111declare float @llvm.exp.f32(float) nounwind readnone112define void @exp_f32_intrin(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {113entry:114  %cmp6 = icmp sgt i32 %n, 0115  br i1 %cmp6, label %for.body, label %for.end116 117for.body:                                         ; preds = %entry, %for.body118  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]119  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv120  %0 = load float, ptr %arrayidx, align 4121  %call = tail call float @llvm.exp.f32(float %0) nounwind readnone122  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv123  store float %call, ptr %arrayidx2, align 4124  %indvars.iv.next = add i64 %indvars.iv, 1125  %lftr.wideiv = trunc i64 %indvars.iv.next to i32126  %exitcond = icmp eq i32 %lftr.wideiv, %n127  br i1 %exitcond, label %for.end, label %for.body128 129for.end:                                          ; preds = %for.body, %entry130  ret void131}132 133; Test that we don't vectorize arbitrary functions.134;CHECK-LABEL: @foo_f32(135;CHECK-NOT: foo{{.*}}<4 x float>136;CHECK: ret void137declare float @foo(float) nounwind readnone138define void @foo_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {139entry:140  %cmp6 = icmp sgt i32 %n, 0141  br i1 %cmp6, label %for.body, label %for.end142 143for.body:                                         ; preds = %entry, %for.body144  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]145  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv146  %0 = load float, ptr %arrayidx, align 4147  %call = tail call float @foo(float %0) nounwind readnone148  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv149  store float %call, ptr %arrayidx2, align 4150  %indvars.iv.next = add i64 %indvars.iv, 1151  %lftr.wideiv = trunc i64 %indvars.iv.next to i32152  %exitcond = icmp eq i32 %lftr.wideiv, %n153  br i1 %exitcond, label %for.end, label %for.body154 155for.end:                                          ; preds = %for.body, %entry156  ret void157}158 159; Test that we don't vectorize calls with nobuiltin attribute.160;CHECK-LABEL: @sqrt_f32_nobuiltin(161;CHECK-NOT: vsqrtf{{.*}}<4 x float>162;CHECK: ret void163define void @sqrt_f32_nobuiltin(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {164entry:165  %cmp6 = icmp sgt i32 %n, 0166  br i1 %cmp6, label %for.body, label %for.end167 168for.body:                                         ; preds = %entry, %for.body169  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]170  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv171  %0 = load float, ptr %arrayidx, align 4172  %call = tail call float @sqrtf(float %0) nounwind readnone nobuiltin173  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv174  store float %call, ptr %arrayidx2, align 4175  %indvars.iv.next = add i64 %indvars.iv, 1176  %lftr.wideiv = trunc i64 %indvars.iv.next to i32177  %exitcond = icmp eq i32 %lftr.wideiv, %n178  br i1 %exitcond, label %for.end, label %for.body179 180for.end:                                          ; preds = %for.body, %entry181  ret void182}183 184;CHECK-LABEL: @ceil_f32(185;CHECK: vceilf{{.*}}<4 x float>186;CHECK: ret void187declare float @ceilf(float) nounwind readnone188define void @ceil_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {189entry:190  %cmp6 = icmp sgt i32 %n, 0191  br i1 %cmp6, label %for.body, label %for.end192 193for.body:                                         ; preds = %entry, %for.body194  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]195  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv196  %0 = load float, ptr %arrayidx, align 4197  %call = tail call float @ceilf(float %0) nounwind readnone198  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv199  store float %call, ptr %arrayidx2, align 4200  %indvars.iv.next = add i64 %indvars.iv, 1201  %lftr.wideiv = trunc i64 %indvars.iv.next to i32202  %exitcond = icmp eq i32 %lftr.wideiv, %n203  br i1 %exitcond, label %for.end, label %for.body204 205for.end:                                          ; preds = %for.body, %entry206  ret void207}208 209;CHECK-LABEL: @floor_f32(210;CHECK: vfloorf{{.*}}<4 x float>211;CHECK: ret void212declare float @floorf(float) nounwind readnone213define void @floor_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {214entry:215  %cmp6 = icmp sgt i32 %n, 0216  br i1 %cmp6, label %for.body, label %for.end217 218for.body:                                         ; preds = %entry, %for.body219  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]220  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv221  %0 = load float, ptr %arrayidx, align 4222  %call = tail call float @floorf(float %0) nounwind readnone223  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv224  store float %call, ptr %arrayidx2, align 4225  %indvars.iv.next = add i64 %indvars.iv, 1226  %lftr.wideiv = trunc i64 %indvars.iv.next to i32227  %exitcond = icmp eq i32 %lftr.wideiv, %n228  br i1 %exitcond, label %for.end, label %for.body229 230for.end:                                          ; preds = %for.body, %entry231  ret void232}233 234;CHECK-LABEL: @expm1_f32(235;CHECK: vexpm1f{{.*}}<4 x float>236;CHECK: ret void237declare float @expm1f(float) nounwind readnone238define void @expm1_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {239entry:240  %cmp6 = icmp sgt i32 %n, 0241  br i1 %cmp6, label %for.body, label %for.end242 243for.body:                                         ; preds = %entry, %for.body244  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]245  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv246  %0 = load float, ptr %arrayidx, align 4247  %call = tail call float @expm1f(float %0) nounwind readnone248  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv249  store float %call, ptr %arrayidx2, align 4250  %indvars.iv.next = add i64 %indvars.iv, 1251  %lftr.wideiv = trunc i64 %indvars.iv.next to i32252  %exitcond = icmp eq i32 %lftr.wideiv, %n253  br i1 %exitcond, label %for.end, label %for.body254 255for.end:                                          ; preds = %for.body, %entry256  ret void257}258 259;CHECK-LABEL: @log1p_f32(260;CHECK: vlog1pf{{.*}}<4 x float>261;CHECK: ret void262declare float @log1pf(float) nounwind readnone263define void @log1p_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {264entry:265  %cmp6 = icmp sgt i32 %n, 0266  br i1 %cmp6, label %for.body, label %for.end267 268for.body:                                         ; preds = %entry, %for.body269  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]270  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv271  %0 = load float, ptr %arrayidx, align 4272  %call = tail call float @log1pf(float %0) nounwind readnone273  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv274  store float %call, ptr %arrayidx2, align 4275  %indvars.iv.next = add i64 %indvars.iv, 1276  %lftr.wideiv = trunc i64 %indvars.iv.next to i32277  %exitcond = icmp eq i32 %lftr.wideiv, %n278  br i1 %exitcond, label %for.end, label %for.body279 280for.end:                                          ; preds = %for.body, %entry281  ret void282}283 284;CHECK-LABEL: @log10_f32(285;CHECK: vlog10f{{.*}}<4 x float>286;CHECK: ret void287declare float @log10f(float) nounwind readnone288define void @log10_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {289entry:290  %cmp6 = icmp sgt i32 %n, 0291  br i1 %cmp6, label %for.body, label %for.end292 293for.body:                                         ; preds = %entry, %for.body294  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]295  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv296  %0 = load float, ptr %arrayidx, align 4297  %call = tail call float @log10f(float %0) nounwind readnone298  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv299  store float %call, ptr %arrayidx2, align 4300  %indvars.iv.next = add i64 %indvars.iv, 1301  %lftr.wideiv = trunc i64 %indvars.iv.next to i32302  %exitcond = icmp eq i32 %lftr.wideiv, %n303  br i1 %exitcond, label %for.end, label %for.body304 305for.end:                                          ; preds = %for.body, %entry306  ret void307}308 309;CHECK-LABEL: @logb_f32(310;CHECK: vlogbf{{.*}}<4 x float>311;CHECK: ret void312declare float @logbf(float) nounwind readnone313define void @logb_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {314entry:315  %cmp6 = icmp sgt i32 %n, 0316  br i1 %cmp6, label %for.body, label %for.end317 318for.body:                                         ; preds = %entry, %for.body319  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]320  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv321  %0 = load float, ptr %arrayidx, align 4322  %call = tail call float @logbf(float %0) nounwind readnone323  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv324  store float %call, ptr %arrayidx2, align 4325  %indvars.iv.next = add i64 %indvars.iv, 1326  %lftr.wideiv = trunc i64 %indvars.iv.next to i32327  %exitcond = icmp eq i32 %lftr.wideiv, %n328  br i1 %exitcond, label %for.end, label %for.body329 330for.end:                                          ; preds = %for.body, %entry331  ret void332}333 334;CHECK-LABEL: @sin_f32(335;CHECK: vsinf{{.*}}<4 x float>336;CHECK: ret void337declare float @sinf(float) nounwind readnone338define void @sin_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {339entry:340  %cmp6 = icmp sgt i32 %n, 0341  br i1 %cmp6, label %for.body, label %for.end342 343for.body:                                         ; preds = %entry, %for.body344  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]345  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv346  %0 = load float, ptr %arrayidx, align 4347  %call = tail call float @sinf(float %0) nounwind readnone348  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv349  store float %call, ptr %arrayidx2, align 4350  %indvars.iv.next = add i64 %indvars.iv, 1351  %lftr.wideiv = trunc i64 %indvars.iv.next to i32352  %exitcond = icmp eq i32 %lftr.wideiv, %n353  br i1 %exitcond, label %for.end, label %for.body354 355for.end:                                          ; preds = %for.body, %entry356  ret void357}358 359;CHECK-LABEL: @cos_f32(360;CHECK: vcosf{{.*}}<4 x float>361;CHECK: ret void362declare float @cosf(float) nounwind readnone363define void @cos_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {364entry:365  %cmp6 = icmp sgt i32 %n, 0366  br i1 %cmp6, label %for.body, label %for.end367 368for.body:                                         ; preds = %entry, %for.body369  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]370  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv371  %0 = load float, ptr %arrayidx, align 4372  %call = tail call float @cosf(float %0) nounwind readnone373  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv374  store float %call, ptr %arrayidx2, align 4375  %indvars.iv.next = add i64 %indvars.iv, 1376  %lftr.wideiv = trunc i64 %indvars.iv.next to i32377  %exitcond = icmp eq i32 %lftr.wideiv, %n378  br i1 %exitcond, label %for.end, label %for.body379 380for.end:                                          ; preds = %for.body, %entry381  ret void382}383 384;CHECK-LABEL: @tan_f32(385;CHECK: vtanf{{.*}}<4 x float>386;CHECK: ret void387declare float @tanf(float) nounwind readnone388define void @tan_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {389entry:390  %cmp6 = icmp sgt i32 %n, 0391  br i1 %cmp6, label %for.body, label %for.end392 393for.body:                                         ; preds = %entry, %for.body394  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]395  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv396  %0 = load float, ptr %arrayidx, align 4397  %call = tail call float @tanf(float %0) nounwind readnone398  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv399  store float %call, ptr %arrayidx2, align 4400  %indvars.iv.next = add i64 %indvars.iv, 1401  %lftr.wideiv = trunc i64 %indvars.iv.next to i32402  %exitcond = icmp eq i32 %lftr.wideiv, %n403  br i1 %exitcond, label %for.end, label %for.body404 405for.end:                                          ; preds = %for.body, %entry406  ret void407}408 409;CHECK-LABEL: @tan_f32_intrinsic(410;CHECK: vtanf{{.*}}<4 x float>411;CHECK: ret void412declare float @llvm.tan.f32(float) nounwind readnone413define void @tan_f32_intrinsic(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {414entry:415  %cmp6 = icmp sgt i32 %n, 0416  br i1 %cmp6, label %for.body, label %for.end417 418for.body:                                         ; preds = %entry, %for.body419  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]420  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv421  %0 = load float, ptr %arrayidx, align 4422  %call = tail call float @llvm.tan.f32(float %0) nounwind readnone423  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv424  store float %call, ptr %arrayidx2, align 4425  %indvars.iv.next = add i64 %indvars.iv, 1426  %lftr.wideiv = trunc i64 %indvars.iv.next to i32427  %exitcond = icmp eq i32 %lftr.wideiv, %n428  br i1 %exitcond, label %for.end, label %for.body429 430for.end:                                          ; preds = %for.body, %entry431  ret void432}433 434;CHECK-LABEL: @asin_f32(435;CHECK: vasinf{{.*}}<4 x float>436;CHECK: ret void437declare float @asinf(float) nounwind readnone438define void @asin_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {439entry:440  %cmp6 = icmp sgt i32 %n, 0441  br i1 %cmp6, label %for.body, label %for.end442 443for.body:                                         ; preds = %entry, %for.body444  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]445  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv446  %0 = load float, ptr %arrayidx, align 4447  %call = tail call float @asinf(float %0) nounwind readnone448  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv449  store float %call, ptr %arrayidx2, align 4450  %indvars.iv.next = add i64 %indvars.iv, 1451  %lftr.wideiv = trunc i64 %indvars.iv.next to i32452  %exitcond = icmp eq i32 %lftr.wideiv, %n453  br i1 %exitcond, label %for.end, label %for.body454 455for.end:                                          ; preds = %for.body, %entry456  ret void457}458 459;CHECK-LABEL: @asin_f32_intrinsic(460;CHECK: vasinf{{.*}}<4 x float>461;CHECK: ret void462declare float @llvm.asin.f32(float) nounwind readnone463define void @asin_f32_intrinsic(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {464entry:465  %cmp6 = icmp sgt i32 %n, 0466  br i1 %cmp6, label %for.body, label %for.end467 468for.body:                                         ; preds = %entry, %for.body469  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]470  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv471  %0 = load float, ptr %arrayidx, align 4472  %call = tail call float @llvm.asin.f32(float %0) nounwind readnone473  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv474  store float %call, ptr %arrayidx2, align 4475  %indvars.iv.next = add i64 %indvars.iv, 1476  %lftr.wideiv = trunc i64 %indvars.iv.next to i32477  %exitcond = icmp eq i32 %lftr.wideiv, %n478  br i1 %exitcond, label %for.end, label %for.body479 480for.end:                                          ; preds = %for.body, %entry481  ret void482}483 484;CHECK-LABEL: @acos_f32(485;CHECK: vacosf{{.*}}<4 x float>486;CHECK: ret void487declare float @acosf(float) nounwind readnone488define void @acos_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {489entry:490  %cmp6 = icmp sgt i32 %n, 0491  br i1 %cmp6, label %for.body, label %for.end492 493for.body:                                         ; preds = %entry, %for.body494  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]495  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv496  %0 = load float, ptr %arrayidx, align 4497  %call = tail call float @acosf(float %0) nounwind readnone498  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv499  store float %call, ptr %arrayidx2, align 4500  %indvars.iv.next = add i64 %indvars.iv, 1501  %lftr.wideiv = trunc i64 %indvars.iv.next to i32502  %exitcond = icmp eq i32 %lftr.wideiv, %n503  br i1 %exitcond, label %for.end, label %for.body504 505for.end:                                          ; preds = %for.body, %entry506  ret void507}508 509;CHECK-LABEL: @acos_f32_intrinsic(510;CHECK: vacosf{{.*}}<4 x float>511;CHECK: ret void512declare float @llvm.acos.f32(float) nounwind readnone513define void @acos_f32_intrinsic(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {514entry:515  %cmp6 = icmp sgt i32 %n, 0516  br i1 %cmp6, label %for.body, label %for.end517 518for.body:                                         ; preds = %entry, %for.body519  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]520  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv521  %0 = load float, ptr %arrayidx, align 4522  %call = tail call float @llvm.acos.f32(float %0) nounwind readnone523  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv524  store float %call, ptr %arrayidx2, align 4525  %indvars.iv.next = add i64 %indvars.iv, 1526  %lftr.wideiv = trunc i64 %indvars.iv.next to i32527  %exitcond = icmp eq i32 %lftr.wideiv, %n528  br i1 %exitcond, label %for.end, label %for.body529 530for.end:                                          ; preds = %for.body, %entry531  ret void532}533 534;CHECK-LABEL: @atan_f32(535;CHECK: vatanf{{.*}}<4 x float>536;CHECK: ret void537declare float @atanf(float) nounwind readnone538define void @atan_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {539entry:540  %cmp6 = icmp sgt i32 %n, 0541  br i1 %cmp6, label %for.body, label %for.end542 543for.body:                                         ; preds = %entry, %for.body544  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]545  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv546  %0 = load float, ptr %arrayidx, align 4547  %call = tail call float @atanf(float %0) nounwind readnone548  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv549  store float %call, ptr %arrayidx2, align 4550  %indvars.iv.next = add i64 %indvars.iv, 1551  %lftr.wideiv = trunc i64 %indvars.iv.next to i32552  %exitcond = icmp eq i32 %lftr.wideiv, %n553  br i1 %exitcond, label %for.end, label %for.body554 555for.end:                                          ; preds = %for.body, %entry556  ret void557}558 559;CHECK-LABEL: @atan_f32_intrinsic(560;CHECK: vatanf{{.*}}<4 x float>561;CHECK: ret void562declare float @llvm.atan.f32(float) nounwind readnone563define void @atan_f32_intrinsic(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {564entry:565  %cmp6 = icmp sgt i32 %n, 0566  br i1 %cmp6, label %for.body, label %for.end567 568for.body:                                         ; preds = %entry, %for.body569  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]570  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv571  %0 = load float, ptr %arrayidx, align 4572  %call = tail call float @llvm.atan.f32(float %0) nounwind readnone573  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv574  store float %call, ptr %arrayidx2, align 4575  %indvars.iv.next = add i64 %indvars.iv, 1576  %lftr.wideiv = trunc i64 %indvars.iv.next to i32577  %exitcond = icmp eq i32 %lftr.wideiv, %n578  br i1 %exitcond, label %for.end, label %for.body579 580for.end:                                          ; preds = %for.body, %entry581  ret void582}583 584;CHECK-LABEL: @sinh_f32(585;CHECK: vsinhf{{.*}}<4 x float>586;CHECK: ret void587declare float @sinhf(float) nounwind readnone588define void @sinh_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {589entry:590  %cmp6 = icmp sgt i32 %n, 0591  br i1 %cmp6, label %for.body, label %for.end592 593for.body:                                         ; preds = %entry, %for.body594  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]595  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv596  %0 = load float, ptr %arrayidx, align 4597  %call = tail call float @sinhf(float %0) nounwind readnone598  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv599  store float %call, ptr %arrayidx2, align 4600  %indvars.iv.next = add i64 %indvars.iv, 1601  %lftr.wideiv = trunc i64 %indvars.iv.next to i32602  %exitcond = icmp eq i32 %lftr.wideiv, %n603  br i1 %exitcond, label %for.end, label %for.body604 605for.end:                                          ; preds = %for.body, %entry606  ret void607}608 609;CHECK-LABEL: @sinh_f32_intrinsic(610;CHECK: vsinhf{{.*}}<4 x float>611;CHECK: ret void612declare float @llvm.sinh.f32(float) nounwind readnone613define void @sinh_f32_intrinsic(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {614entry:615  %cmp6 = icmp sgt i32 %n, 0616  br i1 %cmp6, label %for.body, label %for.end617 618for.body:                                         ; preds = %entry, %for.body619  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]620  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv621  %0 = load float, ptr %arrayidx, align 4622  %call = tail call float @llvm.sinh.f32(float %0) nounwind readnone623  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv624  store float %call, ptr %arrayidx2, align 4625  %indvars.iv.next = add i64 %indvars.iv, 1626  %lftr.wideiv = trunc i64 %indvars.iv.next to i32627  %exitcond = icmp eq i32 %lftr.wideiv, %n628  br i1 %exitcond, label %for.end, label %for.body629 630for.end:                                          ; preds = %for.body, %entry631  ret void632}633 634;CHECK-LABEL: @cosh_f32(635;CHECK: vcoshf{{.*}}<4 x float>636;CHECK: ret void637declare float @coshf(float) nounwind readnone638define void @cosh_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {639entry:640  %cmp6 = icmp sgt i32 %n, 0641  br i1 %cmp6, label %for.body, label %for.end642 643for.body:                                         ; preds = %entry, %for.body644  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]645  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv646  %0 = load float, ptr %arrayidx, align 4647  %call = tail call float @coshf(float %0) nounwind readnone648  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv649  store float %call, ptr %arrayidx2, align 4650  %indvars.iv.next = add i64 %indvars.iv, 1651  %lftr.wideiv = trunc i64 %indvars.iv.next to i32652  %exitcond = icmp eq i32 %lftr.wideiv, %n653  br i1 %exitcond, label %for.end, label %for.body654 655for.end:                                          ; preds = %for.body, %entry656  ret void657}658 659;CHECK-LABEL: @cosh_f32_intrinsic(660;CHECK: vcoshf{{.*}}<4 x float>661;CHECK: ret void662declare float @llvm.cosh.f32(float) nounwind readnone663define void @cosh_f32_intrinsic(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {664entry:665  %cmp6 = icmp sgt i32 %n, 0666  br i1 %cmp6, label %for.body, label %for.end667 668for.body:                                         ; preds = %entry, %for.body669  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]670  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv671  %0 = load float, ptr %arrayidx, align 4672  %call = tail call float @llvm.cosh.f32(float %0) nounwind readnone673  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv674  store float %call, ptr %arrayidx2, align 4675  %indvars.iv.next = add i64 %indvars.iv, 1676  %lftr.wideiv = trunc i64 %indvars.iv.next to i32677  %exitcond = icmp eq i32 %lftr.wideiv, %n678  br i1 %exitcond, label %for.end, label %for.body679 680for.end:                                          ; preds = %for.body, %entry681  ret void682}683 684;CHECK-LABEL: @tanh_f32(685;CHECK: vtanhf{{.*}}<4 x float>686;CHECK: ret void687declare float @tanhf(float) nounwind readnone688define void @tanh_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {689entry:690  %cmp6 = icmp sgt i32 %n, 0691  br i1 %cmp6, label %for.body, label %for.end692 693for.body:                                         ; preds = %entry, %for.body694  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]695  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv696  %0 = load float, ptr %arrayidx, align 4697  %call = tail call float @tanhf(float %0) nounwind readnone698  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv699  store float %call, ptr %arrayidx2, align 4700  %indvars.iv.next = add i64 %indvars.iv, 1701  %lftr.wideiv = trunc i64 %indvars.iv.next to i32702  %exitcond = icmp eq i32 %lftr.wideiv, %n703  br i1 %exitcond, label %for.end, label %for.body704 705for.end:                                          ; preds = %for.body, %entry706  ret void707}708 709;CHECK-LABEL: @tanh_f32_intrinsic(710;CHECK: vtanhf{{.*}}<4 x float>711;CHECK: ret void712declare float @llvm.tanh.f32(float) nounwind readnone713define void @tanh_f32_intrinsic(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {714entry:715  %cmp6 = icmp sgt i32 %n, 0716  br i1 %cmp6, label %for.body, label %for.end717 718for.body:                                         ; preds = %entry, %for.body719  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]720  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv721  %0 = load float, ptr %arrayidx, align 4722  %call = tail call float @llvm.tanh.f32(float %0) nounwind readnone723  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv724  store float %call, ptr %arrayidx2, align 4725  %indvars.iv.next = add i64 %indvars.iv, 1726  %lftr.wideiv = trunc i64 %indvars.iv.next to i32727  %exitcond = icmp eq i32 %lftr.wideiv, %n728  br i1 %exitcond, label %for.end, label %for.body729 730for.end:                                          ; preds = %for.body, %entry731  ret void732}733 734;CHECK-LABEL: @asinh_f32(735;CHECK: vasinhf{{.*}}<4 x float>736;CHECK: ret void737declare float @asinhf(float) nounwind readnone738define void @asinh_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {739entry:740  %cmp6 = icmp sgt i32 %n, 0741  br i1 %cmp6, label %for.body, label %for.end742 743for.body:                                         ; preds = %entry, %for.body744  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]745  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv746  %0 = load float, ptr %arrayidx, align 4747  %call = tail call float @asinhf(float %0) nounwind readnone748  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv749  store float %call, ptr %arrayidx2, align 4750  %indvars.iv.next = add i64 %indvars.iv, 1751  %lftr.wideiv = trunc i64 %indvars.iv.next to i32752  %exitcond = icmp eq i32 %lftr.wideiv, %n753  br i1 %exitcond, label %for.end, label %for.body754 755for.end:                                          ; preds = %for.body, %entry756  ret void757}758 759;CHECK-LABEL: @acosh_f32(760;CHECK: vacoshf{{.*}}<4 x float>761;CHECK: ret void762declare float @acoshf(float) nounwind readnone763define void @acosh_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {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 @acoshf(float %0) nounwind readnone773  %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 784;CHECK-LABEL: @atanh_f32(785;CHECK: vatanhf{{.*}}<4 x float>786;CHECK: ret void787declare float @atanhf(float) nounwind readnone788define void @atanh_f32(i32 %n, ptr noalias %y, ptr noalias %x) nounwind uwtable {789entry:790  %cmp6 = icmp sgt i32 %n, 0791  br i1 %cmp6, label %for.body, label %for.end792 793for.body:                                         ; preds = %entry, %for.body794  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]795  %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv796  %0 = load float, ptr %arrayidx, align 4797  %call = tail call float @atanhf(float %0) nounwind readnone798  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv799  store float %call, ptr %arrayidx2, align 4800  %indvars.iv.next = add i64 %indvars.iv, 1801  %lftr.wideiv = trunc i64 %indvars.iv.next to i32802  %exitcond = icmp eq i32 %lftr.wideiv, %n803  br i1 %exitcond, label %for.end, label %for.body804 805for.end:                                          ; preds = %for.body, %entry806  ret void807}808