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 { 1, 2, 3 }6define i32 @f1(float %a, float %b) {7; CHECK-LABEL: f1:8; CHECK: ipm %r29; CHECK-NEXT: afi %r2, 187904819210; CHECK-NEXT: sra %r2, 3111; CHECK: br %r1412 %cond = fcmp oeq float %a, %b13 %res = select i1 %cond, i32 0, i32 -114 ret i32 %res15}16 17; Test CC in { 0, 2, 3 }18define i32 @f2(float %a, float %b) {19; CHECK-LABEL: f2:20; CHECK: ipm %r221; CHECK-NEXT: xilf %r2, 26843545622; CHECK-NEXT: afi %r2, 187904819223; CHECK-NEXT: sra %r2, 3124; CHECK: br %r1425 %cond = fcmp olt float %a, %b26 %res = select i1 %cond, i32 0, i32 -127 ret i32 %res28}29 30; Test CC in { 2, 3 }31define i32 @f3(float %a, float %b) {32; CHECK-LABEL: f3:33; CHECK: ipm %r234; CHECK-NEXT: sll %r2, 235; CHECK-NEXT: sra %r2, 3136; CHECK: br %r1437 %cond = fcmp ole float %a, %b38 %res = select i1 %cond, i32 0, i32 -139 ret i32 %res40}41 42; Test CC in { 0, 1, 3 }43define i32 @f4(float %a, float %b) {44; CHECK-LABEL: f4:45; CHECK: ipm %r246; CHECK-NEXT: xilf %r2, 26843545647; CHECK-NEXT: afi %r2, -80530636848; CHECK-NEXT: sra %r2, 3149; CHECK: br %r1450 %cond = fcmp ogt float %a, %b51 %res = select i1 %cond, i32 0, i32 -152 ret i32 %res53}54 55; Test CC in { 1, 3 }56define i32 @f5(float %a, float %b) {57; CHECK-LABEL: f5:58; CHECK: ipm %r259; CHECK-NEXT: sll %r2, 360; CHECK-NEXT: sra %r2, 3161; CHECK: br %r1462 %cond = fcmp oge float %a, %b63 %res = select i1 %cond, i32 0, i32 -164 ret i32 %res65}66 67; Test CC in { 0, 3 }68define i32 @f6(float %a, float %b) {69; CHECK-LABEL: f6:70; CHECK: ipm %r271; CHECK-NEXT: afi %r2, -26843545672; CHECK-NEXT: sll %r2, 273; CHECK-NEXT: sra %r2, 3174; CHECK: br %r1475 %cond = fcmp one float %a, %b76 %res = select i1 %cond, i32 0, i32 -177 ret i32 %res78}79 80; Test CC in { 3 }81define i32 @f7(float %a, float %b) {82; CHECK-LABEL: f7:83; CHECK: ipm %r284; CHECK-NEXT: afi %r2, 134217728085; CHECK-NEXT: sra %r2, 3186; CHECK: br %r1487 %cond = fcmp ord float %a, %b88 %res = select i1 %cond, i32 0, i32 -189 ret i32 %res90}91 92; Test CC in { 0, 1, 2 }93define i32 @f8(float %a, float %b) {94; CHECK-LABEL: f8:95; CHECK: ipm %r296; CHECK-NEXT: afi %r2, -80530636897; CHECK-NEXT: sra %r2, 3198; CHECK: br %r1499 %cond = fcmp uno float %a, %b100 %res = select i1 %cond, i32 0, i32 -1101 ret i32 %res102}103 104; Test CC in { 1, 2 }105define i32 @f9(float %a, float %b) {106; CHECK-LABEL: f9:107; CHECK: ipm %r2108; CHECK-NEXT: afi %r2, 268435456109; CHECK-NEXT: sll %r2, 2110; CHECK-NEXT: sra %r2, 31111; CHECK: br %r14112 %cond = fcmp ueq float %a, %b113 %res = select i1 %cond, i32 0, i32 -1114 ret i32 %res115}116 117; Test CC in { 0, 2 }118define i32 @f10(float %a, float %b) {119; CHECK-LABEL: f10:120; CHECK: ipm %r2121; CHECK-NEXT: xilf %r2, 4294967295122; CHECK-NEXT: sll %r2, 3123; CHECK-NEXT: sra %r2, 31124; CHECK: br %r14125 %cond = fcmp ult float %a, %b126 %res = select i1 %cond, i32 0, i32 -1127 ret i32 %res128}129 130; Test CC in { 2 }131define i32 @f11(float %a, float %b) {132; CHECK-LABEL: f11:133; CHECK: ipm %r2134; CHECK-NEXT: xilf %r2, 268435456135; CHECK-NEXT: afi %r2, 1342177280136; CHECK-NEXT: sra %r2, 31137; CHECK: br %r14138 %cond = fcmp ule float %a, %b139 %res = select i1 %cond, i32 0, i32 -1140 ret i32 %res141}142 143; Test CC in { 0, 1 }144define i32 @f12(float %a, float %b) {145; CHECK-LABEL: f12:146; CHECK: ipm %r2147; CHECK-NEXT: afi %r2, -536870912148; CHECK-NEXT: sra %r2, 31149; CHECK: br %r14150 %cond = fcmp ugt float %a, %b151 %res = select i1 %cond, i32 0, i32 -1152 ret i32 %res153}154 155; Test CC in { 1 }156define i32 @f13(float %a, float %b) {157; CHECK-LABEL: f13:158; CHECK: ipm %r2159; CHECK-NEXT: xilf %r2, 268435456160; CHECK-NEXT: afi %r2, -268435456161; CHECK-NEXT: sra %r2, 31162; CHECK: br %r14163 %cond = fcmp uge float %a, %b164 %res = select i1 %cond, i32 0, i32 -1165 ret i32 %res166}167 168; Test CC in { 0 }169define i32 @f14(float %a, float %b) {170; CHECK-LABEL: f14:171; CHECK: ipm %r2172; CHECK-NEXT: afi %r2, -268435456173; CHECK-NEXT: sra %r2, 31174; CHECK: br %r14175 %cond = fcmp une float %a, %b176 %res = select i1 %cond, i32 0, i32 -1177 ret i32 %res178}179