; 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
}