brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.7 KiB · 5640afc Raw
417 lines · plain
1; RUN: opt -vector-library=SVML -passes=inject-tli-mappings,loop-vectorize -S < %s | FileCheck %s2 3; Test to verify that when math headers are built with4; __FINITE_MATH_ONLY__ enabled, causing use of __<func>_finite5; function versions, vectorization can map these to vector versions.6 7target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"8target triple = "x86_64-unknown-linux-gnu"9 10declare float @__expf_finite(float) #011 12; CHECK-LABEL: @exp_f3213; CHECK: <4 x float> @__svml_expf414; CHECK: ret15define void @exp_f32(ptr nocapture %varray) {16entry:17  br label %for.body18 19for.body:                                         ; preds = %for.body, %entry20  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]21  %tmp = trunc i64 %indvars.iv to i3222  %conv = sitofp i32 %tmp to float23  %call = tail call fast float @__expf_finite(float %conv)24  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %indvars.iv25  store float %call, ptr %arrayidx, align 426  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 127  %exitcond = icmp eq i64 %indvars.iv.next, 100028  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !129 30for.end:                                          ; preds = %for.body31  ret void32}33 34!1 = distinct !{!1, !2, !3}35!2 = !{!"llvm.loop.vectorize.width", i32 4}36!3 = !{!"llvm.loop.vectorize.enable", i1 true}37 38 39declare double @__exp_finite(double) #040 41; CHECK-LABEL: @exp_f6442; CHECK: <4 x double> @__svml_exp443; CHECK: ret44define void @exp_f64(ptr nocapture %varray) {45entry:46  br label %for.body47 48for.body:                                         ; preds = %for.body, %entry49  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]50  %tmp = trunc i64 %indvars.iv to i3251  %conv = sitofp i32 %tmp to double52  %call = tail call fast double @__exp_finite(double %conv)53  %arrayidx = getelementptr inbounds double, ptr %varray, i64 %indvars.iv54  store double %call, ptr %arrayidx, align 455  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 156  %exitcond = icmp eq i64 %indvars.iv.next, 100057  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !1158 59for.end:                                          ; preds = %for.body60  ret void61}62 63!11 = distinct !{!11, !12, !13}64!12 = !{!"llvm.loop.vectorize.width", i32 4}65!13 = !{!"llvm.loop.vectorize.enable", i1 true}66 67 68 69 70declare float @__logf_finite(float) #071 72; CHECK-LABEL: @log_f3273; CHECK: <4 x float> @__svml_logf474; CHECK: ret75define void @log_f32(ptr nocapture %varray) {76entry:77  br label %for.body78 79for.body:                                         ; preds = %for.body, %entry80  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]81  %tmp = trunc i64 %indvars.iv to i3282  %conv = sitofp i32 %tmp to float83  %call = tail call fast float @__logf_finite(float %conv)84  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %indvars.iv85  store float %call, ptr %arrayidx, align 486  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 187  %exitcond = icmp eq i64 %indvars.iv.next, 100088  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !2189 90for.end:                                          ; preds = %for.body91  ret void92}93 94!21 = distinct !{!21, !22, !23}95!22 = !{!"llvm.loop.vectorize.width", i32 4}96!23 = !{!"llvm.loop.vectorize.enable", i1 true}97 98 99declare double @__log_finite(double) #0100 101; CHECK-LABEL: @log_f64102; CHECK: <4 x double> @__svml_log4103; CHECK: ret104define void @log_f64(ptr nocapture %varray) {105entry:106  br label %for.body107 108for.body:                                         ; preds = %for.body, %entry109  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]110  %tmp = trunc i64 %indvars.iv to i32111  %conv = sitofp i32 %tmp to double112  %call = tail call fast double @__log_finite(double %conv)113  %arrayidx = getelementptr inbounds double, ptr %varray, i64 %indvars.iv114  store double %call, ptr %arrayidx, align 4115  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1116  %exitcond = icmp eq i64 %indvars.iv.next, 1000117  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !31118 119for.end:                                          ; preds = %for.body120  ret void121}122 123!31 = distinct !{!31, !32, !33}124!32 = !{!"llvm.loop.vectorize.width", i32 4}125!33 = !{!"llvm.loop.vectorize.enable", i1 true}126 127 128declare float @__powf_finite(float, float) #0129 130; CHECK-LABEL: @pow_f32131; CHECK: <4 x float> @__svml_powf4132; CHECK: ret133define void @pow_f32(ptr nocapture %varray, ptr nocapture readonly %exp) {134entry:135  br label %for.body136 137for.body:                                         ; preds = %for.body, %entry138  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]139  %tmp = trunc i64 %indvars.iv to i32140  %conv = sitofp i32 %tmp to float141  %arrayidx = getelementptr inbounds float, ptr %exp, i64 %indvars.iv142  %tmp1 = load float, ptr %arrayidx, align 4143  %tmp2 = tail call fast float @__powf_finite(float %conv, float %tmp1)144  %arrayidx2 = getelementptr inbounds float, ptr %varray, i64 %indvars.iv145  store float %tmp2, ptr %arrayidx2, align 4146  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1147  %exitcond = icmp eq i64 %indvars.iv.next, 1000148  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !41149 150for.end:                                          ; preds = %for.body151  ret void152}153 154!41 = distinct !{!41, !42, !43}155!42 = !{!"llvm.loop.vectorize.width", i32 4}156!43 = !{!"llvm.loop.vectorize.enable", i1 true}157 158 159declare double @__pow_finite(double, double) #0160 161; CHECK-LABEL: @pow_f64162; CHECK: <4 x double> @__svml_pow4163; CHECK: ret164define void @pow_f64(ptr nocapture %varray, ptr nocapture readonly %exp) {165entry:166  br label %for.body167 168for.body:                                         ; preds = %for.body, %entry169  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]170  %tmp = trunc i64 %indvars.iv to i32171  %conv = sitofp i32 %tmp to double172  %arrayidx = getelementptr inbounds double, ptr %exp, i64 %indvars.iv173  %tmp1 = load double, ptr %arrayidx, align 4174  %tmp2 = tail call fast double @__pow_finite(double %conv, double %tmp1)175  %arrayidx2 = getelementptr inbounds double, ptr %varray, i64 %indvars.iv176  store double %tmp2, ptr %arrayidx2, align 4177  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1178  %exitcond = icmp eq i64 %indvars.iv.next, 1000179  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !51180 181for.end:                                          ; preds = %for.body182  ret void183}184 185!51 = distinct !{!51, !52, !53}186!52 = !{!"llvm.loop.vectorize.width", i32 4}187!53 = !{!"llvm.loop.vectorize.enable", i1 true}188 189declare float @__exp2f_finite(float) #0190 191define void @exp2f_finite(ptr nocapture %varray) {192; CHECK-LABEL: @exp2f_finite(193; CHECK:    call <4 x float> @__svml_exp2f4(<4 x float> %{{.*}})194; CHECK:    ret void195;196entry:197  br label %for.body198 199for.body:200  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]201  %tmp = trunc i64 %iv to i32202  %conv = sitofp i32 %tmp to float203  %call = tail call float @__exp2f_finite(float %conv)204  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %iv205  store float %call, ptr %arrayidx, align 4206  %iv.next = add nuw nsw i64 %iv, 1207  %exitcond = icmp eq i64 %iv.next, 1000208  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !61209 210for.end:211  ret void212}213 214!61 = distinct !{!61, !62, !63}215!62 = !{!"llvm.loop.vectorize.width", i32 4}216!63 = !{!"llvm.loop.vectorize.enable", i1 true}217 218declare double @__exp2_finite(double) #0219 220define void @exp2_finite(ptr nocapture %varray) {221; CHECK-LABEL: @exp2_finite(222; CHECK:    call <4 x double> @__svml_exp24(<4 x double> {{.*}})223; CHECK:    ret void224;225entry:226  br label %for.body227 228for.body:229  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]230  %tmp = trunc i64 %iv to i32231  %conv = sitofp i32 %tmp to double232  %call = tail call double @__exp2_finite(double %conv)233  %arrayidx = getelementptr inbounds double, ptr %varray, i64 %iv234  store double %call, ptr %arrayidx, align 4235  %iv.next = add nuw nsw i64 %iv, 1236  %exitcond = icmp eq i64 %iv.next, 1000237  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !71238 239for.end:240  ret void241}242 243!71 = distinct !{!71, !72, !73}244!72 = !{!"llvm.loop.vectorize.width", i32 4}245!73 = !{!"llvm.loop.vectorize.enable", i1 true}246 247declare float @__log2f_finite(float) #0248 249; CHECK-LABEL: @log2_f32250; CHECK: <4 x float> @__svml_log2f4251; CHECK: ret252define void @log2_f32(ptr nocapture %varray) {253entry:254  br label %for.body255 256for.body:                                         ; preds = %for.body, %entry257  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]258  %tmp = trunc i64 %indvars.iv to i32259  %conv = sitofp i32 %tmp to float260  %call = tail call fast float @__log2f_finite(float %conv)261  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %indvars.iv262  store float %call, ptr %arrayidx, align 4263  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1264  %exitcond = icmp eq i64 %indvars.iv.next, 1000265  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !21266 267for.end:                                          ; preds = %for.body268  ret void269}270 271!81 = distinct !{!21, !22, !23}272!82 = !{!"llvm.loop.vectorize.width", i32 4}273!83 = !{!"llvm.loop.vectorize.enable", i1 true}274 275 276declare double @__log2_finite(double) #0277 278; CHECK-LABEL: @log2_f64279; CHECK: <4 x double> @__svml_log24280; CHECK: ret281define void @log2_f64(ptr nocapture %varray) {282entry:283  br label %for.body284 285for.body:                                         ; preds = %for.body, %entry286  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]287  %tmp = trunc i64 %indvars.iv to i32288  %conv = sitofp i32 %tmp to double289  %call = tail call fast double @__log2_finite(double %conv)290  %arrayidx = getelementptr inbounds double, ptr %varray, i64 %indvars.iv291  store double %call, ptr %arrayidx, align 4292  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1293  %exitcond = icmp eq i64 %indvars.iv.next, 1000294  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !31295 296for.end:                                          ; preds = %for.body297  ret void298}299 300!91 = distinct !{!31, !32, !33}301!92 = !{!"llvm.loop.vectorize.width", i32 4}302!93 = !{!"llvm.loop.vectorize.enable", i1 true}303 304declare float @__log10f_finite(float) #0305 306; CHECK-LABEL: @log10_f32307; CHECK: <4 x float> @__svml_log10f4308; CHECK: ret309define void @log10_f32(ptr nocapture %varray) {310entry:311  br label %for.body312 313for.body:                                         ; preds = %for.body, %entry314  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]315  %tmp = trunc i64 %indvars.iv to i32316  %conv = sitofp i32 %tmp to float317  %call = tail call fast float @__log10f_finite(float %conv)318  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %indvars.iv319  store float %call, ptr %arrayidx, align 4320  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1321  %exitcond = icmp eq i64 %indvars.iv.next, 1000322  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !21323 324for.end:                                          ; preds = %for.body325  ret void326}327 328!101 = distinct !{!21, !22, !23}329!102 = !{!"llvm.loop.vectorize.width", i32 4}330!103 = !{!"llvm.loop.vectorize.enable", i1 true}331 332 333declare double @__log10_finite(double) #0334 335; CHECK-LABEL: @log10_f64336; CHECK: <4 x double> @__svml_log104337; CHECK: ret338define void @log10_f64(ptr nocapture %varray) {339entry:340  br label %for.body341 342for.body:                                         ; preds = %for.body, %entry343  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]344  %tmp = trunc i64 %indvars.iv to i32345  %conv = sitofp i32 %tmp to double346  %call = tail call fast double @__log10_finite(double %conv)347  %arrayidx = getelementptr inbounds double, ptr %varray, i64 %indvars.iv348  store double %call, ptr %arrayidx, align 4349  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1350  %exitcond = icmp eq i64 %indvars.iv.next, 1000351  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !31352 353for.end:                                          ; preds = %for.body354  ret void355}356 357!111 = distinct !{!31, !32, !33}358!112 = !{!"llvm.loop.vectorize.width", i32 4}359!113 = !{!"llvm.loop.vectorize.enable", i1 true}360 361declare float @__sqrtf_finite(float) #0362 363; CHECK-LABEL: @sqrt_f32364; CHECK: <4 x float> @__svml_sqrtf4365; CHECK: ret366define void @sqrt_f32(ptr nocapture %varray) {367entry:368  br label %for.body369 370for.body:                                         ; preds = %for.body, %entry371  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]372  %tmp = trunc i64 %indvars.iv to i32373  %conv = sitofp i32 %tmp to float374  %call = tail call fast float @__sqrtf_finite(float %conv)375  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %indvars.iv376  store float %call, ptr %arrayidx, align 4377  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1378  %exitcond = icmp eq i64 %indvars.iv.next, 1000379  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !21380 381for.end:                                          ; preds = %for.body382  ret void383}384 385!121 = distinct !{!21, !22, !23}386!122 = !{!"llvm.loop.vectorize.width", i32 4}387!123 = !{!"llvm.loop.vectorize.enable", i1 true}388 389 390declare double @__sqrt_finite(double) #0391 392; CHECK-LABEL: @sqrt_f64393; CHECK: <4 x double> @__svml_sqrt4394; CHECK: ret395define void @sqrt_f64(ptr nocapture %varray) {396entry:397  br label %for.body398 399for.body:                                         ; preds = %for.body, %entry400  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]401  %tmp = trunc i64 %indvars.iv to i32402  %conv = sitofp i32 %tmp to double403  %call = tail call fast double @__sqrt_finite(double %conv)404  %arrayidx = getelementptr inbounds double, ptr %varray, i64 %indvars.iv405  store double %call, ptr %arrayidx, align 4406  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1407  %exitcond = icmp eq i64 %indvars.iv.next, 1000408  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !31409 410for.end:                                          ; preds = %for.body411  ret void412}413 414!131 = distinct !{!31, !32, !33}415!132 = !{!"llvm.loop.vectorize.width", i32 4}416!133 = !{!"llvm.loop.vectorize.enable", i1 true}417