179 lines · plain
1; Test an i32 0/-1 SELECTCCC for every floating-point condition.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5; Test CC in { 0 }6define i32 @f1(float %a, float %b) {7; CHECK-LABEL: f1:8; CHECK: ipm %r29; CHECK-NEXT: afi %r2, -26843545610; CHECK-NEXT: sra %r2, 3111; CHECK: br %r1412 %cond = fcmp oeq float %a, %b13 %res = select i1 %cond, i32 -1, i32 014 ret i32 %res15}16 17; Test CC in { 1 }18define i32 @f2(float %a, float %b) {19; CHECK-LABEL: f2:20; CHECK: ipm %r221; CHECK-NEXT: xilf %r2, 26843545622; CHECK-NEXT: afi %r2, -26843545623; CHECK-NEXT: sra %r2, 3124; CHECK: br %r1425 %cond = fcmp olt float %a, %b26 %res = select i1 %cond, i32 -1, i32 027 ret i32 %res28}29 30; Test CC in { 0, 1 }31define i32 @f3(float %a, float %b) {32; CHECK-LABEL: f3:33; CHECK: ipm %r234; CHECK-NEXT: afi %r2, -53687091235; CHECK-NEXT: sra %r2, 3136; CHECK: br %r1437 %cond = fcmp ole float %a, %b38 %res = select i1 %cond, i32 -1, i32 039 ret i32 %res40}41 42; Test CC in { 2 }43define i32 @f4(float %a, float %b) {44; CHECK-LABEL: f4:45; CHECK: ipm %r246; CHECK-NEXT: xilf %r2, 26843545647; CHECK-NEXT: afi %r2, 134217728048; CHECK-NEXT: sra %r2, 3149; CHECK: br %r1450 %cond = fcmp ogt float %a, %b51 %res = select i1 %cond, i32 -1, i32 052 ret i32 %res53}54 55; Test CC in { 0, 2 }56define i32 @f5(float %a, float %b) {57; CHECK-LABEL: f5:58; CHECK: ipm %r259; CHECK-NEXT: xilf %r2, 429496729560; CHECK-NEXT: sll %r2, 361; CHECK-NEXT: sra %r2, 3162; CHECK: br %r1463 %cond = fcmp oge float %a, %b64 %res = select i1 %cond, i32 -1, i32 065 ret i32 %res66}67 68; Test CC in { 1, 2 }69define i32 @f6(float %a, float %b) {70; CHECK-LABEL: f6:71; CHECK: ipm %r272; CHECK-NEXT: afi %r2, 26843545673; CHECK-NEXT: sll %r2, 274; CHECK-NEXT: sra %r2, 3175; CHECK: br %r1476 %cond = fcmp one float %a, %b77 %res = select i1 %cond, i32 -1, i32 078 ret i32 %res79}80 81; Test CC in { 0, 1, 2 }82define i32 @f7(float %a, float %b) {83; CHECK-LABEL: f7:84; CHECK: ipm %r285; CHECK-NEXT: afi %r2, -80530636886; CHECK-NEXT: sra %r2, 3187; CHECK: br %r1488 %cond = fcmp ord float %a, %b89 %res = select i1 %cond, i32 -1, i32 090 ret i32 %res91}92 93; Test CC in { 3 }94define i32 @f8(float %a, float %b) {95; CHECK-LABEL: f8:96; CHECK: ipm %r297; CHECK-NEXT: afi %r2, 134217728098; CHECK-NEXT: sra %r2, 3199; CHECK: br %r14100 %cond = fcmp uno float %a, %b101 %res = select i1 %cond, i32 -1, i32 0102 ret i32 %res103}104 105; Test CC in { 0, 3 }106define i32 @f9(float %a, float %b) {107; CHECK-LABEL: f9:108; CHECK: ipm %r2109; CHECK-NEXT: afi %r2, -268435456110; CHECK-NEXT: sll %r2, 2111; CHECK-NEXT: sra %r2, 31112; CHECK: br %r14113 %cond = fcmp ueq float %a, %b114 %res = select i1 %cond, i32 -1, i32 0115 ret i32 %res116}117 118; Test CC in { 1, 3 }119define i32 @f10(float %a, float %b) {120; CHECK-LABEL: f10:121; CHECK: ipm %r2122; CHECK-NEXT: sll %r2, 3123; CHECK-NEXT: sra %r2, 31124; CHECK: br %r14125 %cond = fcmp ult float %a, %b126 %res = select i1 %cond, i32 -1, i32 0127 ret i32 %res128}129 130; Test CC in { 0, 1, 3 }131define i32 @f11(float %a, float %b) {132; CHECK-LABEL: f11:133; CHECK: ipm %r2134; CHECK-NEXT: xilf %r2, 268435456135; CHECK-NEXT: afi %r2, -805306368136; CHECK-NEXT: sra %r2, 31137; CHECK: br %r14138 %cond = fcmp ule float %a, %b139 %res = select i1 %cond, i32 -1, i32 0140 ret i32 %res141}142 143; Test CC in { 2, 3 }144define i32 @f12(float %a, float %b) {145; CHECK-LABEL: f12:146; CHECK: ipm %r2147; CHECK-NEXT: sll %r2, 2148; CHECK-NEXT: sra %r2, 31149; CHECK: br %r14150 %cond = fcmp ugt float %a, %b151 %res = select i1 %cond, i32 -1, i32 0152 ret i32 %res153}154 155; Test CC in { 0, 2, 3 }156define i32 @f13(float %a, float %b) {157; CHECK-LABEL: f13:158; CHECK: ipm %r2159; CHECK-NEXT: xilf %r2, 268435456160; CHECK-NEXT: afi %r2, 1879048192161; CHECK-NEXT: sra %r2, 31162; CHECK: br %r14163 %cond = fcmp uge float %a, %b164 %res = select i1 %cond, i32 -1, i32 0165 ret i32 %res166}167 168; Test CC in { 1, 2, 3 }169define i32 @f14(float %a, float %b) {170; CHECK-LABEL: f14:171; CHECK: ipm %r2172; CHECK-NEXT: afi %r2, 1879048192173; CHECK-NEXT: sra %r2, 31174; CHECK: br %r14175 %cond = fcmp une float %a, %b176 %res = select i1 %cond, i32 -1, i32 0177 ret i32 %res178}179