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