brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.0 KiB · e066130 Raw
374 lines · plain
1; RUN: opt -vector-library=LIBMVEC -passes=inject-tli-mappings,loop-vectorize -S < %s | FileCheck %s2 3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"4target triple = "x86_64-unknown-linux-gnu"5 6define void @sin_f64(ptr nocapture %varray) {7; CHECK-LABEL: @sin_f64(8; CHECK-LABEL:    vector.body9; CHECK:    [[TMP5:%.*]] = call <4 x double> @_ZGVdN4v_sin(<4 x double> [[TMP4:%.*]])10;11entry:12  br label %for.body13 14for.body:15  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]16  %tmp = trunc i64 %iv to i3217  %conv = sitofp i32 %tmp to double18  %call = tail call double @sin(double %conv)19  %arrayidx = getelementptr inbounds double, ptr %varray, i64 %iv20  store double %call, ptr %arrayidx, align 421  %iv.next = add nuw nsw i64 %iv, 122  %exitcond = icmp eq i64 %iv.next, 100023  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !124 25for.end:26  ret void27}28 29!1 = distinct !{!1, !2, !3}30!2 = !{!"llvm.loop.vectorize.width", i32 4}31!3 = !{!"llvm.loop.vectorize.enable", i1 true}32 33 34define void @sin_f32(ptr nocapture %varray) {35; CHECK-LABEL: @sin_f32(36; CHECK-LABEL:    vector.body37; CHECK:    [[TMP5:%.*]] = call <4 x float> @_ZGVbN4v_sinf(<4 x float> [[TMP4:%.*]])38;39entry:40  br label %for.body41 42for.body:43  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]44  %tmp = trunc i64 %iv to i3245  %conv = sitofp i32 %tmp to float46  %call = tail call float @sinf(float %conv)47  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %iv48  store float %call, ptr %arrayidx, align 449  %iv.next = add nuw nsw i64 %iv, 150  %exitcond = icmp eq i64 %iv.next, 100051  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !2152 53for.end:54  ret void55}56 57!21 = distinct !{!21, !22, !23}58!22 = !{!"llvm.loop.vectorize.width", i32 4}59!23 = !{!"llvm.loop.vectorize.enable", i1 true}60 61define void @sin_f64_intrinsic(ptr nocapture %varray) {62; CHECK-LABEL: @sin_f64_intrinsic(63; CHECK-LABEL:    vector.body64; CHECK:    [[TMP5:%.*]] = call <4 x double> @_ZGVdN4v_sin(<4 x double> [[TMP4:%.*]])65;66entry:67  br label %for.body68 69for.body:70  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]71  %tmp = trunc i64 %iv to i3272  %conv = sitofp i32 %tmp to double73  %call = tail call double @llvm.sin.f64(double %conv)74  %arrayidx = getelementptr inbounds double, ptr %varray, i64 %iv75  store double %call, ptr %arrayidx, align 476  %iv.next = add nuw nsw i64 %iv, 177  %exitcond = icmp eq i64 %iv.next, 100078  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !3179 80for.end:81  ret void82}83 84!31 = distinct !{!31, !32, !33}85!32 = !{!"llvm.loop.vectorize.width", i32 4}86!33 = !{!"llvm.loop.vectorize.enable", i1 true}87 88define void @sin_f32_intrinsic(ptr nocapture %varray) {89; CHECK-LABEL: @sin_f32_intrinsic(90; CHECK-LABEL:    vector.body91; CHECK:    [[TMP5:%.*]] = call <4 x float> @_ZGVbN4v_sinf(<4 x float> [[TMP4:%.*]])92;93entry:94  br label %for.body95 96for.body:97  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]98  %tmp = trunc i64 %iv to i3299  %conv = sitofp i32 %tmp to float100  %call = tail call float @llvm.sin.f32(float %conv)101  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %iv102  store float %call, ptr %arrayidx, align 4103  %iv.next = add nuw nsw i64 %iv, 1104  %exitcond = icmp eq i64 %iv.next, 1000105  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !41106 107for.end:108  ret void109}110 111!41 = distinct !{!41, !42, !43}112!42 = !{!"llvm.loop.vectorize.width", i32 4}113!43 = !{!"llvm.loop.vectorize.enable", i1 true}114 115define void @cos_f64(ptr nocapture %varray) {116; CHECK-LABEL: @cos_f64(117; CHECK-LABEL:    vector.body118; CHECK:    [[TMP5:%.*]] = call <4 x double> @_ZGVdN4v_cos(<4 x double> [[TMP4:%.*]])119;120entry:121  br label %for.body122 123for.body:124  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]125  %tmp = trunc i64 %iv to i32126  %conv = sitofp i32 %tmp to double127  %call = tail call double @cos(double %conv)128  %arrayidx = getelementptr inbounds double, ptr %varray, i64 %iv129  store double %call, ptr %arrayidx, align 4130  %iv.next = add nuw nsw i64 %iv, 1131  %exitcond = icmp eq i64 %iv.next, 1000132  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !51133 134for.end:135  ret void136}137 138!51 = distinct !{!51, !52, !53}139!52 = !{!"llvm.loop.vectorize.width", i32 4}140!53 = !{!"llvm.loop.vectorize.enable", i1 true}141 142define void @cos_f32(ptr nocapture %varray) {143; CHECK-LABEL: @cos_f32(144; CHECK-LABEL:    vector.body145; CHECK:    [[TMP5:%.*]] = call <4 x float> @_ZGVbN4v_cosf(<4 x float> [[TMP4:%.*]])146;147entry:148  br label %for.body149 150for.body:151  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]152  %tmp = trunc i64 %iv to i32153  %conv = sitofp i32 %tmp to float154  %call = tail call float @cosf(float %conv)155  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %iv156  store float %call, ptr %arrayidx, align 4157  %iv.next = add nuw nsw i64 %iv, 1158  %exitcond = icmp eq i64 %iv.next, 1000159  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !61160 161for.end:162  ret void163}164 165!61 = distinct !{!61, !62, !63}166!62 = !{!"llvm.loop.vectorize.width", i32 4}167!63 = !{!"llvm.loop.vectorize.enable", i1 true}168 169define void @cos_f64_intrinsic(ptr nocapture %varray) {170; CHECK-LABEL: @cos_f64_intrinsic(171; CHECK-LABEL:    vector.body172; CHECK:    [[TMP5:%.*]] = call <4 x double> @_ZGVdN4v_cos(<4 x double> [[TMP4:%.*]])173;174entry:175  br label %for.body176 177for.body:178  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]179  %tmp = trunc i64 %iv to i32180  %conv = sitofp i32 %tmp to double181  %call = tail call double @llvm.cos.f64(double %conv)182  %arrayidx = getelementptr inbounds double, ptr %varray, i64 %iv183  store double %call, ptr %arrayidx, align 4184  %iv.next = add nuw nsw i64 %iv, 1185  %exitcond = icmp eq i64 %iv.next, 1000186  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !71187 188for.end:189  ret void190}191 192!71 = distinct !{!71, !72, !73}193!72 = !{!"llvm.loop.vectorize.width", i32 4}194!73 = !{!"llvm.loop.vectorize.enable", i1 true}195 196define void @cos_f32_intrinsic(ptr nocapture %varray) {197; CHECK-LABEL: @cos_f32_intrinsic(198; CHECK-LABEL:    vector.body199; CHECK:    [[TMP5:%.*]] = call <4 x float> @_ZGVbN4v_cosf(<4 x float> [[TMP4:%.*]])200;201entry:202  br label %for.body203 204for.body:205  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]206  %tmp = trunc i64 %iv to i32207  %conv = sitofp i32 %tmp to float208  %call = tail call float @llvm.cos.f32(float %conv)209  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %iv210  store float %call, ptr %arrayidx, align 4211  %iv.next = add nuw nsw i64 %iv, 1212  %exitcond = icmp eq i64 %iv.next, 1000213  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !81214 215for.end:216  ret void217}218 219!81 = distinct !{!81, !82, !83}220!82 = !{!"llvm.loop.vectorize.width", i32 4}221!83 = !{!"llvm.loop.vectorize.enable", i1 true}222 223 224define void @exp_f32(ptr nocapture %varray) {225; CHECK-LABEL: @exp_f32226; CHECK-LABEL:    vector.body227; CHECK: <4 x float> @_ZGVbN4v_expf228entry:229  br label %for.body230 231for.body:                                         ; preds = %for.body, %entry232  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]233  %tmp = trunc i64 %indvars.iv to i32234  %conv = sitofp i32 %tmp to float235  %call = tail call fast float @expf(float %conv)236  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %indvars.iv237  store float %call, ptr %arrayidx, align 4238  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1239  %exitcond = icmp eq i64 %indvars.iv.next, 1000240  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !91241 242for.end:                                          ; preds = %for.body243  ret void244}245 246!91 = distinct !{!91, !92, !93}247!92 = !{!"llvm.loop.vectorize.width", i32 4}248!93 = !{!"llvm.loop.vectorize.enable", i1 true}249 250define void @exp_f32_intrin(ptr nocapture %varray) {251; CHECK-LABEL: @exp_f32_intrin252; CHECK-LABEL: vector.body253; CHECK: <4 x float> @_ZGVbN4v_expf254entry:255  br label %for.body256 257for.body:                                         ; preds = %for.body, %entry258  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]259  %tmp = trunc i64 %indvars.iv to i32260  %conv = sitofp i32 %tmp to float261  %call = tail call fast float @llvm.exp.f32(float %conv)262  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %indvars.iv263  store float %call, ptr %arrayidx, align 4264  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1265  %exitcond = icmp eq i64 %indvars.iv.next, 1000266  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !101267 268for.end:                                          ; preds = %for.body269  ret void270}271 272!101 = distinct !{!101, !102, !103}273!102 = !{!"llvm.loop.vectorize.width", i32 4}274!103 = !{!"llvm.loop.vectorize.enable", i1 true}275 276 277define void @log_f32(ptr nocapture %varray) {278; CHECK-LABEL: @log_f32279; CHECK-LABEL: vector.body280; CHECK: <4 x float> @_ZGVbN4v_logf281entry:282  br label %for.body283 284for.body:                                         ; preds = %for.body, %entry285  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]286  %tmp = trunc i64 %indvars.iv to i32287  %conv = sitofp i32 %tmp to float288  %call = tail call fast float @logf(float %conv)289  %arrayidx = getelementptr inbounds float, ptr %varray, i64 %indvars.iv290  store float %call, ptr %arrayidx, align 4291  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1292  %exitcond = icmp eq i64 %indvars.iv.next, 1000293  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !111294 295for.end:                                          ; preds = %for.body296  ret void297}298 299!111 = distinct !{!111, !112, !113}300!112 = !{!"llvm.loop.vectorize.width", i32 4}301!113 = !{!"llvm.loop.vectorize.enable", i1 true}302 303define void @pow_f32(ptr nocapture %varray, ptr nocapture readonly %exp) {304; CHECK-LABEL: @pow_f32305; CHECK-LABEL:    vector.body306; CHECK: <4 x float> @_ZGVbN4vv_powf307entry:308  br label %for.body309 310for.body:                                         ; preds = %for.body, %entry311  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]312  %tmp = trunc i64 %indvars.iv to i32313  %conv = sitofp i32 %tmp to float314  %arrayidx = getelementptr inbounds float, ptr %exp, i64 %indvars.iv315  %tmp1 = load float, ptr %arrayidx, align 4316  %tmp2 = tail call fast float @powf(float %conv, float %tmp1)317  %arrayidx2 = getelementptr inbounds float, ptr %varray, i64 %indvars.iv318  store float %tmp2, ptr %arrayidx2, align 4319  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1320  %exitcond = icmp eq i64 %indvars.iv.next, 1000321  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !121322 323for.end:                                          ; preds = %for.body324  ret void325}326 327!121 = distinct !{!121, !122, !123}328!122 = !{!"llvm.loop.vectorize.width", i32 4}329!123 = !{!"llvm.loop.vectorize.enable", i1 true}330 331define void @pow_f32_intrin(ptr nocapture %varray, ptr nocapture readonly %exp) {332; CHECK-LABEL: @pow_f32_intrin333; CHECK-LABEL:    vector.body334; CHECK: <4 x float> @_ZGVbN4vv_powf335entry:336  br label %for.body337 338for.body:                                         ; preds = %for.body, %entry339  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]340  %tmp = trunc i64 %indvars.iv to i32341  %conv = sitofp i32 %tmp to float342  %arrayidx = getelementptr inbounds float, ptr %exp, i64 %indvars.iv343  %tmp1 = load float, ptr %arrayidx, align 4344  %tmp2 = tail call fast float @llvm.pow.f32(float %conv, float %tmp1)345  %arrayidx2 = getelementptr inbounds float, ptr %varray, i64 %indvars.iv346  store float %tmp2, ptr %arrayidx2, align 4347  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1348  %exitcond = icmp eq i64 %indvars.iv.next, 1000349  br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !131350 351for.end:                                          ; preds = %for.body352  ret void353}354 355!131 = distinct !{!131, !132, !133}356!132 = !{!"llvm.loop.vectorize.width", i32 4}357!133 = !{!"llvm.loop.vectorize.enable", i1 true}358 359attributes #0 = { nounwind readnone }360 361declare double @sin(double) #0362declare float @sinf(float) #0363declare double @llvm.sin.f64(double) #0364declare float @llvm.sin.f32(float) #0365declare double @cos(double) #0366declare float @cosf(float) #0367declare double @llvm.cos.f64(double) #0368declare float @llvm.cos.f32(float) #0369declare float @expf(float) #0370declare float @powf(float, float) #0371declare float @llvm.exp.f32(float) #0372declare float @logf(float) #0373declare float @llvm.pow.f32(float, float) #0374