1f496bd9aSJonas Paulsson; Test that vector compare / select combinations do not produce any 2f496bd9aSJonas Paulsson; unnecessary pack /unpack / shift instructions. 3f496bd9aSJonas Paulsson; 4f496bd9aSJonas Paulsson; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s 5c63ed222SJonas Paulsson; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s -check-prefix=CHECK-Z14 6f496bd9aSJonas Paulsson 7f496bd9aSJonas Paulssondefine <2 x i8> @fun0(<2 x i8> %val1, <2 x i8> %val2, <2 x i8> %val3, <2 x i8> %val4) { 8f496bd9aSJonas Paulsson; CHECK-LABEL: fun0: 9*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 10f496bd9aSJonas Paulsson; CHECK-NEXT: vceqb %v0, %v24, %v26 11f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 12f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 13f496bd9aSJonas Paulsson %cmp = icmp eq <2 x i8> %val1, %val2 14f496bd9aSJonas Paulsson %sel = select <2 x i1> %cmp, <2 x i8> %val3, <2 x i8> %val4 15f496bd9aSJonas Paulsson ret <2 x i8> %sel 16f496bd9aSJonas Paulsson} 17f496bd9aSJonas Paulsson 18f496bd9aSJonas Paulssondefine <2 x i16> @fun1(<2 x i8> %val1, <2 x i8> %val2, <2 x i16> %val3, <2 x i16> %val4) { 19f496bd9aSJonas Paulsson; CHECK-LABEL: fun1: 20*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 21f496bd9aSJonas Paulsson; CHECK-NEXT: vceqb %v0, %v24, %v26 22f496bd9aSJonas Paulsson; CHECK-NEXT: vuphb %v0, %v0 23f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 24f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 25f496bd9aSJonas Paulsson %cmp = icmp eq <2 x i8> %val1, %val2 26f496bd9aSJonas Paulsson %sel = select <2 x i1> %cmp, <2 x i16> %val3, <2 x i16> %val4 27f496bd9aSJonas Paulsson ret <2 x i16> %sel 28f496bd9aSJonas Paulsson} 29f496bd9aSJonas Paulsson 30c63ed222SJonas Paulssondefine <16 x i8> @fun2(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3, <16 x i8> %val4) { 31f496bd9aSJonas Paulsson; CHECK-LABEL: fun2: 32*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 33f496bd9aSJonas Paulsson; CHECK-NEXT: vceqb %v0, %v24, %v26 34f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 35f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 36c63ed222SJonas Paulsson %cmp = icmp eq <16 x i8> %val1, %val2 37c63ed222SJonas Paulsson %sel = select <16 x i1> %cmp, <16 x i8> %val3, <16 x i8> %val4 38c63ed222SJonas Paulsson ret <16 x i8> %sel 39f496bd9aSJonas Paulsson} 40f496bd9aSJonas Paulsson 41c63ed222SJonas Paulssondefine <16 x i16> @fun3(<16 x i8> %val1, <16 x i8> %val2, <16 x i16> %val3, <16 x i16> %val4) { 42f496bd9aSJonas Paulsson; CHECK-LABEL: fun3: 43*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 44f496bd9aSJonas Paulsson; CHECK-NEXT: vceqb %v0, %v24, %v26 45c63ed222SJonas Paulsson; CHECK-DAG: vuphb [[REG0:%v[0-9]+]], %v0 46c63ed222SJonas Paulsson; CHECK-DAG: vmrlg [[REG1:%v[0-9]+]], %v0, %v0 47c63ed222SJonas Paulsson; CHECK-DAG: vuphb [[REG1]], [[REG1]] 48c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v25, [[REG0]] 49c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v26, %v30, %v27, [[REG1]] 50f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 51c63ed222SJonas Paulsson %cmp = icmp eq <16 x i8> %val1, %val2 52c63ed222SJonas Paulsson %sel = select <16 x i1> %cmp, <16 x i16> %val3, <16 x i16> %val4 53c63ed222SJonas Paulsson ret <16 x i16> %sel 54f496bd9aSJonas Paulsson} 55f496bd9aSJonas Paulsson 56c63ed222SJonas Paulssondefine <32 x i8> @fun4(<32 x i8> %val1, <32 x i8> %val2, <32 x i8> %val3, <32 x i8> %val4) { 57f496bd9aSJonas Paulsson; CHECK-LABEL: fun4: 58*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 59c63ed222SJonas Paulsson; CHECK-DAG: vceqb [[REG0:%v[0-9]+]], %v26, %v30 60c63ed222SJonas Paulsson; CHECK-DAG: vceqb [[REG1:%v[0-9]+]], %v24, %v28 61c63ed222SJonas Paulsson; CHECK-DAG: vsel %v24, %v25, %v29, [[REG1]] 62c63ed222SJonas Paulsson; CHECK-DAG: vsel %v26, %v27, %v31, [[REG0]] 63f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 64c63ed222SJonas Paulsson %cmp = icmp eq <32 x i8> %val1, %val2 65c63ed222SJonas Paulsson %sel = select <32 x i1> %cmp, <32 x i8> %val3, <32 x i8> %val4 66c63ed222SJonas Paulsson ret <32 x i8> %sel 67f496bd9aSJonas Paulsson} 68f496bd9aSJonas Paulsson 69c63ed222SJonas Paulssondefine <2 x i8> @fun5(<2 x i16> %val1, <2 x i16> %val2, <2 x i8> %val3, <2 x i8> %val4) { 70f496bd9aSJonas Paulsson; CHECK-LABEL: fun5: 71*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 72f496bd9aSJonas Paulsson; CHECK-NEXT: vceqh %v0, %v24, %v26 73f496bd9aSJonas Paulsson; CHECK-NEXT: vpkh %v0, %v0, %v0 74f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 75f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 76f496bd9aSJonas Paulsson %cmp = icmp eq <2 x i16> %val1, %val2 77f496bd9aSJonas Paulsson %sel = select <2 x i1> %cmp, <2 x i8> %val3, <2 x i8> %val4 78f496bd9aSJonas Paulsson ret <2 x i8> %sel 79f496bd9aSJonas Paulsson} 80f496bd9aSJonas Paulsson 81c63ed222SJonas Paulssondefine <2 x i16> @fun6(<2 x i16> %val1, <2 x i16> %val2, <2 x i16> %val3, <2 x i16> %val4) { 82c63ed222SJonas Paulsson; CHECK-LABEL: fun6: 83*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 84f496bd9aSJonas Paulsson; CHECK-NEXT: vceqh %v0, %v24, %v26 85f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 86f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 87f496bd9aSJonas Paulsson %cmp = icmp eq <2 x i16> %val1, %val2 88f496bd9aSJonas Paulsson %sel = select <2 x i1> %cmp, <2 x i16> %val3, <2 x i16> %val4 89f496bd9aSJonas Paulsson ret <2 x i16> %sel 90f496bd9aSJonas Paulsson} 91f496bd9aSJonas Paulsson 92c63ed222SJonas Paulssondefine <2 x i32> @fun7(<2 x i16> %val1, <2 x i16> %val2, <2 x i32> %val3, <2 x i32> %val4) { 93c63ed222SJonas Paulsson; CHECK-LABEL: fun7: 94*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 95f496bd9aSJonas Paulsson; CHECK-NEXT: vceqh %v0, %v24, %v26 96f496bd9aSJonas Paulsson; CHECK-NEXT: vuphh %v0, %v0 97f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 98f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 99f496bd9aSJonas Paulsson %cmp = icmp eq <2 x i16> %val1, %val2 100f496bd9aSJonas Paulsson %sel = select <2 x i1> %cmp, <2 x i32> %val3, <2 x i32> %val4 101f496bd9aSJonas Paulsson ret <2 x i32> %sel 102f496bd9aSJonas Paulsson} 103f496bd9aSJonas Paulsson 104c63ed222SJonas Paulssondefine <8 x i8> @fun8(<8 x i16> %val1, <8 x i16> %val2, <8 x i8> %val3, <8 x i8> %val4) { 105c63ed222SJonas Paulsson; CHECK-LABEL: fun8: 106*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 107c63ed222SJonas Paulsson; CHECK-NEXT: vceqh %v0, %v24, %v26 108c63ed222SJonas Paulsson; CHECK-NEXT: vpkh %v0, %v0, %v0 109c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 110c63ed222SJonas Paulsson; CHECK-NEXT: br %r14 111c63ed222SJonas Paulsson %cmp = icmp eq <8 x i16> %val1, %val2 112c63ed222SJonas Paulsson %sel = select <8 x i1> %cmp, <8 x i8> %val3, <8 x i8> %val4 113c63ed222SJonas Paulsson ret <8 x i8> %sel 114c63ed222SJonas Paulsson} 115c63ed222SJonas Paulsson 116c63ed222SJonas Paulssondefine <8 x i16> @fun9(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4) { 117f496bd9aSJonas Paulsson; CHECK-LABEL: fun9: 118*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 119f496bd9aSJonas Paulsson; CHECK-NEXT: vceqh %v0, %v24, %v26 120f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 121f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 122c63ed222SJonas Paulsson %cmp = icmp eq <8 x i16> %val1, %val2 123c63ed222SJonas Paulsson %sel = select <8 x i1> %cmp, <8 x i16> %val3, <8 x i16> %val4 124c63ed222SJonas Paulsson ret <8 x i16> %sel 125f496bd9aSJonas Paulsson} 126f496bd9aSJonas Paulsson 127c63ed222SJonas Paulssondefine <8 x i32> @fun10(<8 x i16> %val1, <8 x i16> %val2, <8 x i32> %val3, <8 x i32> %val4) { 128f496bd9aSJonas Paulsson; CHECK-LABEL: fun10: 129*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 130f496bd9aSJonas Paulsson; CHECK-NEXT: vceqh %v0, %v24, %v26 131c63ed222SJonas Paulsson; CHECK-DAG: vuphh [[REG0:%v[0-9]+]], %v0 132c63ed222SJonas Paulsson; CHECK-DAG: vmrlg [[REG1:%v[0-9]+]], %v0, %v0 133c63ed222SJonas Paulsson; CHECK-DAG: vuphh [[REG1]], [[REG1]] 134c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v25, [[REG0]] 135c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v26, %v30, %v27, [[REG1]] 136f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 137c63ed222SJonas Paulsson %cmp = icmp eq <8 x i16> %val1, %val2 138c63ed222SJonas Paulsson %sel = select <8 x i1> %cmp, <8 x i32> %val3, <8 x i32> %val4 139c63ed222SJonas Paulsson ret <8 x i32> %sel 140f496bd9aSJonas Paulsson} 141f496bd9aSJonas Paulsson 142c63ed222SJonas Paulssondefine <16 x i8> @fun11(<16 x i16> %val1, <16 x i16> %val2, <16 x i8> %val3, <16 x i8> %val4) { 143f496bd9aSJonas Paulsson; CHECK-LABEL: fun11: 144*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 145c63ed222SJonas Paulsson; CHECK-NEXT: vceqh %v0, %v26, %v30 146c63ed222SJonas Paulsson; CHECK-NEXT: vceqh %v1, %v24, %v28 147c63ed222SJonas Paulsson; CHECK-NEXT: vpkh %v0, %v1, %v0 148c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 149f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 150c63ed222SJonas Paulsson %cmp = icmp eq <16 x i16> %val1, %val2 151c63ed222SJonas Paulsson %sel = select <16 x i1> %cmp, <16 x i8> %val3, <16 x i8> %val4 152c63ed222SJonas Paulsson ret <16 x i8> %sel 153f496bd9aSJonas Paulsson} 154f496bd9aSJonas Paulsson 155c63ed222SJonas Paulssondefine <16 x i16> @fun12(<16 x i16> %val1, <16 x i16> %val2, <16 x i16> %val3, <16 x i16> %val4) { 156f496bd9aSJonas Paulsson; CHECK-LABEL: fun12: 157*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 158c63ed222SJonas Paulsson; CHECK-DAG: vceqh [[REG0:%v[0-9]+]], %v26, %v30 159c63ed222SJonas Paulsson; CHECK-DAG: vceqh [[REG1:%v[0-9]+]], %v24, %v28 160c63ed222SJonas Paulsson; CHECK-DAG: vsel %v24, %v25, %v29, [[REG1]] 161c63ed222SJonas Paulsson; CHECK-DAG: vsel %v26, %v27, %v31, [[REG0]] 162f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 163c63ed222SJonas Paulsson %cmp = icmp eq <16 x i16> %val1, %val2 164c63ed222SJonas Paulsson %sel = select <16 x i1> %cmp, <16 x i16> %val3, <16 x i16> %val4 165c63ed222SJonas Paulsson ret <16 x i16> %sel 166f496bd9aSJonas Paulsson} 167f496bd9aSJonas Paulsson 168f496bd9aSJonas Paulssondefine <2 x i16> @fun13(<2 x i32> %val1, <2 x i32> %val2, <2 x i16> %val3, <2 x i16> %val4) { 169f496bd9aSJonas Paulsson; CHECK-LABEL: fun13: 170*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 171f496bd9aSJonas Paulsson; CHECK-NEXT: vceqf %v0, %v24, %v26 172f496bd9aSJonas Paulsson; CHECK-NEXT: vpkf %v0, %v0, %v0 173f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 174f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 175f496bd9aSJonas Paulsson %cmp = icmp eq <2 x i32> %val1, %val2 176f496bd9aSJonas Paulsson %sel = select <2 x i1> %cmp, <2 x i16> %val3, <2 x i16> %val4 177f496bd9aSJonas Paulsson ret <2 x i16> %sel 178f496bd9aSJonas Paulsson} 179f496bd9aSJonas Paulsson 180f496bd9aSJonas Paulssondefine <2 x i32> @fun14(<2 x i32> %val1, <2 x i32> %val2, <2 x i32> %val3, <2 x i32> %val4) { 181f496bd9aSJonas Paulsson; CHECK-LABEL: fun14: 182*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 183f496bd9aSJonas Paulsson; CHECK-NEXT: vceqf %v0, %v24, %v26 184f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 185f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 186f496bd9aSJonas Paulsson %cmp = icmp eq <2 x i32> %val1, %val2 187f496bd9aSJonas Paulsson %sel = select <2 x i1> %cmp, <2 x i32> %val3, <2 x i32> %val4 188f496bd9aSJonas Paulsson ret <2 x i32> %sel 189f496bd9aSJonas Paulsson} 190f496bd9aSJonas Paulsson 191f496bd9aSJonas Paulssondefine <2 x i64> @fun15(<2 x i32> %val1, <2 x i32> %val2, <2 x i64> %val3, <2 x i64> %val4) { 192f496bd9aSJonas Paulsson; CHECK-LABEL: fun15: 193*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 194f496bd9aSJonas Paulsson; CHECK-NEXT: vceqf %v0, %v24, %v26 195f496bd9aSJonas Paulsson; CHECK-NEXT: vuphf %v0, %v0 196f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 197f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 198f496bd9aSJonas Paulsson %cmp = icmp eq <2 x i32> %val1, %val2 199f496bd9aSJonas Paulsson %sel = select <2 x i1> %cmp, <2 x i64> %val3, <2 x i64> %val4 200f496bd9aSJonas Paulsson ret <2 x i64> %sel 201f496bd9aSJonas Paulsson} 202f496bd9aSJonas Paulsson 203c63ed222SJonas Paulssondefine <4 x i16> @fun16(<4 x i32> %val1, <4 x i32> %val2, <4 x i16> %val3, <4 x i16> %val4) { 204f496bd9aSJonas Paulsson; CHECK-LABEL: fun16: 205*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 206f496bd9aSJonas Paulsson; CHECK-NEXT: vceqf %v0, %v24, %v26 207c63ed222SJonas Paulsson; CHECK-NEXT: vpkf %v0, %v0, %v0 208f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 209f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 210c63ed222SJonas Paulsson %cmp = icmp eq <4 x i32> %val1, %val2 211c63ed222SJonas Paulsson %sel = select <4 x i1> %cmp, <4 x i16> %val3, <4 x i16> %val4 212c63ed222SJonas Paulsson ret <4 x i16> %sel 213f496bd9aSJonas Paulsson} 214f496bd9aSJonas Paulsson 215c63ed222SJonas Paulssondefine <4 x i32> @fun17(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3, <4 x i32> %val4) { 216f496bd9aSJonas Paulsson; CHECK-LABEL: fun17: 217*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 218f496bd9aSJonas Paulsson; CHECK-NEXT: vceqf %v0, %v24, %v26 219f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 220f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 221c63ed222SJonas Paulsson %cmp = icmp eq <4 x i32> %val1, %val2 222c63ed222SJonas Paulsson %sel = select <4 x i1> %cmp, <4 x i32> %val3, <4 x i32> %val4 223c63ed222SJonas Paulsson ret <4 x i32> %sel 224f496bd9aSJonas Paulsson} 225f496bd9aSJonas Paulsson 226c63ed222SJonas Paulssondefine <4 x i64> @fun18(<4 x i32> %val1, <4 x i32> %val2, <4 x i64> %val3, <4 x i64> %val4) { 227f496bd9aSJonas Paulsson; CHECK-LABEL: fun18: 228*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 229c63ed222SJonas Paulsson; CHECK-NEXT: vceqf %v0, %v24, %v26 230c63ed222SJonas Paulsson; CHECK-DAG: vuphf [[REG0:%v[0-9]+]], %v0 231c63ed222SJonas Paulsson; CHECK-DAG: vmrlg [[REG1:%v[0-9]+]], %v0, %v0 232c63ed222SJonas Paulsson; CHECK-DAG: vuphf [[REG1]], [[REG1]] 233c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v25, [[REG0]] 234c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v26, %v30, %v27, [[REG1]] 235f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 236c63ed222SJonas Paulsson %cmp = icmp eq <4 x i32> %val1, %val2 237c63ed222SJonas Paulsson %sel = select <4 x i1> %cmp, <4 x i64> %val3, <4 x i64> %val4 238c63ed222SJonas Paulsson ret <4 x i64> %sel 239f496bd9aSJonas Paulsson} 240f496bd9aSJonas Paulsson 241c63ed222SJonas Paulssondefine <8 x i16> @fun19(<8 x i32> %val1, <8 x i32> %val2, <8 x i16> %val3, <8 x i16> %val4) { 242f496bd9aSJonas Paulsson; CHECK-LABEL: fun19: 243*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 244c63ed222SJonas Paulsson; CHECK-NEXT: vceqf %v0, %v26, %v30 245c63ed222SJonas Paulsson; CHECK-NEXT: vceqf %v1, %v24, %v28 246c63ed222SJonas Paulsson; CHECK-NEXT: vpkf %v0, %v1, %v0 247c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 248f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 249c63ed222SJonas Paulsson %cmp = icmp eq <8 x i32> %val1, %val2 250c63ed222SJonas Paulsson %sel = select <8 x i1> %cmp, <8 x i16> %val3, <8 x i16> %val4 251c63ed222SJonas Paulsson ret <8 x i16> %sel 252f496bd9aSJonas Paulsson} 253f496bd9aSJonas Paulsson 254c63ed222SJonas Paulssondefine <8 x i32> @fun20(<8 x i32> %val1, <8 x i32> %val2, <8 x i32> %val3, <8 x i32> %val4) { 255f496bd9aSJonas Paulsson; CHECK-LABEL: fun20: 256*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 257c63ed222SJonas Paulsson; CHECK-DAG: vceqf [[REG0:%v[0-9]+]], %v26, %v30 258c63ed222SJonas Paulsson; CHECK-DAG: vceqf [[REG1:%v[0-9]+]], %v24, %v28 259c63ed222SJonas Paulsson; CHECK-DAG: vsel %v24, %v25, %v29, [[REG1]] 260c63ed222SJonas Paulsson; CHECK-DAG: vsel %v26, %v27, %v31, [[REG0]] 261f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 262c63ed222SJonas Paulsson %cmp = icmp eq <8 x i32> %val1, %val2 263c63ed222SJonas Paulsson %sel = select <8 x i1> %cmp, <8 x i32> %val3, <8 x i32> %val4 264c63ed222SJonas Paulsson ret <8 x i32> %sel 265f496bd9aSJonas Paulsson} 266f496bd9aSJonas Paulsson 267c63ed222SJonas Paulssondefine <2 x i32> @fun21(<2 x i64> %val1, <2 x i64> %val2, <2 x i32> %val3, <2 x i32> %val4) { 268f496bd9aSJonas Paulsson; CHECK-LABEL: fun21: 269*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 270f496bd9aSJonas Paulsson; CHECK-NEXT: vceqg %v0, %v24, %v26 271c63ed222SJonas Paulsson; CHECK-NEXT: vpkg %v0, %v0, %v0 272f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 273f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 274f496bd9aSJonas Paulsson %cmp = icmp eq <2 x i64> %val1, %val2 275c63ed222SJonas Paulsson %sel = select <2 x i1> %cmp, <2 x i32> %val3, <2 x i32> %val4 276c63ed222SJonas Paulsson ret <2 x i32> %sel 277f496bd9aSJonas Paulsson} 278f496bd9aSJonas Paulsson 279c63ed222SJonas Paulssondefine <2 x i64> @fun22(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4) { 280f496bd9aSJonas Paulsson; CHECK-LABEL: fun22: 281*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 282f496bd9aSJonas Paulsson; CHECK-NEXT: vceqg %v0, %v24, %v26 283f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 284f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 285f496bd9aSJonas Paulsson %cmp = icmp eq <2 x i64> %val1, %val2 286c63ed222SJonas Paulsson %sel = select <2 x i1> %cmp, <2 x i64> %val3, <2 x i64> %val4 287c63ed222SJonas Paulsson ret <2 x i64> %sel 288f496bd9aSJonas Paulsson} 289f496bd9aSJonas Paulsson 290c63ed222SJonas Paulssondefine <4 x i32> @fun23(<4 x i64> %val1, <4 x i64> %val2, <4 x i32> %val3, <4 x i32> %val4) { 291f496bd9aSJonas Paulsson; CHECK-LABEL: fun23: 292*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 293c63ed222SJonas Paulsson; CHECK-NEXT: vceqg %v0, %v26, %v30 294c63ed222SJonas Paulsson; CHECK-NEXT: vceqg %v1, %v24, %v28 295c63ed222SJonas Paulsson; CHECK-NEXT: vpkg %v0, %v1, %v0 296c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 297f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 298c63ed222SJonas Paulsson %cmp = icmp eq <4 x i64> %val1, %val2 299f496bd9aSJonas Paulsson %sel = select <4 x i1> %cmp, <4 x i32> %val3, <4 x i32> %val4 300f496bd9aSJonas Paulsson ret <4 x i32> %sel 301f496bd9aSJonas Paulsson} 302f496bd9aSJonas Paulsson 303c63ed222SJonas Paulssondefine <4 x i64> @fun24(<4 x i64> %val1, <4 x i64> %val2, <4 x i64> %val3, <4 x i64> %val4) { 304c63ed222SJonas Paulsson; CHECK-LABEL: fun24: 305*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 306c63ed222SJonas Paulsson; CHECK-DAG: vceqg [[REG0:%v[0-9]+]], %v26, %v30 307c63ed222SJonas Paulsson; CHECK-DAG: vceqg [[REG1:%v[0-9]+]], %v24, %v28 308c63ed222SJonas Paulsson; CHECK-DAG: vsel %v24, %v25, %v29, [[REG1]] 309c63ed222SJonas Paulsson; CHECK-DAG: vsel %v26, %v27, %v31, [[REG0]] 310c63ed222SJonas Paulsson; CHECK-NEXT: br %r14 311c63ed222SJonas Paulsson %cmp = icmp eq <4 x i64> %val1, %val2 312c63ed222SJonas Paulsson %sel = select <4 x i1> %cmp, <4 x i64> %val3, <4 x i64> %val4 313c63ed222SJonas Paulsson ret <4 x i64> %sel 314c63ed222SJonas Paulsson} 315c63ed222SJonas Paulsson 316c63ed222SJonas Paulssondefine <2 x float> @fun25(<2 x float> %val1, <2 x float> %val2, <2 x float> %val3, <2 x float> %val4) { 317c63ed222SJonas Paulsson; CHECK-LABEL: fun25: 318*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 319c63ed222SJonas Paulsson; CHECK-NEXT: vmrlf %v0, %v26, %v26 320c63ed222SJonas Paulsson; CHECK-NEXT: vmrlf %v1, %v24, %v24 321c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v0, %v0 322c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v1, %v1 323c63ed222SJonas Paulsson; CHECK-NEXT: vfchdb %v0, %v1, %v0 324c63ed222SJonas Paulsson; CHECK-NEXT: vmrhf %v1, %v26, %v26 325c63ed222SJonas Paulsson; CHECK-NEXT: vmrhf %v2, %v24, %v24 326c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v1, %v1 327c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v2, %v2 328c63ed222SJonas Paulsson; CHECK-NEXT: vfchdb %v1, %v2, %v1 329c63ed222SJonas Paulsson; CHECK-NEXT: vpkg %v0, %v1, %v0 330c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 331c63ed222SJonas Paulsson; CHECK-NEXT: br %r14 332c63ed222SJonas Paulsson 333c63ed222SJonas Paulsson; CHECK-Z14-LABEL: fun25: 334*25528d6dSFrancis Visoiu Mistrih; CHECK-Z14: # %bb.0: 335c63ed222SJonas Paulsson; CHECK-Z14-NEXT: vfchsb %v0, %v24, %v26 336c63ed222SJonas Paulsson; CHECK-Z14-NEXT: vsel %v24, %v28, %v30, %v0 337c63ed222SJonas Paulsson; CHECK-Z14-NEXT: br %r14 338c63ed222SJonas Paulsson 339c63ed222SJonas Paulsson %cmp = fcmp ogt <2 x float> %val1, %val2 340c63ed222SJonas Paulsson %sel = select <2 x i1> %cmp, <2 x float> %val3, <2 x float> %val4 341c63ed222SJonas Paulsson ret <2 x float> %sel 342c63ed222SJonas Paulsson} 343c63ed222SJonas Paulsson 344c63ed222SJonas Paulssondefine <2 x double> @fun26(<2 x float> %val1, <2 x float> %val2, <2 x double> %val3, <2 x double> %val4) { 345c63ed222SJonas Paulsson; CHECK-LABEL: fun26: 346*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 347c63ed222SJonas Paulsson; CHECK-NEXT: vmrlf %v0, %v26, %v26 348c63ed222SJonas Paulsson; CHECK-NEXT: vmrlf %v1, %v24, %v24 349c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v0, %v0 350c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v1, %v1 351c63ed222SJonas Paulsson; CHECK-NEXT: vfchdb %v0, %v1, %v0 352c63ed222SJonas Paulsson; CHECK-NEXT: vmrhf %v1, %v26, %v26 353c63ed222SJonas Paulsson; CHECK-NEXT: vmrhf %v2, %v24, %v24 354c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v1, %v1 355c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v2, %v2 356c63ed222SJonas Paulsson; CHECK-NEXT: vfchdb %v1, %v2, %v1 357c63ed222SJonas Paulsson; CHECK-NEXT: vpkg %v0, %v1, %v0 358c63ed222SJonas Paulsson; CHECK-NEXT: vuphf %v0, %v0 359c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 360c63ed222SJonas Paulsson; CHECK-NEXT: br %r14 361c63ed222SJonas Paulsson 362c63ed222SJonas Paulsson; CHECK-Z14-LABEL: fun26: 363*25528d6dSFrancis Visoiu Mistrih; CHECK-Z14: # %bb.0: 364c63ed222SJonas Paulsson; CHECK-Z14-NEXT: vfchsb %v0, %v24, %v26 365c63ed222SJonas Paulsson; CHECK-Z14-NEXT: vuphf %v0, %v0 366c63ed222SJonas Paulsson; CHECK-Z14-NEXT: vsel %v24, %v28, %v30, %v0 367c63ed222SJonas Paulsson; CHECK-Z14-NEXT: br %r14 368c63ed222SJonas Paulsson 369c63ed222SJonas Paulsson %cmp = fcmp ogt <2 x float> %val1, %val2 370c63ed222SJonas Paulsson %sel = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 371c63ed222SJonas Paulsson ret <2 x double> %sel 372c63ed222SJonas Paulsson} 373c63ed222SJonas Paulsson 374c63ed222SJonas Paulsson; Test a widening select of floats. 375c63ed222SJonas Paulssondefine <2 x float> @fun27(<2 x i8> %val1, <2 x i8> %val2, <2 x float> %val3, <2 x float> %val4) { 376f496bd9aSJonas Paulsson; CHECK-LABEL: fun27: 377*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 378f496bd9aSJonas Paulsson; CHECK-NEXT: vceqb %v0, %v24, %v26 379f496bd9aSJonas Paulsson; CHECK-NEXT: vuphb %v0, %v0 380f496bd9aSJonas Paulsson; CHECK-NEXT: vuphh %v0, %v0 381c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 382f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 383c63ed222SJonas Paulsson 384c63ed222SJonas Paulsson %cmp = icmp eq <2 x i8> %val1, %val2 385c63ed222SJonas Paulsson %sel = select <2 x i1> %cmp, <2 x float> %val3, <2 x float> %val4 386c63ed222SJonas Paulsson ret <2 x float> %sel 387f496bd9aSJonas Paulsson} 388f496bd9aSJonas Paulsson 389c63ed222SJonas Paulssondefine <4 x float> @fun28(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4) { 390f496bd9aSJonas Paulsson; CHECK-LABEL: fun28: 391*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 392c63ed222SJonas Paulsson; CHECK-NEXT: vmrlf %v0, %v26, %v26 393c63ed222SJonas Paulsson; CHECK-NEXT: vmrlf %v1, %v24, %v24 394c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v0, %v0 395c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v1, %v1 396c63ed222SJonas Paulsson; CHECK-NEXT: vfchdb %v0, %v1, %v0 397c63ed222SJonas Paulsson; CHECK-NEXT: vmrhf %v1, %v26, %v26 398c63ed222SJonas Paulsson; CHECK-NEXT: vmrhf %v2, %v24, %v24 399c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v1, %v1 400c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v2, %v2 401c63ed222SJonas Paulsson; CHECK-NEXT: vfchdb %v1, %v2, %v1 402c63ed222SJonas Paulsson; CHECK-NEXT: vpkg %v0, %v1, %v0 403f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 404f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 405c63ed222SJonas Paulsson 406c63ed222SJonas Paulsson; CHECK-Z14-LABEL: fun28: 407*25528d6dSFrancis Visoiu Mistrih; CHECK-Z14: # %bb.0: 408c63ed222SJonas Paulsson; CHECK-Z14-NEXT: vfchsb %v0, %v24, %v26 409c63ed222SJonas Paulsson; CHECK-Z14-NEXT: vsel %v24, %v28, %v30, %v0 410c63ed222SJonas Paulsson; CHECK-Z14-NEXT: br %r14 411c63ed222SJonas Paulsson 412c63ed222SJonas Paulsson %cmp = fcmp ogt <4 x float> %val1, %val2 413f496bd9aSJonas Paulsson %sel = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 414f496bd9aSJonas Paulsson ret <4 x float> %sel 415f496bd9aSJonas Paulsson} 416f496bd9aSJonas Paulsson 417c63ed222SJonas Paulssondefine <4 x double> @fun29(<4 x float> %val1, <4 x float> %val2, <4 x double> %val3, <4 x double> %val4) { 418f496bd9aSJonas Paulsson; CHECK-LABEL: fun29: 419*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 420c63ed222SJonas Paulsson; CHECK-NEXT: vmrlf %v0, %v26, %v26 421c63ed222SJonas Paulsson; CHECK-NEXT: vmrlf %v1, %v24, %v24 422c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v0, %v0 423c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v1, %v1 424c63ed222SJonas Paulsson; CHECK-NEXT: vfchdb %v0, %v1, %v0 425c63ed222SJonas Paulsson; CHECK-NEXT: vmrhf %v1, %v26, %v26 426c63ed222SJonas Paulsson; CHECK-NEXT: vmrhf %v2, %v24, %v24 427c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v1, %v1 428c63ed222SJonas Paulsson; CHECK-NEXT: vldeb %v2, %v2 429c63ed222SJonas Paulsson; CHECK-NEXT: vfchdb %v1, %v2, %v1 430c63ed222SJonas Paulsson; CHECK-NEXT: vpkg [[REG0:%v[0-9]+]], %v1, %v0 431c63ed222SJonas Paulsson; CHECK-DAG: vmrlg [[REG1:%v[0-9]+]], [[REG0]], [[REG0]] 432c63ed222SJonas Paulsson; CHECK-DAG: vuphf [[REG1]], [[REG1]] 433c63ed222SJonas Paulsson; CHECK-DAG: vuphf [[REG2:%v[0-9]+]], [[REG0]] 434c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v25, [[REG2]] 435c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v26, %v30, %v27, [[REG1]] 436f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 437c63ed222SJonas Paulsson 438c63ed222SJonas Paulsson; CHECK-Z14-LABEL: fun29: 439*25528d6dSFrancis Visoiu Mistrih; CHECK-Z14: # %bb.0: 440c63ed222SJonas Paulsson; CHECK-Z14-NEXT: vfchsb %v0, %v24, %v26 441c63ed222SJonas Paulsson; CHECK-Z14-DAG: vuphf [[REG0:%v[0-9]+]], %v0 442c63ed222SJonas Paulsson; CHECK-Z14-DAG: vmrlg [[REG1:%v[0-9]+]], %v0, %v0 443c63ed222SJonas Paulsson; CHECK-Z14-DAG: vuphf [[REG1]], [[REG1]] 444c63ed222SJonas Paulsson; CHECK-Z14-NEXT: vsel %v24, %v28, %v25, [[REG0]] 445c63ed222SJonas Paulsson; CHECK-Z14-NEXT: vsel %v26, %v30, %v27, [[REG1]] 446c63ed222SJonas Paulsson; CHECK-Z14-NEXT: br %r14 447c63ed222SJonas Paulsson 448c63ed222SJonas Paulsson %cmp = fcmp ogt <4 x float> %val1, %val2 449f496bd9aSJonas Paulsson %sel = select <4 x i1> %cmp, <4 x double> %val3, <4 x double> %val4 450f496bd9aSJonas Paulsson ret <4 x double> %sel 451f496bd9aSJonas Paulsson} 452f496bd9aSJonas Paulsson 453c63ed222SJonas Paulssondefine <8 x float> @fun30(<8 x float> %val1, <8 x float> %val2, <8 x float> %val3, <8 x float> %val4) { 454c63ed222SJonas Paulsson; CHECK-Z14-LABEL: fun30: 455*25528d6dSFrancis Visoiu Mistrih; CHECK-Z14: # %bb.0: 456c63ed222SJonas Paulsson; CHECK-Z14-DAG: vfchsb [[REG0:%v[0-9]+]], %v26, %v30 457c63ed222SJonas Paulsson; CHECK-Z14-DAG: vfchsb [[REG1:%v[0-9]+]], %v24, %v28 458c63ed222SJonas Paulsson; CHECK-Z14-DAG: vsel %v24, %v25, %v29, [[REG1]] 459c63ed222SJonas Paulsson; CHECK-Z14-DAG: vsel %v26, %v27, %v31, [[REG0]] 460c63ed222SJonas Paulsson; CHECK-Z14-NEXT: br %r14 461c63ed222SJonas Paulsson %cmp = fcmp ogt <8 x float> %val1, %val2 462c63ed222SJonas Paulsson %sel = select <8 x i1> %cmp, <8 x float> %val3, <8 x float> %val4 463c63ed222SJonas Paulsson ret <8 x float> %sel 464f496bd9aSJonas Paulsson} 465f496bd9aSJonas Paulsson 466c63ed222SJonas Paulssondefine <2 x float> @fun31(<2 x double> %val1, <2 x double> %val2, <2 x float> %val3, <2 x float> %val4) { 467f496bd9aSJonas Paulsson; CHECK-LABEL: fun31: 468*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 469c63ed222SJonas Paulsson; CHECK-NEXT: vfchdb %v0, %v24, %v26 470c63ed222SJonas Paulsson; CHECK-NEXT: vpkg %v0, %v0, %v0 471f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 472f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 473c63ed222SJonas Paulsson 474c63ed222SJonas Paulsson %cmp = fcmp ogt <2 x double> %val1, %val2 475c63ed222SJonas Paulsson %sel = select <2 x i1> %cmp, <2 x float> %val3, <2 x float> %val4 476c63ed222SJonas Paulsson ret <2 x float> %sel 477f496bd9aSJonas Paulsson} 478f496bd9aSJonas Paulsson 479c63ed222SJonas Paulssondefine <2 x double> @fun32(<2 x double> %val1, <2 x double> %val2, <2 x double> %val3, <2 x double> %val4) { 480f496bd9aSJonas Paulsson; CHECK-LABEL: fun32: 481*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 482c63ed222SJonas Paulsson; CHECK-NEXT: vfchdb %v0, %v24, %v26 483f496bd9aSJonas Paulsson; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 484f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 485c63ed222SJonas Paulsson %cmp = fcmp ogt <2 x double> %val1, %val2 486c63ed222SJonas Paulsson %sel = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 487c63ed222SJonas Paulsson ret <2 x double> %sel 488f496bd9aSJonas Paulsson} 489f496bd9aSJonas Paulsson 490c63ed222SJonas Paulssondefine <4 x float> @fun33(<4 x double> %val1, <4 x double> %val2, <4 x float> %val3, <4 x float> %val4) { 491f496bd9aSJonas Paulsson; CHECK-LABEL: fun33: 492*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 493c63ed222SJonas Paulsson; CHECK-NEXT: vfchdb %v0, %v26, %v30 494c63ed222SJonas Paulsson; CHECK-NEXT: vfchdb %v1, %v24, %v28 495c63ed222SJonas Paulsson; CHECK-NEXT: vpkg %v0, %v1, %v0 496c63ed222SJonas Paulsson; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 497f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 498c63ed222SJonas Paulsson %cmp = fcmp ogt <4 x double> %val1, %val2 499c63ed222SJonas Paulsson %sel = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 500c63ed222SJonas Paulsson ret <4 x float> %sel 501f496bd9aSJonas Paulsson} 502f496bd9aSJonas Paulsson 503c63ed222SJonas Paulssondefine <4 x double> @fun34(<4 x double> %val1, <4 x double> %val2, <4 x double> %val3, <4 x double> %val4) { 504f496bd9aSJonas Paulsson; CHECK-LABEL: fun34: 505*25528d6dSFrancis Visoiu Mistrih; CHECK: # %bb.0: 506c63ed222SJonas Paulsson; CHECK-DAG: vfchdb [[REG0:%v[0-9]+]], %v26, %v30 507c63ed222SJonas Paulsson; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v24, %v28 508c63ed222SJonas Paulsson; CHECK-DAG: vsel %v24, %v25, %v29, [[REG1]] 509c63ed222SJonas Paulsson; CHECK-DAG: vsel %v26, %v27, %v31, [[REG0]] 510f496bd9aSJonas Paulsson; CHECK-NEXT: br %r14 511f496bd9aSJonas Paulsson %cmp = fcmp ogt <4 x double> %val1, %val2 512f496bd9aSJonas Paulsson %sel = select <4 x i1> %cmp, <4 x double> %val3, <4 x double> %val4 513f496bd9aSJonas Paulsson ret <4 x double> %sel 514f496bd9aSJonas Paulsson} 515