brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.2 KiB · eef5755 Raw
350 lines · plain
1; Test f64 and v2f64 comparisons.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s4 5; Test oeq.6define <2 x i64> @f1(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {7; CHECK-LABEL: f1:8; CHECK: vfcedb %v24, %v26, %v289; CHECK-NEXT: br %r1410  %cmp = fcmp oeq <2 x double> %val1, %val211  %ret = sext <2 x i1> %cmp to <2 x i64>12  ret <2 x i64> %ret13}14 15; Test one.16define <2 x i64> @f2(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {17; CHECK-LABEL: f2:18; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v2619; CHECK-DAG: vfchdb [[REG2:%v[0-9]+]], %v26, %v2820; CHECK: vo %v24, [[REG1]], [[REG2]]21; CHECK-NEXT: br %r1422  %cmp = fcmp one <2 x double> %val1, %val223  %ret = sext <2 x i1> %cmp to <2 x i64>24  ret <2 x i64> %ret25}26 27; Test ogt.28define <2 x i64> @f3(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {29; CHECK-LABEL: f3:30; CHECK: vfchdb %v24, %v26, %v2831; CHECK-NEXT: br %r1432  %cmp = fcmp ogt <2 x double> %val1, %val233  %ret = sext <2 x i1> %cmp to <2 x i64>34  ret <2 x i64> %ret35}36 37; Test oge.38define <2 x i64> @f4(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {39; CHECK-LABEL: f4:40; CHECK: vfchedb %v24, %v26, %v2841; CHECK-NEXT: br %r1442  %cmp = fcmp oge <2 x double> %val1, %val243  %ret = sext <2 x i1> %cmp to <2 x i64>44  ret <2 x i64> %ret45}46 47; Test ole.48define <2 x i64> @f5(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {49; CHECK-LABEL: f5:50; CHECK: vfchedb %v24, %v28, %v2651; CHECK-NEXT: br %r1452  %cmp = fcmp ole <2 x double> %val1, %val253  %ret = sext <2 x i1> %cmp to <2 x i64>54  ret <2 x i64> %ret55}56 57; Test olt.58define <2 x i64> @f6(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {59; CHECK-LABEL: f6:60; CHECK: vfchdb %v24, %v28, %v2661; CHECK-NEXT: br %r1462  %cmp = fcmp olt <2 x double> %val1, %val263  %ret = sext <2 x i1> %cmp to <2 x i64>64  ret <2 x i64> %ret65}66 67; Test ueq.68define <2 x i64> @f7(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {69; CHECK-LABEL: f7:70; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v2671; CHECK-DAG: vfchdb [[REG2:%v[0-9]+]], %v26, %v2872; CHECK: vno %v24, [[REG1]], [[REG2]]73; CHECK-NEXT: br %r1474  %cmp = fcmp ueq <2 x double> %val1, %val275  %ret = sext <2 x i1> %cmp to <2 x i64>76  ret <2 x i64> %ret77}78 79; Test une.80define <2 x i64> @f8(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {81; CHECK-LABEL: f8:82; CHECK: vfcedb [[REG:%v[0-9]+]], %v26, %v2883; CHECK-NEXT: vno %v24, [[REG]], [[REG]]84; CHECK-NEXT: br %r1485  %cmp = fcmp une <2 x double> %val1, %val286  %ret = sext <2 x i1> %cmp to <2 x i64>87  ret <2 x i64> %ret88}89 90; Test ugt.91define <2 x i64> @f9(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {92; CHECK-LABEL: f9:93; CHECK: vfchedb [[REG:%v[0-9]+]], %v28, %v2694; CHECK-NEXT: vno %v24, [[REG]], [[REG]]95; CHECK-NEXT: br %r1496  %cmp = fcmp ugt <2 x double> %val1, %val297  %ret = sext <2 x i1> %cmp to <2 x i64>98  ret <2 x i64> %ret99}100 101; Test uge.102define <2 x i64> @f10(<2 x i64> %dummy, <2 x double> %val1,103                      <2 x double> %val2) {104; CHECK-LABEL: f10:105; CHECK: vfchdb [[REG:%v[0-9]+]], %v28, %v26106; CHECK-NEXT: vno %v24, [[REG]], [[REG]]107; CHECK-NEXT: br %r14108  %cmp = fcmp uge <2 x double> %val1, %val2109  %ret = sext <2 x i1> %cmp to <2 x i64>110  ret <2 x i64> %ret111}112 113; Test ule.114define <2 x i64> @f11(<2 x i64> %dummy, <2 x double> %val1,115                      <2 x double> %val2) {116; CHECK-LABEL: f11:117; CHECK: vfchdb [[REG:%v[0-9]+]], %v26, %v28118; CHECK-NEXT: vno %v24, [[REG]], [[REG]]119; CHECK-NEXT: br %r14120  %cmp = fcmp ule <2 x double> %val1, %val2121  %ret = sext <2 x i1> %cmp to <2 x i64>122  ret <2 x i64> %ret123}124 125; Test ult.126define <2 x i64> @f12(<2 x i64> %dummy, <2 x double> %val1,127                      <2 x double> %val2) {128; CHECK-LABEL: f12:129; CHECK: vfchedb [[REG:%v[0-9]+]], %v26, %v28130; CHECK-NEXT: vno %v24, [[REG]], [[REG]]131; CHECK-NEXT: br %r14132  %cmp = fcmp ult <2 x double> %val1, %val2133  %ret = sext <2 x i1> %cmp to <2 x i64>134  ret <2 x i64> %ret135}136 137; Test ord.138define <2 x i64> @f13(<2 x i64> %dummy, <2 x double> %val1,139                      <2 x double> %val2) {140; CHECK-LABEL: f13:141; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v26142; CHECK-DAG: vfchedb [[REG2:%v[0-9]+]], %v26, %v28143; CHECK: vo %v24, [[REG1]], [[REG2]]144; CHECK-NEXT: br %r14145  %cmp = fcmp ord <2 x double> %val1, %val2146  %ret = sext <2 x i1> %cmp to <2 x i64>147  ret <2 x i64> %ret148}149 150; Test uno.151define <2 x i64> @f14(<2 x i64> %dummy, <2 x double> %val1,152                      <2 x double> %val2) {153; CHECK-LABEL: f14:154; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v26155; CHECK-DAG: vfchedb [[REG2:%v[0-9]+]], %v26, %v28156; CHECK: vno %v24, [[REG1]], [[REG2]]157; CHECK-NEXT: br %r14158  %cmp = fcmp uno <2 x double> %val1, %val2159  %ret = sext <2 x i1> %cmp to <2 x i64>160  ret <2 x i64> %ret161}162 163; Test oeq selects.164define <2 x double> @f15(<2 x double> %val1, <2 x double> %val2,165                         <2 x double> %val3, <2 x double> %val4) {166; CHECK-LABEL: f15:167; CHECK: vfcedb [[REG:%v[0-9]+]], %v24, %v26168; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]169; CHECK-NEXT: br %r14170  %cmp = fcmp oeq <2 x double> %val1, %val2171  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4172  ret <2 x double> %ret173}174 175; Test one selects.176define <2 x double> @f16(<2 x double> %val1, <2 x double> %val2,177                         <2 x double> %val3, <2 x double> %val4) {178; CHECK-LABEL: f16:179; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v26, %v24180; CHECK-DAG: vfchdb [[REG2:%v[0-9]+]], %v24, %v26181; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]]182; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]183; CHECK-NEXT: br %r14184  %cmp = fcmp one <2 x double> %val1, %val2185  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4186  ret <2 x double> %ret187}188 189; Test ogt selects.190define <2 x double> @f17(<2 x double> %val1, <2 x double> %val2,191                         <2 x double> %val3, <2 x double> %val4) {192; CHECK-LABEL: f17:193; CHECK: vfchdb [[REG:%v[0-9]+]], %v24, %v26194; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]195; CHECK-NEXT: br %r14196  %cmp = fcmp ogt <2 x double> %val1, %val2197  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4198  ret <2 x double> %ret199}200 201; Test oge selects.202define <2 x double> @f18(<2 x double> %val1, <2 x double> %val2,203                         <2 x double> %val3, <2 x double> %val4) {204; CHECK-LABEL: f18:205; CHECK: vfchedb [[REG:%v[0-9]+]], %v24, %v26206; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]207; CHECK-NEXT: br %r14208  %cmp = fcmp oge <2 x double> %val1, %val2209  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4210  ret <2 x double> %ret211}212 213; Test ole selects.214define <2 x double> @f19(<2 x double> %val1, <2 x double> %val2,215                         <2 x double> %val3, <2 x double> %val4) {216; CHECK-LABEL: f19:217; CHECK: vfchedb [[REG:%v[0-9]+]], %v26, %v24218; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]219; CHECK-NEXT: br %r14220  %cmp = fcmp ole <2 x double> %val1, %val2221  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4222  ret <2 x double> %ret223}224 225; Test olt selects.226define <2 x double> @f20(<2 x double> %val1, <2 x double> %val2,227                         <2 x double> %val3, <2 x double> %val4) {228; CHECK-LABEL: f20:229; CHECK: vfchdb [[REG:%v[0-9]+]], %v26, %v24230; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]231; CHECK-NEXT: br %r14232  %cmp = fcmp olt <2 x double> %val1, %val2233  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4234  ret <2 x double> %ret235}236 237; Test ueq selects.238define <2 x double> @f21(<2 x double> %val1, <2 x double> %val2,239                         <2 x double> %val3, <2 x double> %val4) {240; CHECK-LABEL: f21:241; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v26, %v24242; CHECK-DAG: vfchdb [[REG2:%v[0-9]+]], %v24, %v26243; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]]244; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]245; CHECK-NEXT: br %r14246  %cmp = fcmp ueq <2 x double> %val1, %val2247  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4248  ret <2 x double> %ret249}250 251; Test une selects.252define <2 x double> @f22(<2 x double> %val1, <2 x double> %val2,253                         <2 x double> %val3, <2 x double> %val4) {254; CHECK-LABEL: f22:255; CHECK: vfcedb [[REG:%v[0-9]+]], %v24, %v26256; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]257; CHECK-NEXT: br %r14258  %cmp = fcmp une <2 x double> %val1, %val2259  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4260  ret <2 x double> %ret261}262 263; Test ugt selects.264define <2 x double> @f23(<2 x double> %val1, <2 x double> %val2,265                         <2 x double> %val3, <2 x double> %val4) {266; CHECK-LABEL: f23:267; CHECK: vfchedb [[REG:%v[0-9]+]], %v26, %v24268; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]269; CHECK-NEXT: br %r14270  %cmp = fcmp ugt <2 x double> %val1, %val2271  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4272  ret <2 x double> %ret273}274 275; Test uge selects.276define <2 x double> @f24(<2 x double> %val1, <2 x double> %val2,277                         <2 x double> %val3, <2 x double> %val4) {278; CHECK-LABEL: f24:279; CHECK: vfchdb [[REG:%v[0-9]+]], %v26, %v24280; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]281; CHECK-NEXT: br %r14282  %cmp = fcmp uge <2 x double> %val1, %val2283  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4284  ret <2 x double> %ret285}286 287; Test ule selects.288define <2 x double> @f25(<2 x double> %val1, <2 x double> %val2,289                         <2 x double> %val3, <2 x double> %val4) {290; CHECK-LABEL: f25:291; CHECK: vfchdb [[REG:%v[0-9]+]], %v24, %v26292; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]293; CHECK-NEXT: br %r14294  %cmp = fcmp ule <2 x double> %val1, %val2295  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4296  ret <2 x double> %ret297}298 299; Test ult selects.300define <2 x double> @f26(<2 x double> %val1, <2 x double> %val2,301                         <2 x double> %val3, <2 x double> %val4) {302; CHECK-LABEL: f26:303; CHECK: vfchedb [[REG:%v[0-9]+]], %v24, %v26304; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]305; CHECK-NEXT: br %r14306  %cmp = fcmp ult <2 x double> %val1, %val2307  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4308  ret <2 x double> %ret309}310 311; Test ord selects.312define <2 x double> @f27(<2 x double> %val1, <2 x double> %val2,313                         <2 x double> %val3, <2 x double> %val4) {314; CHECK-LABEL: f27:315; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v26, %v24316; CHECK-DAG: vfchedb [[REG2:%v[0-9]+]], %v24, %v26317; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]]318; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]319; CHECK-NEXT: br %r14320  %cmp = fcmp ord <2 x double> %val1, %val2321  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4322  ret <2 x double> %ret323}324 325; Test uno selects.326define <2 x double> @f28(<2 x double> %val1, <2 x double> %val2,327                         <2 x double> %val3, <2 x double> %val4) {328; CHECK-LABEL: f28:329; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v26, %v24330; CHECK-DAG: vfchedb [[REG2:%v[0-9]+]], %v24, %v26331; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]]332; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]333; CHECK-NEXT: br %r14334  %cmp = fcmp uno <2 x double> %val1, %val2335  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4336  ret <2 x double> %ret337}338 339; Test an f64 comparison that uses vector registers.340define i64 @f29(i64 %a, i64 %b, double %f1, <2 x double> %vec) {341; CHECK-LABEL: f29:342; CHECK: wfcdb %f0, %v24343; CHECK-NEXT: locgrne %r2, %r3344; CHECK: br %r14345  %f2 = extractelement <2 x double> %vec, i32 0346  %cond = fcmp oeq double %f1, %f2347  %res = select i1 %cond, i64 %a, i64 %b348  ret i64 %res349}350