1; Test vector maximum/minimum with a zero splat on z14. 2; 3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s 4 5define <2 x double> @f1(<2 x double> %val) { 6; CHECK-LABEL: f1: 7; CHECK: vgbm %v0, 0 8; CHECK-NEXT: vfmaxdb %v24, %v24, %v0, 4 9; CHECK-NEXT: br %r14 10 %cmp = fcmp ogt <2 x double> %val, zeroinitializer 11 %ret = select <2 x i1> %cmp, <2 x double> %val, <2 x double> zeroinitializer 12 ret <2 x double> %ret 13} 14 15define <2 x double> @f2(<2 x double> %val) { 16; CHECK-LABEL: f2: 17; CHECK: vgbm %v0, 0 18; CHECK-NEXT: vfmindb %v24, %v24, %v0, 4 19; CHECK-NEXT: br %r14 20 %cmp = fcmp olt <2 x double> %val, zeroinitializer 21 %ret = select <2 x i1> %cmp, <2 x double> %val, <2 x double> zeroinitializer 22 ret <2 x double> %ret 23} 24 25define <4 x float> @f3(<4 x float> %val) { 26; CHECK-LABEL: f3: 27; CHECK: vgbm %v0, 0 28; CHECK-NEXT: vfmaxsb %v24, %v24, %v0, 4 29; CHECK-NEXT: br %r14 30 %cmp = fcmp ogt <4 x float> %val, zeroinitializer 31 %ret = select <4 x i1> %cmp, <4 x float> %val, <4 x float> zeroinitializer 32 ret <4 x float> %ret 33} 34 35define <4 x float> @f4(<4 x float> %val) { 36; CHECK-LABEL: f4: 37; CHECK: vgbm %v0, 0 38; CHECK-NEXT: vfminsb %v24, %v24, %v0, 4 39; CHECK-NEXT: br %r14 40 %cmp = fcmp olt <4 x float> %val, zeroinitializer 41 %ret = select <4 x i1> %cmp, <4 x float> %val, <4 x float> zeroinitializer 42 ret <4 x float> %ret 43} 44 45define <2 x double> @f5(<2 x double> %val) { 46; CHECK-LABEL: f5: 47; CHECK: vgbm %v0, 0 48; CHECK-NEXT: vfchedb %v1, %v0, %v24 49; CHECK-NEXT: vsel %v24, %v0, %v24, %v1 50; CHECK-NEXT: br %r14 51 %cmp = fcmp ugt <2 x double> %val, zeroinitializer 52 %ret = select <2 x i1> %cmp, <2 x double> %val, <2 x double> zeroinitializer 53 ret <2 x double> %ret 54} 55 56define <2 x double> @f6(<2 x double> %val) { 57; CHECK-LABEL: f6: 58; CHECK: vgbm %v0, 0 59; CHECK-NEXT: vfchedb %v1, %v24, %v0 60; CHECK-NEXT: vsel %v24, %v0, %v24, %v1 61; CHECK-NEXT: br %r14 62 %cmp = fcmp ult <2 x double> %val, zeroinitializer 63 %ret = select <2 x i1> %cmp, <2 x double> %val, <2 x double> zeroinitializer 64 ret <2 x double> %ret 65} 66 67define <4 x float> @f7(<4 x float> %val) { 68; CHECK-LABEL: f7: 69; CHECK: vgbm %v0, 0 70; CHECK-NEXT: vfchesb %v1, %v0, %v24 71; CHECK-NEXT: vsel %v24, %v0, %v24, %v1 72; CHECK-NEXT: br %r14 73 %cmp = fcmp ugt <4 x float> %val, zeroinitializer 74 %ret = select <4 x i1> %cmp, <4 x float> %val, <4 x float> zeroinitializer 75 ret <4 x float> %ret 76} 77 78define <4 x float> @f8(<4 x float> %val) { 79; CHECK-LABEL: f8: 80; CHECK: vgbm %v0, 0 81; CHECK-NEXT: vfchesb %v1, %v24, %v0 82; CHECK-NEXT: vsel %v24, %v0, %v24, %v1 83; CHECK-NEXT: br %r14 84 %cmp = fcmp ult <4 x float> %val, zeroinitializer 85 %ret = select <4 x i1> %cmp, <4 x float> %val, <4 x float> zeroinitializer 86 ret <4 x float> %ret 87} 88