; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc < %s -mtriple aarch64-none-linux-gnu | FileCheck %s ; Test the (concat_vectors (X), (trunc(smin(smax(Y, -2^n), 2^n-1))) pattern. define <16 x i8> @test_combine_v8i16_to_v16i8(<8 x i8> %x, <8 x i16> %y) { ; CHECK-LABEL: test_combine_v8i16_to_v16i8: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 ; CHECK-NEXT: sqxtn2 v0.16b, v1.8h ; CHECK-NEXT: ret entry: %min = call <8 x i16> @llvm.smin.v8i16(<8 x i16> %y, <8 x i16> ) %max = call <8 x i16> @llvm.smax.v8i16(<8 x i16> %min, <8 x i16> ) %trunc = trunc <8 x i16> %max to <8 x i8> %shuffle = shufflevector <8 x i8> %x, <8 x i8> %trunc, <16 x i32> ret <16 x i8> %shuffle } define <8 x i16> @test_combine_v4i32_to_v8i16(<4 x i16> %x, <4 x i32> %y) { ; CHECK-LABEL: test_combine_v4i32_to_v8i16: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 ; CHECK-NEXT: sqxtn2 v0.8h, v1.4s ; CHECK-NEXT: ret entry: %max = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %y, <4 x i32> ) %min = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %max, <4 x i32> ) %trunc = trunc <4 x i32> %min to <4 x i16> %shuffle = shufflevector <4 x i16> %x, <4 x i16> %trunc, <8 x i32> ret <8 x i16> %shuffle } declare <8 x i16> @llvm.smin.v8i16(<8 x i16>, <8 x i16>) declare <8 x i16> @llvm.smax.v8i16(<8 x i16>, <8 x i16>) declare <4 x i32> @llvm.smin.v4i32(<4 x i32>, <4 x i32>) declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>)