118 lines
7.4 KiB
LLVM
118 lines
7.4 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2 -verify-machineinstrs < %s | FileCheck %s
|
|
|
|
; FRINTA
|
|
|
|
define { <vscale x 4 x float>, <vscale x 4 x float> } @multi_vec_frinta_x2_f32(<vscale x 4 x float> %unused, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2) {
|
|
; CHECK-LABEL: multi_vec_frinta_x2_f32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: mov z3.d, z2.d
|
|
; CHECK-NEXT: mov z2.d, z1.d
|
|
; CHECK-NEXT: frinta { z0.s, z1.s }, { z2.s, z3.s }
|
|
; CHECK-NEXT: ret
|
|
%res = call { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frinta.x2.nxv4f32(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2)
|
|
ret { <vscale x 4 x float>, <vscale x 4 x float> } %res
|
|
}
|
|
|
|
define { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } @multi_vec_frinta_x4_f32(<vscale x 4 x float> %unused, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zn3, <vscale x 4 x float> %zn4) {
|
|
; CHECK-LABEL: multi_vec_frinta_x4_f32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: mov z7.d, z4.d
|
|
; CHECK-NEXT: mov z6.d, z3.d
|
|
; CHECK-NEXT: mov z5.d, z2.d
|
|
; CHECK-NEXT: mov z4.d, z1.d
|
|
; CHECK-NEXT: frinta { z0.s - z3.s }, { z4.s - z7.s }
|
|
; CHECK-NEXT: ret
|
|
%res = call { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frinta.x4.nxv4f32(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zn3, <vscale x 4 x float> %zn4)
|
|
ret { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } %res
|
|
}
|
|
|
|
; FRINTM
|
|
|
|
define { <vscale x 4 x float>, <vscale x 4 x float> } @multi_vec_frintm_x2_f32(<vscale x 4 x float> %unused, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2) {
|
|
; CHECK-LABEL: multi_vec_frintm_x2_f32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: mov z3.d, z2.d
|
|
; CHECK-NEXT: mov z2.d, z1.d
|
|
; CHECK-NEXT: frintm { z0.s, z1.s }, { z2.s, z3.s }
|
|
; CHECK-NEXT: ret
|
|
%res = call { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frintm.x2.nxv4f32(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2)
|
|
ret { <vscale x 4 x float>, <vscale x 4 x float> } %res
|
|
}
|
|
|
|
define { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } @multi_vec_frintm_x4_f32(<vscale x 4 x float> %unused, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zn3, <vscale x 4 x float> %zn4) {
|
|
; CHECK-LABEL: multi_vec_frintm_x4_f32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: mov z7.d, z4.d
|
|
; CHECK-NEXT: mov z6.d, z3.d
|
|
; CHECK-NEXT: mov z5.d, z2.d
|
|
; CHECK-NEXT: mov z4.d, z1.d
|
|
; CHECK-NEXT: frintm { z0.s - z3.s }, { z4.s - z7.s }
|
|
; CHECK-NEXT: ret
|
|
%res = call { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frintm.x4.nxv4f32(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zn3, <vscale x 4 x float> %zn4)
|
|
ret { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } %res
|
|
}
|
|
|
|
; FRINTN
|
|
|
|
define { <vscale x 4 x float>, <vscale x 4 x float> } @multi_vec_frintn_x2_f32(<vscale x 4 x float> %unused, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2) {
|
|
; CHECK-LABEL: multi_vec_frintn_x2_f32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: mov z3.d, z2.d
|
|
; CHECK-NEXT: mov z2.d, z1.d
|
|
; CHECK-NEXT: frintn { z0.s, z1.s }, { z2.s, z3.s }
|
|
; CHECK-NEXT: ret
|
|
%res = call { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frintn.x2.nxv4f32(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2)
|
|
ret { <vscale x 4 x float>, <vscale x 4 x float> } %res
|
|
}
|
|
|
|
define { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } @multi_vec_frintn_x4_f32(<vscale x 4 x float> %unused, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zn3, <vscale x 4 x float> %zn4) {
|
|
; CHECK-LABEL: multi_vec_frintn_x4_f32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: mov z7.d, z4.d
|
|
; CHECK-NEXT: mov z6.d, z3.d
|
|
; CHECK-NEXT: mov z5.d, z2.d
|
|
; CHECK-NEXT: mov z4.d, z1.d
|
|
; CHECK-NEXT: frintn { z0.s - z3.s }, { z4.s - z7.s }
|
|
; CHECK-NEXT: ret
|
|
%res = call { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frintn.x4.nxv4f32(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zn3, <vscale x 4 x float> %zn4)
|
|
ret { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } %res
|
|
}
|
|
|
|
; FRINTP
|
|
|
|
define { <vscale x 4 x float>, <vscale x 4 x float> } @multi_vec_frintp_x2_f32(<vscale x 4 x float> %unused, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2) {
|
|
; CHECK-LABEL: multi_vec_frintp_x2_f32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: mov z3.d, z2.d
|
|
; CHECK-NEXT: mov z2.d, z1.d
|
|
; CHECK-NEXT: frintp { z0.s, z1.s }, { z2.s, z3.s }
|
|
; CHECK-NEXT: ret
|
|
%res = call { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frintp.x2.nxv4f32(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2)
|
|
ret { <vscale x 4 x float>, <vscale x 4 x float> } %res
|
|
}
|
|
|
|
define { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } @multi_vec_frintp_x4_f32(<vscale x 4 x float> %unused, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zn3, <vscale x 4 x float> %zn4) {
|
|
; CHECK-LABEL: multi_vec_frintp_x4_f32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: mov z7.d, z4.d
|
|
; CHECK-NEXT: mov z6.d, z3.d
|
|
; CHECK-NEXT: mov z5.d, z2.d
|
|
; CHECK-NEXT: mov z4.d, z1.d
|
|
; CHECK-NEXT: frintp { z0.s - z3.s }, { z4.s - z7.s }
|
|
; CHECK-NEXT: ret
|
|
%res = call { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frintp.x4.nxv4f32(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zn3, <vscale x 4 x float> %zn4)
|
|
ret { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } %res
|
|
}
|
|
|
|
declare { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frinta.x2.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
|
|
declare { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frinta.x4.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
|
|
|
|
declare { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frintm.x2.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
|
|
declare { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frintm.x4.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
|
|
|
|
declare { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frintn.x2.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
|
|
declare { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frintn.x4.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
|
|
|
|
declare { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frintp.x2.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
|
|
declare { <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float> } @llvm.aarch64.sve.frintp.x4.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
|