; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2p3 < %s | FileCheck %s --check-prefix=CHECK ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+sme2p3 < %s | FileCheck %s --check-prefix=CHECK ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2p3 -force-streaming < %s | FileCheck %s --check-prefix=CHECK-STREAMING ; ; FCVTZSN ; define @fcvtzsn_i8_f16( %zn1, %zn2) { ; CHECK-LABEL: fcvtzsn_i8_f16: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 ; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; CHECK-NEXT: fcvtzsn z0.b, { z0.h, z1.h } ; CHECK-NEXT: ret ; ; CHECK-STREAMING-LABEL: fcvtzsn_i8_f16: ; CHECK-STREAMING: // %bb.0: ; CHECK-STREAMING-NEXT: fcvtzsn z0.b, { z0.h, z1.h } ; CHECK-STREAMING-NEXT: ret %res = call @llvm.aarch64.sve.fcvtzsn.x2.i8f16( %zn1, %zn2) ret %res } define @fcvtzsn_i16_f32( %zn1, %zn2) { ; CHECK-LABEL: fcvtzsn_i16_f32: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 ; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; CHECK-NEXT: fcvtzsn z0.h, { z0.s, z1.s } ; CHECK-NEXT: ret ; ; CHECK-STREAMING-LABEL: fcvtzsn_i16_f32: ; CHECK-STREAMING: // %bb.0: ; CHECK-STREAMING-NEXT: fcvtzsn z0.h, { z0.s, z1.s } ; CHECK-STREAMING-NEXT: ret %res = call @llvm.aarch64.sve.fcvtzsn.x2.i16f32( %zn1, %zn2) ret %res } define @fcvtzsn_i32_f64( %zn1, %zn2) { ; CHECK-LABEL: fcvtzsn_i32_f64: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 ; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; CHECK-NEXT: fcvtzsn z0.s, { z0.d, z1.d } ; CHECK-NEXT: ret ; ; CHECK-STREAMING-LABEL: fcvtzsn_i32_f64: ; CHECK-STREAMING: // %bb.0: ; CHECK-STREAMING-NEXT: fcvtzsn z0.s, { z0.d, z1.d } ; CHECK-STREAMING-NEXT: ret %res = call @llvm.aarch64.sve.fcvtzsn.x2.i32f64( %zn1, %zn2) ret %res } ; ; FCVTZUN ; define @fcvtzun_i8_f16( %zn1, %zn2) { ; CHECK-LABEL: fcvtzun_i8_f16: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 ; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; CHECK-NEXT: fcvtzun z0.b, { z0.h, z1.h } ; CHECK-NEXT: ret ; ; CHECK-STREAMING-LABEL: fcvtzun_i8_f16: ; CHECK-STREAMING: // %bb.0: ; CHECK-STREAMING-NEXT: fcvtzun z0.b, { z0.h, z1.h } ; CHECK-STREAMING-NEXT: ret %res = call @llvm.aarch64.sve.fcvtzun.x2.i8f16( %zn1, %zn2) ret %res } define @fcvtzun_i16_f32( %zn1, %zn2) { ; CHECK-LABEL: fcvtzun_i16_f32: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 ; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; CHECK-NEXT: fcvtzun z0.h, { z0.s, z1.s } ; CHECK-NEXT: ret ; ; CHECK-STREAMING-LABEL: fcvtzun_i16_f32: ; CHECK-STREAMING: // %bb.0: ; CHECK-STREAMING-NEXT: fcvtzun z0.h, { z0.s, z1.s } ; CHECK-STREAMING-NEXT: ret %res = call @llvm.aarch64.sve.fcvtzun.x2.i16f32( %zn1, %zn2) ret %res } define @fcvtzun_i32_f64( %zn1, %zn2) { ; CHECK-LABEL: fcvtzun_i32_f64: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1 ; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1 ; CHECK-NEXT: fcvtzun z0.s, { z0.d, z1.d } ; CHECK-NEXT: ret ; ; CHECK-STREAMING-LABEL: fcvtzun_i32_f64: ; CHECK-STREAMING: // %bb.0: ; CHECK-STREAMING-NEXT: fcvtzun z0.s, { z0.d, z1.d } ; CHECK-STREAMING-NEXT: ret %res = call @llvm.aarch64.sve.fcvtzun.x2.i32f64( %zn1, %zn2) ret %res }