245 lines · plain
1; RUN: llc -vector-library=MASSV < %s -mtriple=powerpc64le-unknown-unknown -mcpu=pwr10 | FileCheck -check-prefixes=CHECK-PWR9 %s2; RUN: llc -vector-library=MASSV < %s -mtriple=powerpc64le-unknown-unknown -mcpu=pwr9 | FileCheck -check-prefixes=CHECK-PWR9 %s3; RUN: llc -vector-library=MASSV < %s -mtriple=powerpc64le-unknown-unknown -mcpu=pwr8 | FileCheck -check-prefixes=CHECK-PWR8 %s4; RUN: llc -vector-library=MASSV < %s -mtriple=powerpc-ibm-aix-xcoff -mcpu=pwr10 | FileCheck -check-prefixes=CHECK-PWR10 %s5; RUN: llc -vector-library=MASSV < %s -mtriple=powerpc-ibm-aix-xcoff -mcpu=pwr9 | FileCheck -check-prefixes=CHECK-PWR9 %s6; RUN: llc -vector-library=MASSV < %s -mtriple=powerpc-ibm-aix-xcoff -mcpu=pwr8 | FileCheck -check-prefixes=CHECK-PWR8 %s7; RUN: llc -vector-library=MASSV < %s -mtriple=powerpc-ibm-aix-xcoff -mcpu=pwr7 | FileCheck -check-prefixes=CHECK-PWR7 %s8 9; Exponent is a variable10define void @vpow_var(ptr nocapture %z, ptr nocapture readonly %y, ptr nocapture readonly %x) {11; CHECK-LABEL: @vpow_var12; CHECK-PWR10: __powd2_P1013; CHECK-PWR9: __powd2_P914; CHECK-PWR8: __powd2_P815; CHECK-PWR7: __powd2_P716; CHECK: blr17entry:18 br label %vector.body19 20vector.body:21 %index = phi i64 [ %index.next, %vector.body ], [ 0, %entry ]22 %next.gep = getelementptr double, ptr %z, i64 %index23 %next.gep31 = getelementptr double, ptr %y, i64 %index24 %next.gep32 = getelementptr double, ptr %x, i64 %index25 %wide.load = load <2 x double>, ptr %next.gep32, align 826 %wide.load33 = load <2 x double>, ptr %next.gep31, align 827 %0 = call ninf afn nsz <2 x double> @__powd2(<2 x double> %wide.load, <2 x double> %wide.load33)28 store <2 x double> %0, ptr %next.gep, align 829 %index.next = add i64 %index, 230 %1 = icmp eq i64 %index.next, 102431 br i1 %1, label %for.end, label %vector.body32 33for.end:34 ret void35}36 37; Exponent is a constant != 0.75 and !=0.2538define void @vpow_const(ptr nocapture %y, ptr nocapture readonly %x) {39; CHECK-LABEL: @vpow_const40; CHECK-PWR10: __powd2_P1041; CHECK-PWR9: __powd2_P942; CHECK-PWR8: __powd2_P843; CHECK-PWR7: __powd2_P744; CHECK: blr45entry:46 br label %vector.body47 48vector.body:49 %index = phi i64 [ %index.next, %vector.body ], [ 0, %entry ]50 %next.gep = getelementptr double, ptr %y, i64 %index51 %next.gep19 = getelementptr double, ptr %x, i64 %index52 %wide.load = load <2 x double>, ptr %next.gep19, align 853 %0 = call ninf afn nsz <2 x double> @__powd2(<2 x double> %wide.load, <2 x double> <double 7.600000e-01, double 7.600000e-01>)54 store <2 x double> %0, ptr %next.gep, align 855 %index.next = add i64 %index, 256 %1 = icmp eq i64 %index.next, 102457 br i1 %1, label %for.end, label %vector.body58 59for.end:60 ret void61}62 63; Exponent is a constant != 0.75 and !=0.25 and they are different 64define void @vpow_noeq_const(ptr nocapture %y, ptr nocapture readonly %x) {65; CHECK-LABEL: @vpow_noeq_const66; CHECK-PWR10: __powd2_P1067; CHECK-PWR9: __powd2_P968; CHECK-PWR8: __powd2_P869; CHECK-PWR7: __powd2_P770; CHECK: blr71entry:72 br label %vector.body73 74vector.body:75 %index = phi i64 [ %index.next, %vector.body ], [ 0, %entry ]76 %next.gep = getelementptr double, ptr %y, i64 %index77 %next.gep19 = getelementptr double, ptr %x, i64 %index78 %wide.load = load <2 x double>, ptr %next.gep19, align 879 %0 = call ninf afn nsz <2 x double> @__powd2(<2 x double> %wide.load, <2 x double> <double 7.700000e-01, double 7.600000e-01>)80 store <2 x double> %0, ptr %next.gep, align 881 %index.next = add i64 %index, 282 %1 = icmp eq i64 %index.next, 102483 br i1 %1, label %for.end, label %vector.body84 85for.end:86 ret void87}88 89; Exponent is a constant != 0.75 and !=0.25 and they are different 90define void @vpow_noeq075_const(ptr nocapture %y, ptr nocapture readonly %x) {91; CHECK-LABEL: @vpow_noeq075_const92; CHECK-PWR10: __powd2_P1093; CHECK-PWR9: __powd2_P994; CHECK-PWR8: __powd2_P895; CHECK-PWR7: __powd2_P796; CHECK: blr97entry:98 br label %vector.body99 100vector.body:101 %index = phi i64 [ %index.next, %vector.body ], [ 0, %entry ]102 %next.gep = getelementptr double, ptr %y, i64 %index103 %next.gep19 = getelementptr double, ptr %x, i64 %index104 %wide.load = load <2 x double>, ptr %next.gep19, align 8105 %0 = call ninf afn nsz <2 x double> @__powd2(<2 x double> %wide.load, <2 x double> <double 7.700000e-01, double 7.500000e-01>)106 store <2 x double> %0, ptr %next.gep, align 8107 %index.next = add i64 %index, 2108 %1 = icmp eq i64 %index.next, 1024109 br i1 %1, label %for.end, label %vector.body110 111for.end:112 ret void113}114 115; Exponent is a constant != 0.75 and !=0.25 and they are different 116define void @vpow_noeq025_const(ptr nocapture %y, ptr nocapture readonly %x) {117; CHECK-LABEL: @vpow_noeq025_const118; CHECK-PWR10: __powd2_P10119; CHECK-PWR9: __powd2_P9120; CHECK-PWR8: __powd2_P8121; CHECK-PWR7: __powd2_P7122; CHECK: blr123entry:124 br label %vector.body125 126vector.body:127 %index = phi i64 [ %index.next, %vector.body ], [ 0, %entry ]128 %next.gep = getelementptr double, ptr %y, i64 %index129 %next.gep19 = getelementptr double, ptr %x, i64 %index130 %wide.load = load <2 x double>, ptr %next.gep19, align 8131 %0 = call ninf afn nsz <2 x double> @__powd2(<2 x double> %wide.load, <2 x double> <double 7.700000e-01, double 2.500000e-01>)132 store <2 x double> %0, ptr %next.gep, align 8133 %index.next = add i64 %index, 2134 %1 = icmp eq i64 %index.next, 1024135 br i1 %1, label %for.end, label %vector.body136 137for.end:138 ret void139}140 141; Exponent is 0.75142define void @vpow_075(ptr nocapture %y, ptr nocapture readonly %x) {143; CHECK-LABEL: @vpow_075144; CHECK-NOT: __powd2_P{{[7,8,9,10]}}145; CHECK: xvrsqrtesp146; CHECK: blr147entry:148 br label %vector.body149 150vector.body:151 %index = phi i64 [ %index.next, %vector.body ], [ 0, %entry ]152 %next.gep = getelementptr double, ptr %y, i64 %index153 %next.gep19 = getelementptr double, ptr %x, i64 %index154 %wide.load = load <2 x double>, ptr %next.gep19, align 8155 %0 = call ninf afn <2 x double> @__powd2(<2 x double> %wide.load, <2 x double> <double 7.500000e-01, double 7.500000e-01>)156 store <2 x double> %0, ptr %next.gep, align 8157 %index.next = add i64 %index, 2158 %1 = icmp eq i64 %index.next, 1024159 br i1 %1, label %for.end, label %vector.body160 161for.end:162 ret void163}164 165; Exponent is 0.25166define void @vpow_025(ptr nocapture %y, ptr nocapture readonly %x) {167; CHECK-LABEL: @vpow_025168; CHECK-NOT: __powd2_P{{[7,8,9,10]}}169; CHECK: xvrsqrtesp170; CHECK: blr171entry:172 br label %vector.body173 174vector.body:175 %index = phi i64 [ %index.next, %vector.body ], [ 0, %entry ]176 %next.gep = getelementptr double, ptr %y, i64 %index177 %next.gep19 = getelementptr double, ptr %x, i64 %index178 %wide.load = load <2 x double>, ptr %next.gep19, align 8179 %0 = call ninf afn nsz <2 x double> @__powd2(<2 x double> %wide.load, <2 x double> <double 2.500000e-01, double 2.500000e-01>)180 store <2 x double> %0, ptr %next.gep, align 8181 %index.next = add i64 %index, 2182 %1 = icmp eq i64 %index.next, 1024183 br i1 %1, label %for.end, label %vector.body184 185for.end:186 ret void187}188 189; Exponent is 0.75 but no proper fast-math flags190define void @vpow_075_nofast(ptr nocapture %y, ptr nocapture readonly %x) {191; CHECK-LABEL: @vpow_075_nofast192; CHECK-PWR10: __powd2_P10193; CHECK-PWR9: __powd2_P9194; CHECK-PWR8: __powd2_P8195; CHECK-PWR7: __powd2_P7196; CHECK-NOT: xvrsqrtesp197; CHECK: blr198entry:199 br label %vector.body200 201vector.body:202 %index = phi i64 [ %index.next, %vector.body ], [ 0, %entry ]203 %next.gep = getelementptr double, ptr %y, i64 %index204 %next.gep19 = getelementptr double, ptr %x, i64 %index205 %wide.load = load <2 x double>, ptr %next.gep19, align 8206 %0 = call <2 x double> @__powd2(<2 x double> %wide.load, <2 x double> <double 7.500000e-01, double 7.500000e-01>)207 store <2 x double> %0, ptr %next.gep, align 8208 %index.next = add i64 %index, 2209 %1 = icmp eq i64 %index.next, 1024210 br i1 %1, label %for.end, label %vector.body211 212for.end:213 ret void214}215 216; Exponent is 0.25 but no proper fast-math flags217define void @vpow_025_nofast(ptr nocapture %y, ptr nocapture readonly %x) {218; CHECK-LABEL: @vpow_025_nofast219; CHECK-PWR10: __powd2_P10220; CHECK-PWR9: __powd2_P9221; CHECK-PWR8: __powd2_P8222; CHECK-PWR7: __powd2_P7223; CHECK-NOT: xvrsqrtesp224; CHECK: blr225entry:226 br label %vector.body227 228vector.body:229 %index = phi i64 [ %index.next, %vector.body ], [ 0, %entry ]230 %next.gep = getelementptr double, ptr %y, i64 %index231 %next.gep19 = getelementptr double, ptr %x, i64 %index232 %wide.load = load <2 x double>, ptr %next.gep19, align 8233 %0 = call <2 x double> @__powd2(<2 x double> %wide.load, <2 x double> <double 2.500000e-01, double 2.500000e-01>)234 store <2 x double> %0, ptr %next.gep, align 8235 %index.next = add i64 %index, 2236 %1 = icmp eq i64 %index.next, 1024237 br i1 %1, label %for.end, label %vector.body238 239for.end:240 ret void241}242 243; Function Attrs: nounwind readnone speculatable willreturn244declare <2 x double> @__powd2(<2 x double>, <2 x double>) #1245