brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.7 KiB · 0a09fdf Raw
443 lines · plain
1; Test f64 and v2f64 signaling comparisons on z14.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s4 5; Test oeq.6define <2 x i64> @f1(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) #0 {7; CHECK-LABEL: f1:8; CHECK: vfkedb %v24, %v26, %v289; CHECK-NEXT: br %r1410  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(11                                               <2 x double> %val1, <2 x double> %val2,12                                               metadata !"oeq",13                                               metadata !"fpexcept.strict") #014  %ret = sext <2 x i1> %cmp to <2 x i64>15  ret <2 x i64> %ret16}17 18; Test one.19define <2 x i64> @f2(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) #0 {20; CHECK-LABEL: f2:21; CHECK-DAG: vfkhdb [[REG1:%v[0-9]+]], %v28, %v2622; CHECK-DAG: vfkhdb [[REG2:%v[0-9]+]], %v26, %v2823; CHECK: vo %v24, [[REG1]], [[REG2]]24; CHECK-NEXT: br %r1425  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(26                                               <2 x double> %val1, <2 x double> %val2,27                                               metadata !"one",28                                               metadata !"fpexcept.strict") #029  %ret = sext <2 x i1> %cmp to <2 x i64>30  ret <2 x i64> %ret31}32 33; Test ogt.34define <2 x i64> @f3(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) #0 {35; CHECK-LABEL: f3:36; CHECK: vfkhdb %v24, %v26, %v2837; CHECK-NEXT: br %r1438  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(39                                               <2 x double> %val1, <2 x double> %val2,40                                               metadata !"ogt",41                                               metadata !"fpexcept.strict") #042  %ret = sext <2 x i1> %cmp to <2 x i64>43  ret <2 x i64> %ret44}45 46; Test oge.47define <2 x i64> @f4(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) #0 {48; CHECK-LABEL: f4:49; CHECK: vfkhedb %v24, %v26, %v2850; CHECK-NEXT: br %r1451  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(52                                               <2 x double> %val1, <2 x double> %val2,53                                               metadata !"oge",54                                               metadata !"fpexcept.strict") #055  %ret = sext <2 x i1> %cmp to <2 x i64>56  ret <2 x i64> %ret57}58 59; Test ole.60define <2 x i64> @f5(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) #0 {61; CHECK-LABEL: f5:62; CHECK: vfkhedb %v24, %v28, %v2663; CHECK-NEXT: br %r1464  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(65                                               <2 x double> %val1, <2 x double> %val2,66                                               metadata !"ole",67                                               metadata !"fpexcept.strict") #068  %ret = sext <2 x i1> %cmp to <2 x i64>69  ret <2 x i64> %ret70}71 72; Test olt.73define <2 x i64> @f6(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) #0 {74; CHECK-LABEL: f6:75; CHECK: vfkhdb %v24, %v28, %v2676; CHECK-NEXT: br %r1477  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(78                                               <2 x double> %val1, <2 x double> %val2,79                                               metadata !"olt",80                                               metadata !"fpexcept.strict") #081  %ret = sext <2 x i1> %cmp to <2 x i64>82  ret <2 x i64> %ret83}84 85; Test ueq.86define <2 x i64> @f7(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) #0 {87; CHECK-LABEL: f7:88; CHECK-DAG: vfkhdb [[REG1:%v[0-9]+]], %v28, %v2689; CHECK-DAG: vfkhdb [[REG2:%v[0-9]+]], %v26, %v2890; CHECK: vno %v24, [[REG1]], [[REG2]]91; CHECK-NEXT: br %r1492  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(93                                               <2 x double> %val1, <2 x double> %val2,94                                               metadata !"ueq",95                                               metadata !"fpexcept.strict") #096  %ret = sext <2 x i1> %cmp to <2 x i64>97  ret <2 x i64> %ret98}99 100; Test une.101define <2 x i64> @f8(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) #0 {102; CHECK-LABEL: f8:103; CHECK: vfkedb [[REG:%v[0-9]+]], %v26, %v28104; CHECK-NEXT: vno %v24, [[REG]], [[REG]]105; CHECK-NEXT: br %r14106  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(107                                               <2 x double> %val1, <2 x double> %val2,108                                               metadata !"une",109                                               metadata !"fpexcept.strict") #0110  %ret = sext <2 x i1> %cmp to <2 x i64>111  ret <2 x i64> %ret112}113 114; Test ugt.115define <2 x i64> @f9(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) #0 {116; CHECK-LABEL: f9:117; CHECK: vfkhedb [[REG:%v[0-9]+]], %v28, %v26118; CHECK-NEXT: vno %v24, [[REG]], [[REG]]119; CHECK-NEXT: br %r14120  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(121                                               <2 x double> %val1, <2 x double> %val2,122                                               metadata !"ugt",123                                               metadata !"fpexcept.strict") #0124  %ret = sext <2 x i1> %cmp to <2 x i64>125  ret <2 x i64> %ret126}127 128; Test uge.129define <2 x i64> @f10(<2 x i64> %dummy, <2 x double> %val1,130                      <2 x double> %val2) #0 {131; CHECK-LABEL: f10:132; CHECK: vfkhdb [[REG:%v[0-9]+]], %v28, %v26133; CHECK-NEXT: vno %v24, [[REG]], [[REG]]134; CHECK-NEXT: br %r14135  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(136                                               <2 x double> %val1, <2 x double> %val2,137                                               metadata !"uge",138                                               metadata !"fpexcept.strict") #0139  %ret = sext <2 x i1> %cmp to <2 x i64>140  ret <2 x i64> %ret141}142 143; Test ule.144define <2 x i64> @f11(<2 x i64> %dummy, <2 x double> %val1,145                      <2 x double> %val2) #0 {146; CHECK-LABEL: f11:147; CHECK: vfkhdb [[REG:%v[0-9]+]], %v26, %v28148; CHECK-NEXT: vno %v24, [[REG]], [[REG]]149; CHECK-NEXT: br %r14150  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(151                                               <2 x double> %val1, <2 x double> %val2,152                                               metadata !"ule",153                                               metadata !"fpexcept.strict") #0154  %ret = sext <2 x i1> %cmp to <2 x i64>155  ret <2 x i64> %ret156}157 158; Test ult.159define <2 x i64> @f12(<2 x i64> %dummy, <2 x double> %val1,160                      <2 x double> %val2) #0 {161; CHECK-LABEL: f12:162; CHECK: vfkhedb [[REG:%v[0-9]+]], %v26, %v28163; CHECK-NEXT: vno %v24, [[REG]], [[REG]]164; CHECK-NEXT: br %r14165  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(166                                               <2 x double> %val1, <2 x double> %val2,167                                               metadata !"ult",168                                               metadata !"fpexcept.strict") #0169  %ret = sext <2 x i1> %cmp to <2 x i64>170  ret <2 x i64> %ret171}172 173; Test ord.174define <2 x i64> @f13(<2 x i64> %dummy, <2 x double> %val1,175                      <2 x double> %val2) #0 {176; CHECK-LABEL: f13:177; CHECK-DAG: vfkhdb [[REG1:%v[0-9]+]], %v28, %v26178; CHECK-DAG: vfkhedb [[REG2:%v[0-9]+]], %v26, %v28179; CHECK: vo %v24, [[REG1]], [[REG2]]180; CHECK-NEXT: br %r14181  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(182                                               <2 x double> %val1, <2 x double> %val2,183                                               metadata !"ord",184                                               metadata !"fpexcept.strict") #0185  %ret = sext <2 x i1> %cmp to <2 x i64>186  ret <2 x i64> %ret187}188 189; Test uno.190define <2 x i64> @f14(<2 x i64> %dummy, <2 x double> %val1,191                      <2 x double> %val2) #0 {192; CHECK-LABEL: f14:193; CHECK-DAG: vfkhdb [[REG1:%v[0-9]+]], %v28, %v26194; CHECK-DAG: vfkhedb [[REG2:%v[0-9]+]], %v26, %v28195; CHECK: vno %v24, [[REG1]], [[REG2]]196; CHECK-NEXT: br %r14197  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(198                                               <2 x double> %val1, <2 x double> %val2,199                                               metadata !"uno",200                                               metadata !"fpexcept.strict") #0201  %ret = sext <2 x i1> %cmp to <2 x i64>202  ret <2 x i64> %ret203}204 205; Test oeq selects.206define <2 x double> @f15(<2 x double> %val1, <2 x double> %val2,207                         <2 x double> %val3, <2 x double> %val4) #0 {208; CHECK-LABEL: f15:209; CHECK: vfkedb [[REG:%v[0-9]+]], %v24, %v26210; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]211; CHECK-NEXT: br %r14212  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(213                                               <2 x double> %val1, <2 x double> %val2,214                                               metadata !"oeq",215                                               metadata !"fpexcept.strict") #0216  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4217  ret <2 x double> %ret218}219 220; Test one selects.221define <2 x double> @f16(<2 x double> %val1, <2 x double> %val2,222                         <2 x double> %val3, <2 x double> %val4) #0 {223; CHECK-LABEL: f16:224; CHECK-DAG: vfkhdb [[REG1:%v[0-9]+]], %v26, %v24225; CHECK-DAG: vfkhdb [[REG2:%v[0-9]+]], %v24, %v26226; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]]227; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]228; CHECK-NEXT: br %r14229  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(230                                               <2 x double> %val1, <2 x double> %val2,231                                               metadata !"one",232                                               metadata !"fpexcept.strict") #0233  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4234  ret <2 x double> %ret235}236 237; Test ogt selects.238define <2 x double> @f17(<2 x double> %val1, <2 x double> %val2,239                         <2 x double> %val3, <2 x double> %val4) #0 {240; CHECK-LABEL: f17:241; CHECK: vfkhdb [[REG:%v[0-9]+]], %v24, %v26242; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]243; CHECK-NEXT: br %r14244  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(245                                               <2 x double> %val1, <2 x double> %val2,246                                               metadata !"ogt",247                                               metadata !"fpexcept.strict") #0248  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4249  ret <2 x double> %ret250}251 252; Test oge selects.253define <2 x double> @f18(<2 x double> %val1, <2 x double> %val2,254                         <2 x double> %val3, <2 x double> %val4) #0 {255; CHECK-LABEL: f18:256; CHECK: vfkhedb [[REG:%v[0-9]+]], %v24, %v26257; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]258; CHECK-NEXT: br %r14259  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(260                                               <2 x double> %val1, <2 x double> %val2,261                                               metadata !"oge",262                                               metadata !"fpexcept.strict") #0263  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4264  ret <2 x double> %ret265}266 267; Test ole selects.268define <2 x double> @f19(<2 x double> %val1, <2 x double> %val2,269                         <2 x double> %val3, <2 x double> %val4) #0 {270; CHECK-LABEL: f19:271; CHECK: vfkhedb [[REG:%v[0-9]+]], %v26, %v24272; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]273; CHECK-NEXT: br %r14274  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(275                                               <2 x double> %val1, <2 x double> %val2,276                                               metadata !"ole",277                                               metadata !"fpexcept.strict") #0278  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4279  ret <2 x double> %ret280}281 282; Test olt selects.283define <2 x double> @f20(<2 x double> %val1, <2 x double> %val2,284                         <2 x double> %val3, <2 x double> %val4) #0 {285; CHECK-LABEL: f20:286; CHECK: vfkhdb [[REG:%v[0-9]+]], %v26, %v24287; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]288; CHECK-NEXT: br %r14289  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(290                                               <2 x double> %val1, <2 x double> %val2,291                                               metadata !"olt",292                                               metadata !"fpexcept.strict") #0293  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4294  ret <2 x double> %ret295}296 297; Test ueq selects.298define <2 x double> @f21(<2 x double> %val1, <2 x double> %val2,299                         <2 x double> %val3, <2 x double> %val4) #0 {300; CHECK-LABEL: f21:301; CHECK-DAG: vfkhdb [[REG1:%v[0-9]+]], %v26, %v24302; CHECK-DAG: vfkhdb [[REG2:%v[0-9]+]], %v24, %v26303; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]]304; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]305; CHECK-NEXT: br %r14306  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(307                                               <2 x double> %val1, <2 x double> %val2,308                                               metadata !"ueq",309                                               metadata !"fpexcept.strict") #0310  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4311  ret <2 x double> %ret312}313 314; Test une selects.315define <2 x double> @f22(<2 x double> %val1, <2 x double> %val2,316                         <2 x double> %val3, <2 x double> %val4) #0 {317; CHECK-LABEL: f22:318; CHECK: vfkedb [[REG:%v[0-9]+]], %v24, %v26319; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]320; CHECK-NEXT: br %r14321  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(322                                               <2 x double> %val1, <2 x double> %val2,323                                               metadata !"une",324                                               metadata !"fpexcept.strict") #0325  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4326  ret <2 x double> %ret327}328 329; Test ugt selects.330define <2 x double> @f23(<2 x double> %val1, <2 x double> %val2,331                         <2 x double> %val3, <2 x double> %val4) #0 {332; CHECK-LABEL: f23:333; CHECK: vfkhedb [[REG:%v[0-9]+]], %v26, %v24334; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]335; CHECK-NEXT: br %r14336  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(337                                               <2 x double> %val1, <2 x double> %val2,338                                               metadata !"ugt",339                                               metadata !"fpexcept.strict") #0340  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4341  ret <2 x double> %ret342}343 344; Test uge selects.345define <2 x double> @f24(<2 x double> %val1, <2 x double> %val2,346                         <2 x double> %val3, <2 x double> %val4) #0 {347; CHECK-LABEL: f24:348; CHECK: vfkhdb [[REG:%v[0-9]+]], %v26, %v24349; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]350; CHECK-NEXT: br %r14351  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(352                                               <2 x double> %val1, <2 x double> %val2,353                                               metadata !"uge",354                                               metadata !"fpexcept.strict") #0355  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4356  ret <2 x double> %ret357}358 359; Test ule selects.360define <2 x double> @f25(<2 x double> %val1, <2 x double> %val2,361                         <2 x double> %val3, <2 x double> %val4) #0 {362; CHECK-LABEL: f25:363; CHECK: vfkhdb [[REG:%v[0-9]+]], %v24, %v26364; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]365; CHECK-NEXT: br %r14366  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(367                                               <2 x double> %val1, <2 x double> %val2,368                                               metadata !"ule",369                                               metadata !"fpexcept.strict") #0370  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4371  ret <2 x double> %ret372}373 374; Test ult selects.375define <2 x double> @f26(<2 x double> %val1, <2 x double> %val2,376                         <2 x double> %val3, <2 x double> %val4) #0 {377; CHECK-LABEL: f26:378; CHECK: vfkhedb [[REG:%v[0-9]+]], %v24, %v26379; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]380; CHECK-NEXT: br %r14381  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(382                                               <2 x double> %val1, <2 x double> %val2,383                                               metadata !"ult",384                                               metadata !"fpexcept.strict") #0385  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4386  ret <2 x double> %ret387}388 389; Test ord selects.390define <2 x double> @f27(<2 x double> %val1, <2 x double> %val2,391                         <2 x double> %val3, <2 x double> %val4) #0 {392; CHECK-LABEL: f27:393; CHECK-DAG: vfkhdb [[REG1:%v[0-9]+]], %v26, %v24394; CHECK-DAG: vfkhedb [[REG2:%v[0-9]+]], %v24, %v26395; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]]396; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]397; CHECK-NEXT: br %r14398  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(399                                               <2 x double> %val1, <2 x double> %val2,400                                               metadata !"ord",401                                               metadata !"fpexcept.strict") #0402  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4403  ret <2 x double> %ret404}405 406; Test uno selects.407define <2 x double> @f28(<2 x double> %val1, <2 x double> %val2,408                         <2 x double> %val3, <2 x double> %val4) #0 {409; CHECK-LABEL: f28:410; CHECK-DAG: vfkhdb [[REG1:%v[0-9]+]], %v26, %v24411; CHECK-DAG: vfkhedb [[REG2:%v[0-9]+]], %v24, %v26412; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]]413; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]414; CHECK-NEXT: br %r14415  %cmp = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(416                                               <2 x double> %val1, <2 x double> %val2,417                                               metadata !"uno",418                                               metadata !"fpexcept.strict") #0419  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4420  ret <2 x double> %ret421}422 423; Test an f64 comparison that uses vector registers.424define i64 @f29(i64 %a, i64 %b, double %f1, <2 x double> %vec) #0 {425; CHECK-LABEL: f29:426; CHECK: wfkdb %f0, %v24427; CHECK-NEXT: locgrne %r2, %r3428; CHECK: br %r14429  %f2 = extractelement <2 x double> %vec, i32 0430  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(431                                               double %f1, double %f2,432                                               metadata !"oeq",433                                               metadata !"fpexcept.strict") #0434  %res = select i1 %cond, i64 %a, i64 %b435  ret i64 %res436}437 438attributes #0 = { strictfp }439 440declare <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double>, <2 x double>, metadata, metadata)441declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)442 443