1*1d189309SJonas Paulsson; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s 2*1d189309SJonas Paulsson; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s 3*1d189309SJonas Paulsson 4*1d189309SJonas Paulsson; Check comparisons with zero. If the tested value is live after the 5*1d189309SJonas Paulsson; comparison, load and test cannot be used to the same register. 6*1d189309SJonas Paulsson 7*1d189309SJonas Paulsson; Compared value is used afterwards. 8*1d189309SJonas Paulssondefine i64 @f1(i64 %a, i64 %b, float %V, ptr %dst) { 9*1d189309SJonas Paulsson; CHECK-LABEL: f1: 10*1d189309SJonas Paulsson; CHECK: ltebr %f1, %f0 11*1d189309SJonas Paulsson %cond = fcmp oeq float %V, 0.0 12*1d189309SJonas Paulsson %res = select i1 %cond, i64 %a, i64 %b 13*1d189309SJonas Paulsson store volatile float %V, ptr %dst 14*1d189309SJonas Paulsson ret i64 %res 15*1d189309SJonas Paulsson} 16*1d189309SJonas Paulsson 17*1d189309SJonas Paulssondefine i64 @f1m(i64 %a, i64 %b, float %V, ptr %dst) { 18*1d189309SJonas Paulsson; CHECK-LABEL: f1m: 19*1d189309SJonas Paulsson; CHECK: ltebr %f1, %f0 20*1d189309SJonas Paulsson %cond = fcmp oeq float %V, -0.0 21*1d189309SJonas Paulsson %res = select i1 %cond, i64 %a, i64 %b 22*1d189309SJonas Paulsson store volatile float %V, ptr %dst 23*1d189309SJonas Paulsson ret i64 %res 24*1d189309SJonas Paulsson} 25*1d189309SJonas Paulsson 26*1d189309SJonas Paulsson; Value only used in comparison. 27*1d189309SJonas Paulssondefine i64 @f2(i64 %a, i64 %b, float %V) { 28*1d189309SJonas Paulsson; CHECK-LABEL: f2: 29*1d189309SJonas Paulsson; CHECK: ltebr %f0, %f0 30*1d189309SJonas Paulsson %cond = fcmp oeq float %V, 0.0 31*1d189309SJonas Paulsson %res = select i1 %cond, i64 %a, i64 %b 32*1d189309SJonas Paulsson ret i64 %res 33*1d189309SJonas Paulsson} 34*1d189309SJonas Paulsson 35*1d189309SJonas Paulssondefine i64 @f2m(i64 %a, i64 %b, float %V) { 36*1d189309SJonas Paulsson; CHECK-LABEL: f2m: 37*1d189309SJonas Paulsson; CHECK: ltebr %f0, %f0 38*1d189309SJonas Paulsson %cond = fcmp oeq float %V, -0.0 39*1d189309SJonas Paulsson %res = select i1 %cond, i64 %a, i64 %b 40*1d189309SJonas Paulsson ret i64 %res 41*1d189309SJonas Paulsson} 42*1d189309SJonas Paulsson 43*1d189309SJonas Paulsson; Same for double 44*1d189309SJonas Paulssondefine i64 @f3(i64 %a, i64 %b, double %V, ptr %dst) { 45*1d189309SJonas Paulsson; CHECK-LABEL: f3: 46*1d189309SJonas Paulsson; CHECK: ltdbr %f1, %f0 47*1d189309SJonas Paulsson %cond = fcmp oeq double %V, 0.0 48*1d189309SJonas Paulsson %res = select i1 %cond, i64 %a, i64 %b 49*1d189309SJonas Paulsson store volatile double %V, ptr %dst 50*1d189309SJonas Paulsson ret i64 %res 51*1d189309SJonas Paulsson} 52*1d189309SJonas Paulsson 53*1d189309SJonas Paulssondefine i64 @f3m(i64 %a, i64 %b, double %V, ptr %dst) { 54*1d189309SJonas Paulsson; CHECK-LABEL: f3m: 55*1d189309SJonas Paulsson; CHECK: ltdbr %f1, %f0 56*1d189309SJonas Paulsson %cond = fcmp oeq double %V, -0.0 57*1d189309SJonas Paulsson %res = select i1 %cond, i64 %a, i64 %b 58*1d189309SJonas Paulsson store volatile double %V, ptr %dst 59*1d189309SJonas Paulsson ret i64 %res 60*1d189309SJonas Paulsson} 61*1d189309SJonas Paulsson 62*1d189309SJonas Paulssondefine i64 @f4(i64 %a, i64 %b, double %V) { 63*1d189309SJonas Paulsson; CHECK-LABEL: f4: 64*1d189309SJonas Paulsson; CHECK: ltdbr %f0, %f0 65*1d189309SJonas Paulsson %cond = fcmp oeq double %V, 0.0 66*1d189309SJonas Paulsson %res = select i1 %cond, i64 %a, i64 %b 67*1d189309SJonas Paulsson ret i64 %res 68*1d189309SJonas Paulsson} 69*1d189309SJonas Paulsson 70*1d189309SJonas Paulssondefine i64 @f4m(i64 %a, i64 %b, double %V) { 71*1d189309SJonas Paulsson; CHECK-LABEL: f4m: 72*1d189309SJonas Paulsson; CHECK: ltdbr %f0, %f0 73*1d189309SJonas Paulsson %cond = fcmp oeq double %V, -0.0 74*1d189309SJonas Paulsson %res = select i1 %cond, i64 %a, i64 %b 75*1d189309SJonas Paulsson ret i64 %res 76*1d189309SJonas Paulsson} 77*1d189309SJonas Paulsson 78*1d189309SJonas Paulsson; Same for fp128 79*1d189309SJonas Paulssondefine i64 @f5(i64 %a, i64 %b, fp128 %V, ptr %dst) { 80*1d189309SJonas Paulsson; CHECK-LABEL: f5: 81*1d189309SJonas Paulsson; CHECK: ltxbr %f1, %f0 82*1d189309SJonas Paulsson %cond = fcmp oeq fp128 %V, 0xL00000000000000008000000000000000 83*1d189309SJonas Paulsson %res = select i1 %cond, i64 %a, i64 %b 84*1d189309SJonas Paulsson store volatile fp128 %V, ptr %dst 85*1d189309SJonas Paulsson ret i64 %res 86*1d189309SJonas Paulsson} 87*1d189309SJonas Paulsson 88*1d189309SJonas Paulssondefine i64 @f6(i64 %a, i64 %b, fp128 %V) { 89*1d189309SJonas Paulsson; CHECK-LABEL: f6: 90*1d189309SJonas Paulsson; CHECK: ltxbr %f0, %f0 91*1d189309SJonas Paulsson %cond = fcmp oeq fp128 %V, 0xL00000000000000008000000000000000 92*1d189309SJonas Paulsson %res = select i1 %cond, i64 %a, i64 %b 93*1d189309SJonas Paulsson ret i64 %res 94*1d189309SJonas Paulsson} 95