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