; Test v1i128 comparisons. ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s ; Test eq. define <1 x i128> @f1(<1 x i128> %val1, <1 x i128> %val2) { ; CHECK-LABEL: f1: ; CHECK: # %bb.0: ; CHECK-NEXT: vceqgs %v0, %v24, %v26 ; CHECK-NEXT: vgbm %v24, 65535 ; CHECK-NEXT: ber %r14 ; CHECK-NEXT: .LBB0_1: ; CHECK-NEXT: vgbm %v24, 0 ; CHECK-NEXT: br %r14 %cmp = icmp eq <1 x i128> %val1, %val2 %ret = sext <1 x i1> %cmp to <1 x i128> ret <1 x i128> %ret } ; Test ne. define <1 x i128> @f2(<1 x i128> %val1, <1 x i128> %val2) { ; CHECK-LABEL: f2: ; CHECK: # %bb.0: ; CHECK-NEXT: vceqgs %v0, %v24, %v26 ; CHECK-NEXT: vgbm %v24, 65535 ; CHECK-NEXT: bnher %r14 ; CHECK-NEXT: .LBB1_1: ; CHECK-NEXT: vgbm %v24, 0 ; CHECK-NEXT: br %r14 %cmp = icmp ne <1 x i128> %val1, %val2 %ret = sext <1 x i1> %cmp to <1 x i128> ret <1 x i128> %ret } ; Test sgt. define <1 x i128> @f3(<1 x i128> %val1, <1 x i128> %val2) { ; CHECK-LABEL: f3: ; CHECK: # %bb.0: ; CHECK-NEXT: vecg %v26, %v24 ; CHECK-NEXT: jlh .LBB2_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: vchlgs %v0, %v24, %v26 ; CHECK-NEXT: .LBB2_2: ; CHECK-NEXT: vgbm %v24, 65535 ; CHECK-NEXT: blr %r14 ; CHECK-NEXT: .LBB2_3: ; CHECK-NEXT: vgbm %v24, 0 ; CHECK-NEXT: br %r14 %cmp = icmp sgt <1 x i128> %val1, %val2 %ret = sext <1 x i1> %cmp to <1 x i128> ret <1 x i128> %ret } ; Test sge. define <1 x i128> @f4(<1 x i128> %val1, <1 x i128> %val2) { ; CHECK-LABEL: f4: ; CHECK: # %bb.0: ; CHECK-NEXT: vecg %v24, %v26 ; CHECK-NEXT: jlh .LBB3_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: vchlgs %v0, %v26, %v24 ; CHECK-NEXT: .LBB3_2: ; CHECK-NEXT: vgbm %v24, 65535 ; CHECK-NEXT: bnlr %r14 ; CHECK-NEXT: .LBB3_3: ; CHECK-NEXT: vgbm %v24, 0 ; CHECK-NEXT: br %r14 %cmp = icmp sge <1 x i128> %val1, %val2 %ret = sext <1 x i1> %cmp to <1 x i128> ret <1 x i128> %ret } ; Test sle. define <1 x i128> @f5(<1 x i128> %val1, <1 x i128> %val2) { ; CHECK-LABEL: f5: ; CHECK: # %bb.0: ; CHECK-NEXT: vecg %v26, %v24 ; CHECK-NEXT: jlh .LBB4_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: vchlgs %v0, %v24, %v26 ; CHECK-NEXT: .LBB4_2: ; CHECK-NEXT: vgbm %v24, 65535 ; CHECK-NEXT: bnlr %r14 ; CHECK-NEXT: .LBB4_3: ; CHECK-NEXT: vgbm %v24, 0 ; CHECK-NEXT: br %r14 %cmp = icmp sle <1 x i128> %val1, %val2 %ret = sext <1 x i1> %cmp to <1 x i128> ret <1 x i128> %ret } ; Test slt. define <1 x i128> @f6(<1 x i128> %val1, <1 x i128> %val2) { ; CHECK-LABEL: f6: ; CHECK: # %bb.0: ; CHECK-NEXT: vecg %v24, %v26 ; CHECK-NEXT: jlh .LBB5_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: vchlgs %v0, %v26, %v24 ; CHECK-NEXT: .LBB5_2: ; CHECK-NEXT: vgbm %v24, 65535 ; CHECK-NEXT: blr %r14 ; CHECK-NEXT: .LBB5_3: ; CHECK-NEXT: vgbm %v24, 0 ; CHECK-NEXT: br %r14 %cmp = icmp slt <1 x i128> %val1, %val2 %ret = sext <1 x i1> %cmp to <1 x i128> ret <1 x i128> %ret } ; Test ugt. define <1 x i128> @f7(<1 x i128> %val1, <1 x i128> %val2) { ; CHECK-LABEL: f7: ; CHECK: # %bb.0: ; CHECK-NEXT: veclg %v26, %v24 ; CHECK-NEXT: jlh .LBB6_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: vchlgs %v0, %v24, %v26 ; CHECK-NEXT: .LBB6_2: ; CHECK-NEXT: vgbm %v24, 65535 ; CHECK-NEXT: blr %r14 ; CHECK-NEXT: .LBB6_3: ; CHECK-NEXT: vgbm %v24, 0 ; CHECK-NEXT: br %r14 %cmp = icmp ugt <1 x i128> %val1, %val2 %ret = sext <1 x i1> %cmp to <1 x i128> ret <1 x i128> %ret } ; Test uge. define <1 x i128> @f8(<1 x i128> %val1, <1 x i128> %val2) { ; CHECK-LABEL: f8: ; CHECK: # %bb.0: ; CHECK-NEXT: veclg %v24, %v26 ; CHECK-NEXT: jlh .LBB7_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: vchlgs %v0, %v26, %v24 ; CHECK-NEXT: .LBB7_2: ; CHECK-NEXT: vgbm %v24, 65535 ; CHECK-NEXT: bnlr %r14 ; CHECK-NEXT: .LBB7_3: ; CHECK-NEXT: vgbm %v24, 0 ; CHECK-NEXT: br %r14 %cmp = icmp uge <1 x i128> %val1, %val2 %ret = sext <1 x i1> %cmp to <1 x i128> ret <1 x i128> %ret } ; Test ule. define <1 x i128> @f9(<1 x i128> %val1, <1 x i128> %val2) { ; CHECK-LABEL: f9: ; CHECK: # %bb.0: ; CHECK-NEXT: veclg %v26, %v24 ; CHECK-NEXT: jlh .LBB8_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: vchlgs %v0, %v24, %v26 ; CHECK-NEXT: .LBB8_2: ; CHECK-NEXT: vgbm %v24, 65535 ; CHECK-NEXT: bnlr %r14 ; CHECK-NEXT: .LBB8_3: ; CHECK-NEXT: vgbm %v24, 0 ; CHECK-NEXT: br %r14 %cmp = icmp ule <1 x i128> %val1, %val2 %ret = sext <1 x i1> %cmp to <1 x i128> ret <1 x i128> %ret } ; Test ult. define <1 x i128> @f10(<1 x i128> %val1, <1 x i128> %val2) { ; CHECK-LABEL: f10: ; CHECK: # %bb.0: ; CHECK-NEXT: veclg %v24, %v26 ; CHECK-NEXT: jlh .LBB9_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: vchlgs %v0, %v26, %v24 ; CHECK-NEXT: .LBB9_2: ; CHECK-NEXT: vgbm %v24, 65535 ; CHECK-NEXT: blr %r14 ; CHECK-NEXT: .LBB9_3: ; CHECK-NEXT: vgbm %v24, 0 ; CHECK-NEXT: br %r14 %cmp = icmp ult <1 x i128> %val1, %val2 %ret = sext <1 x i1> %cmp to <1 x i128> ret <1 x i128> %ret } ; Test eq selects. define <1 x i128> @f11(<1 x i128> %val1, <1 x i128> %val2, ; CHECK-LABEL: f11: ; CHECK: # %bb.0: ; CHECK-NEXT: vceqgs %v0, %v24, %v26 ; CHECK-NEXT: je .LBB10_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: vlr %v28, %v30 ; CHECK-NEXT: .LBB10_2: ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 <1 x i128> %val3, <1 x i128> %val4) { %cmp = icmp eq <1 x i128> %val1, %val2 %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4 ret <1 x i128> %ret } ; Test ne selects. define <1 x i128> @f12(<1 x i128> %val1, <1 x i128> %val2, ; CHECK-LABEL: f12: ; CHECK: # %bb.0: ; CHECK-NEXT: vceqgs %v0, %v24, %v26 ; CHECK-NEXT: jnhe .LBB11_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: vlr %v28, %v30 ; CHECK-NEXT: .LBB11_2: ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 <1 x i128> %val3, <1 x i128> %val4) { %cmp = icmp ne <1 x i128> %val1, %val2 %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4 ret <1 x i128> %ret } ; Test sgt selects. define <1 x i128> @f13(<1 x i128> %val1, <1 x i128> %val2, ; CHECK-LABEL: f13: ; CHECK: # %bb.0: ; CHECK-NEXT: vecg %v26, %v24 ; CHECK-NEXT: je .LBB12_3 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: jnl .LBB12_4 ; CHECK-NEXT: .LBB12_2: ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 ; CHECK-NEXT: .LBB12_3: ; CHECK-NEXT: vchlgs %v0, %v24, %v26 ; CHECK-NEXT: jl .LBB12_2 ; CHECK-NEXT: .LBB12_4: ; CHECK-NEXT: vlr %v28, %v30 ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 <1 x i128> %val3, <1 x i128> %val4) { %cmp = icmp sgt <1 x i128> %val1, %val2 %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4 ret <1 x i128> %ret } ; Test sge selects. define <1 x i128> @f14(<1 x i128> %val1, <1 x i128> %val2, ; CHECK-LABEL: f14: ; CHECK: # %bb.0: ; CHECK-NEXT: vecg %v24, %v26 ; CHECK-NEXT: je .LBB13_3 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: jl .LBB13_4 ; CHECK-NEXT: .LBB13_2: ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 ; CHECK-NEXT: .LBB13_3: ; CHECK-NEXT: vchlgs %v0, %v26, %v24 ; CHECK-NEXT: jnl .LBB13_2 ; CHECK-NEXT: .LBB13_4: ; CHECK-NEXT: vlr %v28, %v30 ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 <1 x i128> %val3, <1 x i128> %val4) { %cmp = icmp sge <1 x i128> %val1, %val2 %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4 ret <1 x i128> %ret } ; Test sle selects. define <1 x i128> @f15(<1 x i128> %val1, <1 x i128> %val2, ; CHECK-LABEL: f15: ; CHECK: # %bb.0: ; CHECK-NEXT: vecg %v26, %v24 ; CHECK-NEXT: je .LBB14_3 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: jl .LBB14_4 ; CHECK-NEXT: .LBB14_2: ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 ; CHECK-NEXT: .LBB14_3: ; CHECK-NEXT: vchlgs %v0, %v24, %v26 ; CHECK-NEXT: jnl .LBB14_2 ; CHECK-NEXT: .LBB14_4: ; CHECK-NEXT: vlr %v28, %v30 ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 <1 x i128> %val3, <1 x i128> %val4) { %cmp = icmp sle <1 x i128> %val1, %val2 %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4 ret <1 x i128> %ret } ; Test slt selects. define <1 x i128> @f16(<1 x i128> %val1, <1 x i128> %val2, ; CHECK-LABEL: f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vecg %v24, %v26 ; CHECK-NEXT: je .LBB15_3 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: jnl .LBB15_4 ; CHECK-NEXT: .LBB15_2: ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 ; CHECK-NEXT: .LBB15_3: ; CHECK-NEXT: vchlgs %v0, %v26, %v24 ; CHECK-NEXT: jl .LBB15_2 ; CHECK-NEXT: .LBB15_4: ; CHECK-NEXT: vlr %v28, %v30 ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 <1 x i128> %val3, <1 x i128> %val4) { %cmp = icmp slt <1 x i128> %val1, %val2 %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4 ret <1 x i128> %ret } ; Test ugt selects. define <1 x i128> @f17(<1 x i128> %val1, <1 x i128> %val2, ; CHECK-LABEL: f17: ; CHECK: # %bb.0: ; CHECK-NEXT: veclg %v26, %v24 ; CHECK-NEXT: je .LBB16_3 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: jnl .LBB16_4 ; CHECK-NEXT: .LBB16_2: ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 ; CHECK-NEXT: .LBB16_3: ; CHECK-NEXT: vchlgs %v0, %v24, %v26 ; CHECK-NEXT: jl .LBB16_2 ; CHECK-NEXT: .LBB16_4: ; CHECK-NEXT: vlr %v28, %v30 ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 <1 x i128> %val3, <1 x i128> %val4) { %cmp = icmp ugt <1 x i128> %val1, %val2 %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4 ret <1 x i128> %ret } ; Test uge selects. define <1 x i128> @f18(<1 x i128> %val1, <1 x i128> %val2, ; CHECK-LABEL: f18: ; CHECK: # %bb.0: ; CHECK-NEXT: veclg %v24, %v26 ; CHECK-NEXT: je .LBB17_3 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: jl .LBB17_4 ; CHECK-NEXT: .LBB17_2: ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 ; CHECK-NEXT: .LBB17_3: ; CHECK-NEXT: vchlgs %v0, %v26, %v24 ; CHECK-NEXT: jnl .LBB17_2 ; CHECK-NEXT: .LBB17_4: ; CHECK-NEXT: vlr %v28, %v30 ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 <1 x i128> %val3, <1 x i128> %val4) { %cmp = icmp uge <1 x i128> %val1, %val2 %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4 ret <1 x i128> %ret } ; Test ule selects. define <1 x i128> @f19(<1 x i128> %val1, <1 x i128> %val2, ; CHECK-LABEL: f19: ; CHECK: # %bb.0: ; CHECK-NEXT: veclg %v26, %v24 ; CHECK-NEXT: je .LBB18_3 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: jl .LBB18_4 ; CHECK-NEXT: .LBB18_2: ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 ; CHECK-NEXT: .LBB18_3: ; CHECK-NEXT: vchlgs %v0, %v24, %v26 ; CHECK-NEXT: jnl .LBB18_2 ; CHECK-NEXT: .LBB18_4: ; CHECK-NEXT: vlr %v28, %v30 ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 <1 x i128> %val3, <1 x i128> %val4) { %cmp = icmp ule <1 x i128> %val1, %val2 %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4 ret <1 x i128> %ret } ; Test ult selects. define <1 x i128> @f20(<1 x i128> %val1, <1 x i128> %val2, ; CHECK-LABEL: f20: ; CHECK: # %bb.0: ; CHECK-NEXT: veclg %v24, %v26 ; CHECK-NEXT: je .LBB19_3 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: jnl .LBB19_4 ; CHECK-NEXT: .LBB19_2: ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 ; CHECK-NEXT: .LBB19_3: ; CHECK-NEXT: vchlgs %v0, %v26, %v24 ; CHECK-NEXT: jl .LBB19_2 ; CHECK-NEXT: .LBB19_4: ; CHECK-NEXT: vlr %v28, %v30 ; CHECK-NEXT: vlr %v24, %v28 ; CHECK-NEXT: br %r14 <1 x i128> %val3, <1 x i128> %val4) { %cmp = icmp ult <1 x i128> %val1, %val2 %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4 ret <1 x i128> %ret }