1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi %s -o - -mattr=+mve.fp | FileCheck %s 3 4define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_1(<4 x float> %0) { 5; CHECK-LABEL: vcvt_i32_1: 6; CHECK: @ %bb.0: 7; CHECK-NEXT: vcvt.s32.f32 q0, q0, #1 8; CHECK-NEXT: bx lr 9 %2 = fmul fast <4 x float> %0, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00> 10 %3 = fptosi <4 x float> %2 to <4 x i32> 11 ret <4 x i32> %3 12} 13 14define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_2(<4 x float> %0) { 15; CHECK-LABEL: vcvt_i32_2: 16; CHECK: @ %bb.0: 17; CHECK-NEXT: vcvt.s32.f32 q0, q0, #2 18; CHECK-NEXT: bx lr 19 %2 = fmul fast <4 x float> %0, <float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00> 20 %3 = fptosi <4 x float> %2 to <4 x i32> 21 ret <4 x i32> %3 22} 23 24define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_3(<4 x float> %0) { 25; CHECK-LABEL: vcvt_i32_3: 26; CHECK: @ %bb.0: 27; CHECK-NEXT: vcvt.s32.f32 q0, q0, #3 28; CHECK-NEXT: bx lr 29 %2 = fmul fast <4 x float> %0, <float 8.000000e+00, float 8.000000e+00, float 8.000000e+00, float 8.000000e+00> 30 %3 = fptosi <4 x float> %2 to <4 x i32> 31 ret <4 x i32> %3 32} 33 34define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_4(<4 x float> %0) { 35; CHECK-LABEL: vcvt_i32_4: 36; CHECK: @ %bb.0: 37; CHECK-NEXT: vcvt.s32.f32 q0, q0, #4 38; CHECK-NEXT: bx lr 39 %2 = fmul fast <4 x float> %0, <float 1.600000e+01, float 1.600000e+01, float 1.600000e+01, float 1.600000e+01> 40 %3 = fptosi <4 x float> %2 to <4 x i32> 41 ret <4 x i32> %3 42} 43 44define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_5(<4 x float> %0) { 45; CHECK-LABEL: vcvt_i32_5: 46; CHECK: @ %bb.0: 47; CHECK-NEXT: vcvt.s32.f32 q0, q0, #5 48; CHECK-NEXT: bx lr 49 %2 = fmul fast <4 x float> %0, <float 3.200000e+01, float 3.200000e+01, float 3.200000e+01, float 3.200000e+01> 50 %3 = fptosi <4 x float> %2 to <4 x i32> 51 ret <4 x i32> %3 52} 53 54define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_6(<4 x float> %0) { 55; CHECK-LABEL: vcvt_i32_6: 56; CHECK: @ %bb.0: 57; CHECK-NEXT: vcvt.s32.f32 q0, q0, #6 58; CHECK-NEXT: bx lr 59 %2 = fmul fast <4 x float> %0, <float 6.400000e+01, float 6.400000e+01, float 6.400000e+01, float 6.400000e+01> 60 %3 = fptosi <4 x float> %2 to <4 x i32> 61 ret <4 x i32> %3 62} 63 64define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_7(<4 x float> %0) { 65; CHECK-LABEL: vcvt_i32_7: 66; CHECK: @ %bb.0: 67; CHECK-NEXT: vcvt.s32.f32 q0, q0, #7 68; CHECK-NEXT: bx lr 69 %2 = fmul fast <4 x float> %0, <float 1.280000e+02, float 1.280000e+02, float 1.280000e+02, float 1.280000e+02> 70 %3 = fptosi <4 x float> %2 to <4 x i32> 71 ret <4 x i32> %3 72} 73 74define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_8(<4 x float> %0) { 75; CHECK-LABEL: vcvt_i32_8: 76; CHECK: @ %bb.0: 77; CHECK-NEXT: vcvt.s32.f32 q0, q0, #8 78; CHECK-NEXT: bx lr 79 %2 = fmul fast <4 x float> %0, <float 2.560000e+02, float 2.560000e+02, float 2.560000e+02, float 2.560000e+02> 80 %3 = fptosi <4 x float> %2 to <4 x i32> 81 ret <4 x i32> %3 82} 83 84define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_9(<4 x float> %0) { 85; CHECK-LABEL: vcvt_i32_9: 86; CHECK: @ %bb.0: 87; CHECK-NEXT: vcvt.s32.f32 q0, q0, #9 88; CHECK-NEXT: bx lr 89 %2 = fmul fast <4 x float> %0, <float 5.120000e+02, float 5.120000e+02, float 5.120000e+02, float 5.120000e+02> 90 %3 = fptosi <4 x float> %2 to <4 x i32> 91 ret <4 x i32> %3 92} 93 94define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_10(<4 x float> %0) { 95; CHECK-LABEL: vcvt_i32_10: 96; CHECK: @ %bb.0: 97; CHECK-NEXT: vcvt.s32.f32 q0, q0, #10 98; CHECK-NEXT: bx lr 99 %2 = fmul fast <4 x float> %0, <float 1.024000e+03, float 1.024000e+03, float 1.024000e+03, float 1.024000e+03> 100 %3 = fptosi <4 x float> %2 to <4 x i32> 101 ret <4 x i32> %3 102} 103 104define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_11(<4 x float> %0) { 105; CHECK-LABEL: vcvt_i32_11: 106; CHECK: @ %bb.0: 107; CHECK-NEXT: vcvt.s32.f32 q0, q0, #11 108; CHECK-NEXT: bx lr 109 %2 = fmul fast <4 x float> %0, <float 2.048000e+03, float 2.048000e+03, float 2.048000e+03, float 2.048000e+03> 110 %3 = fptosi <4 x float> %2 to <4 x i32> 111 ret <4 x i32> %3 112} 113 114define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_12(<4 x float> %0) { 115; CHECK-LABEL: vcvt_i32_12: 116; CHECK: @ %bb.0: 117; CHECK-NEXT: vcvt.s32.f32 q0, q0, #12 118; CHECK-NEXT: bx lr 119 %2 = fmul fast <4 x float> %0, <float 4.096000e+03, float 4.096000e+03, float 4.096000e+03, float 4.096000e+03> 120 %3 = fptosi <4 x float> %2 to <4 x i32> 121 ret <4 x i32> %3 122} 123 124define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_13(<4 x float> %0) { 125; CHECK-LABEL: vcvt_i32_13: 126; CHECK: @ %bb.0: 127; CHECK-NEXT: vcvt.s32.f32 q0, q0, #13 128; CHECK-NEXT: bx lr 129 %2 = fmul fast <4 x float> %0, <float 8.192000e+03, float 8.192000e+03, float 8.192000e+03, float 8.192000e+03> 130 %3 = fptosi <4 x float> %2 to <4 x i32> 131 ret <4 x i32> %3 132} 133 134define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_14(<4 x float> %0) { 135; CHECK-LABEL: vcvt_i32_14: 136; CHECK: @ %bb.0: 137; CHECK-NEXT: vcvt.s32.f32 q0, q0, #14 138; CHECK-NEXT: bx lr 139 %2 = fmul fast <4 x float> %0, <float 1.638400e+04, float 1.638400e+04, float 1.638400e+04, float 1.638400e+04> 140 %3 = fptosi <4 x float> %2 to <4 x i32> 141 ret <4 x i32> %3 142} 143 144define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_15(<4 x float> %0) { 145; CHECK-LABEL: vcvt_i32_15: 146; CHECK: @ %bb.0: 147; CHECK-NEXT: vcvt.s32.f32 q0, q0, #15 148; CHECK-NEXT: bx lr 149 %2 = fmul fast <4 x float> %0, <float 3.276800e+04, float 3.276800e+04, float 3.276800e+04, float 3.276800e+04> 150 %3 = fptosi <4 x float> %2 to <4 x i32> 151 ret <4 x i32> %3 152} 153 154define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_16(<4 x float> %0) { 155; CHECK-LABEL: vcvt_i32_16: 156; CHECK: @ %bb.0: 157; CHECK-NEXT: vcvt.s32.f32 q0, q0, #16 158; CHECK-NEXT: bx lr 159 %2 = fmul fast <4 x float> %0, <float 6.553600e+04, float 6.553600e+04, float 6.553600e+04, float 6.553600e+04> 160 %3 = fptosi <4 x float> %2 to <4 x i32> 161 ret <4 x i32> %3 162} 163 164define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_17(<4 x float> %0) { 165; CHECK-LABEL: vcvt_i32_17: 166; CHECK: @ %bb.0: 167; CHECK-NEXT: vcvt.s32.f32 q0, q0, #17 168; CHECK-NEXT: bx lr 169 %2 = fmul fast <4 x float> %0, <float 1.310720e+05, float 1.310720e+05, float 1.310720e+05, float 1.310720e+05> 170 %3 = fptosi <4 x float> %2 to <4 x i32> 171 ret <4 x i32> %3 172} 173 174define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_18(<4 x float> %0) { 175; CHECK-LABEL: vcvt_i32_18: 176; CHECK: @ %bb.0: 177; CHECK-NEXT: vcvt.s32.f32 q0, q0, #18 178; CHECK-NEXT: bx lr 179 %2 = fmul fast <4 x float> %0, <float 2.621440e+05, float 2.621440e+05, float 2.621440e+05, float 2.621440e+05> 180 %3 = fptosi <4 x float> %2 to <4 x i32> 181 ret <4 x i32> %3 182} 183 184define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_19(<4 x float> %0) { 185; CHECK-LABEL: vcvt_i32_19: 186; CHECK: @ %bb.0: 187; CHECK-NEXT: vcvt.s32.f32 q0, q0, #19 188; CHECK-NEXT: bx lr 189 %2 = fmul fast <4 x float> %0, <float 5.242880e+05, float 5.242880e+05, float 5.242880e+05, float 5.242880e+05> 190 %3 = fptosi <4 x float> %2 to <4 x i32> 191 ret <4 x i32> %3 192} 193 194define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_20(<4 x float> %0) { 195; CHECK-LABEL: vcvt_i32_20: 196; CHECK: @ %bb.0: 197; CHECK-NEXT: vcvt.s32.f32 q0, q0, #20 198; CHECK-NEXT: bx lr 199 %2 = fmul fast <4 x float> %0, <float 0x4130000000000000, float 0x4130000000000000, float 0x4130000000000000, float 0x4130000000000000> 200 %3 = fptosi <4 x float> %2 to <4 x i32> 201 ret <4 x i32> %3 202} 203 204define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_21(<4 x float> %0) { 205; CHECK-LABEL: vcvt_i32_21: 206; CHECK: @ %bb.0: 207; CHECK-NEXT: vcvt.s32.f32 q0, q0, #21 208; CHECK-NEXT: bx lr 209 %2 = fmul fast <4 x float> %0, <float 0x4140000000000000, float 0x4140000000000000, float 0x4140000000000000, float 0x4140000000000000> 210 %3 = fptosi <4 x float> %2 to <4 x i32> 211 ret <4 x i32> %3 212} 213 214define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_22(<4 x float> %0) { 215; CHECK-LABEL: vcvt_i32_22: 216; CHECK: @ %bb.0: 217; CHECK-NEXT: vcvt.s32.f32 q0, q0, #22 218; CHECK-NEXT: bx lr 219 %2 = fmul fast <4 x float> %0, <float 0x4150000000000000, float 0x4150000000000000, float 0x4150000000000000, float 0x4150000000000000> 220 %3 = fptosi <4 x float> %2 to <4 x i32> 221 ret <4 x i32> %3 222} 223 224define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_23(<4 x float> %0) { 225; CHECK-LABEL: vcvt_i32_23: 226; CHECK: @ %bb.0: 227; CHECK-NEXT: vcvt.s32.f32 q0, q0, #23 228; CHECK-NEXT: bx lr 229 %2 = fmul fast <4 x float> %0, <float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000> 230 %3 = fptosi <4 x float> %2 to <4 x i32> 231 ret <4 x i32> %3 232} 233 234define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_24(<4 x float> %0) { 235; CHECK-LABEL: vcvt_i32_24: 236; CHECK: @ %bb.0: 237; CHECK-NEXT: vcvt.s32.f32 q0, q0, #24 238; CHECK-NEXT: bx lr 239 %2 = fmul fast <4 x float> %0, <float 0x4170000000000000, float 0x4170000000000000, float 0x4170000000000000, float 0x4170000000000000> 240 %3 = fptosi <4 x float> %2 to <4 x i32> 241 ret <4 x i32> %3 242} 243 244define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_25(<4 x float> %0) { 245; CHECK-LABEL: vcvt_i32_25: 246; CHECK: @ %bb.0: 247; CHECK-NEXT: vcvt.s32.f32 q0, q0, #25 248; CHECK-NEXT: bx lr 249 %2 = fmul fast <4 x float> %0, <float 0x4180000000000000, float 0x4180000000000000, float 0x4180000000000000, float 0x4180000000000000> 250 %3 = fptosi <4 x float> %2 to <4 x i32> 251 ret <4 x i32> %3 252} 253 254define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_26(<4 x float> %0) { 255; CHECK-LABEL: vcvt_i32_26: 256; CHECK: @ %bb.0: 257; CHECK-NEXT: vcvt.s32.f32 q0, q0, #26 258; CHECK-NEXT: bx lr 259 %2 = fmul fast <4 x float> %0, <float 0x4190000000000000, float 0x4190000000000000, float 0x4190000000000000, float 0x4190000000000000> 260 %3 = fptosi <4 x float> %2 to <4 x i32> 261 ret <4 x i32> %3 262} 263 264define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_27(<4 x float> %0) { 265; CHECK-LABEL: vcvt_i32_27: 266; CHECK: @ %bb.0: 267; CHECK-NEXT: vcvt.s32.f32 q0, q0, #27 268; CHECK-NEXT: bx lr 269 %2 = fmul fast <4 x float> %0, <float 0x41A0000000000000, float 0x41A0000000000000, float 0x41A0000000000000, float 0x41A0000000000000> 270 %3 = fptosi <4 x float> %2 to <4 x i32> 271 ret <4 x i32> %3 272} 273 274define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_28(<4 x float> %0) { 275; CHECK-LABEL: vcvt_i32_28: 276; CHECK: @ %bb.0: 277; CHECK-NEXT: vcvt.s32.f32 q0, q0, #28 278; CHECK-NEXT: bx lr 279 %2 = fmul fast <4 x float> %0, <float 0x41B0000000000000, float 0x41B0000000000000, float 0x41B0000000000000, float 0x41B0000000000000> 280 %3 = fptosi <4 x float> %2 to <4 x i32> 281 ret <4 x i32> %3 282} 283 284define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_29(<4 x float> %0) { 285; CHECK-LABEL: vcvt_i32_29: 286; CHECK: @ %bb.0: 287; CHECK-NEXT: vcvt.s32.f32 q0, q0, #29 288; CHECK-NEXT: bx lr 289 %2 = fmul fast <4 x float> %0, <float 0x41C0000000000000, float 0x41C0000000000000, float 0x41C0000000000000, float 0x41C0000000000000> 290 %3 = fptosi <4 x float> %2 to <4 x i32> 291 ret <4 x i32> %3 292} 293 294define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_30(<4 x float> %0) { 295; CHECK-LABEL: vcvt_i32_30: 296; CHECK: @ %bb.0: 297; CHECK-NEXT: vcvt.s32.f32 q0, q0, #30 298; CHECK-NEXT: bx lr 299 %2 = fmul fast <4 x float> %0, <float 0x41D0000000000000, float 0x41D0000000000000, float 0x41D0000000000000, float 0x41D0000000000000> 300 %3 = fptosi <4 x float> %2 to <4 x i32> 301 ret <4 x i32> %3 302} 303 304define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_31(<4 x float> %0) { 305; CHECK-LABEL: vcvt_i32_31: 306; CHECK: @ %bb.0: 307; CHECK-NEXT: vcvt.s32.f32 q0, q0, #31 308; CHECK-NEXT: bx lr 309 %2 = fmul fast <4 x float> %0, <float 0x41E0000000000000, float 0x41E0000000000000, float 0x41E0000000000000, float 0x41E0000000000000> 310 %3 = fptosi <4 x float> %2 to <4 x i32> 311 ret <4 x i32> %3 312} 313 314define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_32(<4 x float> %0) { 315; CHECK-LABEL: vcvt_i32_32: 316; CHECK: @ %bb.0: 317; CHECK-NEXT: vcvt.s32.f32 q0, q0, #32 318; CHECK-NEXT: bx lr 319 %2 = fmul <4 x float> %0, <float 0x41F0000000000000, float 0x41F0000000000000, float 0x41F0000000000000, float 0x41F0000000000000> 320 %3 = fptosi <4 x float> %2 to <4 x i32> 321 ret <4 x i32> %3 322} 323 324define arm_aapcs_vfpcc <4 x i32> @vcvt_i32_33(<4 x float> %0) { 325; CHECK-LABEL: vcvt_i32_33: 326; CHECK: @ %bb.0: 327; CHECK-NEXT: vmov.i32 q1, #0x50000000 328; CHECK-NEXT: vmul.f32 q0, q0, q1 329; CHECK-NEXT: vcvt.s32.f32 q0, q0 330; CHECK-NEXT: bx lr 331 %2 = fmul <4 x float> %0, <float 0x4200000000000000, float 0x4200000000000000, float 0x4200000000000000, float 0x4200000000000000> 332 %3 = fptosi <4 x float> %2 to <4 x i32> 333 ret <4 x i32> %3 334} 335 336define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_1(<8 x half> %0) { 337; CHECK-LABEL: vcvt_i16_1: 338; CHECK: @ %bb.0: 339; CHECK-NEXT: vcvt.s16.f16 q0, q0, #1 340; CHECK-NEXT: bx lr 341 %2 = fmul fast <8 x half> %0, <half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000> 342 %3 = fptosi <8 x half> %2 to <8 x i16> 343 ret <8 x i16> %3 344} 345 346define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_2(<8 x half> %0) { 347; CHECK-LABEL: vcvt_i16_2: 348; CHECK: @ %bb.0: 349; CHECK-NEXT: vcvt.s16.f16 q0, q0, #2 350; CHECK-NEXT: bx lr 351 %2 = fmul fast <8 x half> %0, <half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400> 352 %3 = fptosi <8 x half> %2 to <8 x i16> 353 ret <8 x i16> %3 354} 355 356define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_3(<8 x half> %0) { 357; CHECK-LABEL: vcvt_i16_3: 358; CHECK: @ %bb.0: 359; CHECK-NEXT: vcvt.s16.f16 q0, q0, #3 360; CHECK-NEXT: bx lr 361 %2 = fmul fast <8 x half> %0, <half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800> 362 %3 = fptosi <8 x half> %2 to <8 x i16> 363 ret <8 x i16> %3 364} 365 366define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_4(<8 x half> %0) { 367; CHECK-LABEL: vcvt_i16_4: 368; CHECK: @ %bb.0: 369; CHECK-NEXT: vcvt.s16.f16 q0, q0, #4 370; CHECK-NEXT: bx lr 371 %2 = fmul fast <8 x half> %0, <half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00> 372 %3 = fptosi <8 x half> %2 to <8 x i16> 373 ret <8 x i16> %3 374} 375 376define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_5(<8 x half> %0) { 377; CHECK-LABEL: vcvt_i16_5: 378; CHECK: @ %bb.0: 379; CHECK-NEXT: vcvt.s16.f16 q0, q0, #5 380; CHECK-NEXT: bx lr 381 %2 = fmul fast <8 x half> %0, <half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000> 382 %3 = fptosi <8 x half> %2 to <8 x i16> 383 ret <8 x i16> %3 384} 385 386define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_6(<8 x half> %0) { 387; CHECK-LABEL: vcvt_i16_6: 388; CHECK: @ %bb.0: 389; CHECK-NEXT: vcvt.s16.f16 q0, q0, #6 390; CHECK-NEXT: bx lr 391 %2 = fmul fast <8 x half> %0, <half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400> 392 %3 = fptosi <8 x half> %2 to <8 x i16> 393 ret <8 x i16> %3 394} 395 396define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_7(<8 x half> %0) { 397; CHECK-LABEL: vcvt_i16_7: 398; CHECK: @ %bb.0: 399; CHECK-NEXT: vcvt.s16.f16 q0, q0, #7 400; CHECK-NEXT: bx lr 401 %2 = fmul fast <8 x half> %0, <half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800> 402 %3 = fptosi <8 x half> %2 to <8 x i16> 403 ret <8 x i16> %3 404} 405 406define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_8(<8 x half> %0) { 407; CHECK-LABEL: vcvt_i16_8: 408; CHECK: @ %bb.0: 409; CHECK-NEXT: vcvt.s16.f16 q0, q0, #8 410; CHECK-NEXT: bx lr 411 %2 = fmul fast <8 x half> %0, <half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00> 412 %3 = fptosi <8 x half> %2 to <8 x i16> 413 ret <8 x i16> %3 414} 415 416define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_9(<8 x half> %0) { 417; CHECK-LABEL: vcvt_i16_9: 418; CHECK: @ %bb.0: 419; CHECK-NEXT: vcvt.s16.f16 q0, q0, #9 420; CHECK-NEXT: bx lr 421 %2 = fmul fast <8 x half> %0, <half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000> 422 %3 = fptosi <8 x half> %2 to <8 x i16> 423 ret <8 x i16> %3 424} 425 426define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_10(<8 x half> %0) { 427; CHECK-LABEL: vcvt_i16_10: 428; CHECK: @ %bb.0: 429; CHECK-NEXT: vcvt.s16.f16 q0, q0, #10 430; CHECK-NEXT: bx lr 431 %2 = fmul fast <8 x half> %0, <half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400> 432 %3 = fptosi <8 x half> %2 to <8 x i16> 433 ret <8 x i16> %3 434} 435 436define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_11(<8 x half> %0) { 437; CHECK-LABEL: vcvt_i16_11: 438; CHECK: @ %bb.0: 439; CHECK-NEXT: vcvt.s16.f16 q0, q0, #11 440; CHECK-NEXT: bx lr 441 %2 = fmul fast <8 x half> %0, <half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800> 442 %3 = fptosi <8 x half> %2 to <8 x i16> 443 ret <8 x i16> %3 444} 445 446define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_12(<8 x half> %0) { 447; CHECK-LABEL: vcvt_i16_12: 448; CHECK: @ %bb.0: 449; CHECK-NEXT: vcvt.s16.f16 q0, q0, #12 450; CHECK-NEXT: bx lr 451 %2 = fmul fast <8 x half> %0, <half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00> 452 %3 = fptosi <8 x half> %2 to <8 x i16> 453 ret <8 x i16> %3 454} 455 456define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_13(<8 x half> %0) { 457; CHECK-LABEL: vcvt_i16_13: 458; CHECK: @ %bb.0: 459; CHECK-NEXT: vcvt.s16.f16 q0, q0, #13 460; CHECK-NEXT: bx lr 461 %2 = fmul fast <8 x half> %0, <half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000> 462 %3 = fptosi <8 x half> %2 to <8 x i16> 463 ret <8 x i16> %3 464} 465 466define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_14(<8 x half> %0) { 467; CHECK-LABEL: vcvt_i16_14: 468; CHECK: @ %bb.0: 469; CHECK-NEXT: vcvt.s16.f16 q0, q0, #14 470; CHECK-NEXT: bx lr 471 %2 = fmul fast <8 x half> %0, <half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400> 472 %3 = fptosi <8 x half> %2 to <8 x i16> 473 ret <8 x i16> %3 474} 475 476define arm_aapcs_vfpcc <8 x i16> @vcvt_i16_15(<8 x half> %0) { 477; CHECK-LABEL: vcvt_i16_15: 478; CHECK: @ %bb.0: 479; CHECK-NEXT: vcvt.s16.f16 q0, q0, #15 480; CHECK-NEXT: bx lr 481 %2 = fmul fast <8 x half> %0, <half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800> 482 %3 = fptosi <8 x half> %2 to <8 x i16> 483 ret <8 x i16> %3 484} 485 486define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_1(<4 x float> %0) { 487; CHECK-LABEL: vcvt_u32_1: 488; CHECK: @ %bb.0: 489; CHECK-NEXT: vcvt.u32.f32 q0, q0, #1 490; CHECK-NEXT: bx lr 491 %2 = fmul fast <4 x float> %0, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00> 492 %3 = fptoui <4 x float> %2 to <4 x i32> 493 ret <4 x i32> %3 494} 495 496define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_2(<4 x float> %0) { 497; CHECK-LABEL: vcvt_u32_2: 498; CHECK: @ %bb.0: 499; CHECK-NEXT: vcvt.u32.f32 q0, q0, #2 500; CHECK-NEXT: bx lr 501 %2 = fmul fast <4 x float> %0, <float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00> 502 %3 = fptoui <4 x float> %2 to <4 x i32> 503 ret <4 x i32> %3 504} 505 506define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_3(<4 x float> %0) { 507; CHECK-LABEL: vcvt_u32_3: 508; CHECK: @ %bb.0: 509; CHECK-NEXT: vcvt.u32.f32 q0, q0, #3 510; CHECK-NEXT: bx lr 511 %2 = fmul fast <4 x float> %0, <float 8.000000e+00, float 8.000000e+00, float 8.000000e+00, float 8.000000e+00> 512 %3 = fptoui <4 x float> %2 to <4 x i32> 513 ret <4 x i32> %3 514} 515 516define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_4(<4 x float> %0) { 517; CHECK-LABEL: vcvt_u32_4: 518; CHECK: @ %bb.0: 519; CHECK-NEXT: vcvt.u32.f32 q0, q0, #4 520; CHECK-NEXT: bx lr 521 %2 = fmul fast <4 x float> %0, <float 1.600000e+01, float 1.600000e+01, float 1.600000e+01, float 1.600000e+01> 522 %3 = fptoui <4 x float> %2 to <4 x i32> 523 ret <4 x i32> %3 524} 525 526define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_5(<4 x float> %0) { 527; CHECK-LABEL: vcvt_u32_5: 528; CHECK: @ %bb.0: 529; CHECK-NEXT: vcvt.u32.f32 q0, q0, #5 530; CHECK-NEXT: bx lr 531 %2 = fmul fast <4 x float> %0, <float 3.200000e+01, float 3.200000e+01, float 3.200000e+01, float 3.200000e+01> 532 %3 = fptoui <4 x float> %2 to <4 x i32> 533 ret <4 x i32> %3 534} 535 536define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_6(<4 x float> %0) { 537; CHECK-LABEL: vcvt_u32_6: 538; CHECK: @ %bb.0: 539; CHECK-NEXT: vcvt.u32.f32 q0, q0, #6 540; CHECK-NEXT: bx lr 541 %2 = fmul fast <4 x float> %0, <float 6.400000e+01, float 6.400000e+01, float 6.400000e+01, float 6.400000e+01> 542 %3 = fptoui <4 x float> %2 to <4 x i32> 543 ret <4 x i32> %3 544} 545 546define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_7(<4 x float> %0) { 547; CHECK-LABEL: vcvt_u32_7: 548; CHECK: @ %bb.0: 549; CHECK-NEXT: vcvt.u32.f32 q0, q0, #7 550; CHECK-NEXT: bx lr 551 %2 = fmul fast <4 x float> %0, <float 1.280000e+02, float 1.280000e+02, float 1.280000e+02, float 1.280000e+02> 552 %3 = fptoui <4 x float> %2 to <4 x i32> 553 ret <4 x i32> %3 554} 555 556define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_8(<4 x float> %0) { 557; CHECK-LABEL: vcvt_u32_8: 558; CHECK: @ %bb.0: 559; CHECK-NEXT: vcvt.u32.f32 q0, q0, #8 560; CHECK-NEXT: bx lr 561 %2 = fmul fast <4 x float> %0, <float 2.560000e+02, float 2.560000e+02, float 2.560000e+02, float 2.560000e+02> 562 %3 = fptoui <4 x float> %2 to <4 x i32> 563 ret <4 x i32> %3 564} 565 566define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_9(<4 x float> %0) { 567; CHECK-LABEL: vcvt_u32_9: 568; CHECK: @ %bb.0: 569; CHECK-NEXT: vcvt.u32.f32 q0, q0, #9 570; CHECK-NEXT: bx lr 571 %2 = fmul fast <4 x float> %0, <float 5.120000e+02, float 5.120000e+02, float 5.120000e+02, float 5.120000e+02> 572 %3 = fptoui <4 x float> %2 to <4 x i32> 573 ret <4 x i32> %3 574} 575 576define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_10(<4 x float> %0) { 577; CHECK-LABEL: vcvt_u32_10: 578; CHECK: @ %bb.0: 579; CHECK-NEXT: vcvt.u32.f32 q0, q0, #10 580; CHECK-NEXT: bx lr 581 %2 = fmul fast <4 x float> %0, <float 1.024000e+03, float 1.024000e+03, float 1.024000e+03, float 1.024000e+03> 582 %3 = fptoui <4 x float> %2 to <4 x i32> 583 ret <4 x i32> %3 584} 585 586define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_11(<4 x float> %0) { 587; CHECK-LABEL: vcvt_u32_11: 588; CHECK: @ %bb.0: 589; CHECK-NEXT: vcvt.u32.f32 q0, q0, #11 590; CHECK-NEXT: bx lr 591 %2 = fmul fast <4 x float> %0, <float 2.048000e+03, float 2.048000e+03, float 2.048000e+03, float 2.048000e+03> 592 %3 = fptoui <4 x float> %2 to <4 x i32> 593 ret <4 x i32> %3 594} 595 596define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_12(<4 x float> %0) { 597; CHECK-LABEL: vcvt_u32_12: 598; CHECK: @ %bb.0: 599; CHECK-NEXT: vcvt.u32.f32 q0, q0, #12 600; CHECK-NEXT: bx lr 601 %2 = fmul fast <4 x float> %0, <float 4.096000e+03, float 4.096000e+03, float 4.096000e+03, float 4.096000e+03> 602 %3 = fptoui <4 x float> %2 to <4 x i32> 603 ret <4 x i32> %3 604} 605 606define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_13(<4 x float> %0) { 607; CHECK-LABEL: vcvt_u32_13: 608; CHECK: @ %bb.0: 609; CHECK-NEXT: vcvt.u32.f32 q0, q0, #13 610; CHECK-NEXT: bx lr 611 %2 = fmul fast <4 x float> %0, <float 8.192000e+03, float 8.192000e+03, float 8.192000e+03, float 8.192000e+03> 612 %3 = fptoui <4 x float> %2 to <4 x i32> 613 ret <4 x i32> %3 614} 615 616define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_14(<4 x float> %0) { 617; CHECK-LABEL: vcvt_u32_14: 618; CHECK: @ %bb.0: 619; CHECK-NEXT: vcvt.u32.f32 q0, q0, #14 620; CHECK-NEXT: bx lr 621 %2 = fmul fast <4 x float> %0, <float 1.638400e+04, float 1.638400e+04, float 1.638400e+04, float 1.638400e+04> 622 %3 = fptoui <4 x float> %2 to <4 x i32> 623 ret <4 x i32> %3 624} 625 626define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_15(<4 x float> %0) { 627; CHECK-LABEL: vcvt_u32_15: 628; CHECK: @ %bb.0: 629; CHECK-NEXT: vcvt.u32.f32 q0, q0, #15 630; CHECK-NEXT: bx lr 631 %2 = fmul fast <4 x float> %0, <float 3.276800e+04, float 3.276800e+04, float 3.276800e+04, float 3.276800e+04> 632 %3 = fptoui <4 x float> %2 to <4 x i32> 633 ret <4 x i32> %3 634} 635 636define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_16(<4 x float> %0) { 637; CHECK-LABEL: vcvt_u32_16: 638; CHECK: @ %bb.0: 639; CHECK-NEXT: vcvt.u32.f32 q0, q0, #16 640; CHECK-NEXT: bx lr 641 %2 = fmul fast <4 x float> %0, <float 6.553600e+04, float 6.553600e+04, float 6.553600e+04, float 6.553600e+04> 642 %3 = fptoui <4 x float> %2 to <4 x i32> 643 ret <4 x i32> %3 644} 645 646define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_17(<4 x float> %0) { 647; CHECK-LABEL: vcvt_u32_17: 648; CHECK: @ %bb.0: 649; CHECK-NEXT: vcvt.u32.f32 q0, q0, #17 650; CHECK-NEXT: bx lr 651 %2 = fmul fast <4 x float> %0, <float 1.310720e+05, float 1.310720e+05, float 1.310720e+05, float 1.310720e+05> 652 %3 = fptoui <4 x float> %2 to <4 x i32> 653 ret <4 x i32> %3 654} 655 656define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_18(<4 x float> %0) { 657; CHECK-LABEL: vcvt_u32_18: 658; CHECK: @ %bb.0: 659; CHECK-NEXT: vcvt.u32.f32 q0, q0, #18 660; CHECK-NEXT: bx lr 661 %2 = fmul fast <4 x float> %0, <float 2.621440e+05, float 2.621440e+05, float 2.621440e+05, float 2.621440e+05> 662 %3 = fptoui <4 x float> %2 to <4 x i32> 663 ret <4 x i32> %3 664} 665 666define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_19(<4 x float> %0) { 667; CHECK-LABEL: vcvt_u32_19: 668; CHECK: @ %bb.0: 669; CHECK-NEXT: vcvt.u32.f32 q0, q0, #19 670; CHECK-NEXT: bx lr 671 %2 = fmul fast <4 x float> %0, <float 5.242880e+05, float 5.242880e+05, float 5.242880e+05, float 5.242880e+05> 672 %3 = fptoui <4 x float> %2 to <4 x i32> 673 ret <4 x i32> %3 674} 675 676define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_20(<4 x float> %0) { 677; CHECK-LABEL: vcvt_u32_20: 678; CHECK: @ %bb.0: 679; CHECK-NEXT: vcvt.u32.f32 q0, q0, #20 680; CHECK-NEXT: bx lr 681 %2 = fmul fast <4 x float> %0, <float 0x4130000000000000, float 0x4130000000000000, float 0x4130000000000000, float 0x4130000000000000> 682 %3 = fptoui <4 x float> %2 to <4 x i32> 683 ret <4 x i32> %3 684} 685 686define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_21(<4 x float> %0) { 687; CHECK-LABEL: vcvt_u32_21: 688; CHECK: @ %bb.0: 689; CHECK-NEXT: vcvt.u32.f32 q0, q0, #21 690; CHECK-NEXT: bx lr 691 %2 = fmul fast <4 x float> %0, <float 0x4140000000000000, float 0x4140000000000000, float 0x4140000000000000, float 0x4140000000000000> 692 %3 = fptoui <4 x float> %2 to <4 x i32> 693 ret <4 x i32> %3 694} 695 696define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_22(<4 x float> %0) { 697; CHECK-LABEL: vcvt_u32_22: 698; CHECK: @ %bb.0: 699; CHECK-NEXT: vcvt.u32.f32 q0, q0, #22 700; CHECK-NEXT: bx lr 701 %2 = fmul fast <4 x float> %0, <float 0x4150000000000000, float 0x4150000000000000, float 0x4150000000000000, float 0x4150000000000000> 702 %3 = fptoui <4 x float> %2 to <4 x i32> 703 ret <4 x i32> %3 704} 705 706define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_23(<4 x float> %0) { 707; CHECK-LABEL: vcvt_u32_23: 708; CHECK: @ %bb.0: 709; CHECK-NEXT: vcvt.u32.f32 q0, q0, #23 710; CHECK-NEXT: bx lr 711 %2 = fmul fast <4 x float> %0, <float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000> 712 %3 = fptoui <4 x float> %2 to <4 x i32> 713 ret <4 x i32> %3 714} 715 716define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_24(<4 x float> %0) { 717; CHECK-LABEL: vcvt_u32_24: 718; CHECK: @ %bb.0: 719; CHECK-NEXT: vcvt.u32.f32 q0, q0, #24 720; CHECK-NEXT: bx lr 721 %2 = fmul fast <4 x float> %0, <float 0x4170000000000000, float 0x4170000000000000, float 0x4170000000000000, float 0x4170000000000000> 722 %3 = fptoui <4 x float> %2 to <4 x i32> 723 ret <4 x i32> %3 724} 725 726define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_25(<4 x float> %0) { 727; CHECK-LABEL: vcvt_u32_25: 728; CHECK: @ %bb.0: 729; CHECK-NEXT: vcvt.u32.f32 q0, q0, #25 730; CHECK-NEXT: bx lr 731 %2 = fmul fast <4 x float> %0, <float 0x4180000000000000, float 0x4180000000000000, float 0x4180000000000000, float 0x4180000000000000> 732 %3 = fptoui <4 x float> %2 to <4 x i32> 733 ret <4 x i32> %3 734} 735 736define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_26(<4 x float> %0) { 737; CHECK-LABEL: vcvt_u32_26: 738; CHECK: @ %bb.0: 739; CHECK-NEXT: vcvt.u32.f32 q0, q0, #26 740; CHECK-NEXT: bx lr 741 %2 = fmul fast <4 x float> %0, <float 0x4190000000000000, float 0x4190000000000000, float 0x4190000000000000, float 0x4190000000000000> 742 %3 = fptoui <4 x float> %2 to <4 x i32> 743 ret <4 x i32> %3 744} 745 746define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_27(<4 x float> %0) { 747; CHECK-LABEL: vcvt_u32_27: 748; CHECK: @ %bb.0: 749; CHECK-NEXT: vcvt.u32.f32 q0, q0, #27 750; CHECK-NEXT: bx lr 751 %2 = fmul fast <4 x float> %0, <float 0x41A0000000000000, float 0x41A0000000000000, float 0x41A0000000000000, float 0x41A0000000000000> 752 %3 = fptoui <4 x float> %2 to <4 x i32> 753 ret <4 x i32> %3 754} 755 756define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_28(<4 x float> %0) { 757; CHECK-LABEL: vcvt_u32_28: 758; CHECK: @ %bb.0: 759; CHECK-NEXT: vcvt.u32.f32 q0, q0, #28 760; CHECK-NEXT: bx lr 761 %2 = fmul fast <4 x float> %0, <float 0x41B0000000000000, float 0x41B0000000000000, float 0x41B0000000000000, float 0x41B0000000000000> 762 %3 = fptoui <4 x float> %2 to <4 x i32> 763 ret <4 x i32> %3 764} 765 766define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_29(<4 x float> %0) { 767; CHECK-LABEL: vcvt_u32_29: 768; CHECK: @ %bb.0: 769; CHECK-NEXT: vcvt.u32.f32 q0, q0, #29 770; CHECK-NEXT: bx lr 771 %2 = fmul fast <4 x float> %0, <float 0x41C0000000000000, float 0x41C0000000000000, float 0x41C0000000000000, float 0x41C0000000000000> 772 %3 = fptoui <4 x float> %2 to <4 x i32> 773 ret <4 x i32> %3 774} 775 776define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_30(<4 x float> %0) { 777; CHECK-LABEL: vcvt_u32_30: 778; CHECK: @ %bb.0: 779; CHECK-NEXT: vcvt.u32.f32 q0, q0, #30 780; CHECK-NEXT: bx lr 781 %2 = fmul fast <4 x float> %0, <float 0x41D0000000000000, float 0x41D0000000000000, float 0x41D0000000000000, float 0x41D0000000000000> 782 %3 = fptoui <4 x float> %2 to <4 x i32> 783 ret <4 x i32> %3 784} 785 786define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_31(<4 x float> %0) { 787; CHECK-LABEL: vcvt_u32_31: 788; CHECK: @ %bb.0: 789; CHECK-NEXT: vcvt.u32.f32 q0, q0, #31 790; CHECK-NEXT: bx lr 791 %2 = fmul fast <4 x float> %0, <float 0x41E0000000000000, float 0x41E0000000000000, float 0x41E0000000000000, float 0x41E0000000000000> 792 %3 = fptoui <4 x float> %2 to <4 x i32> 793 ret <4 x i32> %3 794} 795 796define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_32(<4 x float> %0) { 797; CHECK-LABEL: vcvt_u32_32: 798; CHECK: @ %bb.0: 799; CHECK-NEXT: vcvt.u32.f32 q0, q0, #32 800; CHECK-NEXT: bx lr 801 %2 = fmul <4 x float> %0, <float 0x41F0000000000000, float 0x41F0000000000000, float 0x41F0000000000000, float 0x41F0000000000000> 802 %3 = fptoui <4 x float> %2 to <4 x i32> 803 ret <4 x i32> %3 804} 805 806define arm_aapcs_vfpcc <4 x i32> @vcvt_u32_33(<4 x float> %0) { 807; CHECK-LABEL: vcvt_u32_33: 808; CHECK: @ %bb.0: 809; CHECK-NEXT: vmov.i32 q1, #0x50000000 810; CHECK-NEXT: vmul.f32 q0, q0, q1 811; CHECK-NEXT: vcvt.u32.f32 q0, q0 812; CHECK-NEXT: bx lr 813 %2 = fmul <4 x float> %0, <float 0x4200000000000000, float 0x4200000000000000, float 0x4200000000000000, float 0x4200000000000000> 814 %3 = fptoui <4 x float> %2 to <4 x i32> 815 ret <4 x i32> %3 816} 817 818define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_1(<8 x half> %0) { 819; CHECK-LABEL: vcvt_u16_1: 820; CHECK: @ %bb.0: 821; CHECK-NEXT: vcvt.u16.f16 q0, q0, #1 822; CHECK-NEXT: bx lr 823 %2 = fmul fast <8 x half> %0, <half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000> 824 %3 = fptoui <8 x half> %2 to <8 x i16> 825 ret <8 x i16> %3 826} 827 828define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_2(<8 x half> %0) { 829; CHECK-LABEL: vcvt_u16_2: 830; CHECK: @ %bb.0: 831; CHECK-NEXT: vcvt.u16.f16 q0, q0, #2 832; CHECK-NEXT: bx lr 833 %2 = fmul fast <8 x half> %0, <half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400, half 0xH4400> 834 %3 = fptoui <8 x half> %2 to <8 x i16> 835 ret <8 x i16> %3 836} 837 838define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_3(<8 x half> %0) { 839; CHECK-LABEL: vcvt_u16_3: 840; CHECK: @ %bb.0: 841; CHECK-NEXT: vcvt.u16.f16 q0, q0, #3 842; CHECK-NEXT: bx lr 843 %2 = fmul fast <8 x half> %0, <half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800, half 0xH4800> 844 %3 = fptoui <8 x half> %2 to <8 x i16> 845 ret <8 x i16> %3 846} 847 848define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_4(<8 x half> %0) { 849; CHECK-LABEL: vcvt_u16_4: 850; CHECK: @ %bb.0: 851; CHECK-NEXT: vcvt.u16.f16 q0, q0, #4 852; CHECK-NEXT: bx lr 853 %2 = fmul fast <8 x half> %0, <half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00, half 0xH4C00> 854 %3 = fptoui <8 x half> %2 to <8 x i16> 855 ret <8 x i16> %3 856} 857 858define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_5(<8 x half> %0) { 859; CHECK-LABEL: vcvt_u16_5: 860; CHECK: @ %bb.0: 861; CHECK-NEXT: vcvt.u16.f16 q0, q0, #5 862; CHECK-NEXT: bx lr 863 %2 = fmul fast <8 x half> %0, <half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000, half 0xH5000> 864 %3 = fptoui <8 x half> %2 to <8 x i16> 865 ret <8 x i16> %3 866} 867 868define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_6(<8 x half> %0) { 869; CHECK-LABEL: vcvt_u16_6: 870; CHECK: @ %bb.0: 871; CHECK-NEXT: vcvt.u16.f16 q0, q0, #6 872; CHECK-NEXT: bx lr 873 %2 = fmul fast <8 x half> %0, <half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400> 874 %3 = fptoui <8 x half> %2 to <8 x i16> 875 ret <8 x i16> %3 876} 877 878define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_7(<8 x half> %0) { 879; CHECK-LABEL: vcvt_u16_7: 880; CHECK: @ %bb.0: 881; CHECK-NEXT: vcvt.u16.f16 q0, q0, #7 882; CHECK-NEXT: bx lr 883 %2 = fmul fast <8 x half> %0, <half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800> 884 %3 = fptoui <8 x half> %2 to <8 x i16> 885 ret <8 x i16> %3 886} 887 888define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_8(<8 x half> %0) { 889; CHECK-LABEL: vcvt_u16_8: 890; CHECK: @ %bb.0: 891; CHECK-NEXT: vcvt.u16.f16 q0, q0, #8 892; CHECK-NEXT: bx lr 893 %2 = fmul fast <8 x half> %0, <half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00, half 0xH5C00> 894 %3 = fptoui <8 x half> %2 to <8 x i16> 895 ret <8 x i16> %3 896} 897 898define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_9(<8 x half> %0) { 899; CHECK-LABEL: vcvt_u16_9: 900; CHECK: @ %bb.0: 901; CHECK-NEXT: vcvt.u16.f16 q0, q0, #9 902; CHECK-NEXT: bx lr 903 %2 = fmul fast <8 x half> %0, <half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000, half 0xH6000> 904 %3 = fptoui <8 x half> %2 to <8 x i16> 905 ret <8 x i16> %3 906} 907 908define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_10(<8 x half> %0) { 909; CHECK-LABEL: vcvt_u16_10: 910; CHECK: @ %bb.0: 911; CHECK-NEXT: vcvt.u16.f16 q0, q0, #10 912; CHECK-NEXT: bx lr 913 %2 = fmul fast <8 x half> %0, <half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400, half 0xH6400> 914 %3 = fptoui <8 x half> %2 to <8 x i16> 915 ret <8 x i16> %3 916} 917 918define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_11(<8 x half> %0) { 919; CHECK-LABEL: vcvt_u16_11: 920; CHECK: @ %bb.0: 921; CHECK-NEXT: vcvt.u16.f16 q0, q0, #11 922; CHECK-NEXT: bx lr 923 %2 = fmul fast <8 x half> %0, <half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800, half 0xH6800> 924 %3 = fptoui <8 x half> %2 to <8 x i16> 925 ret <8 x i16> %3 926} 927 928define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_12(<8 x half> %0) { 929; CHECK-LABEL: vcvt_u16_12: 930; CHECK: @ %bb.0: 931; CHECK-NEXT: vcvt.u16.f16 q0, q0, #12 932; CHECK-NEXT: bx lr 933 %2 = fmul fast <8 x half> %0, <half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00, half 0xH6C00> 934 %3 = fptoui <8 x half> %2 to <8 x i16> 935 ret <8 x i16> %3 936} 937 938define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_13(<8 x half> %0) { 939; CHECK-LABEL: vcvt_u16_13: 940; CHECK: @ %bb.0: 941; CHECK-NEXT: vcvt.u16.f16 q0, q0, #13 942; CHECK-NEXT: bx lr 943 %2 = fmul fast <8 x half> %0, <half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000, half 0xH7000> 944 %3 = fptoui <8 x half> %2 to <8 x i16> 945 ret <8 x i16> %3 946} 947 948define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_14(<8 x half> %0) { 949; CHECK-LABEL: vcvt_u16_14: 950; CHECK: @ %bb.0: 951; CHECK-NEXT: vcvt.u16.f16 q0, q0, #14 952; CHECK-NEXT: bx lr 953 %2 = fmul fast <8 x half> %0, <half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400, half 0xH7400> 954 %3 = fptoui <8 x half> %2 to <8 x i16> 955 ret <8 x i16> %3 956} 957 958define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_15(<8 x half> %0) { 959; CHECK-LABEL: vcvt_u16_15: 960; CHECK: @ %bb.0: 961; CHECK-NEXT: vcvt.u16.f16 q0, q0, #15 962; CHECK-NEXT: bx lr 963 %2 = fmul fast <8 x half> %0, <half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800> 964 %3 = fptoui <8 x half> %2 to <8 x i16> 965 ret <8 x i16> %3 966} 967 968define arm_aapcs_vfpcc <8 x i16> @vcvt_u16_inf(<8 x half> %0) { 969; CHECK-LABEL: vcvt_u16_inf: 970; CHECK: @ %bb.0: 971; CHECK-NEXT: vmov.i16 q1, #0x7800 972; CHECK-NEXT: vmul.f16 q0, q0, q1 973; CHECK-NEXT: vcvt.u16.f16 q0, q0 974; CHECK-NEXT: bx lr 975 %2 = fmul <8 x half> %0, <half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800> 976 %3 = fptoui <8 x half> %2 to <8 x i16> 977 ret <8 x i16> %3 978} 979 980define arm_aapcs_vfpcc <8 x i16> @vcvt_s16_inf(<8 x half> %0) { 981; CHECK-LABEL: vcvt_s16_inf: 982; CHECK: @ %bb.0: 983; CHECK-NEXT: vcvt.s16.f16 q0, q0, #15 984; CHECK-NEXT: bx lr 985 %2 = fmul <8 x half> %0, <half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800, half 0xH7800> 986 %3 = fptosi <8 x half> %2 to <8 x i16> 987 ret <8 x i16> %3 988} 989 990 991define arm_aapcs_vfpcc <4 x i32> @vcvt_bad_imm(<4 x float> %0) { 992; CHECK-LABEL: vcvt_bad_imm: 993; CHECK: @ %bb.0: 994; CHECK-NEXT: movw r0, #2048 995; CHECK-NEXT: movt r0, #15104 996; CHECK-NEXT: vmul.f32 q0, q0, r0 997; CHECK-NEXT: vcvt.s32.f32 q0, q0 998; CHECK-NEXT: bx lr 999 %2 = fmul <4 x float> %0, <float 0x3F60010000000000, float 0x3F60010000000000, float 0x3F60010000000000, float 0x3F60010000000000> 1000 %3 = fptosi <4 x float> %2 to <4 x i32> 1001 ret <4 x i32> %3 1002} 1003 1004define arm_aapcs_vfpcc <4 x i32> @vcvt_negative(<4 x float> %0) { 1005; CHECK-LABEL: vcvt_negative: 1006; CHECK: @ %bb.0: 1007; CHECK-NEXT: vmov.i32 q1, #0xb8000000 1008; CHECK-NEXT: vmul.f32 q0, q0, q1 1009; CHECK-NEXT: vcvt.s32.f32 q0, q0 1010; CHECK-NEXT: bx lr 1011 %2 = fmul <4 x float> %0, <float 0xBF00000000000000, float 0xBF00000000000000, float 0xBF00000000000000, float 0xBF00000000000000> 1012 %3 = fptosi <4 x float> %2 to <4 x i32> 1013 ret <4 x i32> %3 1014} 1015 1016define arm_aapcs_vfpcc <4 x i32> @vcvt_negative2(<4 x float> %0) { 1017; CHECK-LABEL: vcvt_negative2: 1018; CHECK: @ %bb.0: 1019; CHECK-NEXT: vmov.i32 q1, #0xb0000000 1020; CHECK-NEXT: vmul.f32 q0, q0, q1 1021; CHECK-NEXT: vcvt.s32.f32 q0, q0 1022; CHECK-NEXT: bx lr 1023 %2 = fmul <4 x float> %0, <float 0xBE00000000000000, float 0xBE00000000000000, float 0xBE00000000000000, float 0xBE00000000000000> 1024 %3 = fptosi <4 x float> %2 to <4 x i32> 1025 ret <4 x i32> %3 1026} 1027 1028 1029 1030define arm_aapcs_vfpcc <8 x i16> @vcvt_sat_s16_1(<8 x half> %0) { 1031; CHECK-LABEL: vcvt_sat_s16_1: 1032; CHECK: @ %bb.0: 1033; CHECK-NEXT: vcvt.s16.f16 q0, q0, #1 1034; CHECK-NEXT: bx lr 1035 %2 = fmul fast <8 x half> %0, <half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000> 1036 %3 = call <8 x i16> @llvm.fptosi.sat.v8i16.v8f16(<8 x half> %2) 1037 ret <8 x i16> %3 1038} 1039 1040define arm_aapcs_vfpcc <8 x i16> @vcvt_sat_u16_1(<8 x half> %0) { 1041; CHECK-LABEL: vcvt_sat_u16_1: 1042; CHECK: @ %bb.0: 1043; CHECK-NEXT: vcvt.u16.f16 q0, q0, #1 1044; CHECK-NEXT: bx lr 1045 %2 = fmul fast <8 x half> %0, <half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000, half 0xH4000> 1046 %3 = call <8 x i16> @llvm.fptoui.sat.v8i16.v8f16(<8 x half> %2) 1047 ret <8 x i16> %3 1048} 1049 1050define arm_aapcs_vfpcc <8 x i16> @vcvt_sat_s16_6(<8 x half> %0) { 1051; CHECK-LABEL: vcvt_sat_s16_6: 1052; CHECK: @ %bb.0: 1053; CHECK-NEXT: vcvt.s16.f16 q0, q0, #6 1054; CHECK-NEXT: bx lr 1055 %2 = fmul fast <8 x half> %0, <half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400, half 0xH5400> 1056 %3 = call <8 x i16> @llvm.fptosi.sat.v8i16.v8f16(<8 x half> %2) 1057 ret <8 x i16> %3 1058} 1059 1060define arm_aapcs_vfpcc <8 x i16> @vcvt_sat_u16_7(<8 x half> %0) { 1061; CHECK-LABEL: vcvt_sat_u16_7: 1062; CHECK: @ %bb.0: 1063; CHECK-NEXT: vcvt.u16.f16 q0, q0, #7 1064; CHECK-NEXT: bx lr 1065 %2 = fmul fast <8 x half> %0, <half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800, half 0xH5800> 1066 %3 = call <8 x i16> @llvm.fptoui.sat.v8i16.v8f16(<8 x half> %2) 1067 ret <8 x i16> %3 1068} 1069 1070 1071define arm_aapcs_vfpcc <4 x i32> @vcvt_sat_s32_1(<4 x float> %0) { 1072; CHECK-LABEL: vcvt_sat_s32_1: 1073; CHECK: @ %bb.0: 1074; CHECK-NEXT: vcvt.s32.f32 q0, q0, #1 1075; CHECK-NEXT: bx lr 1076 %2 = fmul fast <4 x float> %0, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00> 1077 %3 = call <4 x i32> @llvm.fptosi.sat.v4i32.v4f32(<4 x float> %2) 1078 ret <4 x i32> %3 1079} 1080 1081define arm_aapcs_vfpcc <4 x i32> @vcvt_sat_u32_1(<4 x float> %0) { 1082; CHECK-LABEL: vcvt_sat_u32_1: 1083; CHECK: @ %bb.0: 1084; CHECK-NEXT: vcvt.u32.f32 q0, q0, #1 1085; CHECK-NEXT: bx lr 1086 %2 = fmul fast <4 x float> %0, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00> 1087 %3 = call <4 x i32> @llvm.fptoui.sat.v4i32.v4f32(<4 x float> %2) 1088 ret <4 x i32> %3 1089} 1090 1091define arm_aapcs_vfpcc <4 x i32> @vcvt_sat_u32_11(<4 x float> %0) { 1092; CHECK-LABEL: vcvt_sat_u32_11: 1093; CHECK: @ %bb.0: 1094; CHECK-NEXT: vcvt.s32.f32 q0, q0, #11 1095; CHECK-NEXT: bx lr 1096 %2 = fmul fast <4 x float> %0, <float 2.048000e+03, float 2.048000e+03, float 2.048000e+03, float 2.048000e+03> 1097 %3 = call <4 x i32> @llvm.fptosi.sat.v4i32.v4f32(<4 x float> %2) 1098 ret <4 x i32> %3 1099} 1100 1101define arm_aapcs_vfpcc <4 x i32> @vcvt_sat_u32_7(<4 x float> %0) { 1102; CHECK-LABEL: vcvt_sat_u32_7: 1103; CHECK: @ %bb.0: 1104; CHECK-NEXT: vcvt.u32.f32 q0, q0, #23 1105; CHECK-NEXT: bx lr 1106 %2 = fmul fast <4 x float> %0, <float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000> 1107 %3 = call <4 x i32> @llvm.fptoui.sat.v4i32.v4f32(<4 x float> %2) 1108 ret <4 x i32> %3 1109} 1110 1111define arm_aapcs_vfpcc <4 x i32> @vcvt_sat_u32_7_24(<4 x float> %0) { 1112; CHECK-LABEL: vcvt_sat_u32_7_24: 1113; CHECK: @ %bb.0: 1114; CHECK-NEXT: vmov.i32 q1, #0xffffff 1115; CHECK-NEXT: vcvt.u32.f32 q0, q0, #23 1116; CHECK-NEXT: vmin.u32 q0, q0, q1 1117; CHECK-NEXT: bx lr 1118 %2 = fmul fast <4 x float> %0, <float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000, float 0x4160000000000000> 1119 %3 = call <4 x i24> @llvm.fptoui.sat.v4i24.v4f32(<4 x float> %2) 1120 %4 = zext <4 x i24> %3 to <4 x i32> 1121 ret <4 x i32> %4 1122} 1123 1124declare <4 x i32> @llvm.fptosi.sat.v4i32.v4f32(<4 x float>) 1125declare <4 x i32> @llvm.fptoui.sat.v4i32.v4f32(<4 x float>) 1126declare <4 x i24> @llvm.fptoui.sat.v4i24.v4f32(<4 x float>) 1127declare <8 x i16> @llvm.fptosi.sat.v8i16.v8f16(<8 x half>) 1128declare <8 x i16> @llvm.fptoui.sat.v8i16.v8f16(<8 x half>) 1129