177 lines · plain
1; RUN: opt -vector-library=LIBMVEC -passes=inject-tli-mappings,loop-vectorize -S < %s | FileCheck %s2target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"3target triple = "x86_64-unknown-linux-gnu"4 5define void @exp_f32(ptr nocapture %varray) {6; CHECK-LABEL: @exp_f327; CHECK-LABEL: vector.body8; CHECK: <4 x float> @_ZGVbN4v___expf_finite9; CHECK: ret10entry:11 br label %for.body12 13for.body: ; preds = %for.body, %entry14 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]15 %tmp = trunc i64 %indvars.iv to i3216 %conv = sitofp i32 %tmp to float17 %call = tail call fast float @__expf_finite(float %conv)18 %arrayidx = getelementptr inbounds float, ptr %varray, i64 %indvars.iv19 store float %call, ptr %arrayidx, align 420 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 121 %exitcond = icmp eq i64 %indvars.iv.next, 100022 br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !123 24for.end: ; preds = %for.body25 ret void26}27 28!1 = distinct !{!1, !2, !3}29!2 = !{!"llvm.loop.vectorize.width", i32 4}30!3 = !{!"llvm.loop.vectorize.enable", i1 true}31 32define void @exp_f64(ptr nocapture %varray) {33; CHECK-LABEL: @exp_f6434; CHECK-LABEL: vector.body35; CHECK: <4 x double> @_ZGVdN4v___exp_finite36; CHECK: ret37entry:38 br label %for.body39 40for.body: ; preds = %for.body, %entry41 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]42 %tmp = trunc i64 %indvars.iv to i3243 %conv = sitofp i32 %tmp to double44 %call = tail call fast double @__exp_finite(double %conv)45 %arrayidx = getelementptr inbounds double, ptr %varray, i64 %indvars.iv46 store double %call, ptr %arrayidx, align 447 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 148 %exitcond = icmp eq i64 %indvars.iv.next, 100049 br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !1150 51for.end: ; preds = %for.body52 ret void53}54 55!11 = distinct !{!11, !12, !13}56!12 = !{!"llvm.loop.vectorize.width", i32 4}57!13 = !{!"llvm.loop.vectorize.enable", i1 true}58 59define void @log_f32(ptr nocapture %varray) {60; CHECK-LABEL: @log_f3261; CHECK-LABEL: vector.body62; CHECK: <4 x float> @_ZGVbN4v___logf_finite63; CHECK: ret64entry:65 br label %for.body66 67for.body: ; preds = %for.body, %entry68 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]69 %tmp = trunc i64 %indvars.iv to i3270 %conv = sitofp i32 %tmp to float71 %call = tail call fast float @__logf_finite(float %conv)72 %arrayidx = getelementptr inbounds float, ptr %varray, i64 %indvars.iv73 store float %call, ptr %arrayidx, align 474 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 175 %exitcond = icmp eq i64 %indvars.iv.next, 100076 br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !2177 78for.end: ; preds = %for.body79 ret void80}81 82!21 = distinct !{!21, !22, !23}83!22 = !{!"llvm.loop.vectorize.width", i32 4}84!23 = !{!"llvm.loop.vectorize.enable", i1 true}85 86define void @log_f64(ptr nocapture %varray) {87; CHECK-LABEL: @log_f6488; CHECK-LABEL: vector.body89; CHECK: <4 x double> @_ZGVdN4v___log_finite90; CHECK: ret91entry:92 br label %for.body93 94for.body: ; preds = %for.body, %entry95 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]96 %tmp = trunc i64 %indvars.iv to i3297 %conv = sitofp i32 %tmp to double98 %call = tail call fast double @__log_finite(double %conv)99 %arrayidx = getelementptr inbounds double, ptr %varray, i64 %indvars.iv100 store double %call, ptr %arrayidx, align 4101 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1102 %exitcond = icmp eq i64 %indvars.iv.next, 1000103 br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !31104 105for.end: ; preds = %for.body106 ret void107}108 109!31 = distinct !{!31, !32, !33}110!32 = !{!"llvm.loop.vectorize.width", i32 4}111!33 = !{!"llvm.loop.vectorize.enable", i1 true}112 113define void @pow_f32(ptr nocapture %varray, ptr nocapture readonly %exp) {114; CHECK-LABEL: @pow_f32115; CHECK-LABEL: vector.body116; CHECK: <4 x float> @_ZGVbN4vv___powf_finite117; CHECK: ret118entry:119 br label %for.body120 121for.body: ; preds = %for.body, %entry122 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]123 %tmp = trunc i64 %indvars.iv to i32124 %conv = sitofp i32 %tmp to float125 %arrayidx = getelementptr inbounds float, ptr %exp, i64 %indvars.iv126 %tmp1 = load float, ptr %arrayidx, align 4127 %tmp2 = tail call fast float @__powf_finite(float %conv, float %tmp1)128 %arrayidx2 = getelementptr inbounds float, ptr %varray, i64 %indvars.iv129 store float %tmp2, ptr %arrayidx2, align 4130 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1131 %exitcond = icmp eq i64 %indvars.iv.next, 1000132 br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !41133 134for.end: ; preds = %for.body135 ret void136}137 138!41 = distinct !{!41, !42, !43}139!42 = !{!"llvm.loop.vectorize.width", i32 4}140!43 = !{!"llvm.loop.vectorize.enable", i1 true}141 142define void @pow_f64(ptr nocapture %varray, ptr nocapture readonly %exp) {143; CHECK-LABEL: @pow_f64144; CHECK-LABEL: vector.body145; CHECK: <4 x double> @_ZGVdN4vv___pow_finite146; CHECK: ret147entry:148 br label %for.body149 150for.body: ; preds = %for.body, %entry151 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]152 %tmp = trunc i64 %indvars.iv to i32153 %conv = sitofp i32 %tmp to double154 %arrayidx = getelementptr inbounds double, ptr %exp, i64 %indvars.iv155 %tmp1 = load double, ptr %arrayidx, align 4156 %tmp2 = tail call fast double @__pow_finite(double %conv, double %tmp1)157 %arrayidx2 = getelementptr inbounds double, ptr %varray, i64 %indvars.iv158 store double %tmp2, ptr %arrayidx2, align 4159 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1160 %exitcond = icmp eq i64 %indvars.iv.next, 1000161 br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !51162 163for.end: ; preds = %for.body164 ret void165}166 167!51 = distinct !{!51, !52, !53}168!52 = !{!"llvm.loop.vectorize.width", i32 4}169!53 = !{!"llvm.loop.vectorize.enable", i1 true}170 171declare float @__expf_finite(float) #0172declare double @__exp_finite(double) #0173declare float @__logf_finite(float) #0174declare double @__log_finite(double) #0175declare float @__powf_finite(float, float) #0176declare double @__pow_finite(double, double) #0177