332 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s3 4;5; FACGE6;7 8define <vscale x 8 x i1> @facge_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {9; CHECK-LABEL: facge_h:10; CHECK: // %bb.0:11; CHECK-NEXT: facge p0.h, p0/z, z0.h, z1.h12; CHECK-NEXT: ret13 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.facge.nxv8f16(<vscale x 8 x i1> %pg,14 <vscale x 8 x half> %a,15 <vscale x 8 x half> %b)16 ret <vscale x 8 x i1> %out17}18 19define <vscale x 4 x i1> @facge_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {20; CHECK-LABEL: facge_s:21; CHECK: // %bb.0:22; CHECK-NEXT: facge p0.s, p0/z, z0.s, z1.s23; CHECK-NEXT: ret24 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.facge.nxv4f32(<vscale x 4 x i1> %pg,25 <vscale x 4 x float> %a,26 <vscale x 4 x float> %b)27 ret <vscale x 4 x i1> %out28}29 30define <vscale x 2 x i1> @facge_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {31; CHECK-LABEL: facge_d:32; CHECK: // %bb.0:33; CHECK-NEXT: facge p0.d, p0/z, z0.d, z1.d34; CHECK-NEXT: ret35 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.facge.nxv2f64(<vscale x 2 x i1> %pg,36 <vscale x 2 x double> %a,37 <vscale x 2 x double> %b)38 ret <vscale x 2 x i1> %out39}40 41;42; FACGT43;44 45define <vscale x 8 x i1> @facgt_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {46; CHECK-LABEL: facgt_h:47; CHECK: // %bb.0:48; CHECK-NEXT: facgt p0.h, p0/z, z0.h, z1.h49; CHECK-NEXT: ret50 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.facgt.nxv8f16(<vscale x 8 x i1> %pg,51 <vscale x 8 x half> %a,52 <vscale x 8 x half> %b)53 ret <vscale x 8 x i1> %out54}55 56define <vscale x 4 x i1> @facgt_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {57; CHECK-LABEL: facgt_s:58; CHECK: // %bb.0:59; CHECK-NEXT: facgt p0.s, p0/z, z0.s, z1.s60; CHECK-NEXT: ret61 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.facgt.nxv4f32(<vscale x 4 x i1> %pg,62 <vscale x 4 x float> %a,63 <vscale x 4 x float> %b)64 ret <vscale x 4 x i1> %out65}66 67define <vscale x 2 x i1> @facgt_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {68; CHECK-LABEL: facgt_d:69; CHECK: // %bb.0:70; CHECK-NEXT: facgt p0.d, p0/z, z0.d, z1.d71; CHECK-NEXT: ret72 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.facgt.nxv2f64(<vscale x 2 x i1> %pg,73 <vscale x 2 x double> %a,74 <vscale x 2 x double> %b)75 ret <vscale x 2 x i1> %out76}77 78;79; FCMEQ80;81 82define <vscale x 8 x i1> @fcmeq_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {83; CHECK-LABEL: fcmeq_h:84; CHECK: // %bb.0:85; CHECK-NEXT: fcmeq p0.h, p0/z, z0.h, z1.h86; CHECK-NEXT: ret87 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.fcmpeq.nxv8f16(<vscale x 8 x i1> %pg,88 <vscale x 8 x half> %a,89 <vscale x 8 x half> %b)90 ret <vscale x 8 x i1> %out91}92 93define <vscale x 4 x i1> @fcmeq_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {94; CHECK-LABEL: fcmeq_s:95; CHECK: // %bb.0:96; CHECK-NEXT: fcmeq p0.s, p0/z, z0.s, z1.s97; CHECK-NEXT: ret98 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.fcmpeq.nxv4f32(<vscale x 4 x i1> %pg,99 <vscale x 4 x float> %a,100 <vscale x 4 x float> %b)101 ret <vscale x 4 x i1> %out102}103 104define <vscale x 2 x i1> @fcmeq_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {105; CHECK-LABEL: fcmeq_d:106; CHECK: // %bb.0:107; CHECK-NEXT: fcmeq p0.d, p0/z, z0.d, z1.d108; CHECK-NEXT: ret109 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.fcmpeq.nxv2f64(<vscale x 2 x i1> %pg,110 <vscale x 2 x double> %a,111 <vscale x 2 x double> %b)112 ret <vscale x 2 x i1> %out113}114 115define <vscale x 2 x i1> @fcmeq_zero(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a) {116; CHECK-LABEL: fcmeq_zero:117; CHECK: // %bb.0:118; CHECK-NEXT: fcmeq p0.d, p0/z, z0.d, #0.0119; CHECK-NEXT: ret120 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.fcmpeq.nxv2f64(<vscale x 2 x i1> %pg,121 <vscale x 2 x double> %a,122 <vscale x 2 x double> zeroinitializer)123 ret <vscale x 2 x i1> %out124}125 126;127; FCMGE128;129 130define <vscale x 8 x i1> @fcmge_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {131; CHECK-LABEL: fcmge_h:132; CHECK: // %bb.0:133; CHECK-NEXT: fcmge p0.h, p0/z, z0.h, z1.h134; CHECK-NEXT: ret135 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.fcmpge.nxv8f16(<vscale x 8 x i1> %pg,136 <vscale x 8 x half> %a,137 <vscale x 8 x half> %b)138 ret <vscale x 8 x i1> %out139}140 141define <vscale x 4 x i1> @fcmge_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {142; CHECK-LABEL: fcmge_s:143; CHECK: // %bb.0:144; CHECK-NEXT: fcmge p0.s, p0/z, z0.s, z1.s145; CHECK-NEXT: ret146 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.fcmpge.nxv4f32(<vscale x 4 x i1> %pg,147 <vscale x 4 x float> %a,148 <vscale x 4 x float> %b)149 ret <vscale x 4 x i1> %out150}151 152define <vscale x 2 x i1> @fcmge_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {153; CHECK-LABEL: fcmge_d:154; CHECK: // %bb.0:155; CHECK-NEXT: fcmge p0.d, p0/z, z0.d, z1.d156; CHECK-NEXT: ret157 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.fcmpge.nxv2f64(<vscale x 2 x i1> %pg,158 <vscale x 2 x double> %a,159 <vscale x 2 x double> %b)160 ret <vscale x 2 x i1> %out161}162 163define <vscale x 2 x i1> @fcmge_zero(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a) {164; CHECK-LABEL: fcmge_zero:165; CHECK: // %bb.0:166; CHECK-NEXT: fcmge p0.d, p0/z, z0.d, #0.0167; CHECK-NEXT: ret168 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.fcmpge.nxv2f64(<vscale x 2 x i1> %pg,169 <vscale x 2 x double> %a,170 <vscale x 2 x double> zeroinitializer)171 ret <vscale x 2 x i1> %out172}173;174; FCMGT175;176 177define <vscale x 8 x i1> @fcmgt_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {178; CHECK-LABEL: fcmgt_h:179; CHECK: // %bb.0:180; CHECK-NEXT: fcmgt p0.h, p0/z, z0.h, z1.h181; CHECK-NEXT: ret182 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.fcmpgt.nxv8f16(<vscale x 8 x i1> %pg,183 <vscale x 8 x half> %a,184 <vscale x 8 x half> %b)185 ret <vscale x 8 x i1> %out186}187 188define <vscale x 4 x i1> @fcmgt_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {189; CHECK-LABEL: fcmgt_s:190; CHECK: // %bb.0:191; CHECK-NEXT: fcmgt p0.s, p0/z, z0.s, z1.s192; CHECK-NEXT: ret193 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.fcmpgt.nxv4f32(<vscale x 4 x i1> %pg,194 <vscale x 4 x float> %a,195 <vscale x 4 x float> %b)196 ret <vscale x 4 x i1> %out197}198 199define <vscale x 2 x i1> @fcmgt_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {200; CHECK-LABEL: fcmgt_d:201; CHECK: // %bb.0:202; CHECK-NEXT: fcmgt p0.d, p0/z, z0.d, z1.d203; CHECK-NEXT: ret204 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.fcmpgt.nxv2f64(<vscale x 2 x i1> %pg,205 <vscale x 2 x double> %a,206 <vscale x 2 x double> %b)207 ret <vscale x 2 x i1> %out208}209 210define <vscale x 2 x i1> @fcmgt_zero(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a) {211; CHECK-LABEL: fcmgt_zero:212; CHECK: // %bb.0:213; CHECK-NEXT: fcmgt p0.d, p0/z, z0.d, #0.0214; CHECK-NEXT: ret215 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.fcmpgt.nxv2f64(<vscale x 2 x i1> %pg,216 <vscale x 2 x double> %a,217 <vscale x 2 x double> zeroinitializer)218 ret <vscale x 2 x i1> %out219}220;221; FCMNE222;223 224define <vscale x 8 x i1> @fcmne_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {225; CHECK-LABEL: fcmne_h:226; CHECK: // %bb.0:227; CHECK-NEXT: fcmne p0.h, p0/z, z0.h, z1.h228; CHECK-NEXT: ret229 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.fcmpne.nxv8f16(<vscale x 8 x i1> %pg,230 <vscale x 8 x half> %a,231 <vscale x 8 x half> %b)232 ret <vscale x 8 x i1> %out233}234 235define <vscale x 4 x i1> @fcmne_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {236; CHECK-LABEL: fcmne_s:237; CHECK: // %bb.0:238; CHECK-NEXT: fcmne p0.s, p0/z, z0.s, z1.s239; CHECK-NEXT: ret240 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.fcmpne.nxv4f32(<vscale x 4 x i1> %pg,241 <vscale x 4 x float> %a,242 <vscale x 4 x float> %b)243 ret <vscale x 4 x i1> %out244}245 246define <vscale x 2 x i1> @fcmne_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {247; CHECK-LABEL: fcmne_d:248; CHECK: // %bb.0:249; CHECK-NEXT: fcmne p0.d, p0/z, z0.d, z1.d250; CHECK-NEXT: ret251 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.fcmpne.nxv2f64(<vscale x 2 x i1> %pg,252 <vscale x 2 x double> %a,253 <vscale x 2 x double> %b)254 ret <vscale x 2 x i1> %out255}256 257define <vscale x 2 x i1> @fcmne_zero(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a) {258; CHECK-LABEL: fcmne_zero:259; CHECK: // %bb.0:260; CHECK-NEXT: fcmne p0.d, p0/z, z0.d, #0.0261; CHECK-NEXT: ret262 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.fcmpne.nxv2f64(<vscale x 2 x i1> %pg,263 <vscale x 2 x double> %a,264 <vscale x 2 x double> zeroinitializer)265 ret <vscale x 2 x i1> %out266}267 268;269; FCMPUO270;271 272define <vscale x 8 x i1> @fcmuo_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {273; CHECK-LABEL: fcmuo_h:274; CHECK: // %bb.0:275; CHECK-NEXT: fcmuo p0.h, p0/z, z0.h, z1.h276; CHECK-NEXT: ret277 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.fcmpuo.nxv8f16(<vscale x 8 x i1> %pg,278 <vscale x 8 x half> %a,279 <vscale x 8 x half> %b)280 ret <vscale x 8 x i1> %out281}282 283define <vscale x 4 x i1> @fcmuo_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {284; CHECK-LABEL: fcmuo_s:285; CHECK: // %bb.0:286; CHECK-NEXT: fcmuo p0.s, p0/z, z0.s, z1.s287; CHECK-NEXT: ret288 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.fcmpuo.nxv4f32(<vscale x 4 x i1> %pg,289 <vscale x 4 x float> %a,290 <vscale x 4 x float> %b)291 ret <vscale x 4 x i1> %out292}293 294define <vscale x 2 x i1> @fcmuo_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {295; CHECK-LABEL: fcmuo_d:296; CHECK: // %bb.0:297; CHECK-NEXT: fcmuo p0.d, p0/z, z0.d, z1.d298; CHECK-NEXT: ret299 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.fcmpuo.nxv2f64(<vscale x 2 x i1> %pg,300 <vscale x 2 x double> %a,301 <vscale x 2 x double> %b)302 ret <vscale x 2 x i1> %out303}304 305declare <vscale x 8 x i1> @llvm.aarch64.sve.facge.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)306declare <vscale x 4 x i1> @llvm.aarch64.sve.facge.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)307declare <vscale x 2 x i1> @llvm.aarch64.sve.facge.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)308 309declare <vscale x 8 x i1> @llvm.aarch64.sve.facgt.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)310declare <vscale x 4 x i1> @llvm.aarch64.sve.facgt.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)311declare <vscale x 2 x i1> @llvm.aarch64.sve.facgt.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)312 313declare <vscale x 8 x i1> @llvm.aarch64.sve.fcmpeq.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)314declare <vscale x 4 x i1> @llvm.aarch64.sve.fcmpeq.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)315declare <vscale x 2 x i1> @llvm.aarch64.sve.fcmpeq.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)316 317declare <vscale x 8 x i1> @llvm.aarch64.sve.fcmpge.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)318declare <vscale x 4 x i1> @llvm.aarch64.sve.fcmpge.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)319declare <vscale x 2 x i1> @llvm.aarch64.sve.fcmpge.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)320 321declare <vscale x 8 x i1> @llvm.aarch64.sve.fcmpgt.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)322declare <vscale x 4 x i1> @llvm.aarch64.sve.fcmpgt.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)323declare <vscale x 2 x i1> @llvm.aarch64.sve.fcmpgt.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)324 325declare <vscale x 8 x i1> @llvm.aarch64.sve.fcmpne.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)326declare <vscale x 4 x i1> @llvm.aarch64.sve.fcmpne.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)327declare <vscale x 2 x i1> @llvm.aarch64.sve.fcmpne.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)328 329declare <vscale x 8 x i1> @llvm.aarch64.sve.fcmpuo.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)330declare <vscale x 4 x i1> @llvm.aarch64.sve.fcmpuo.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)331declare <vscale x 2 x i1> @llvm.aarch64.sve.fcmpuo.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)332