1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s 3 4; 5; FACGE 6; 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.h 12; CHECK-NEXT: ret 13 %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> %out 17} 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.s 23; CHECK-NEXT: ret 24 %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> %out 28} 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.d 34; CHECK-NEXT: ret 35 %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> %out 39} 40 41; 42; FACGT 43; 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.h 49; CHECK-NEXT: ret 50 %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> %out 54} 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.s 60; CHECK-NEXT: ret 61 %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> %out 65} 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.d 71; CHECK-NEXT: ret 72 %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> %out 76} 77 78; 79; FCMEQ 80; 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.h 86; CHECK-NEXT: ret 87 %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> %out 91} 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.s 97; CHECK-NEXT: ret 98 %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> %out 102} 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.d 108; CHECK-NEXT: ret 109 %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> %out 113} 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.0 119; CHECK-NEXT: ret 120 %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> %out 124} 125 126; 127; FCMGE 128; 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.h 134; CHECK-NEXT: ret 135 %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> %out 139} 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.s 145; CHECK-NEXT: ret 146 %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> %out 150} 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.d 156; CHECK-NEXT: ret 157 %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> %out 161} 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.0 167; CHECK-NEXT: ret 168 %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> %out 172} 173; 174; FCMGT 175; 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.h 181; CHECK-NEXT: ret 182 %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> %out 186} 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.s 192; CHECK-NEXT: ret 193 %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> %out 197} 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.d 203; CHECK-NEXT: ret 204 %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> %out 208} 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.0 214; CHECK-NEXT: ret 215 %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> %out 219} 220; 221; FCMNE 222; 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.h 228; CHECK-NEXT: ret 229 %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> %out 233} 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.s 239; CHECK-NEXT: ret 240 %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> %out 244} 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.d 250; CHECK-NEXT: ret 251 %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> %out 255} 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.0 261; CHECK-NEXT: ret 262 %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> %out 266} 267 268; 269; FCMPUO 270; 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.h 276; CHECK-NEXT: ret 277 %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> %out 281} 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.s 287; CHECK-NEXT: ret 288 %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> %out 292} 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.d 298; CHECK-NEXT: ret 299 %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> %out 303} 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