brintos

brintos / llvm-project-archived public Read only

0
0
Text · 161.2 KiB · ecca116 Raw
4208 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64 | FileCheck %s --check-prefixes=CHECK,CHECK-SD,CHECK-CVT,CHECK-SD-CVT3; RUN: llc < %s -mtriple=aarch64 -mattr=+fullfp16 | FileCheck %s --check-prefixes=CHECK,CHECK-SD,CHECK-FP16,CHECK-SD-FP164; RUN: llc < %s -mtriple=aarch64 -global-isel -global-isel-abort=2 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI,CHECK-CVT,CHECK-GI-CVT5; RUN: llc < %s -mtriple=aarch64 -mattr=+fullfp16 -global-isel -global-isel-abort=2 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI,CHECK-FP16,CHECK-GI-FP166 7; CHECK-GI:       warning: Instruction selection used fallback path for test_unsigned_v4f32_v4i508; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_unsigned_v4f16_v4i509; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_unsigned_v8f16_v8i1910; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_unsigned_v8f16_v8i5011; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_unsigned_v8f16_v8i10012 13;14; Float to unsigned 32-bit -- Vector size variation15;16 17declare <1 x i32> @llvm.fptoui.sat.v1f32.v1i32 (<1 x float>)18declare <2 x i32> @llvm.fptoui.sat.v2f32.v2i32 (<2 x float>)19declare <3 x i32> @llvm.fptoui.sat.v3f32.v3i32 (<3 x float>)20declare <4 x i32> @llvm.fptoui.sat.v4f32.v4i32 (<4 x float>)21declare <5 x i32> @llvm.fptoui.sat.v5f32.v5i32 (<5 x float>)22declare <6 x i32> @llvm.fptoui.sat.v6f32.v6i32 (<6 x float>)23declare <7 x i32> @llvm.fptoui.sat.v7f32.v7i32 (<7 x float>)24declare <8 x i32> @llvm.fptoui.sat.v8f32.v8i32 (<8 x float>)25 26define <1 x i32> @test_unsigned_v1f32_v1i32(<1 x float> %f) {27; CHECK-SD-LABEL: test_unsigned_v1f32_v1i32:28; CHECK-SD:       // %bb.0:29; CHECK-SD-NEXT:    fcvtzu v0.2s, v0.2s30; CHECK-SD-NEXT:    ret31;32; CHECK-GI-LABEL: test_unsigned_v1f32_v1i32:33; CHECK-GI:       // %bb.0:34; CHECK-GI-NEXT:    fcvtzu s0, s035; CHECK-GI-NEXT:    ret36    %x = call <1 x i32> @llvm.fptoui.sat.v1f32.v1i32(<1 x float> %f)37    ret <1 x i32> %x38}39 40define <2 x i32> @test_unsigned_v2f32_v2i32(<2 x float> %f) {41; CHECK-LABEL: test_unsigned_v2f32_v2i32:42; CHECK:       // %bb.0:43; CHECK-NEXT:    fcvtzu v0.2s, v0.2s44; CHECK-NEXT:    ret45    %x = call <2 x i32> @llvm.fptoui.sat.v2f32.v2i32(<2 x float> %f)46    ret <2 x i32> %x47}48 49define <3 x i32> @test_unsigned_v3f32_v3i32(<3 x float> %f) {50; CHECK-LABEL: test_unsigned_v3f32_v3i32:51; CHECK:       // %bb.0:52; CHECK-NEXT:    fcvtzu v0.4s, v0.4s53; CHECK-NEXT:    ret54    %x = call <3 x i32> @llvm.fptoui.sat.v3f32.v3i32(<3 x float> %f)55    ret <3 x i32> %x56}57 58define <4 x i32> @test_unsigned_v4f32_v4i32(<4 x float> %f) {59; CHECK-LABEL: test_unsigned_v4f32_v4i32:60; CHECK:       // %bb.0:61; CHECK-NEXT:    fcvtzu v0.4s, v0.4s62; CHECK-NEXT:    ret63    %x = call <4 x i32> @llvm.fptoui.sat.v4f32.v4i32(<4 x float> %f)64    ret <4 x i32> %x65}66 67define <5 x i32> @test_unsigned_v5f32_v5i32(<5 x float> %f) {68; CHECK-SD-LABEL: test_unsigned_v5f32_v5i32:69; CHECK-SD:       // %bb.0:70; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q071; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 def $q172; CHECK-SD-NEXT:    // kill: def $s2 killed $s2 def $q273; CHECK-SD-NEXT:    // kill: def $s3 killed $s3 def $q374; CHECK-SD-NEXT:    // kill: def $s4 killed $s4 def $q475; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]76; CHECK-SD-NEXT:    fcvtzu v4.4s, v4.4s77; CHECK-SD-NEXT:    mov v0.s[2], v2.s[0]78; CHECK-SD-NEXT:    fmov w4, s479; CHECK-SD-NEXT:    mov v0.s[3], v3.s[0]80; CHECK-SD-NEXT:    fcvtzu v0.4s, v0.4s81; CHECK-SD-NEXT:    mov w1, v0.s[1]82; CHECK-SD-NEXT:    mov w2, v0.s[2]83; CHECK-SD-NEXT:    mov w3, v0.s[3]84; CHECK-SD-NEXT:    fmov w0, s085; CHECK-SD-NEXT:    ret86;87; CHECK-GI-LABEL: test_unsigned_v5f32_v5i32:88; CHECK-GI:       // %bb.0:89; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q090; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 def $q191; CHECK-GI-NEXT:    // kill: def $s2 killed $s2 def $q292; CHECK-GI-NEXT:    // kill: def $s3 killed $s3 def $q393; CHECK-GI-NEXT:    // kill: def $s4 killed $s4 def $q494; CHECK-GI-NEXT:    mov v0.s[1], v1.s[0]95; CHECK-GI-NEXT:    fcvtzu v1.4s, v4.4s96; CHECK-GI-NEXT:    mov v0.s[2], v2.s[0]97; CHECK-GI-NEXT:    fmov w4, s198; CHECK-GI-NEXT:    mov v0.s[3], v3.s[0]99; CHECK-GI-NEXT:    fcvtzu v0.4s, v0.4s100; CHECK-GI-NEXT:    mov s2, v0.s[1]101; CHECK-GI-NEXT:    mov s3, v0.s[2]102; CHECK-GI-NEXT:    mov s4, v0.s[3]103; CHECK-GI-NEXT:    fmov w0, s0104; CHECK-GI-NEXT:    fmov w1, s2105; CHECK-GI-NEXT:    fmov w2, s3106; CHECK-GI-NEXT:    fmov w3, s4107; CHECK-GI-NEXT:    ret108    %x = call <5 x i32> @llvm.fptoui.sat.v5f32.v5i32(<5 x float> %f)109    ret <5 x i32> %x110}111 112define <6 x i32> @test_unsigned_v6f32_v6i32(<6 x float> %f) {113; CHECK-SD-LABEL: test_unsigned_v6f32_v6i32:114; CHECK-SD:       // %bb.0:115; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0116; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 def $q1117; CHECK-SD-NEXT:    // kill: def $s2 killed $s2 def $q2118; CHECK-SD-NEXT:    // kill: def $s4 killed $s4 def $q4119; CHECK-SD-NEXT:    // kill: def $s5 killed $s5 def $q5120; CHECK-SD-NEXT:    // kill: def $s3 killed $s3 def $q3121; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]122; CHECK-SD-NEXT:    mov v4.s[1], v5.s[0]123; CHECK-SD-NEXT:    mov v0.s[2], v2.s[0]124; CHECK-SD-NEXT:    fcvtzu v1.4s, v4.4s125; CHECK-SD-NEXT:    mov v0.s[3], v3.s[0]126; CHECK-SD-NEXT:    mov w5, v1.s[1]127; CHECK-SD-NEXT:    fmov w4, s1128; CHECK-SD-NEXT:    fcvtzu v0.4s, v0.4s129; CHECK-SD-NEXT:    mov w1, v0.s[1]130; CHECK-SD-NEXT:    mov w2, v0.s[2]131; CHECK-SD-NEXT:    mov w3, v0.s[3]132; CHECK-SD-NEXT:    fmov w0, s0133; CHECK-SD-NEXT:    ret134;135; CHECK-GI-LABEL: test_unsigned_v6f32_v6i32:136; CHECK-GI:       // %bb.0:137; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0138; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 def $q1139; CHECK-GI-NEXT:    // kill: def $s2 killed $s2 def $q2140; CHECK-GI-NEXT:    // kill: def $s4 killed $s4 def $q4141; CHECK-GI-NEXT:    // kill: def $s3 killed $s3 def $q3142; CHECK-GI-NEXT:    // kill: def $s5 killed $s5 def $q5143; CHECK-GI-NEXT:    mov v0.s[1], v1.s[0]144; CHECK-GI-NEXT:    mov v4.s[1], v5.s[0]145; CHECK-GI-NEXT:    mov v0.s[2], v2.s[0]146; CHECK-GI-NEXT:    fcvtzu v1.4s, v4.4s147; CHECK-GI-NEXT:    mov v0.s[3], v3.s[0]148; CHECK-GI-NEXT:    mov s4, v1.s[1]149; CHECK-GI-NEXT:    fmov w4, s1150; CHECK-GI-NEXT:    fcvtzu v0.4s, v0.4s151; CHECK-GI-NEXT:    fmov w5, s4152; CHECK-GI-NEXT:    mov s2, v0.s[1]153; CHECK-GI-NEXT:    mov s3, v0.s[2]154; CHECK-GI-NEXT:    mov s5, v0.s[3]155; CHECK-GI-NEXT:    fmov w0, s0156; CHECK-GI-NEXT:    fmov w1, s2157; CHECK-GI-NEXT:    fmov w2, s3158; CHECK-GI-NEXT:    fmov w3, s5159; CHECK-GI-NEXT:    ret160    %x = call <6 x i32> @llvm.fptoui.sat.v6f32.v6i32(<6 x float> %f)161    ret <6 x i32> %x162}163 164define <7 x i32> @test_unsigned_v7f32_v7i32(<7 x float> %f) {165; CHECK-SD-LABEL: test_unsigned_v7f32_v7i32:166; CHECK-SD:       // %bb.0:167; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0168; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 def $q1169; CHECK-SD-NEXT:    // kill: def $s4 killed $s4 def $q4170; CHECK-SD-NEXT:    // kill: def $s5 killed $s5 def $q5171; CHECK-SD-NEXT:    // kill: def $s2 killed $s2 def $q2172; CHECK-SD-NEXT:    // kill: def $s6 killed $s6 def $q6173; CHECK-SD-NEXT:    // kill: def $s3 killed $s3 def $q3174; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]175; CHECK-SD-NEXT:    mov v4.s[1], v5.s[0]176; CHECK-SD-NEXT:    mov v0.s[2], v2.s[0]177; CHECK-SD-NEXT:    mov v4.s[2], v6.s[0]178; CHECK-SD-NEXT:    mov v0.s[3], v3.s[0]179; CHECK-SD-NEXT:    fcvtzu v1.4s, v4.4s180; CHECK-SD-NEXT:    fcvtzu v0.4s, v0.4s181; CHECK-SD-NEXT:    mov w5, v1.s[1]182; CHECK-SD-NEXT:    mov w6, v1.s[2]183; CHECK-SD-NEXT:    fmov w4, s1184; CHECK-SD-NEXT:    mov w1, v0.s[1]185; CHECK-SD-NEXT:    mov w2, v0.s[2]186; CHECK-SD-NEXT:    mov w3, v0.s[3]187; CHECK-SD-NEXT:    fmov w0, s0188; CHECK-SD-NEXT:    ret189;190; CHECK-GI-LABEL: test_unsigned_v7f32_v7i32:191; CHECK-GI:       // %bb.0:192; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0193; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 def $q1194; CHECK-GI-NEXT:    // kill: def $s4 killed $s4 def $q4195; CHECK-GI-NEXT:    // kill: def $s2 killed $s2 def $q2196; CHECK-GI-NEXT:    // kill: def $s5 killed $s5 def $q5197; CHECK-GI-NEXT:    // kill: def $s3 killed $s3 def $q3198; CHECK-GI-NEXT:    // kill: def $s6 killed $s6 def $q6199; CHECK-GI-NEXT:    mov v0.s[1], v1.s[0]200; CHECK-GI-NEXT:    mov v4.s[1], v5.s[0]201; CHECK-GI-NEXT:    mov v0.s[2], v2.s[0]202; CHECK-GI-NEXT:    mov v4.s[2], v6.s[0]203; CHECK-GI-NEXT:    mov v0.s[3], v3.s[0]204; CHECK-GI-NEXT:    fcvtzu v1.4s, v4.4s205; CHECK-GI-NEXT:    fcvtzu v0.4s, v0.4s206; CHECK-GI-NEXT:    mov s5, v1.s[1]207; CHECK-GI-NEXT:    mov s6, v1.s[2]208; CHECK-GI-NEXT:    fmov w4, s1209; CHECK-GI-NEXT:    mov s2, v0.s[1]210; CHECK-GI-NEXT:    mov s3, v0.s[2]211; CHECK-GI-NEXT:    mov s4, v0.s[3]212; CHECK-GI-NEXT:    fmov w0, s0213; CHECK-GI-NEXT:    fmov w5, s5214; CHECK-GI-NEXT:    fmov w6, s6215; CHECK-GI-NEXT:    fmov w1, s2216; CHECK-GI-NEXT:    fmov w2, s3217; CHECK-GI-NEXT:    fmov w3, s4218; CHECK-GI-NEXT:    ret219    %x = call <7 x i32> @llvm.fptoui.sat.v7f32.v7i32(<7 x float> %f)220    ret <7 x i32> %x221}222 223define <8 x i32> @test_unsigned_v8f32_v8i32(<8 x float> %f) {224; CHECK-LABEL: test_unsigned_v8f32_v8i32:225; CHECK:       // %bb.0:226; CHECK-NEXT:    fcvtzu v0.4s, v0.4s227; CHECK-NEXT:    fcvtzu v1.4s, v1.4s228; CHECK-NEXT:    ret229    %x = call <8 x i32> @llvm.fptoui.sat.v8f32.v8i32(<8 x float> %f)230    ret <8 x i32> %x231}232 233;234; Double to unsigned 32-bit -- Vector size variation235;236 237declare <1 x i32> @llvm.fptoui.sat.v1f64.v1i32 (<1 x double>)238declare <2 x i32> @llvm.fptoui.sat.v2f64.v2i32 (<2 x double>)239declare <3 x i32> @llvm.fptoui.sat.v3f64.v3i32 (<3 x double>)240declare <4 x i32> @llvm.fptoui.sat.v4f64.v4i32 (<4 x double>)241declare <5 x i32> @llvm.fptoui.sat.v5f64.v5i32 (<5 x double>)242declare <6 x i32> @llvm.fptoui.sat.v6f64.v6i32 (<6 x double>)243 244define <1 x i32> @test_unsigned_v1f64_v1i32(<1 x double> %f) {245; CHECK-LABEL: test_unsigned_v1f64_v1i32:246; CHECK:       // %bb.0:247; CHECK-NEXT:    fcvtzu w8, d0248; CHECK-NEXT:    fmov s0, w8249; CHECK-NEXT:    ret250    %x = call <1 x i32> @llvm.fptoui.sat.v1f64.v1i32(<1 x double> %f)251    ret <1 x i32> %x252}253 254define <2 x i32> @test_unsigned_v2f64_v2i32(<2 x double> %f) {255; CHECK-SD-LABEL: test_unsigned_v2f64_v2i32:256; CHECK-SD:       // %bb.0:257; CHECK-SD-NEXT:    mov d1, v0.d[1]258; CHECK-SD-NEXT:    fcvtzu w8, d0259; CHECK-SD-NEXT:    fcvtzu w9, d1260; CHECK-SD-NEXT:    fmov s0, w8261; CHECK-SD-NEXT:    mov v0.s[1], w9262; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0263; CHECK-SD-NEXT:    ret264;265; CHECK-GI-LABEL: test_unsigned_v2f64_v2i32:266; CHECK-GI:       // %bb.0:267; CHECK-GI-NEXT:    movi v1.2d, #0x000000ffffffff268; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d269; CHECK-GI-NEXT:    cmhi v2.2d, v1.2d, v0.2d270; CHECK-GI-NEXT:    bif v0.16b, v1.16b, v2.16b271; CHECK-GI-NEXT:    xtn v0.2s, v0.2d272; CHECK-GI-NEXT:    ret273    %x = call <2 x i32> @llvm.fptoui.sat.v2f64.v2i32(<2 x double> %f)274    ret <2 x i32> %x275}276 277define <3 x i32> @test_unsigned_v3f64_v3i32(<3 x double> %f) {278; CHECK-SD-LABEL: test_unsigned_v3f64_v3i32:279; CHECK-SD:       // %bb.0:280; CHECK-SD-NEXT:    fcvtzu w8, d0281; CHECK-SD-NEXT:    fcvtzu w9, d1282; CHECK-SD-NEXT:    fmov s0, w8283; CHECK-SD-NEXT:    fcvtzu w8, d2284; CHECK-SD-NEXT:    mov v0.s[1], w9285; CHECK-SD-NEXT:    mov v0.s[2], w8286; CHECK-SD-NEXT:    fcvtzu w8, d0287; CHECK-SD-NEXT:    mov v0.s[3], w8288; CHECK-SD-NEXT:    ret289;290; CHECK-GI-LABEL: test_unsigned_v3f64_v3i32:291; CHECK-GI:       // %bb.0:292; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0293; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 def $q1294; CHECK-GI-NEXT:    // kill: def $d2 killed $d2 def $q2295; CHECK-GI-NEXT:    mov v0.d[1], v1.d[0]296; CHECK-GI-NEXT:    fcvtzu v1.2d, v2.2d297; CHECK-GI-NEXT:    movi v2.2d, #0x000000ffffffff298; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d299; CHECK-GI-NEXT:    cmhi v4.2d, v2.2d, v1.2d300; CHECK-GI-NEXT:    bif v1.16b, v2.16b, v4.16b301; CHECK-GI-NEXT:    cmhi v3.2d, v2.2d, v0.2d302; CHECK-GI-NEXT:    bif v0.16b, v2.16b, v3.16b303; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s304; CHECK-GI-NEXT:    ret305    %x = call <3 x i32> @llvm.fptoui.sat.v3f64.v3i32(<3 x double> %f)306    ret <3 x i32> %x307}308 309define <4 x i32> @test_unsigned_v4f64_v4i32(<4 x double> %f) {310; CHECK-SD-LABEL: test_unsigned_v4f64_v4i32:311; CHECK-SD:       // %bb.0:312; CHECK-SD-NEXT:    mov d2, v0.d[1]313; CHECK-SD-NEXT:    fcvtzu w8, d0314; CHECK-SD-NEXT:    fcvtzu w9, d2315; CHECK-SD-NEXT:    fmov s0, w8316; CHECK-SD-NEXT:    fcvtzu w8, d1317; CHECK-SD-NEXT:    mov d1, v1.d[1]318; CHECK-SD-NEXT:    mov v0.s[1], w9319; CHECK-SD-NEXT:    mov v0.s[2], w8320; CHECK-SD-NEXT:    fcvtzu w8, d1321; CHECK-SD-NEXT:    mov v0.s[3], w8322; CHECK-SD-NEXT:    ret323;324; CHECK-GI-LABEL: test_unsigned_v4f64_v4i32:325; CHECK-GI:       // %bb.0:326; CHECK-GI-NEXT:    movi v2.2d, #0x000000ffffffff327; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d328; CHECK-GI-NEXT:    fcvtzu v1.2d, v1.2d329; CHECK-GI-NEXT:    cmhi v3.2d, v2.2d, v0.2d330; CHECK-GI-NEXT:    cmhi v4.2d, v2.2d, v1.2d331; CHECK-GI-NEXT:    bif v0.16b, v2.16b, v3.16b332; CHECK-GI-NEXT:    bif v1.16b, v2.16b, v4.16b333; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s334; CHECK-GI-NEXT:    ret335    %x = call <4 x i32> @llvm.fptoui.sat.v4f64.v4i32(<4 x double> %f)336    ret <4 x i32> %x337}338 339define <5 x i32> @test_unsigned_v5f64_v5i32(<5 x double> %f) {340; CHECK-SD-LABEL: test_unsigned_v5f64_v5i32:341; CHECK-SD:       // %bb.0:342; CHECK-SD-NEXT:    fcvtzu w0, d0343; CHECK-SD-NEXT:    fcvtzu w1, d1344; CHECK-SD-NEXT:    fcvtzu w2, d2345; CHECK-SD-NEXT:    fcvtzu w3, d3346; CHECK-SD-NEXT:    fcvtzu w4, d4347; CHECK-SD-NEXT:    ret348;349; CHECK-GI-LABEL: test_unsigned_v5f64_v5i32:350; CHECK-GI:       // %bb.0:351; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0352; CHECK-GI-NEXT:    // kill: def $d2 killed $d2 def $q2353; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 def $q1354; CHECK-GI-NEXT:    // kill: def $d3 killed $d3 def $q3355; CHECK-GI-NEXT:    // kill: def $d4 killed $d4 def $q4356; CHECK-GI-NEXT:    mov v0.d[1], v1.d[0]357; CHECK-GI-NEXT:    mov v2.d[1], v3.d[0]358; CHECK-GI-NEXT:    movi v1.2d, #0x000000ffffffff359; CHECK-GI-NEXT:    fcvtzu v3.2d, v4.2d360; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d361; CHECK-GI-NEXT:    fcvtzu v2.2d, v2.2d362; CHECK-GI-NEXT:    cmhi v6.2d, v1.2d, v3.2d363; CHECK-GI-NEXT:    cmhi v4.2d, v1.2d, v0.2d364; CHECK-GI-NEXT:    cmhi v5.2d, v1.2d, v2.2d365; CHECK-GI-NEXT:    bif v0.16b, v1.16b, v4.16b366; CHECK-GI-NEXT:    bif v2.16b, v1.16b, v5.16b367; CHECK-GI-NEXT:    bit v1.16b, v3.16b, v6.16b368; CHECK-GI-NEXT:    mov d3, v0.d[1]369; CHECK-GI-NEXT:    mov d4, v2.d[1]370; CHECK-GI-NEXT:    fmov x4, d1371; CHECK-GI-NEXT:    fmov x0, d0372; CHECK-GI-NEXT:    fmov x2, d2373; CHECK-GI-NEXT:    // kill: def $w4 killed $w4 killed $x4374; CHECK-GI-NEXT:    // kill: def $w0 killed $w0 killed $x0375; CHECK-GI-NEXT:    // kill: def $w2 killed $w2 killed $x2376; CHECK-GI-NEXT:    fmov x1, d3377; CHECK-GI-NEXT:    fmov x3, d4378; CHECK-GI-NEXT:    // kill: def $w1 killed $w1 killed $x1379; CHECK-GI-NEXT:    // kill: def $w3 killed $w3 killed $x3380; CHECK-GI-NEXT:    ret381    %x = call <5 x i32> @llvm.fptoui.sat.v5f64.v5i32(<5 x double> %f)382    ret <5 x i32> %x383}384 385define <6 x i32> @test_unsigned_v6f64_v6i32(<6 x double> %f) {386; CHECK-SD-LABEL: test_unsigned_v6f64_v6i32:387; CHECK-SD:       // %bb.0:388; CHECK-SD-NEXT:    fcvtzu w0, d0389; CHECK-SD-NEXT:    fcvtzu w1, d1390; CHECK-SD-NEXT:    fcvtzu w2, d2391; CHECK-SD-NEXT:    fcvtzu w3, d3392; CHECK-SD-NEXT:    fcvtzu w4, d4393; CHECK-SD-NEXT:    fcvtzu w5, d5394; CHECK-SD-NEXT:    ret395;396; CHECK-GI-LABEL: test_unsigned_v6f64_v6i32:397; CHECK-GI:       // %bb.0:398; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0399; CHECK-GI-NEXT:    // kill: def $d2 killed $d2 def $q2400; CHECK-GI-NEXT:    // kill: def $d4 killed $d4 def $q4401; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 def $q1402; CHECK-GI-NEXT:    // kill: def $d3 killed $d3 def $q3403; CHECK-GI-NEXT:    // kill: def $d5 killed $d5 def $q5404; CHECK-GI-NEXT:    mov v0.d[1], v1.d[0]405; CHECK-GI-NEXT:    mov v2.d[1], v3.d[0]406; CHECK-GI-NEXT:    mov v4.d[1], v5.d[0]407; CHECK-GI-NEXT:    movi v1.2d, #0x000000ffffffff408; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d409; CHECK-GI-NEXT:    fcvtzu v2.2d, v2.2d410; CHECK-GI-NEXT:    fcvtzu v3.2d, v4.2d411; CHECK-GI-NEXT:    cmhi v4.2d, v1.2d, v0.2d412; CHECK-GI-NEXT:    cmhi v5.2d, v1.2d, v2.2d413; CHECK-GI-NEXT:    cmhi v6.2d, v1.2d, v3.2d414; CHECK-GI-NEXT:    bif v0.16b, v1.16b, v4.16b415; CHECK-GI-NEXT:    bif v2.16b, v1.16b, v5.16b416; CHECK-GI-NEXT:    bit v1.16b, v3.16b, v6.16b417; CHECK-GI-NEXT:    mov d3, v0.d[1]418; CHECK-GI-NEXT:    mov d4, v2.d[1]419; CHECK-GI-NEXT:    mov d5, v1.d[1]420; CHECK-GI-NEXT:    fmov x0, d0421; CHECK-GI-NEXT:    fmov x2, d2422; CHECK-GI-NEXT:    fmov x4, d1423; CHECK-GI-NEXT:    // kill: def $w0 killed $w0 killed $x0424; CHECK-GI-NEXT:    // kill: def $w2 killed $w2 killed $x2425; CHECK-GI-NEXT:    // kill: def $w4 killed $w4 killed $x4426; CHECK-GI-NEXT:    fmov x1, d3427; CHECK-GI-NEXT:    fmov x3, d4428; CHECK-GI-NEXT:    fmov x5, d5429; CHECK-GI-NEXT:    // kill: def $w1 killed $w1 killed $x1430; CHECK-GI-NEXT:    // kill: def $w3 killed $w3 killed $x3431; CHECK-GI-NEXT:    // kill: def $w5 killed $w5 killed $x5432; CHECK-GI-NEXT:    ret433    %x = call <6 x i32> @llvm.fptoui.sat.v6f64.v6i32(<6 x double> %f)434    ret <6 x i32> %x435}436 437;438; FP128 to unsigned 32-bit -- Vector size variation439;440 441declare <1 x i32> @llvm.fptoui.sat.v1f128.v1i32 (<1 x fp128>)442declare <2 x i32> @llvm.fptoui.sat.v2f128.v2i32 (<2 x fp128>)443declare <3 x i32> @llvm.fptoui.sat.v3f128.v3i32 (<3 x fp128>)444declare <4 x i32> @llvm.fptoui.sat.v4f128.v4i32 (<4 x fp128>)445 446define <1 x i32> @test_unsigned_v1f128_v1i32(<1 x fp128> %f) {447; CHECK-SD-LABEL: test_unsigned_v1f128_v1i32:448; CHECK-SD:       // %bb.0:449; CHECK-SD-NEXT:    sub sp, sp, #32450; CHECK-SD-NEXT:    stp x30, x19, [sp, #16] // 16-byte Folded Spill451; CHECK-SD-NEXT:    .cfi_def_cfa_offset 32452; CHECK-SD-NEXT:    .cfi_offset w19, -8453; CHECK-SD-NEXT:    .cfi_offset w30, -16454; CHECK-SD-NEXT:    adrp x8, .LCPI14_0455; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill456; CHECK-SD-NEXT:    ldr q1, [x8, :lo12:.LCPI14_0]457; CHECK-SD-NEXT:    bl __getf2458; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload459; CHECK-SD-NEXT:    mov w19, w0460; CHECK-SD-NEXT:    bl __fixunstfsi461; CHECK-SD-NEXT:    adrp x8, .LCPI14_1462; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload463; CHECK-SD-NEXT:    cmp w19, #0464; CHECK-SD-NEXT:    ldr q1, [x8, :lo12:.LCPI14_1]465; CHECK-SD-NEXT:    csel w19, wzr, w0, mi466; CHECK-SD-NEXT:    bl __gttf2467; CHECK-SD-NEXT:    cmp w0, #0468; CHECK-SD-NEXT:    csinv w8, w19, wzr, le469; CHECK-SD-NEXT:    ldp x30, x19, [sp, #16] // 16-byte Folded Reload470; CHECK-SD-NEXT:    fmov s0, w8471; CHECK-SD-NEXT:    add sp, sp, #32472; CHECK-SD-NEXT:    ret473;474; CHECK-GI-LABEL: test_unsigned_v1f128_v1i32:475; CHECK-GI:       // %bb.0:476; CHECK-GI-NEXT:    sub sp, sp, #48477; CHECK-GI-NEXT:    str x30, [sp, #16] // 8-byte Spill478; CHECK-GI-NEXT:    stp x20, x19, [sp, #32] // 16-byte Folded Spill479; CHECK-GI-NEXT:    .cfi_def_cfa_offset 48480; CHECK-GI-NEXT:    .cfi_offset w19, -8481; CHECK-GI-NEXT:    .cfi_offset w20, -16482; CHECK-GI-NEXT:    .cfi_offset w30, -32483; CHECK-GI-NEXT:    adrp x8, .LCPI14_1484; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill485; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI14_1]486; CHECK-GI-NEXT:    bl __gttf2487; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload488; CHECK-GI-NEXT:    cmp w0, #0489; CHECK-GI-NEXT:    fmov x8, d0490; CHECK-GI-NEXT:    csel x19, x8, xzr, gt491; CHECK-GI-NEXT:    mov x8, v0.d[1]492; CHECK-GI-NEXT:    mov v0.d[0], x19493; CHECK-GI-NEXT:    csel x20, x8, xzr, gt494; CHECK-GI-NEXT:    adrp x8, .LCPI14_0495; CHECK-GI-NEXT:    mov v0.d[1], x20496; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI14_0]497; CHECK-GI-NEXT:    bl __lttf2498; CHECK-GI-NEXT:    cmp w0, #0499; CHECK-GI-NEXT:    csel x8, x19, xzr, mi500; CHECK-GI-NEXT:    mov v0.d[0], x8501; CHECK-GI-NEXT:    mov x8, #281474976579584 // =0xfffffffe0000502; CHECK-GI-NEXT:    movk x8, #16414, lsl #48503; CHECK-GI-NEXT:    csel x8, x20, x8, mi504; CHECK-GI-NEXT:    mov v0.d[1], x8505; CHECK-GI-NEXT:    bl __fixunstfsi506; CHECK-GI-NEXT:    ldp x20, x19, [sp, #32] // 16-byte Folded Reload507; CHECK-GI-NEXT:    fmov s0, w0508; CHECK-GI-NEXT:    ldr x30, [sp, #16] // 8-byte Reload509; CHECK-GI-NEXT:    add sp, sp, #48510; CHECK-GI-NEXT:    ret511    %x = call <1 x i32> @llvm.fptoui.sat.v1f128.v1i32(<1 x fp128> %f)512    ret <1 x i32> %x513}514 515define <2 x i32> @test_unsigned_v2f128_v2i32(<2 x fp128> %f) {516; CHECK-SD-LABEL: test_unsigned_v2f128_v2i32:517; CHECK-SD:       // %bb.0:518; CHECK-SD-NEXT:    sub sp, sp, #96519; CHECK-SD-NEXT:    str x30, [sp, #64] // 8-byte Spill520; CHECK-SD-NEXT:    stp x20, x19, [sp, #80] // 16-byte Folded Spill521; CHECK-SD-NEXT:    .cfi_def_cfa_offset 96522; CHECK-SD-NEXT:    .cfi_offset w19, -8523; CHECK-SD-NEXT:    .cfi_offset w20, -16524; CHECK-SD-NEXT:    .cfi_offset w30, -32525; CHECK-SD-NEXT:    mov v2.16b, v1.16b526; CHECK-SD-NEXT:    stp q1, q0, [sp, #32] // 32-byte Folded Spill527; CHECK-SD-NEXT:    adrp x8, .LCPI15_0528; CHECK-SD-NEXT:    ldr q1, [x8, :lo12:.LCPI15_0]529; CHECK-SD-NEXT:    mov v0.16b, v2.16b530; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill531; CHECK-SD-NEXT:    bl __getf2532; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload533; CHECK-SD-NEXT:    mov w19, w0534; CHECK-SD-NEXT:    bl __fixunstfsi535; CHECK-SD-NEXT:    adrp x8, .LCPI15_1536; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload537; CHECK-SD-NEXT:    cmp w19, #0538; CHECK-SD-NEXT:    ldr q1, [x8, :lo12:.LCPI15_1]539; CHECK-SD-NEXT:    csel w19, wzr, w0, mi540; CHECK-SD-NEXT:    str q1, [sp] // 16-byte Spill541; CHECK-SD-NEXT:    bl __gttf2542; CHECK-SD-NEXT:    ldr q0, [sp, #48] // 16-byte Reload543; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload544; CHECK-SD-NEXT:    cmp w0, #0545; CHECK-SD-NEXT:    csinv w20, w19, wzr, le546; CHECK-SD-NEXT:    bl __getf2547; CHECK-SD-NEXT:    ldr q0, [sp, #48] // 16-byte Reload548; CHECK-SD-NEXT:    mov w19, w0549; CHECK-SD-NEXT:    bl __fixunstfsi550; CHECK-SD-NEXT:    ldr q0, [sp, #48] // 16-byte Reload551; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload552; CHECK-SD-NEXT:    cmp w19, #0553; CHECK-SD-NEXT:    csel w19, wzr, w0, mi554; CHECK-SD-NEXT:    bl __gttf2555; CHECK-SD-NEXT:    cmp w0, #0556; CHECK-SD-NEXT:    ldr x30, [sp, #64] // 8-byte Reload557; CHECK-SD-NEXT:    csinv w8, w19, wzr, le558; CHECK-SD-NEXT:    fmov s0, w8559; CHECK-SD-NEXT:    mov v0.s[1], w20560; CHECK-SD-NEXT:    ldp x20, x19, [sp, #80] // 16-byte Folded Reload561; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0562; CHECK-SD-NEXT:    add sp, sp, #96563; CHECK-SD-NEXT:    ret564;565; CHECK-GI-LABEL: test_unsigned_v2f128_v2i32:566; CHECK-GI:       // %bb.0:567; CHECK-GI-NEXT:    sub sp, sp, #96568; CHECK-GI-NEXT:    str x30, [sp, #48] // 8-byte Spill569; CHECK-GI-NEXT:    stp x22, x21, [sp, #64] // 16-byte Folded Spill570; CHECK-GI-NEXT:    stp x20, x19, [sp, #80] // 16-byte Folded Spill571; CHECK-GI-NEXT:    .cfi_def_cfa_offset 96572; CHECK-GI-NEXT:    .cfi_offset w19, -8573; CHECK-GI-NEXT:    .cfi_offset w20, -16574; CHECK-GI-NEXT:    .cfi_offset w21, -24575; CHECK-GI-NEXT:    .cfi_offset w22, -32576; CHECK-GI-NEXT:    .cfi_offset w30, -48577; CHECK-GI-NEXT:    adrp x8, .LCPI15_1578; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill579; CHECK-GI-NEXT:    ldr q2, [x8, :lo12:.LCPI15_1]580; CHECK-GI-NEXT:    stp q2, q1, [sp, #16] // 32-byte Folded Spill581; CHECK-GI-NEXT:    mov v1.16b, v2.16b582; CHECK-GI-NEXT:    bl __gttf2583; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload584; CHECK-GI-NEXT:    cmp w0, #0585; CHECK-GI-NEXT:    fmov x8, d0586; CHECK-GI-NEXT:    csel x19, x8, xzr, gt587; CHECK-GI-NEXT:    mov x8, v0.d[1]588; CHECK-GI-NEXT:    mov v0.d[0], x19589; CHECK-GI-NEXT:    csel x20, x8, xzr, gt590; CHECK-GI-NEXT:    adrp x8, .LCPI15_0591; CHECK-GI-NEXT:    mov v0.d[1], x20592; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI15_0]593; CHECK-GI-NEXT:    str q1, [sp] // 16-byte Spill594; CHECK-GI-NEXT:    bl __lttf2595; CHECK-GI-NEXT:    cmp w0, #0596; CHECK-GI-NEXT:    mov x21, #281474976579584 // =0xfffffffe0000597; CHECK-GI-NEXT:    csel x8, x19, xzr, mi598; CHECK-GI-NEXT:    movk x21, #16414, lsl #48599; CHECK-GI-NEXT:    mov v0.d[0], x8600; CHECK-GI-NEXT:    csel x8, x20, x21, mi601; CHECK-GI-NEXT:    mov v0.d[1], x8602; CHECK-GI-NEXT:    bl __fixunstfsi603; CHECK-GI-NEXT:    ldp q1, q0, [sp, #16] // 32-byte Folded Reload604; CHECK-GI-NEXT:    mov w19, w0605; CHECK-GI-NEXT:    bl __gttf2606; CHECK-GI-NEXT:    ldr q0, [sp, #32] // 16-byte Reload607; CHECK-GI-NEXT:    cmp w0, #0608; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload609; CHECK-GI-NEXT:    fmov x8, d0610; CHECK-GI-NEXT:    csel x20, x8, xzr, gt611; CHECK-GI-NEXT:    mov x8, v0.d[1]612; CHECK-GI-NEXT:    mov v0.d[0], x20613; CHECK-GI-NEXT:    csel x22, x8, xzr, gt614; CHECK-GI-NEXT:    mov v0.d[1], x22615; CHECK-GI-NEXT:    bl __lttf2616; CHECK-GI-NEXT:    cmp w0, #0617; CHECK-GI-NEXT:    csel x8, x20, xzr, mi618; CHECK-GI-NEXT:    mov v0.d[0], x8619; CHECK-GI-NEXT:    csel x8, x22, x21, mi620; CHECK-GI-NEXT:    mov v0.d[1], x8621; CHECK-GI-NEXT:    bl __fixunstfsi622; CHECK-GI-NEXT:    fmov s0, w19623; CHECK-GI-NEXT:    ldp x20, x19, [sp, #80] // 16-byte Folded Reload624; CHECK-GI-NEXT:    ldp x22, x21, [sp, #64] // 16-byte Folded Reload625; CHECK-GI-NEXT:    ldr x30, [sp, #48] // 8-byte Reload626; CHECK-GI-NEXT:    mov v0.s[1], w0627; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0628; CHECK-GI-NEXT:    add sp, sp, #96629; CHECK-GI-NEXT:    ret630    %x = call <2 x i32> @llvm.fptoui.sat.v2f128.v2i32(<2 x fp128> %f)631    ret <2 x i32> %x632}633 634define <3 x i32> @test_unsigned_v3f128_v3i32(<3 x fp128> %f) {635; CHECK-SD-LABEL: test_unsigned_v3f128_v3i32:636; CHECK-SD:       // %bb.0:637; CHECK-SD-NEXT:    sub sp, sp, #112638; CHECK-SD-NEXT:    stp x30, x21, [sp, #80] // 16-byte Folded Spill639; CHECK-SD-NEXT:    stp x20, x19, [sp, #96] // 16-byte Folded Spill640; CHECK-SD-NEXT:    .cfi_def_cfa_offset 112641; CHECK-SD-NEXT:    .cfi_offset w19, -8642; CHECK-SD-NEXT:    .cfi_offset w20, -16643; CHECK-SD-NEXT:    .cfi_offset w21, -24644; CHECK-SD-NEXT:    .cfi_offset w30, -32645; CHECK-SD-NEXT:    stp q1, q0, [sp, #48] // 32-byte Folded Spill646; CHECK-SD-NEXT:    adrp x8, .LCPI16_0647; CHECK-SD-NEXT:    mov v0.16b, v2.16b648; CHECK-SD-NEXT:    ldr q1, [x8, :lo12:.LCPI16_0]649; CHECK-SD-NEXT:    str q2, [sp] // 16-byte Spill650; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill651; CHECK-SD-NEXT:    bl __getf2652; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload653; CHECK-SD-NEXT:    mov w19, w0654; CHECK-SD-NEXT:    bl __fixunstfsi655; CHECK-SD-NEXT:    adrp x8, .LCPI16_1656; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload657; CHECK-SD-NEXT:    cmp w19, #0658; CHECK-SD-NEXT:    ldr q1, [x8, :lo12:.LCPI16_1]659; CHECK-SD-NEXT:    csel w19, wzr, w0, mi660; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill661; CHECK-SD-NEXT:    bl __gttf2662; CHECK-SD-NEXT:    ldp q1, q0, [sp, #32] // 32-byte Folded Reload663; CHECK-SD-NEXT:    cmp w0, #0664; CHECK-SD-NEXT:    csinv w20, w19, wzr, le665; CHECK-SD-NEXT:    bl __getf2666; CHECK-SD-NEXT:    ldr q0, [sp, #48] // 16-byte Reload667; CHECK-SD-NEXT:    mov w19, w0668; CHECK-SD-NEXT:    bl __fixunstfsi669; CHECK-SD-NEXT:    ldr q0, [sp, #48] // 16-byte Reload670; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload671; CHECK-SD-NEXT:    cmp w19, #0672; CHECK-SD-NEXT:    csel w19, wzr, w0, mi673; CHECK-SD-NEXT:    bl __gttf2674; CHECK-SD-NEXT:    ldr q0, [sp, #64] // 16-byte Reload675; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload676; CHECK-SD-NEXT:    cmp w0, #0677; CHECK-SD-NEXT:    csinv w21, w19, wzr, le678; CHECK-SD-NEXT:    bl __getf2679; CHECK-SD-NEXT:    ldr q0, [sp, #64] // 16-byte Reload680; CHECK-SD-NEXT:    mov w19, w0681; CHECK-SD-NEXT:    bl __fixunstfsi682; CHECK-SD-NEXT:    ldr q0, [sp, #64] // 16-byte Reload683; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload684; CHECK-SD-NEXT:    cmp w19, #0685; CHECK-SD-NEXT:    csel w19, wzr, w0, mi686; CHECK-SD-NEXT:    bl __gttf2687; CHECK-SD-NEXT:    cmp w0, #0688; CHECK-SD-NEXT:    csinv w8, w19, wzr, le689; CHECK-SD-NEXT:    fmov s0, w8690; CHECK-SD-NEXT:    mov v0.s[1], w21691; CHECK-SD-NEXT:    ldp x30, x21, [sp, #80] // 16-byte Folded Reload692; CHECK-SD-NEXT:    mov v0.s[2], w20693; CHECK-SD-NEXT:    ldp x20, x19, [sp, #96] // 16-byte Folded Reload694; CHECK-SD-NEXT:    add sp, sp, #112695; CHECK-SD-NEXT:    ret696;697; CHECK-GI-LABEL: test_unsigned_v3f128_v3i32:698; CHECK-GI:       // %bb.0:699; CHECK-GI-NEXT:    sub sp, sp, #112700; CHECK-GI-NEXT:    stp x30, x23, [sp, #64] // 16-byte Folded Spill701; CHECK-GI-NEXT:    stp x22, x21, [sp, #80] // 16-byte Folded Spill702; CHECK-GI-NEXT:    stp x20, x19, [sp, #96] // 16-byte Folded Spill703; CHECK-GI-NEXT:    .cfi_def_cfa_offset 112704; CHECK-GI-NEXT:    .cfi_offset w19, -8705; CHECK-GI-NEXT:    .cfi_offset w20, -16706; CHECK-GI-NEXT:    .cfi_offset w21, -24707; CHECK-GI-NEXT:    .cfi_offset w22, -32708; CHECK-GI-NEXT:    .cfi_offset w23, -40709; CHECK-GI-NEXT:    .cfi_offset w30, -48710; CHECK-GI-NEXT:    adrp x8, .LCPI16_1711; CHECK-GI-NEXT:    stp q1, q0, [sp] // 32-byte Folded Spill712; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI16_1]713; CHECK-GI-NEXT:    stp q1, q2, [sp, #32] // 32-byte Folded Spill714; CHECK-GI-NEXT:    bl __gttf2715; CHECK-GI-NEXT:    ldr q0, [sp, #16] // 16-byte Reload716; CHECK-GI-NEXT:    cmp w0, #0717; CHECK-GI-NEXT:    fmov x8, d0718; CHECK-GI-NEXT:    csel x19, x8, xzr, gt719; CHECK-GI-NEXT:    mov x8, v0.d[1]720; CHECK-GI-NEXT:    mov v0.d[0], x19721; CHECK-GI-NEXT:    csel x20, x8, xzr, gt722; CHECK-GI-NEXT:    adrp x8, .LCPI16_0723; CHECK-GI-NEXT:    mov v0.d[1], x20724; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI16_0]725; CHECK-GI-NEXT:    str q1, [sp, #16] // 16-byte Spill726; CHECK-GI-NEXT:    bl __lttf2727; CHECK-GI-NEXT:    cmp w0, #0728; CHECK-GI-NEXT:    mov x21, #281474976579584 // =0xfffffffe0000729; CHECK-GI-NEXT:    csel x8, x19, xzr, mi730; CHECK-GI-NEXT:    movk x21, #16414, lsl #48731; CHECK-GI-NEXT:    mov v0.d[0], x8732; CHECK-GI-NEXT:    csel x8, x20, x21, mi733; CHECK-GI-NEXT:    mov v0.d[1], x8734; CHECK-GI-NEXT:    bl __fixunstfsi735; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload736; CHECK-GI-NEXT:    ldr q1, [sp, #32] // 16-byte Reload737; CHECK-GI-NEXT:    mov w19, w0738; CHECK-GI-NEXT:    bl __gttf2739; CHECK-GI-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload740; CHECK-GI-NEXT:    cmp w0, #0741; CHECK-GI-NEXT:    fmov x8, d0742; CHECK-GI-NEXT:    csel x20, x8, xzr, gt743; CHECK-GI-NEXT:    mov x8, v0.d[1]744; CHECK-GI-NEXT:    mov v0.d[0], x20745; CHECK-GI-NEXT:    csel x22, x8, xzr, gt746; CHECK-GI-NEXT:    mov v0.d[1], x22747; CHECK-GI-NEXT:    bl __lttf2748; CHECK-GI-NEXT:    cmp w0, #0749; CHECK-GI-NEXT:    csel x8, x20, xzr, mi750; CHECK-GI-NEXT:    mov v0.d[0], x8751; CHECK-GI-NEXT:    csel x8, x22, x21, mi752; CHECK-GI-NEXT:    mov v0.d[1], x8753; CHECK-GI-NEXT:    bl __fixunstfsi754; CHECK-GI-NEXT:    ldp q1, q0, [sp, #32] // 32-byte Folded Reload755; CHECK-GI-NEXT:    mov w20, w0756; CHECK-GI-NEXT:    bl __gttf2757; CHECK-GI-NEXT:    ldr q0, [sp, #48] // 16-byte Reload758; CHECK-GI-NEXT:    cmp w0, #0759; CHECK-GI-NEXT:    ldr q1, [sp, #16] // 16-byte Reload760; CHECK-GI-NEXT:    fmov x8, d0761; CHECK-GI-NEXT:    csel x22, x8, xzr, gt762; CHECK-GI-NEXT:    mov x8, v0.d[1]763; CHECK-GI-NEXT:    mov v0.d[0], x22764; CHECK-GI-NEXT:    csel x23, x8, xzr, gt765; CHECK-GI-NEXT:    mov v0.d[1], x23766; CHECK-GI-NEXT:    bl __lttf2767; CHECK-GI-NEXT:    cmp w0, #0768; CHECK-GI-NEXT:    csel x8, x22, xzr, mi769; CHECK-GI-NEXT:    mov v0.d[0], x8770; CHECK-GI-NEXT:    csel x8, x23, x21, mi771; CHECK-GI-NEXT:    mov v0.d[1], x8772; CHECK-GI-NEXT:    bl __fixunstfsi773; CHECK-GI-NEXT:    fmov s0, w19774; CHECK-GI-NEXT:    ldp x22, x21, [sp, #80] // 16-byte Folded Reload775; CHECK-GI-NEXT:    ldp x30, x23, [sp, #64] // 16-byte Folded Reload776; CHECK-GI-NEXT:    mov v0.s[1], w20777; CHECK-GI-NEXT:    ldp x20, x19, [sp, #96] // 16-byte Folded Reload778; CHECK-GI-NEXT:    mov v0.s[2], w0779; CHECK-GI-NEXT:    add sp, sp, #112780; CHECK-GI-NEXT:    ret781    %x = call <3 x i32> @llvm.fptoui.sat.v3f128.v3i32(<3 x fp128> %f)782    ret <3 x i32> %x783}784 785define <4 x i32> @test_unsigned_v4f128_v4i32(<4 x fp128> %f) {786; CHECK-SD-LABEL: test_unsigned_v4f128_v4i32:787; CHECK-SD:       // %bb.0:788; CHECK-SD-NEXT:    sub sp, sp, #128789; CHECK-SD-NEXT:    str x30, [sp, #96] // 8-byte Spill790; CHECK-SD-NEXT:    stp x20, x19, [sp, #112] // 16-byte Folded Spill791; CHECK-SD-NEXT:    .cfi_def_cfa_offset 128792; CHECK-SD-NEXT:    .cfi_offset w19, -8793; CHECK-SD-NEXT:    .cfi_offset w20, -16794; CHECK-SD-NEXT:    .cfi_offset w30, -32795; CHECK-SD-NEXT:    stp q0, q2, [sp, #16] // 32-byte Folded Spill796; CHECK-SD-NEXT:    mov v2.16b, v1.16b797; CHECK-SD-NEXT:    adrp x8, .LCPI17_0798; CHECK-SD-NEXT:    str q1, [sp] // 16-byte Spill799; CHECK-SD-NEXT:    ldr q1, [x8, :lo12:.LCPI17_0]800; CHECK-SD-NEXT:    str q3, [sp, #80] // 16-byte Spill801; CHECK-SD-NEXT:    mov v0.16b, v2.16b802; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill803; CHECK-SD-NEXT:    bl __getf2804; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload805; CHECK-SD-NEXT:    mov w19, w0806; CHECK-SD-NEXT:    bl __fixunstfsi807; CHECK-SD-NEXT:    adrp x8, .LCPI17_1808; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload809; CHECK-SD-NEXT:    cmp w19, #0810; CHECK-SD-NEXT:    ldr q1, [x8, :lo12:.LCPI17_1]811; CHECK-SD-NEXT:    csel w19, wzr, w0, mi812; CHECK-SD-NEXT:    str q1, [sp, #48] // 16-byte Spill813; CHECK-SD-NEXT:    bl __gttf2814; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload815; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload816; CHECK-SD-NEXT:    cmp w0, #0817; CHECK-SD-NEXT:    csinv w20, w19, wzr, le818; CHECK-SD-NEXT:    bl __getf2819; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload820; CHECK-SD-NEXT:    mov w19, w0821; CHECK-SD-NEXT:    bl __fixunstfsi822; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload823; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload824; CHECK-SD-NEXT:    cmp w19, #0825; CHECK-SD-NEXT:    csel w19, wzr, w0, mi826; CHECK-SD-NEXT:    bl __gttf2827; CHECK-SD-NEXT:    cmp w0, #0828; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload829; CHECK-SD-NEXT:    csinv w8, w19, wzr, le830; CHECK-SD-NEXT:    fmov s0, w8831; CHECK-SD-NEXT:    mov v0.s[1], w20832; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill833; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload834; CHECK-SD-NEXT:    bl __getf2835; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload836; CHECK-SD-NEXT:    mov w19, w0837; CHECK-SD-NEXT:    bl __fixunstfsi838; CHECK-SD-NEXT:    ldp q0, q1, [sp, #32] // 32-byte Folded Reload839; CHECK-SD-NEXT:    cmp w19, #0840; CHECK-SD-NEXT:    csel w19, wzr, w0, mi841; CHECK-SD-NEXT:    bl __gttf2842; CHECK-SD-NEXT:    cmp w0, #0843; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload844; CHECK-SD-NEXT:    csinv w8, w19, wzr, le845; CHECK-SD-NEXT:    mov v0.s[2], w8846; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill847; CHECK-SD-NEXT:    ldp q1, q0, [sp, #64] // 32-byte Folded Reload848; CHECK-SD-NEXT:    bl __getf2849; CHECK-SD-NEXT:    ldr q0, [sp, #80] // 16-byte Reload850; CHECK-SD-NEXT:    mov w19, w0851; CHECK-SD-NEXT:    bl __fixunstfsi852; CHECK-SD-NEXT:    ldr q0, [sp, #80] // 16-byte Reload853; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload854; CHECK-SD-NEXT:    cmp w19, #0855; CHECK-SD-NEXT:    csel w19, wzr, w0, mi856; CHECK-SD-NEXT:    bl __gttf2857; CHECK-SD-NEXT:    cmp w0, #0858; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload859; CHECK-SD-NEXT:    ldr x30, [sp, #96] // 8-byte Reload860; CHECK-SD-NEXT:    csinv w8, w19, wzr, le861; CHECK-SD-NEXT:    ldp x20, x19, [sp, #112] // 16-byte Folded Reload862; CHECK-SD-NEXT:    mov v0.s[3], w8863; CHECK-SD-NEXT:    add sp, sp, #128864; CHECK-SD-NEXT:    ret865;866; CHECK-GI-LABEL: test_unsigned_v4f128_v4i32:867; CHECK-GI:       // %bb.0:868; CHECK-GI-NEXT:    sub sp, sp, #144869; CHECK-GI-NEXT:    str x30, [sp, #80] // 8-byte Spill870; CHECK-GI-NEXT:    stp x24, x23, [sp, #96] // 16-byte Folded Spill871; CHECK-GI-NEXT:    stp x22, x21, [sp, #112] // 16-byte Folded Spill872; CHECK-GI-NEXT:    stp x20, x19, [sp, #128] // 16-byte Folded Spill873; CHECK-GI-NEXT:    .cfi_def_cfa_offset 144874; CHECK-GI-NEXT:    .cfi_offset w19, -8875; CHECK-GI-NEXT:    .cfi_offset w20, -16876; CHECK-GI-NEXT:    .cfi_offset w21, -24877; CHECK-GI-NEXT:    .cfi_offset w22, -32878; CHECK-GI-NEXT:    .cfi_offset w23, -40879; CHECK-GI-NEXT:    .cfi_offset w24, -48880; CHECK-GI-NEXT:    .cfi_offset w30, -64881; CHECK-GI-NEXT:    adrp x8, .LCPI17_1882; CHECK-GI-NEXT:    stp q1, q2, [sp] // 32-byte Folded Spill883; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI17_1]884; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill885; CHECK-GI-NEXT:    str q3, [sp, #32] // 16-byte Spill886; CHECK-GI-NEXT:    str q1, [sp, #64] // 16-byte Spill887; CHECK-GI-NEXT:    bl __gttf2888; CHECK-GI-NEXT:    ldr q0, [sp, #48] // 16-byte Reload889; CHECK-GI-NEXT:    cmp w0, #0890; CHECK-GI-NEXT:    fmov x8, d0891; CHECK-GI-NEXT:    csel x19, x8, xzr, gt892; CHECK-GI-NEXT:    mov x8, v0.d[1]893; CHECK-GI-NEXT:    mov v0.d[0], x19894; CHECK-GI-NEXT:    csel x20, x8, xzr, gt895; CHECK-GI-NEXT:    adrp x8, .LCPI17_0896; CHECK-GI-NEXT:    mov v0.d[1], x20897; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI17_0]898; CHECK-GI-NEXT:    str q1, [sp, #48] // 16-byte Spill899; CHECK-GI-NEXT:    bl __lttf2900; CHECK-GI-NEXT:    cmp w0, #0901; CHECK-GI-NEXT:    mov x22, #281474976579584 // =0xfffffffe0000902; CHECK-GI-NEXT:    csel x8, x19, xzr, mi903; CHECK-GI-NEXT:    movk x22, #16414, lsl #48904; CHECK-GI-NEXT:    mov v0.d[0], x8905; CHECK-GI-NEXT:    csel x8, x20, x22, mi906; CHECK-GI-NEXT:    mov v0.d[1], x8907; CHECK-GI-NEXT:    bl __fixunstfsi908; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload909; CHECK-GI-NEXT:    ldr q1, [sp, #64] // 16-byte Reload910; CHECK-GI-NEXT:    mov w19, w0911; CHECK-GI-NEXT:    bl __gttf2912; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload913; CHECK-GI-NEXT:    cmp w0, #0914; CHECK-GI-NEXT:    ldr q1, [sp, #48] // 16-byte Reload915; CHECK-GI-NEXT:    fmov x8, d0916; CHECK-GI-NEXT:    csel x20, x8, xzr, gt917; CHECK-GI-NEXT:    mov x8, v0.d[1]918; CHECK-GI-NEXT:    mov v0.d[0], x20919; CHECK-GI-NEXT:    csel x21, x8, xzr, gt920; CHECK-GI-NEXT:    mov v0.d[1], x21921; CHECK-GI-NEXT:    bl __lttf2922; CHECK-GI-NEXT:    cmp w0, #0923; CHECK-GI-NEXT:    csel x8, x20, xzr, mi924; CHECK-GI-NEXT:    mov v0.d[0], x8925; CHECK-GI-NEXT:    csel x8, x21, x22, mi926; CHECK-GI-NEXT:    mov v0.d[1], x8927; CHECK-GI-NEXT:    bl __fixunstfsi928; CHECK-GI-NEXT:    ldr q0, [sp, #16] // 16-byte Reload929; CHECK-GI-NEXT:    ldr q1, [sp, #64] // 16-byte Reload930; CHECK-GI-NEXT:    mov w20, w0931; CHECK-GI-NEXT:    bl __gttf2932; CHECK-GI-NEXT:    ldr q0, [sp, #16] // 16-byte Reload933; CHECK-GI-NEXT:    cmp w0, #0934; CHECK-GI-NEXT:    ldr q1, [sp, #48] // 16-byte Reload935; CHECK-GI-NEXT:    fmov x8, d0936; CHECK-GI-NEXT:    csel x21, x8, xzr, gt937; CHECK-GI-NEXT:    mov x8, v0.d[1]938; CHECK-GI-NEXT:    mov v0.d[0], x21939; CHECK-GI-NEXT:    csel x23, x8, xzr, gt940; CHECK-GI-NEXT:    mov v0.d[1], x23941; CHECK-GI-NEXT:    bl __lttf2942; CHECK-GI-NEXT:    cmp w0, #0943; CHECK-GI-NEXT:    csel x8, x21, xzr, mi944; CHECK-GI-NEXT:    mov v0.d[0], x8945; CHECK-GI-NEXT:    csel x8, x23, x22, mi946; CHECK-GI-NEXT:    mov v0.d[1], x8947; CHECK-GI-NEXT:    bl __fixunstfsi948; CHECK-GI-NEXT:    ldr q0, [sp, #32] // 16-byte Reload949; CHECK-GI-NEXT:    ldr q1, [sp, #64] // 16-byte Reload950; CHECK-GI-NEXT:    mov w21, w0951; CHECK-GI-NEXT:    bl __gttf2952; CHECK-GI-NEXT:    ldp q0, q1, [sp, #32] // 32-byte Folded Reload953; CHECK-GI-NEXT:    cmp w0, #0954; CHECK-GI-NEXT:    fmov x8, d0955; CHECK-GI-NEXT:    csel x23, x8, xzr, gt956; CHECK-GI-NEXT:    mov x8, v0.d[1]957; CHECK-GI-NEXT:    mov v0.d[0], x23958; CHECK-GI-NEXT:    csel x24, x8, xzr, gt959; CHECK-GI-NEXT:    mov v0.d[1], x24960; CHECK-GI-NEXT:    bl __lttf2961; CHECK-GI-NEXT:    cmp w0, #0962; CHECK-GI-NEXT:    csel x8, x23, xzr, mi963; CHECK-GI-NEXT:    mov v0.d[0], x8964; CHECK-GI-NEXT:    csel x8, x24, x22, mi965; CHECK-GI-NEXT:    mov v0.d[1], x8966; CHECK-GI-NEXT:    bl __fixunstfsi967; CHECK-GI-NEXT:    fmov s0, w19968; CHECK-GI-NEXT:    ldp x24, x23, [sp, #96] // 16-byte Folded Reload969; CHECK-GI-NEXT:    ldr x30, [sp, #80] // 8-byte Reload970; CHECK-GI-NEXT:    mov v0.s[1], w20971; CHECK-GI-NEXT:    ldp x20, x19, [sp, #128] // 16-byte Folded Reload972; CHECK-GI-NEXT:    mov v0.s[2], w21973; CHECK-GI-NEXT:    ldp x22, x21, [sp, #112] // 16-byte Folded Reload974; CHECK-GI-NEXT:    mov v0.s[3], w0975; CHECK-GI-NEXT:    add sp, sp, #144976; CHECK-GI-NEXT:    ret977    %x = call <4 x i32> @llvm.fptoui.sat.v4f128.v4i32(<4 x fp128> %f)978    ret <4 x i32> %x979}980 981;982; FP16 to unsigned 32-bit -- Vector size variation983;984 985declare <1 x i32> @llvm.fptoui.sat.v1f16.v1i32 (<1 x half>)986declare <2 x i32> @llvm.fptoui.sat.v2f16.v2i32 (<2 x half>)987declare <3 x i32> @llvm.fptoui.sat.v3f16.v3i32 (<3 x half>)988declare <4 x i32> @llvm.fptoui.sat.v4f16.v4i32 (<4 x half>)989declare <5 x i32> @llvm.fptoui.sat.v5f16.v5i32 (<5 x half>)990declare <6 x i32> @llvm.fptoui.sat.v6f16.v6i32 (<6 x half>)991declare <7 x i32> @llvm.fptoui.sat.v7f16.v7i32 (<7 x half>)992declare <8 x i32> @llvm.fptoui.sat.v8f16.v8i32 (<8 x half>)993 994define <1 x i32> @test_unsigned_v1f16_v1i32(<1 x half> %f) {995; CHECK-SD-CVT-LABEL: test_unsigned_v1f16_v1i32:996; CHECK-SD-CVT:       // %bb.0:997; CHECK-SD-CVT-NEXT:    fcvt s0, h0998; CHECK-SD-CVT-NEXT:    fcvtzu w8, s0999; CHECK-SD-CVT-NEXT:    fmov s0, w81000; CHECK-SD-CVT-NEXT:    ret1001;1002; CHECK-FP16-LABEL: test_unsigned_v1f16_v1i32:1003; CHECK-FP16:       // %bb.0:1004; CHECK-FP16-NEXT:    fcvtzu w8, h01005; CHECK-FP16-NEXT:    fmov s0, w81006; CHECK-FP16-NEXT:    ret1007;1008; CHECK-GI-CVT-LABEL: test_unsigned_v1f16_v1i32:1009; CHECK-GI-CVT:       // %bb.0:1010; CHECK-GI-CVT-NEXT:    fcvt s0, h01011; CHECK-GI-CVT-NEXT:    fcvtzu s0, s01012; CHECK-GI-CVT-NEXT:    ret1013    %x = call <1 x i32> @llvm.fptoui.sat.v1f16.v1i32(<1 x half> %f)1014    ret <1 x i32> %x1015}1016 1017define <2 x i32> @test_unsigned_v2f16_v2i32(<2 x half> %f) {1018; CHECK-SD-LABEL: test_unsigned_v2f16_v2i32:1019; CHECK-SD:       // %bb.0:1020; CHECK-SD-NEXT:    fcvtl v0.4s, v0.4h1021; CHECK-SD-NEXT:    fcvtzu v0.4s, v0.4s1022; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q01023; CHECK-SD-NEXT:    ret1024;1025; CHECK-GI-LABEL: test_unsigned_v2f16_v2i32:1026; CHECK-GI:       // %bb.0:1027; CHECK-GI-NEXT:    fcvtl v0.4s, v0.4h1028; CHECK-GI-NEXT:    fcvtzu v0.2s, v0.2s1029; CHECK-GI-NEXT:    ret1030    %x = call <2 x i32> @llvm.fptoui.sat.v2f16.v2i32(<2 x half> %f)1031    ret <2 x i32> %x1032}1033 1034define <3 x i32> @test_unsigned_v3f16_v3i32(<3 x half> %f) {1035; CHECK-LABEL: test_unsigned_v3f16_v3i32:1036; CHECK:       // %bb.0:1037; CHECK-NEXT:    fcvtl v0.4s, v0.4h1038; CHECK-NEXT:    fcvtzu v0.4s, v0.4s1039; CHECK-NEXT:    ret1040    %x = call <3 x i32> @llvm.fptoui.sat.v3f16.v3i32(<3 x half> %f)1041    ret <3 x i32> %x1042}1043 1044define <4 x i32> @test_unsigned_v4f16_v4i32(<4 x half> %f) {1045; CHECK-LABEL: test_unsigned_v4f16_v4i32:1046; CHECK:       // %bb.0:1047; CHECK-NEXT:    fcvtl v0.4s, v0.4h1048; CHECK-NEXT:    fcvtzu v0.4s, v0.4s1049; CHECK-NEXT:    ret1050    %x = call <4 x i32> @llvm.fptoui.sat.v4f16.v4i32(<4 x half> %f)1051    ret <4 x i32> %x1052}1053 1054define <5 x i32> @test_unsigned_v5f16_v5i32(<5 x half> %f) {1055; CHECK-SD-LABEL: test_unsigned_v5f16_v5i32:1056; CHECK-SD:       // %bb.0:1057; CHECK-SD-NEXT:    fcvtl v1.4s, v0.4h1058; CHECK-SD-NEXT:    fcvtl2 v0.4s, v0.8h1059; CHECK-SD-NEXT:    fcvtzu v1.4s, v1.4s1060; CHECK-SD-NEXT:    fcvtzu v0.4s, v0.4s1061; CHECK-SD-NEXT:    mov w1, v1.s[1]1062; CHECK-SD-NEXT:    mov w2, v1.s[2]1063; CHECK-SD-NEXT:    mov w3, v1.s[3]1064; CHECK-SD-NEXT:    fmov w0, s11065; CHECK-SD-NEXT:    fmov w4, s01066; CHECK-SD-NEXT:    ret1067;1068; CHECK-GI-LABEL: test_unsigned_v5f16_v5i32:1069; CHECK-GI:       // %bb.0:1070; CHECK-GI-NEXT:    fcvtl v1.4s, v0.4h1071; CHECK-GI-NEXT:    mov v0.h[0], v0.h[4]1072; CHECK-GI-NEXT:    fcvtzu v1.4s, v1.4s1073; CHECK-GI-NEXT:    fcvtl v0.4s, v0.4h1074; CHECK-GI-NEXT:    mov s2, v1.s[1]1075; CHECK-GI-NEXT:    fcvtzu v0.4s, v0.4s1076; CHECK-GI-NEXT:    mov s3, v1.s[2]1077; CHECK-GI-NEXT:    mov s4, v1.s[3]1078; CHECK-GI-NEXT:    fmov w0, s11079; CHECK-GI-NEXT:    fmov w1, s21080; CHECK-GI-NEXT:    fmov w2, s31081; CHECK-GI-NEXT:    fmov w4, s01082; CHECK-GI-NEXT:    fmov w3, s41083; CHECK-GI-NEXT:    ret1084    %x = call <5 x i32> @llvm.fptoui.sat.v5f16.v5i32(<5 x half> %f)1085    ret <5 x i32> %x1086}1087 1088define <6 x i32> @test_unsigned_v6f16_v6i32(<6 x half> %f) {1089; CHECK-SD-LABEL: test_unsigned_v6f16_v6i32:1090; CHECK-SD:       // %bb.0:1091; CHECK-SD-NEXT:    fcvtl v1.4s, v0.4h1092; CHECK-SD-NEXT:    fcvtl2 v0.4s, v0.8h1093; CHECK-SD-NEXT:    fcvtzu v1.4s, v1.4s1094; CHECK-SD-NEXT:    fcvtzu v0.4s, v0.4s1095; CHECK-SD-NEXT:    mov w1, v1.s[1]1096; CHECK-SD-NEXT:    mov w2, v1.s[2]1097; CHECK-SD-NEXT:    mov w5, v0.s[1]1098; CHECK-SD-NEXT:    mov w3, v1.s[3]1099; CHECK-SD-NEXT:    fmov w4, s01100; CHECK-SD-NEXT:    fmov w0, s11101; CHECK-SD-NEXT:    ret1102;1103; CHECK-GI-LABEL: test_unsigned_v6f16_v6i32:1104; CHECK-GI:       // %bb.0:1105; CHECK-GI-NEXT:    mov v1.h[0], v0.h[4]1106; CHECK-GI-NEXT:    mov v1.h[1], v0.h[5]1107; CHECK-GI-NEXT:    fcvtl v0.4s, v0.4h1108; CHECK-GI-NEXT:    fcvtl v1.4s, v1.4h1109; CHECK-GI-NEXT:    fcvtzu v0.4s, v0.4s1110; CHECK-GI-NEXT:    fcvtzu v1.4s, v1.4s1111; CHECK-GI-NEXT:    mov s2, v0.s[1]1112; CHECK-GI-NEXT:    mov s3, v0.s[2]1113; CHECK-GI-NEXT:    mov s4, v0.s[3]1114; CHECK-GI-NEXT:    fmov w0, s01115; CHECK-GI-NEXT:    mov s5, v1.s[1]1116; CHECK-GI-NEXT:    fmov w1, s21117; CHECK-GI-NEXT:    fmov w2, s31118; CHECK-GI-NEXT:    fmov w3, s41119; CHECK-GI-NEXT:    fmov w4, s11120; CHECK-GI-NEXT:    fmov w5, s51121; CHECK-GI-NEXT:    ret1122    %x = call <6 x i32> @llvm.fptoui.sat.v6f16.v6i32(<6 x half> %f)1123    ret <6 x i32> %x1124}1125 1126define <7 x i32> @test_unsigned_v7f16_v7i32(<7 x half> %f) {1127; CHECK-SD-LABEL: test_unsigned_v7f16_v7i32:1128; CHECK-SD:       // %bb.0:1129; CHECK-SD-NEXT:    fcvtl v1.4s, v0.4h1130; CHECK-SD-NEXT:    fcvtl2 v0.4s, v0.8h1131; CHECK-SD-NEXT:    fcvtzu v1.4s, v1.4s1132; CHECK-SD-NEXT:    fcvtzu v0.4s, v0.4s1133; CHECK-SD-NEXT:    mov w1, v1.s[1]1134; CHECK-SD-NEXT:    mov w2, v1.s[2]1135; CHECK-SD-NEXT:    mov w3, v1.s[3]1136; CHECK-SD-NEXT:    mov w5, v0.s[1]1137; CHECK-SD-NEXT:    mov w6, v0.s[2]1138; CHECK-SD-NEXT:    fmov w0, s11139; CHECK-SD-NEXT:    fmov w4, s01140; CHECK-SD-NEXT:    ret1141;1142; CHECK-GI-LABEL: test_unsigned_v7f16_v7i32:1143; CHECK-GI:       // %bb.0:1144; CHECK-GI-NEXT:    mov v1.h[0], v0.h[4]1145; CHECK-GI-NEXT:    mov v1.h[1], v0.h[5]1146; CHECK-GI-NEXT:    mov v1.h[2], v0.h[6]1147; CHECK-GI-NEXT:    fcvtl v0.4s, v0.4h1148; CHECK-GI-NEXT:    fcvtl v1.4s, v1.4h1149; CHECK-GI-NEXT:    fcvtzu v0.4s, v0.4s1150; CHECK-GI-NEXT:    fcvtzu v1.4s, v1.4s1151; CHECK-GI-NEXT:    mov s2, v0.s[1]1152; CHECK-GI-NEXT:    mov s3, v0.s[2]1153; CHECK-GI-NEXT:    mov s4, v0.s[3]1154; CHECK-GI-NEXT:    fmov w0, s01155; CHECK-GI-NEXT:    mov s5, v1.s[1]1156; CHECK-GI-NEXT:    mov s6, v1.s[2]1157; CHECK-GI-NEXT:    fmov w1, s21158; CHECK-GI-NEXT:    fmov w2, s31159; CHECK-GI-NEXT:    fmov w3, s41160; CHECK-GI-NEXT:    fmov w4, s11161; CHECK-GI-NEXT:    fmov w5, s51162; CHECK-GI-NEXT:    fmov w6, s61163; CHECK-GI-NEXT:    ret1164    %x = call <7 x i32> @llvm.fptoui.sat.v7f16.v7i32(<7 x half> %f)1165    ret <7 x i32> %x1166}1167 1168define <8 x i32> @test_unsigned_v8f16_v8i32(<8 x half> %f) {1169; CHECK-SD-LABEL: test_unsigned_v8f16_v8i32:1170; CHECK-SD:       // %bb.0:1171; CHECK-SD-NEXT:    fcvtl2 v1.4s, v0.8h1172; CHECK-SD-NEXT:    fcvtl v0.4s, v0.4h1173; CHECK-SD-NEXT:    fcvtzu v1.4s, v1.4s1174; CHECK-SD-NEXT:    fcvtzu v0.4s, v0.4s1175; CHECK-SD-NEXT:    ret1176;1177; CHECK-GI-LABEL: test_unsigned_v8f16_v8i32:1178; CHECK-GI:       // %bb.0:1179; CHECK-GI-NEXT:    fcvtl v1.4s, v0.4h1180; CHECK-GI-NEXT:    fcvtl2 v2.4s, v0.8h1181; CHECK-GI-NEXT:    fcvtzu v0.4s, v1.4s1182; CHECK-GI-NEXT:    fcvtzu v1.4s, v2.4s1183; CHECK-GI-NEXT:    ret1184    %x = call <8 x i32> @llvm.fptoui.sat.v8f16.v8i32(<8 x half> %f)1185    ret <8 x i32> %x1186}1187 1188;1189; 2-Vector float to unsigned integer -- result size variation1190;1191 1192declare <2 x   i1> @llvm.fptoui.sat.v2f32.v2i1  (<2 x float>)1193declare <2 x   i8> @llvm.fptoui.sat.v2f32.v2i8  (<2 x float>)1194declare <2 x  i13> @llvm.fptoui.sat.v2f32.v2i13 (<2 x float>)1195declare <2 x  i16> @llvm.fptoui.sat.v2f32.v2i16 (<2 x float>)1196declare <2 x  i19> @llvm.fptoui.sat.v2f32.v2i19 (<2 x float>)1197declare <2 x  i50> @llvm.fptoui.sat.v2f32.v2i50 (<2 x float>)1198declare <2 x  i64> @llvm.fptoui.sat.v2f32.v2i64 (<2 x float>)1199declare <2 x i100> @llvm.fptoui.sat.v2f32.v2i100(<2 x float>)1200declare <2 x i128> @llvm.fptoui.sat.v2f32.v2i128(<2 x float>)1201 1202define <2 x i1> @test_unsigned_v2f32_v2i1(<2 x float> %f) {1203; CHECK-LABEL: test_unsigned_v2f32_v2i1:1204; CHECK:       // %bb.0:1205; CHECK-NEXT:    movi v1.2s, #11206; CHECK-NEXT:    fcvtzu v0.2s, v0.2s1207; CHECK-NEXT:    umin v0.2s, v0.2s, v1.2s1208; CHECK-NEXT:    ret1209    %x = call <2 x i1> @llvm.fptoui.sat.v2f32.v2i1(<2 x float> %f)1210    ret <2 x i1> %x1211}1212 1213define <2 x i8> @test_unsigned_v2f32_v2i8(<2 x float> %f) {1214; CHECK-LABEL: test_unsigned_v2f32_v2i8:1215; CHECK:       // %bb.0:1216; CHECK-NEXT:    movi d1, #0x0000ff000000ff1217; CHECK-NEXT:    fcvtzu v0.2s, v0.2s1218; CHECK-NEXT:    umin v0.2s, v0.2s, v1.2s1219; CHECK-NEXT:    ret1220    %x = call <2 x i8> @llvm.fptoui.sat.v2f32.v2i8(<2 x float> %f)1221    ret <2 x i8> %x1222}1223 1224define <2 x i13> @test_unsigned_v2f32_v2i13(<2 x float> %f) {1225; CHECK-LABEL: test_unsigned_v2f32_v2i13:1226; CHECK:       // %bb.0:1227; CHECK-NEXT:    movi v1.2s, #31, msl #81228; CHECK-NEXT:    fcvtzu v0.2s, v0.2s1229; CHECK-NEXT:    umin v0.2s, v0.2s, v1.2s1230; CHECK-NEXT:    ret1231    %x = call <2 x i13> @llvm.fptoui.sat.v2f32.v2i13(<2 x float> %f)1232    ret <2 x i13> %x1233}1234 1235define <2 x i16> @test_unsigned_v2f32_v2i16(<2 x float> %f) {1236; CHECK-LABEL: test_unsigned_v2f32_v2i16:1237; CHECK:       // %bb.0:1238; CHECK-NEXT:    movi d1, #0x00ffff0000ffff1239; CHECK-NEXT:    fcvtzu v0.2s, v0.2s1240; CHECK-NEXT:    umin v0.2s, v0.2s, v1.2s1241; CHECK-NEXT:    ret1242    %x = call <2 x i16> @llvm.fptoui.sat.v2f32.v2i16(<2 x float> %f)1243    ret <2 x i16> %x1244}1245 1246define <2 x i19> @test_unsigned_v2f32_v2i19(<2 x float> %f) {1247; CHECK-LABEL: test_unsigned_v2f32_v2i19:1248; CHECK:       // %bb.0:1249; CHECK-NEXT:    movi v1.2s, #7, msl #161250; CHECK-NEXT:    fcvtzu v0.2s, v0.2s1251; CHECK-NEXT:    umin v0.2s, v0.2s, v1.2s1252; CHECK-NEXT:    ret1253    %x = call <2 x i19> @llvm.fptoui.sat.v2f32.v2i19(<2 x float> %f)1254    ret <2 x i19> %x1255}1256 1257define <2 x i32> @test_unsigned_v2f32_v2i32_duplicate(<2 x float> %f) {1258; CHECK-LABEL: test_unsigned_v2f32_v2i32_duplicate:1259; CHECK:       // %bb.0:1260; CHECK-NEXT:    fcvtzu v0.2s, v0.2s1261; CHECK-NEXT:    ret1262    %x = call <2 x i32> @llvm.fptoui.sat.v2f32.v2i32(<2 x float> %f)1263    ret <2 x i32> %x1264}1265 1266define <2 x i50> @test_unsigned_v2f32_v2i50(<2 x float> %f) {1267; CHECK-SD-LABEL: test_unsigned_v2f32_v2i50:1268; CHECK-SD:       // %bb.0:1269; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q01270; CHECK-SD-NEXT:    mov s1, v0.s[1]1271; CHECK-SD-NEXT:    fcvtzu x9, s01272; CHECK-SD-NEXT:    mov x10, #1125899906842623 // =0x3ffffffffffff1273; CHECK-SD-NEXT:    fcvtzu x8, s11274; CHECK-SD-NEXT:    cmp x8, x101275; CHECK-SD-NEXT:    csel x8, x8, x10, lo1276; CHECK-SD-NEXT:    cmp x9, x101277; CHECK-SD-NEXT:    csel x9, x9, x10, lo1278; CHECK-SD-NEXT:    fmov d0, x91279; CHECK-SD-NEXT:    mov v0.d[1], x81280; CHECK-SD-NEXT:    ret1281;1282; CHECK-GI-LABEL: test_unsigned_v2f32_v2i50:1283; CHECK-GI:       // %bb.0:1284; CHECK-GI-NEXT:    fcvtl v0.2d, v0.2s1285; CHECK-GI-NEXT:    adrp x8, .LCPI32_01286; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI32_0]1287; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d1288; CHECK-GI-NEXT:    cmhi v2.2d, v1.2d, v0.2d1289; CHECK-GI-NEXT:    bif v0.16b, v1.16b, v2.16b1290; CHECK-GI-NEXT:    ret1291    %x = call <2 x i50> @llvm.fptoui.sat.v2f32.v2i50(<2 x float> %f)1292    ret <2 x i50> %x1293}1294 1295define <2 x i64> @test_unsigned_v2f32_v2i64(<2 x float> %f) {1296; CHECK-LABEL: test_unsigned_v2f32_v2i64:1297; CHECK:       // %bb.0:1298; CHECK-NEXT:    fcvtl v0.2d, v0.2s1299; CHECK-NEXT:    fcvtzu v0.2d, v0.2d1300; CHECK-NEXT:    ret1301    %x = call <2 x i64> @llvm.fptoui.sat.v2f32.v2i64(<2 x float> %f)1302    ret <2 x i64> %x1303}1304 1305define <2 x i100> @test_unsigned_v2f32_v2i100(<2 x float> %f) {1306; CHECK-SD-LABEL: test_unsigned_v2f32_v2i100:1307; CHECK-SD:       // %bb.0:1308; CHECK-SD-NEXT:    sub sp, sp, #641309; CHECK-SD-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill1310; CHECK-SD-NEXT:    stp x30, x21, [sp, #32] // 16-byte Folded Spill1311; CHECK-SD-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill1312; CHECK-SD-NEXT:    .cfi_def_cfa_offset 641313; CHECK-SD-NEXT:    .cfi_offset w19, -81314; CHECK-SD-NEXT:    .cfi_offset w20, -161315; CHECK-SD-NEXT:    .cfi_offset w21, -241316; CHECK-SD-NEXT:    .cfi_offset w30, -321317; CHECK-SD-NEXT:    .cfi_offset b8, -401318; CHECK-SD-NEXT:    .cfi_offset b9, -481319; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q01320; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1321; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q01322; CHECK-SD-NEXT:    bl __fixunssfti1323; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1324; CHECK-SD-NEXT:    mov w8, #1904214015 // =0x717fffff1325; CHECK-SD-NEXT:    mov x21, #68719476735 // =0xfffffffff1326; CHECK-SD-NEXT:    fmov s9, w81327; CHECK-SD-NEXT:    mov s8, v0.s[1]1328; CHECK-SD-NEXT:    fcmp s0, #0.01329; CHECK-SD-NEXT:    csel x8, xzr, x0, lt1330; CHECK-SD-NEXT:    csel x9, xzr, x1, lt1331; CHECK-SD-NEXT:    fcmp s0, s91332; CHECK-SD-NEXT:    fmov s0, s81333; CHECK-SD-NEXT:    csel x19, x21, x9, gt1334; CHECK-SD-NEXT:    csinv x20, x8, xzr, le1335; CHECK-SD-NEXT:    bl __fixunssfti1336; CHECK-SD-NEXT:    fcmp s8, #0.01337; CHECK-SD-NEXT:    csel x8, xzr, x0, lt1338; CHECK-SD-NEXT:    csel x9, xzr, x1, lt1339; CHECK-SD-NEXT:    fcmp s8, s91340; CHECK-SD-NEXT:    mov x0, x201341; CHECK-SD-NEXT:    mov x1, x191342; CHECK-SD-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload1343; CHECK-SD-NEXT:    csel x3, x21, x9, gt1344; CHECK-SD-NEXT:    ldp x30, x21, [sp, #32] // 16-byte Folded Reload1345; CHECK-SD-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload1346; CHECK-SD-NEXT:    csinv x2, x8, xzr, le1347; CHECK-SD-NEXT:    add sp, sp, #641348; CHECK-SD-NEXT:    ret1349;1350; CHECK-GI-LABEL: test_unsigned_v2f32_v2i100:1351; CHECK-GI:       // %bb.0:1352; CHECK-GI-NEXT:    sub sp, sp, #641353; CHECK-GI-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill1354; CHECK-GI-NEXT:    stp x30, x21, [sp, #32] // 16-byte Folded Spill1355; CHECK-GI-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill1356; CHECK-GI-NEXT:    .cfi_def_cfa_offset 641357; CHECK-GI-NEXT:    .cfi_offset w19, -81358; CHECK-GI-NEXT:    .cfi_offset w20, -161359; CHECK-GI-NEXT:    .cfi_offset w21, -241360; CHECK-GI-NEXT:    .cfi_offset w30, -321361; CHECK-GI-NEXT:    .cfi_offset b8, -401362; CHECK-GI-NEXT:    .cfi_offset b9, -481363; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q01364; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1365; CHECK-GI-NEXT:    mov s8, v0.s[1]1366; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q01367; CHECK-GI-NEXT:    bl __fixunssfti1368; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload1369; CHECK-GI-NEXT:    mov w8, #1904214015 // =0x717fffff1370; CHECK-GI-NEXT:    mov x21, #68719476735 // =0xfffffffff1371; CHECK-GI-NEXT:    fmov s9, w81372; CHECK-GI-NEXT:    fcmp s0, #0.01373; CHECK-GI-NEXT:    csel x8, xzr, x0, lt1374; CHECK-GI-NEXT:    csel x9, xzr, x1, lt1375; CHECK-GI-NEXT:    fcmp s0, s91376; CHECK-GI-NEXT:    fmov s0, s81377; CHECK-GI-NEXT:    csinv x19, x8, xzr, le1378; CHECK-GI-NEXT:    csel x20, x21, x9, gt1379; CHECK-GI-NEXT:    bl __fixunssfti1380; CHECK-GI-NEXT:    fcmp s8, #0.01381; CHECK-GI-NEXT:    csel x8, xzr, x0, lt1382; CHECK-GI-NEXT:    csel x9, xzr, x1, lt1383; CHECK-GI-NEXT:    fcmp s8, s91384; CHECK-GI-NEXT:    mov x0, x191385; CHECK-GI-NEXT:    mov x1, x201386; CHECK-GI-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload1387; CHECK-GI-NEXT:    csel x3, x21, x9, gt1388; CHECK-GI-NEXT:    ldp x30, x21, [sp, #32] // 16-byte Folded Reload1389; CHECK-GI-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload1390; CHECK-GI-NEXT:    csinv x2, x8, xzr, le1391; CHECK-GI-NEXT:    add sp, sp, #641392; CHECK-GI-NEXT:    ret1393    %x = call <2 x i100> @llvm.fptoui.sat.v2f32.v2i100(<2 x float> %f)1394    ret <2 x i100> %x1395}1396 1397define <2 x i128> @test_unsigned_v2f32_v2i128(<2 x float> %f) {1398; CHECK-SD-LABEL: test_unsigned_v2f32_v2i128:1399; CHECK-SD:       // %bb.0:1400; CHECK-SD-NEXT:    sub sp, sp, #641401; CHECK-SD-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill1402; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill1403; CHECK-SD-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill1404; CHECK-SD-NEXT:    .cfi_def_cfa_offset 641405; CHECK-SD-NEXT:    .cfi_offset w19, -81406; CHECK-SD-NEXT:    .cfi_offset w20, -161407; CHECK-SD-NEXT:    .cfi_offset w30, -321408; CHECK-SD-NEXT:    .cfi_offset b8, -401409; CHECK-SD-NEXT:    .cfi_offset b9, -481410; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q01411; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1412; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q01413; CHECK-SD-NEXT:    bl __fixunssfti1414; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1415; CHECK-SD-NEXT:    mov w8, #2139095039 // =0x7f7fffff1416; CHECK-SD-NEXT:    fmov s9, w81417; CHECK-SD-NEXT:    mov s8, v0.s[1]1418; CHECK-SD-NEXT:    fcmp s0, #0.01419; CHECK-SD-NEXT:    csel x8, xzr, x1, lt1420; CHECK-SD-NEXT:    csel x9, xzr, x0, lt1421; CHECK-SD-NEXT:    fcmp s0, s91422; CHECK-SD-NEXT:    fmov s0, s81423; CHECK-SD-NEXT:    csinv x19, x9, xzr, le1424; CHECK-SD-NEXT:    csinv x20, x8, xzr, le1425; CHECK-SD-NEXT:    bl __fixunssfti1426; CHECK-SD-NEXT:    fcmp s8, #0.01427; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload1428; CHECK-SD-NEXT:    csel x8, xzr, x1, lt1429; CHECK-SD-NEXT:    csel x9, xzr, x0, lt1430; CHECK-SD-NEXT:    fcmp s8, s91431; CHECK-SD-NEXT:    mov x0, x191432; CHECK-SD-NEXT:    mov x1, x201433; CHECK-SD-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload1434; CHECK-SD-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload1435; CHECK-SD-NEXT:    csinv x2, x9, xzr, le1436; CHECK-SD-NEXT:    csinv x3, x8, xzr, le1437; CHECK-SD-NEXT:    add sp, sp, #641438; CHECK-SD-NEXT:    ret1439;1440; CHECK-GI-LABEL: test_unsigned_v2f32_v2i128:1441; CHECK-GI:       // %bb.0:1442; CHECK-GI-NEXT:    sub sp, sp, #641443; CHECK-GI-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill1444; CHECK-GI-NEXT:    str x30, [sp, #32] // 8-byte Spill1445; CHECK-GI-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill1446; CHECK-GI-NEXT:    .cfi_def_cfa_offset 641447; CHECK-GI-NEXT:    .cfi_offset w19, -81448; CHECK-GI-NEXT:    .cfi_offset w20, -161449; CHECK-GI-NEXT:    .cfi_offset w30, -321450; CHECK-GI-NEXT:    .cfi_offset b8, -401451; CHECK-GI-NEXT:    .cfi_offset b9, -481452; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q01453; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1454; CHECK-GI-NEXT:    mov s8, v0.s[1]1455; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q01456; CHECK-GI-NEXT:    bl __fixunssfti1457; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload1458; CHECK-GI-NEXT:    mov w8, #2139095039 // =0x7f7fffff1459; CHECK-GI-NEXT:    fmov s9, w81460; CHECK-GI-NEXT:    fcmp s0, #0.01461; CHECK-GI-NEXT:    csel x8, xzr, x0, lt1462; CHECK-GI-NEXT:    csel x9, xzr, x1, lt1463; CHECK-GI-NEXT:    fcmp s0, s91464; CHECK-GI-NEXT:    fmov s0, s81465; CHECK-GI-NEXT:    csinv x19, x8, xzr, le1466; CHECK-GI-NEXT:    csinv x20, x9, xzr, le1467; CHECK-GI-NEXT:    bl __fixunssfti1468; CHECK-GI-NEXT:    fcmp s8, #0.01469; CHECK-GI-NEXT:    ldr x30, [sp, #32] // 8-byte Reload1470; CHECK-GI-NEXT:    csel x8, xzr, x0, lt1471; CHECK-GI-NEXT:    csel x9, xzr, x1, lt1472; CHECK-GI-NEXT:    fcmp s8, s91473; CHECK-GI-NEXT:    mov x0, x191474; CHECK-GI-NEXT:    mov x1, x201475; CHECK-GI-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload1476; CHECK-GI-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload1477; CHECK-GI-NEXT:    csinv x2, x8, xzr, le1478; CHECK-GI-NEXT:    csinv x3, x9, xzr, le1479; CHECK-GI-NEXT:    add sp, sp, #641480; CHECK-GI-NEXT:    ret1481    %x = call <2 x i128> @llvm.fptoui.sat.v2f32.v2i128(<2 x float> %f)1482    ret <2 x i128> %x1483}1484 1485;1486; 4-Vector float to unsigned integer -- result size variation1487;1488 1489declare <4 x   i1> @llvm.fptoui.sat.v4f32.v4i1  (<4 x float>)1490declare <4 x   i8> @llvm.fptoui.sat.v4f32.v4i8  (<4 x float>)1491declare <4 x  i13> @llvm.fptoui.sat.v4f32.v4i13 (<4 x float>)1492declare <4 x  i16> @llvm.fptoui.sat.v4f32.v4i16 (<4 x float>)1493declare <4 x  i19> @llvm.fptoui.sat.v4f32.v4i19 (<4 x float>)1494declare <4 x  i50> @llvm.fptoui.sat.v4f32.v4i50 (<4 x float>)1495declare <4 x  i64> @llvm.fptoui.sat.v4f32.v4i64 (<4 x float>)1496declare <4 x i100> @llvm.fptoui.sat.v4f32.v4i100(<4 x float>)1497declare <4 x i128> @llvm.fptoui.sat.v4f32.v4i128(<4 x float>)1498 1499define <4 x i1> @test_unsigned_v4f32_v4i1(<4 x float> %f) {1500; CHECK-LABEL: test_unsigned_v4f32_v4i1:1501; CHECK:       // %bb.0:1502; CHECK-NEXT:    movi v1.4s, #11503; CHECK-NEXT:    fcvtzu v0.4s, v0.4s1504; CHECK-NEXT:    umin v0.4s, v0.4s, v1.4s1505; CHECK-NEXT:    xtn v0.4h, v0.4s1506; CHECK-NEXT:    ret1507    %x = call <4 x i1> @llvm.fptoui.sat.v4f32.v4i1(<4 x float> %f)1508    ret <4 x i1> %x1509}1510 1511define <4 x i8> @test_unsigned_v4f32_v4i8(<4 x float> %f) {1512; CHECK-LABEL: test_unsigned_v4f32_v4i8:1513; CHECK:       // %bb.0:1514; CHECK-NEXT:    movi v1.2d, #0x0000ff000000ff1515; CHECK-NEXT:    fcvtzu v0.4s, v0.4s1516; CHECK-NEXT:    umin v0.4s, v0.4s, v1.4s1517; CHECK-NEXT:    xtn v0.4h, v0.4s1518; CHECK-NEXT:    ret1519    %x = call <4 x i8> @llvm.fptoui.sat.v4f32.v4i8(<4 x float> %f)1520    ret <4 x i8> %x1521}1522 1523define <4 x i13> @test_unsigned_v4f32_v4i13(<4 x float> %f) {1524; CHECK-LABEL: test_unsigned_v4f32_v4i13:1525; CHECK:       // %bb.0:1526; CHECK-NEXT:    movi v1.4s, #31, msl #81527; CHECK-NEXT:    fcvtzu v0.4s, v0.4s1528; CHECK-NEXT:    umin v0.4s, v0.4s, v1.4s1529; CHECK-NEXT:    xtn v0.4h, v0.4s1530; CHECK-NEXT:    ret1531    %x = call <4 x i13> @llvm.fptoui.sat.v4f32.v4i13(<4 x float> %f)1532    ret <4 x i13> %x1533}1534 1535define <4 x i16> @test_unsigned_v4f32_v4i16(<4 x float> %f) {1536; CHECK-LABEL: test_unsigned_v4f32_v4i16:1537; CHECK:       // %bb.0:1538; CHECK-NEXT:    fcvtzu v0.4s, v0.4s1539; CHECK-NEXT:    uqxtn v0.4h, v0.4s1540; CHECK-NEXT:    ret1541    %x = call <4 x i16> @llvm.fptoui.sat.v4f32.v4i16(<4 x float> %f)1542    ret <4 x i16> %x1543}1544 1545define <4 x i19> @test_unsigned_v4f32_v4i19(<4 x float> %f) {1546; CHECK-LABEL: test_unsigned_v4f32_v4i19:1547; CHECK:       // %bb.0:1548; CHECK-NEXT:    movi v1.4s, #7, msl #161549; CHECK-NEXT:    fcvtzu v0.4s, v0.4s1550; CHECK-NEXT:    umin v0.4s, v0.4s, v1.4s1551; CHECK-NEXT:    ret1552    %x = call <4 x i19> @llvm.fptoui.sat.v4f32.v4i19(<4 x float> %f)1553    ret <4 x i19> %x1554}1555 1556define <4 x i32> @test_unsigned_v4f32_v4i32_duplicate(<4 x float> %f) {1557; CHECK-LABEL: test_unsigned_v4f32_v4i32_duplicate:1558; CHECK:       // %bb.0:1559; CHECK-NEXT:    fcvtzu v0.4s, v0.4s1560; CHECK-NEXT:    ret1561    %x = call <4 x i32> @llvm.fptoui.sat.v4f32.v4i32(<4 x float> %f)1562    ret <4 x i32> %x1563}1564 1565define <4 x i50> @test_unsigned_v4f32_v4i50(<4 x float> %f) {1566; CHECK-LABEL: test_unsigned_v4f32_v4i50:1567; CHECK:       // %bb.0:1568; CHECK-NEXT:    ext v1.16b, v0.16b, v0.16b, #81569; CHECK-NEXT:    mov s3, v0.s[1]1570; CHECK-NEXT:    mov x8, #1125899906842623 // =0x3ffffffffffff1571; CHECK-NEXT:    fcvtzu x11, s01572; CHECK-NEXT:    mov s2, v1.s[1]1573; CHECK-NEXT:    fcvtzu x9, s11574; CHECK-NEXT:    fcvtzu x12, s31575; CHECK-NEXT:    fcvtzu x10, s21576; CHECK-NEXT:    cmp x9, x81577; CHECK-NEXT:    csel x2, x9, x8, lo1578; CHECK-NEXT:    cmp x10, x81579; CHECK-NEXT:    csel x3, x10, x8, lo1580; CHECK-NEXT:    cmp x11, x81581; CHECK-NEXT:    csel x0, x11, x8, lo1582; CHECK-NEXT:    cmp x12, x81583; CHECK-NEXT:    csel x1, x12, x8, lo1584; CHECK-NEXT:    ret1585    %x = call <4 x i50> @llvm.fptoui.sat.v4f32.v4i50(<4 x float> %f)1586    ret <4 x i50> %x1587}1588 1589define <4 x i64> @test_unsigned_v4f32_v4i64(<4 x float> %f) {1590; CHECK-SD-LABEL: test_unsigned_v4f32_v4i64:1591; CHECK-SD:       // %bb.0:1592; CHECK-SD-NEXT:    fcvtl2 v1.2d, v0.4s1593; CHECK-SD-NEXT:    fcvtl v0.2d, v0.2s1594; CHECK-SD-NEXT:    fcvtzu v1.2d, v1.2d1595; CHECK-SD-NEXT:    fcvtzu v0.2d, v0.2d1596; CHECK-SD-NEXT:    ret1597;1598; CHECK-GI-LABEL: test_unsigned_v4f32_v4i64:1599; CHECK-GI:       // %bb.0:1600; CHECK-GI-NEXT:    fcvtl v1.2d, v0.2s1601; CHECK-GI-NEXT:    fcvtl2 v2.2d, v0.4s1602; CHECK-GI-NEXT:    fcvtzu v0.2d, v1.2d1603; CHECK-GI-NEXT:    fcvtzu v1.2d, v2.2d1604; CHECK-GI-NEXT:    ret1605    %x = call <4 x i64> @llvm.fptoui.sat.v4f32.v4i64(<4 x float> %f)1606    ret <4 x i64> %x1607}1608 1609define <4 x i100> @test_unsigned_v4f32_v4i100(<4 x float> %f) {1610; CHECK-SD-LABEL: test_unsigned_v4f32_v4i100:1611; CHECK-SD:       // %bb.0:1612; CHECK-SD-NEXT:    sub sp, sp, #961613; CHECK-SD-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill1614; CHECK-SD-NEXT:    stp x30, x25, [sp, #32] // 16-byte Folded Spill1615; CHECK-SD-NEXT:    stp x24, x23, [sp, #48] // 16-byte Folded Spill1616; CHECK-SD-NEXT:    stp x22, x21, [sp, #64] // 16-byte Folded Spill1617; CHECK-SD-NEXT:    stp x20, x19, [sp, #80] // 16-byte Folded Spill1618; CHECK-SD-NEXT:    .cfi_def_cfa_offset 961619; CHECK-SD-NEXT:    .cfi_offset w19, -81620; CHECK-SD-NEXT:    .cfi_offset w20, -161621; CHECK-SD-NEXT:    .cfi_offset w21, -241622; CHECK-SD-NEXT:    .cfi_offset w22, -321623; CHECK-SD-NEXT:    .cfi_offset w23, -401624; CHECK-SD-NEXT:    .cfi_offset w24, -481625; CHECK-SD-NEXT:    .cfi_offset w25, -561626; CHECK-SD-NEXT:    .cfi_offset w30, -641627; CHECK-SD-NEXT:    .cfi_offset b8, -721628; CHECK-SD-NEXT:    .cfi_offset b9, -801629; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1630; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q01631; CHECK-SD-NEXT:    bl __fixunssfti1632; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1633; CHECK-SD-NEXT:    mov w8, #1904214015 // =0x717fffff1634; CHECK-SD-NEXT:    mov x25, #68719476735 // =0xfffffffff1635; CHECK-SD-NEXT:    fmov s9, w81636; CHECK-SD-NEXT:    mov s8, v0.s[1]1637; CHECK-SD-NEXT:    fcmp s0, #0.01638; CHECK-SD-NEXT:    csel x8, xzr, x0, lt1639; CHECK-SD-NEXT:    csel x9, xzr, x1, lt1640; CHECK-SD-NEXT:    fcmp s0, s91641; CHECK-SD-NEXT:    fmov s0, s81642; CHECK-SD-NEXT:    csel x19, x25, x9, gt1643; CHECK-SD-NEXT:    csinv x20, x8, xzr, le1644; CHECK-SD-NEXT:    bl __fixunssfti1645; CHECK-SD-NEXT:    fcmp s8, #0.01646; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1647; CHECK-SD-NEXT:    ext v0.16b, v0.16b, v0.16b, #81648; CHECK-SD-NEXT:    csel x8, xzr, x0, lt1649; CHECK-SD-NEXT:    csel x9, xzr, x1, lt1650; CHECK-SD-NEXT:    fcmp s8, s91651; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1652; CHECK-SD-NEXT:    csel x21, x25, x9, gt1653; CHECK-SD-NEXT:    csinv x22, x8, xzr, le1654; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q01655; CHECK-SD-NEXT:    bl __fixunssfti1656; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1657; CHECK-SD-NEXT:    mov s8, v0.s[1]1658; CHECK-SD-NEXT:    fcmp s0, #0.01659; CHECK-SD-NEXT:    csel x8, xzr, x0, lt1660; CHECK-SD-NEXT:    csel x9, xzr, x1, lt1661; CHECK-SD-NEXT:    fcmp s0, s91662; CHECK-SD-NEXT:    fmov s0, s81663; CHECK-SD-NEXT:    csel x23, x25, x9, gt1664; CHECK-SD-NEXT:    csinv x24, x8, xzr, le1665; CHECK-SD-NEXT:    bl __fixunssfti1666; CHECK-SD-NEXT:    fcmp s8, #0.01667; CHECK-SD-NEXT:    mov x2, x221668; CHECK-SD-NEXT:    mov x3, x211669; CHECK-SD-NEXT:    mov x4, x241670; CHECK-SD-NEXT:    mov x5, x231671; CHECK-SD-NEXT:    ldp x22, x21, [sp, #64] // 16-byte Folded Reload1672; CHECK-SD-NEXT:    csel x8, xzr, x0, lt1673; CHECK-SD-NEXT:    csel x9, xzr, x1, lt1674; CHECK-SD-NEXT:    fcmp s8, s91675; CHECK-SD-NEXT:    mov x0, x201676; CHECK-SD-NEXT:    mov x1, x191677; CHECK-SD-NEXT:    ldp x20, x19, [sp, #80] // 16-byte Folded Reload1678; CHECK-SD-NEXT:    csel x7, x25, x9, gt1679; CHECK-SD-NEXT:    ldp x24, x23, [sp, #48] // 16-byte Folded Reload1680; CHECK-SD-NEXT:    ldp x30, x25, [sp, #32] // 16-byte Folded Reload1681; CHECK-SD-NEXT:    csinv x6, x8, xzr, le1682; CHECK-SD-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload1683; CHECK-SD-NEXT:    add sp, sp, #961684; CHECK-SD-NEXT:    ret1685;1686; CHECK-GI-LABEL: test_unsigned_v4f32_v4i100:1687; CHECK-GI:       // %bb.0:1688; CHECK-GI-NEXT:    sub sp, sp, #1121689; CHECK-GI-NEXT:    stp d11, d10, [sp, #16] // 16-byte Folded Spill1690; CHECK-GI-NEXT:    stp d9, d8, [sp, #32] // 16-byte Folded Spill1691; CHECK-GI-NEXT:    stp x30, x25, [sp, #48] // 16-byte Folded Spill1692; CHECK-GI-NEXT:    stp x24, x23, [sp, #64] // 16-byte Folded Spill1693; CHECK-GI-NEXT:    stp x22, x21, [sp, #80] // 16-byte Folded Spill1694; CHECK-GI-NEXT:    stp x20, x19, [sp, #96] // 16-byte Folded Spill1695; CHECK-GI-NEXT:    .cfi_def_cfa_offset 1121696; CHECK-GI-NEXT:    .cfi_offset w19, -81697; CHECK-GI-NEXT:    .cfi_offset w20, -161698; CHECK-GI-NEXT:    .cfi_offset w21, -241699; CHECK-GI-NEXT:    .cfi_offset w22, -321700; CHECK-GI-NEXT:    .cfi_offset w23, -401701; CHECK-GI-NEXT:    .cfi_offset w24, -481702; CHECK-GI-NEXT:    .cfi_offset w25, -561703; CHECK-GI-NEXT:    .cfi_offset w30, -641704; CHECK-GI-NEXT:    .cfi_offset b8, -721705; CHECK-GI-NEXT:    .cfi_offset b9, -801706; CHECK-GI-NEXT:    .cfi_offset b10, -881707; CHECK-GI-NEXT:    .cfi_offset b11, -961708; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1709; CHECK-GI-NEXT:    mov s8, v0.s[1]1710; CHECK-GI-NEXT:    mov s9, v0.s[2]1711; CHECK-GI-NEXT:    mov s10, v0.s[3]1712; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q01713; CHECK-GI-NEXT:    bl __fixunssfti1714; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload1715; CHECK-GI-NEXT:    mov w8, #1904214015 // =0x717fffff1716; CHECK-GI-NEXT:    mov x25, #68719476735 // =0xfffffffff1717; CHECK-GI-NEXT:    fmov s11, w81718; CHECK-GI-NEXT:    fcmp s0, #0.01719; CHECK-GI-NEXT:    csel x8, xzr, x0, lt1720; CHECK-GI-NEXT:    csel x9, xzr, x1, lt1721; CHECK-GI-NEXT:    fcmp s0, s111722; CHECK-GI-NEXT:    fmov s0, s81723; CHECK-GI-NEXT:    csinv x19, x8, xzr, le1724; CHECK-GI-NEXT:    csel x20, x25, x9, gt1725; CHECK-GI-NEXT:    bl __fixunssfti1726; CHECK-GI-NEXT:    fcmp s8, #0.01727; CHECK-GI-NEXT:    fmov s0, s91728; CHECK-GI-NEXT:    csel x8, xzr, x0, lt1729; CHECK-GI-NEXT:    csel x9, xzr, x1, lt1730; CHECK-GI-NEXT:    fcmp s8, s111731; CHECK-GI-NEXT:    csinv x21, x8, xzr, le1732; CHECK-GI-NEXT:    csel x22, x25, x9, gt1733; CHECK-GI-NEXT:    bl __fixunssfti1734; CHECK-GI-NEXT:    fcmp s9, #0.01735; CHECK-GI-NEXT:    fmov s0, s101736; CHECK-GI-NEXT:    csel x8, xzr, x0, lt1737; CHECK-GI-NEXT:    csel x9, xzr, x1, lt1738; CHECK-GI-NEXT:    fcmp s9, s111739; CHECK-GI-NEXT:    csinv x23, x8, xzr, le1740; CHECK-GI-NEXT:    csel x24, x25, x9, gt1741; CHECK-GI-NEXT:    bl __fixunssfti1742; CHECK-GI-NEXT:    fcmp s10, #0.01743; CHECK-GI-NEXT:    mov x2, x211744; CHECK-GI-NEXT:    mov x3, x221745; CHECK-GI-NEXT:    mov x4, x231746; CHECK-GI-NEXT:    mov x5, x241747; CHECK-GI-NEXT:    ldp x22, x21, [sp, #80] // 16-byte Folded Reload1748; CHECK-GI-NEXT:    csel x8, xzr, x0, lt1749; CHECK-GI-NEXT:    csel x9, xzr, x1, lt1750; CHECK-GI-NEXT:    fcmp s10, s111751; CHECK-GI-NEXT:    mov x0, x191752; CHECK-GI-NEXT:    mov x1, x201753; CHECK-GI-NEXT:    ldp x20, x19, [sp, #96] // 16-byte Folded Reload1754; CHECK-GI-NEXT:    csel x7, x25, x9, gt1755; CHECK-GI-NEXT:    ldp x24, x23, [sp, #64] // 16-byte Folded Reload1756; CHECK-GI-NEXT:    ldp x30, x25, [sp, #48] // 16-byte Folded Reload1757; CHECK-GI-NEXT:    csinv x6, x8, xzr, le1758; CHECK-GI-NEXT:    ldp d9, d8, [sp, #32] // 16-byte Folded Reload1759; CHECK-GI-NEXT:    ldp d11, d10, [sp, #16] // 16-byte Folded Reload1760; CHECK-GI-NEXT:    add sp, sp, #1121761; CHECK-GI-NEXT:    ret1762    %x = call <4 x i100> @llvm.fptoui.sat.v4f32.v4i100(<4 x float> %f)1763    ret <4 x i100> %x1764}1765 1766define <4 x i128> @test_unsigned_v4f32_v4i128(<4 x float> %f) {1767; CHECK-SD-LABEL: test_unsigned_v4f32_v4i128:1768; CHECK-SD:       // %bb.0:1769; CHECK-SD-NEXT:    sub sp, sp, #961770; CHECK-SD-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill1771; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill1772; CHECK-SD-NEXT:    stp x24, x23, [sp, #48] // 16-byte Folded Spill1773; CHECK-SD-NEXT:    stp x22, x21, [sp, #64] // 16-byte Folded Spill1774; CHECK-SD-NEXT:    stp x20, x19, [sp, #80] // 16-byte Folded Spill1775; CHECK-SD-NEXT:    .cfi_def_cfa_offset 961776; CHECK-SD-NEXT:    .cfi_offset w19, -81777; CHECK-SD-NEXT:    .cfi_offset w20, -161778; CHECK-SD-NEXT:    .cfi_offset w21, -241779; CHECK-SD-NEXT:    .cfi_offset w22, -321780; CHECK-SD-NEXT:    .cfi_offset w23, -401781; CHECK-SD-NEXT:    .cfi_offset w24, -481782; CHECK-SD-NEXT:    .cfi_offset w30, -641783; CHECK-SD-NEXT:    .cfi_offset b8, -721784; CHECK-SD-NEXT:    .cfi_offset b9, -801785; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1786; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q01787; CHECK-SD-NEXT:    bl __fixunssfti1788; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1789; CHECK-SD-NEXT:    mov w8, #2139095039 // =0x7f7fffff1790; CHECK-SD-NEXT:    fmov s9, w81791; CHECK-SD-NEXT:    mov s8, v0.s[1]1792; CHECK-SD-NEXT:    fcmp s0, #0.01793; CHECK-SD-NEXT:    csel x8, xzr, x1, lt1794; CHECK-SD-NEXT:    csel x9, xzr, x0, lt1795; CHECK-SD-NEXT:    fcmp s0, s91796; CHECK-SD-NEXT:    fmov s0, s81797; CHECK-SD-NEXT:    csinv x19, x9, xzr, le1798; CHECK-SD-NEXT:    csinv x20, x8, xzr, le1799; CHECK-SD-NEXT:    bl __fixunssfti1800; CHECK-SD-NEXT:    fcmp s8, #0.01801; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1802; CHECK-SD-NEXT:    ext v0.16b, v0.16b, v0.16b, #81803; CHECK-SD-NEXT:    csel x8, xzr, x1, lt1804; CHECK-SD-NEXT:    csel x9, xzr, x0, lt1805; CHECK-SD-NEXT:    fcmp s8, s91806; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1807; CHECK-SD-NEXT:    csinv x21, x9, xzr, le1808; CHECK-SD-NEXT:    csinv x22, x8, xzr, le1809; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q01810; CHECK-SD-NEXT:    bl __fixunssfti1811; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1812; CHECK-SD-NEXT:    mov s8, v0.s[1]1813; CHECK-SD-NEXT:    fcmp s0, #0.01814; CHECK-SD-NEXT:    csel x8, xzr, x1, lt1815; CHECK-SD-NEXT:    csel x9, xzr, x0, lt1816; CHECK-SD-NEXT:    fcmp s0, s91817; CHECK-SD-NEXT:    fmov s0, s81818; CHECK-SD-NEXT:    csinv x23, x9, xzr, le1819; CHECK-SD-NEXT:    csinv x24, x8, xzr, le1820; CHECK-SD-NEXT:    bl __fixunssfti1821; CHECK-SD-NEXT:    fcmp s8, #0.01822; CHECK-SD-NEXT:    mov x2, x211823; CHECK-SD-NEXT:    mov x3, x221824; CHECK-SD-NEXT:    mov x4, x231825; CHECK-SD-NEXT:    mov x5, x241826; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload1827; CHECK-SD-NEXT:    ldp x22, x21, [sp, #64] // 16-byte Folded Reload1828; CHECK-SD-NEXT:    csel x8, xzr, x1, lt1829; CHECK-SD-NEXT:    csel x9, xzr, x0, lt1830; CHECK-SD-NEXT:    fcmp s8, s91831; CHECK-SD-NEXT:    mov x0, x191832; CHECK-SD-NEXT:    mov x1, x201833; CHECK-SD-NEXT:    ldp x20, x19, [sp, #80] // 16-byte Folded Reload1834; CHECK-SD-NEXT:    ldp x24, x23, [sp, #48] // 16-byte Folded Reload1835; CHECK-SD-NEXT:    csinv x6, x9, xzr, le1836; CHECK-SD-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload1837; CHECK-SD-NEXT:    csinv x7, x8, xzr, le1838; CHECK-SD-NEXT:    add sp, sp, #961839; CHECK-SD-NEXT:    ret1840;1841; CHECK-GI-LABEL: test_unsigned_v4f32_v4i128:1842; CHECK-GI:       // %bb.0:1843; CHECK-GI-NEXT:    sub sp, sp, #1121844; CHECK-GI-NEXT:    stp d11, d10, [sp, #16] // 16-byte Folded Spill1845; CHECK-GI-NEXT:    stp d9, d8, [sp, #32] // 16-byte Folded Spill1846; CHECK-GI-NEXT:    str x30, [sp, #48] // 8-byte Spill1847; CHECK-GI-NEXT:    stp x24, x23, [sp, #64] // 16-byte Folded Spill1848; CHECK-GI-NEXT:    stp x22, x21, [sp, #80] // 16-byte Folded Spill1849; CHECK-GI-NEXT:    stp x20, x19, [sp, #96] // 16-byte Folded Spill1850; CHECK-GI-NEXT:    .cfi_def_cfa_offset 1121851; CHECK-GI-NEXT:    .cfi_offset w19, -81852; CHECK-GI-NEXT:    .cfi_offset w20, -161853; CHECK-GI-NEXT:    .cfi_offset w21, -241854; CHECK-GI-NEXT:    .cfi_offset w22, -321855; CHECK-GI-NEXT:    .cfi_offset w23, -401856; CHECK-GI-NEXT:    .cfi_offset w24, -481857; CHECK-GI-NEXT:    .cfi_offset w30, -641858; CHECK-GI-NEXT:    .cfi_offset b8, -721859; CHECK-GI-NEXT:    .cfi_offset b9, -801860; CHECK-GI-NEXT:    .cfi_offset b10, -881861; CHECK-GI-NEXT:    .cfi_offset b11, -961862; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1863; CHECK-GI-NEXT:    mov s8, v0.s[1]1864; CHECK-GI-NEXT:    mov s9, v0.s[2]1865; CHECK-GI-NEXT:    mov s10, v0.s[3]1866; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q01867; CHECK-GI-NEXT:    bl __fixunssfti1868; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload1869; CHECK-GI-NEXT:    mov w8, #2139095039 // =0x7f7fffff1870; CHECK-GI-NEXT:    fmov s11, w81871; CHECK-GI-NEXT:    fcmp s0, #0.01872; CHECK-GI-NEXT:    csel x8, xzr, x0, lt1873; CHECK-GI-NEXT:    csel x9, xzr, x1, lt1874; CHECK-GI-NEXT:    fcmp s0, s111875; CHECK-GI-NEXT:    fmov s0, s81876; CHECK-GI-NEXT:    csinv x19, x8, xzr, le1877; CHECK-GI-NEXT:    csinv x20, x9, xzr, le1878; CHECK-GI-NEXT:    bl __fixunssfti1879; CHECK-GI-NEXT:    fcmp s8, #0.01880; CHECK-GI-NEXT:    fmov s0, s91881; CHECK-GI-NEXT:    csel x8, xzr, x0, lt1882; CHECK-GI-NEXT:    csel x9, xzr, x1, lt1883; CHECK-GI-NEXT:    fcmp s8, s111884; CHECK-GI-NEXT:    csinv x21, x8, xzr, le1885; CHECK-GI-NEXT:    csinv x22, x9, xzr, le1886; CHECK-GI-NEXT:    bl __fixunssfti1887; CHECK-GI-NEXT:    fcmp s9, #0.01888; CHECK-GI-NEXT:    fmov s0, s101889; CHECK-GI-NEXT:    csel x8, xzr, x0, lt1890; CHECK-GI-NEXT:    csel x9, xzr, x1, lt1891; CHECK-GI-NEXT:    fcmp s9, s111892; CHECK-GI-NEXT:    csinv x23, x8, xzr, le1893; CHECK-GI-NEXT:    csinv x24, x9, xzr, le1894; CHECK-GI-NEXT:    bl __fixunssfti1895; CHECK-GI-NEXT:    fcmp s10, #0.01896; CHECK-GI-NEXT:    mov x2, x211897; CHECK-GI-NEXT:    mov x3, x221898; CHECK-GI-NEXT:    mov x4, x231899; CHECK-GI-NEXT:    mov x5, x241900; CHECK-GI-NEXT:    ldr x30, [sp, #48] // 8-byte Reload1901; CHECK-GI-NEXT:    ldp x22, x21, [sp, #80] // 16-byte Folded Reload1902; CHECK-GI-NEXT:    csel x8, xzr, x0, lt1903; CHECK-GI-NEXT:    csel x9, xzr, x1, lt1904; CHECK-GI-NEXT:    fcmp s10, s111905; CHECK-GI-NEXT:    mov x0, x191906; CHECK-GI-NEXT:    mov x1, x201907; CHECK-GI-NEXT:    ldp x20, x19, [sp, #96] // 16-byte Folded Reload1908; CHECK-GI-NEXT:    ldp x24, x23, [sp, #64] // 16-byte Folded Reload1909; CHECK-GI-NEXT:    csinv x6, x8, xzr, le1910; CHECK-GI-NEXT:    ldp d9, d8, [sp, #32] // 16-byte Folded Reload1911; CHECK-GI-NEXT:    csinv x7, x9, xzr, le1912; CHECK-GI-NEXT:    ldp d11, d10, [sp, #16] // 16-byte Folded Reload1913; CHECK-GI-NEXT:    add sp, sp, #1121914; CHECK-GI-NEXT:    ret1915    %x = call <4 x i128> @llvm.fptoui.sat.v4f32.v4i128(<4 x float> %f)1916    ret <4 x i128> %x1917}1918 1919;1920; 2-Vector double to unsigned integer -- result size variation1921;1922 1923declare <2 x   i1> @llvm.fptoui.sat.v2f64.v2i1  (<2 x double>)1924declare <2 x   i8> @llvm.fptoui.sat.v2f64.v2i8  (<2 x double>)1925declare <2 x  i13> @llvm.fptoui.sat.v2f64.v2i13 (<2 x double>)1926declare <2 x  i16> @llvm.fptoui.sat.v2f64.v2i16 (<2 x double>)1927declare <2 x  i19> @llvm.fptoui.sat.v2f64.v2i19 (<2 x double>)1928declare <2 x  i50> @llvm.fptoui.sat.v2f64.v2i50 (<2 x double>)1929declare <2 x  i64> @llvm.fptoui.sat.v2f64.v2i64 (<2 x double>)1930declare <2 x i100> @llvm.fptoui.sat.v2f64.v2i100(<2 x double>)1931declare <2 x i128> @llvm.fptoui.sat.v2f64.v2i128(<2 x double>)1932 1933define <2 x i1> @test_unsigned_v2f64_v2i1(<2 x double> %f) {1934; CHECK-SD-LABEL: test_unsigned_v2f64_v2i1:1935; CHECK-SD:       // %bb.0:1936; CHECK-SD-NEXT:    mov d1, v0.d[1]1937; CHECK-SD-NEXT:    fcvtzu w9, d01938; CHECK-SD-NEXT:    fcvtzu w8, d11939; CHECK-SD-NEXT:    cmp w8, #11940; CHECK-SD-NEXT:    csinc w8, w8, wzr, lo1941; CHECK-SD-NEXT:    cmp w9, #11942; CHECK-SD-NEXT:    csinc w9, w9, wzr, lo1943; CHECK-SD-NEXT:    fmov s0, w91944; CHECK-SD-NEXT:    mov v0.s[1], w81945; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q01946; CHECK-SD-NEXT:    ret1947;1948; CHECK-GI-LABEL: test_unsigned_v2f64_v2i1:1949; CHECK-GI:       // %bb.0:1950; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d1951; CHECK-GI-NEXT:    adrp x8, .LCPI46_01952; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI46_0]1953; CHECK-GI-NEXT:    cmhi v2.2d, v1.2d, v0.2d1954; CHECK-GI-NEXT:    bif v0.16b, v1.16b, v2.16b1955; CHECK-GI-NEXT:    xtn v0.2s, v0.2d1956; CHECK-GI-NEXT:    ret1957    %x = call <2 x i1> @llvm.fptoui.sat.v2f64.v2i1(<2 x double> %f)1958    ret <2 x i1> %x1959}1960 1961define <2 x i8> @test_unsigned_v2f64_v2i8(<2 x double> %f) {1962; CHECK-SD-LABEL: test_unsigned_v2f64_v2i8:1963; CHECK-SD:       // %bb.0:1964; CHECK-SD-NEXT:    mov d1, v0.d[1]1965; CHECK-SD-NEXT:    fcvtzu w10, d01966; CHECK-SD-NEXT:    mov w8, #255 // =0xff1967; CHECK-SD-NEXT:    fcvtzu w9, d11968; CHECK-SD-NEXT:    cmp w9, #2551969; CHECK-SD-NEXT:    csel w9, w9, w8, lo1970; CHECK-SD-NEXT:    cmp w10, #2551971; CHECK-SD-NEXT:    csel w8, w10, w8, lo1972; CHECK-SD-NEXT:    fmov s0, w81973; CHECK-SD-NEXT:    mov v0.s[1], w91974; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q01975; CHECK-SD-NEXT:    ret1976;1977; CHECK-GI-LABEL: test_unsigned_v2f64_v2i8:1978; CHECK-GI:       // %bb.0:1979; CHECK-GI-NEXT:    movi v1.2d, #0x000000000000ff1980; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d1981; CHECK-GI-NEXT:    cmhi v2.2d, v1.2d, v0.2d1982; CHECK-GI-NEXT:    bif v0.16b, v1.16b, v2.16b1983; CHECK-GI-NEXT:    xtn v0.2s, v0.2d1984; CHECK-GI-NEXT:    ret1985    %x = call <2 x i8> @llvm.fptoui.sat.v2f64.v2i8(<2 x double> %f)1986    ret <2 x i8> %x1987}1988 1989define <2 x i13> @test_unsigned_v2f64_v2i13(<2 x double> %f) {1990; CHECK-SD-LABEL: test_unsigned_v2f64_v2i13:1991; CHECK-SD:       // %bb.0:1992; CHECK-SD-NEXT:    mov d1, v0.d[1]1993; CHECK-SD-NEXT:    fcvtzu w9, d01994; CHECK-SD-NEXT:    mov w10, #8191 // =0x1fff1995; CHECK-SD-NEXT:    fcvtzu w8, d11996; CHECK-SD-NEXT:    cmp w8, w101997; CHECK-SD-NEXT:    csel w8, w8, w10, lo1998; CHECK-SD-NEXT:    cmp w9, w101999; CHECK-SD-NEXT:    csel w9, w9, w10, lo2000; CHECK-SD-NEXT:    fmov s0, w92001; CHECK-SD-NEXT:    mov v0.s[1], w82002; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q02003; CHECK-SD-NEXT:    ret2004;2005; CHECK-GI-LABEL: test_unsigned_v2f64_v2i13:2006; CHECK-GI:       // %bb.0:2007; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d2008; CHECK-GI-NEXT:    adrp x8, .LCPI48_02009; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI48_0]2010; CHECK-GI-NEXT:    cmhi v2.2d, v1.2d, v0.2d2011; CHECK-GI-NEXT:    bif v0.16b, v1.16b, v2.16b2012; CHECK-GI-NEXT:    xtn v0.2s, v0.2d2013; CHECK-GI-NEXT:    ret2014    %x = call <2 x i13> @llvm.fptoui.sat.v2f64.v2i13(<2 x double> %f)2015    ret <2 x i13> %x2016}2017 2018define <2 x i16> @test_unsigned_v2f64_v2i16(<2 x double> %f) {2019; CHECK-SD-LABEL: test_unsigned_v2f64_v2i16:2020; CHECK-SD:       // %bb.0:2021; CHECK-SD-NEXT:    mov d1, v0.d[1]2022; CHECK-SD-NEXT:    fcvtzu w9, d02023; CHECK-SD-NEXT:    mov w10, #65535 // =0xffff2024; CHECK-SD-NEXT:    fcvtzu w8, d12025; CHECK-SD-NEXT:    cmp w8, w102026; CHECK-SD-NEXT:    csel w8, w8, w10, lo2027; CHECK-SD-NEXT:    cmp w9, w102028; CHECK-SD-NEXT:    csel w9, w9, w10, lo2029; CHECK-SD-NEXT:    fmov s0, w92030; CHECK-SD-NEXT:    mov v0.s[1], w82031; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q02032; CHECK-SD-NEXT:    ret2033;2034; CHECK-GI-LABEL: test_unsigned_v2f64_v2i16:2035; CHECK-GI:       // %bb.0:2036; CHECK-GI-NEXT:    movi v1.2d, #0x0000000000ffff2037; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d2038; CHECK-GI-NEXT:    cmhi v2.2d, v1.2d, v0.2d2039; CHECK-GI-NEXT:    bif v0.16b, v1.16b, v2.16b2040; CHECK-GI-NEXT:    xtn v0.2s, v0.2d2041; CHECK-GI-NEXT:    ret2042    %x = call <2 x i16> @llvm.fptoui.sat.v2f64.v2i16(<2 x double> %f)2043    ret <2 x i16> %x2044}2045 2046define <2 x i19> @test_unsigned_v2f64_v2i19(<2 x double> %f) {2047; CHECK-SD-LABEL: test_unsigned_v2f64_v2i19:2048; CHECK-SD:       // %bb.0:2049; CHECK-SD-NEXT:    mov d1, v0.d[1]2050; CHECK-SD-NEXT:    fcvtzu w9, d02051; CHECK-SD-NEXT:    mov w10, #524287 // =0x7ffff2052; CHECK-SD-NEXT:    fcvtzu w8, d12053; CHECK-SD-NEXT:    cmp w8, w102054; CHECK-SD-NEXT:    csel w8, w8, w10, lo2055; CHECK-SD-NEXT:    cmp w9, w102056; CHECK-SD-NEXT:    csel w9, w9, w10, lo2057; CHECK-SD-NEXT:    fmov s0, w92058; CHECK-SD-NEXT:    mov v0.s[1], w82059; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q02060; CHECK-SD-NEXT:    ret2061;2062; CHECK-GI-LABEL: test_unsigned_v2f64_v2i19:2063; CHECK-GI:       // %bb.0:2064; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d2065; CHECK-GI-NEXT:    adrp x8, .LCPI50_02066; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI50_0]2067; CHECK-GI-NEXT:    cmhi v2.2d, v1.2d, v0.2d2068; CHECK-GI-NEXT:    bif v0.16b, v1.16b, v2.16b2069; CHECK-GI-NEXT:    xtn v0.2s, v0.2d2070; CHECK-GI-NEXT:    ret2071    %x = call <2 x i19> @llvm.fptoui.sat.v2f64.v2i19(<2 x double> %f)2072    ret <2 x i19> %x2073}2074 2075define <2 x i32> @test_unsigned_v2f64_v2i32_duplicate(<2 x double> %f) {2076; CHECK-SD-LABEL: test_unsigned_v2f64_v2i32_duplicate:2077; CHECK-SD:       // %bb.0:2078; CHECK-SD-NEXT:    mov d1, v0.d[1]2079; CHECK-SD-NEXT:    fcvtzu w8, d02080; CHECK-SD-NEXT:    fcvtzu w9, d12081; CHECK-SD-NEXT:    fmov s0, w82082; CHECK-SD-NEXT:    mov v0.s[1], w92083; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q02084; CHECK-SD-NEXT:    ret2085;2086; CHECK-GI-LABEL: test_unsigned_v2f64_v2i32_duplicate:2087; CHECK-GI:       // %bb.0:2088; CHECK-GI-NEXT:    movi v1.2d, #0x000000ffffffff2089; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d2090; CHECK-GI-NEXT:    cmhi v2.2d, v1.2d, v0.2d2091; CHECK-GI-NEXT:    bif v0.16b, v1.16b, v2.16b2092; CHECK-GI-NEXT:    xtn v0.2s, v0.2d2093; CHECK-GI-NEXT:    ret2094    %x = call <2 x i32> @llvm.fptoui.sat.v2f64.v2i32(<2 x double> %f)2095    ret <2 x i32> %x2096}2097 2098define <2 x i50> @test_unsigned_v2f64_v2i50(<2 x double> %f) {2099; CHECK-SD-LABEL: test_unsigned_v2f64_v2i50:2100; CHECK-SD:       // %bb.0:2101; CHECK-SD-NEXT:    mov d1, v0.d[1]2102; CHECK-SD-NEXT:    fcvtzu x9, d02103; CHECK-SD-NEXT:    mov x10, #1125899906842623 // =0x3ffffffffffff2104; CHECK-SD-NEXT:    fcvtzu x8, d12105; CHECK-SD-NEXT:    cmp x8, x102106; CHECK-SD-NEXT:    csel x8, x8, x10, lo2107; CHECK-SD-NEXT:    cmp x9, x102108; CHECK-SD-NEXT:    csel x9, x9, x10, lo2109; CHECK-SD-NEXT:    fmov d0, x92110; CHECK-SD-NEXT:    mov v0.d[1], x82111; CHECK-SD-NEXT:    ret2112;2113; CHECK-GI-LABEL: test_unsigned_v2f64_v2i50:2114; CHECK-GI:       // %bb.0:2115; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d2116; CHECK-GI-NEXT:    adrp x8, .LCPI52_02117; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI52_0]2118; CHECK-GI-NEXT:    cmhi v2.2d, v1.2d, v0.2d2119; CHECK-GI-NEXT:    bif v0.16b, v1.16b, v2.16b2120; CHECK-GI-NEXT:    ret2121    %x = call <2 x i50> @llvm.fptoui.sat.v2f64.v2i50(<2 x double> %f)2122    ret <2 x i50> %x2123}2124 2125define <2 x i64> @test_unsigned_v2f64_v2i64(<2 x double> %f) {2126; CHECK-LABEL: test_unsigned_v2f64_v2i64:2127; CHECK:       // %bb.0:2128; CHECK-NEXT:    fcvtzu v0.2d, v0.2d2129; CHECK-NEXT:    ret2130    %x = call <2 x i64> @llvm.fptoui.sat.v2f64.v2i64(<2 x double> %f)2131    ret <2 x i64> %x2132}2133 2134define <2 x i100> @test_unsigned_v2f64_v2i100(<2 x double> %f) {2135; CHECK-SD-LABEL: test_unsigned_v2f64_v2i100:2136; CHECK-SD:       // %bb.0:2137; CHECK-SD-NEXT:    sub sp, sp, #642138; CHECK-SD-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill2139; CHECK-SD-NEXT:    stp x30, x21, [sp, #32] // 16-byte Folded Spill2140; CHECK-SD-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill2141; CHECK-SD-NEXT:    .cfi_def_cfa_offset 642142; CHECK-SD-NEXT:    .cfi_offset w19, -82143; CHECK-SD-NEXT:    .cfi_offset w20, -162144; CHECK-SD-NEXT:    .cfi_offset w21, -242145; CHECK-SD-NEXT:    .cfi_offset w30, -322146; CHECK-SD-NEXT:    .cfi_offset b8, -402147; CHECK-SD-NEXT:    .cfi_offset b9, -482148; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill2149; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q02150; CHECK-SD-NEXT:    bl __fixunsdfti2151; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2152; CHECK-SD-NEXT:    mov x8, #5057542381537067007 // =0x462fffffffffffff2153; CHECK-SD-NEXT:    mov x21, #68719476735 // =0xfffffffff2154; CHECK-SD-NEXT:    fmov d9, x82155; CHECK-SD-NEXT:    mov d8, v0.d[1]2156; CHECK-SD-NEXT:    fcmp d0, #0.02157; CHECK-SD-NEXT:    csel x8, xzr, x0, lt2158; CHECK-SD-NEXT:    csel x9, xzr, x1, lt2159; CHECK-SD-NEXT:    fcmp d0, d92160; CHECK-SD-NEXT:    fmov d0, d82161; CHECK-SD-NEXT:    csel x19, x21, x9, gt2162; CHECK-SD-NEXT:    csinv x20, x8, xzr, le2163; CHECK-SD-NEXT:    bl __fixunsdfti2164; CHECK-SD-NEXT:    fcmp d8, #0.02165; CHECK-SD-NEXT:    csel x8, xzr, x0, lt2166; CHECK-SD-NEXT:    csel x9, xzr, x1, lt2167; CHECK-SD-NEXT:    fcmp d8, d92168; CHECK-SD-NEXT:    mov x0, x202169; CHECK-SD-NEXT:    mov x1, x192170; CHECK-SD-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload2171; CHECK-SD-NEXT:    csel x3, x21, x9, gt2172; CHECK-SD-NEXT:    ldp x30, x21, [sp, #32] // 16-byte Folded Reload2173; CHECK-SD-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload2174; CHECK-SD-NEXT:    csinv x2, x8, xzr, le2175; CHECK-SD-NEXT:    add sp, sp, #642176; CHECK-SD-NEXT:    ret2177;2178; CHECK-GI-LABEL: test_unsigned_v2f64_v2i100:2179; CHECK-GI:       // %bb.0:2180; CHECK-GI-NEXT:    sub sp, sp, #642181; CHECK-GI-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill2182; CHECK-GI-NEXT:    stp x30, x21, [sp, #32] // 16-byte Folded Spill2183; CHECK-GI-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill2184; CHECK-GI-NEXT:    .cfi_def_cfa_offset 642185; CHECK-GI-NEXT:    .cfi_offset w19, -82186; CHECK-GI-NEXT:    .cfi_offset w20, -162187; CHECK-GI-NEXT:    .cfi_offset w21, -242188; CHECK-GI-NEXT:    .cfi_offset w30, -322189; CHECK-GI-NEXT:    .cfi_offset b8, -402190; CHECK-GI-NEXT:    .cfi_offset b9, -482191; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill2192; CHECK-GI-NEXT:    mov d8, v0.d[1]2193; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q02194; CHECK-GI-NEXT:    bl __fixunsdfti2195; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload2196; CHECK-GI-NEXT:    mov x8, #5057542381537067007 // =0x462fffffffffffff2197; CHECK-GI-NEXT:    mov x21, #68719476735 // =0xfffffffff2198; CHECK-GI-NEXT:    fmov d9, x82199; CHECK-GI-NEXT:    fcmp d0, #0.02200; CHECK-GI-NEXT:    csel x8, xzr, x0, lt2201; CHECK-GI-NEXT:    csel x9, xzr, x1, lt2202; CHECK-GI-NEXT:    fcmp d0, d92203; CHECK-GI-NEXT:    fmov d0, d82204; CHECK-GI-NEXT:    csinv x19, x8, xzr, le2205; CHECK-GI-NEXT:    csel x20, x21, x9, gt2206; CHECK-GI-NEXT:    bl __fixunsdfti2207; CHECK-GI-NEXT:    fcmp d8, #0.02208; CHECK-GI-NEXT:    csel x8, xzr, x0, lt2209; CHECK-GI-NEXT:    csel x9, xzr, x1, lt2210; CHECK-GI-NEXT:    fcmp d8, d92211; CHECK-GI-NEXT:    mov x0, x192212; CHECK-GI-NEXT:    mov x1, x202213; CHECK-GI-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload2214; CHECK-GI-NEXT:    csel x3, x21, x9, gt2215; CHECK-GI-NEXT:    ldp x30, x21, [sp, #32] // 16-byte Folded Reload2216; CHECK-GI-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload2217; CHECK-GI-NEXT:    csinv x2, x8, xzr, le2218; CHECK-GI-NEXT:    add sp, sp, #642219; CHECK-GI-NEXT:    ret2220    %x = call <2 x i100> @llvm.fptoui.sat.v2f64.v2i100(<2 x double> %f)2221    ret <2 x i100> %x2222}2223 2224define <2 x i128> @test_unsigned_v2f64_v2i128(<2 x double> %f) {2225; CHECK-SD-LABEL: test_unsigned_v2f64_v2i128:2226; CHECK-SD:       // %bb.0:2227; CHECK-SD-NEXT:    sub sp, sp, #642228; CHECK-SD-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill2229; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill2230; CHECK-SD-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill2231; CHECK-SD-NEXT:    .cfi_def_cfa_offset 642232; CHECK-SD-NEXT:    .cfi_offset w19, -82233; CHECK-SD-NEXT:    .cfi_offset w20, -162234; CHECK-SD-NEXT:    .cfi_offset w30, -322235; CHECK-SD-NEXT:    .cfi_offset b8, -402236; CHECK-SD-NEXT:    .cfi_offset b9, -482237; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill2238; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q02239; CHECK-SD-NEXT:    bl __fixunsdfti2240; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2241; CHECK-SD-NEXT:    mov x8, #5183643171103440895 // =0x47efffffffffffff2242; CHECK-SD-NEXT:    fmov d9, x82243; CHECK-SD-NEXT:    mov d8, v0.d[1]2244; CHECK-SD-NEXT:    fcmp d0, #0.02245; CHECK-SD-NEXT:    csel x8, xzr, x1, lt2246; CHECK-SD-NEXT:    csel x9, xzr, x0, lt2247; CHECK-SD-NEXT:    fcmp d0, d92248; CHECK-SD-NEXT:    fmov d0, d82249; CHECK-SD-NEXT:    csinv x19, x9, xzr, le2250; CHECK-SD-NEXT:    csinv x20, x8, xzr, le2251; CHECK-SD-NEXT:    bl __fixunsdfti2252; CHECK-SD-NEXT:    fcmp d8, #0.02253; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload2254; CHECK-SD-NEXT:    csel x8, xzr, x1, lt2255; CHECK-SD-NEXT:    csel x9, xzr, x0, lt2256; CHECK-SD-NEXT:    fcmp d8, d92257; CHECK-SD-NEXT:    mov x0, x192258; CHECK-SD-NEXT:    mov x1, x202259; CHECK-SD-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload2260; CHECK-SD-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload2261; CHECK-SD-NEXT:    csinv x2, x9, xzr, le2262; CHECK-SD-NEXT:    csinv x3, x8, xzr, le2263; CHECK-SD-NEXT:    add sp, sp, #642264; CHECK-SD-NEXT:    ret2265;2266; CHECK-GI-LABEL: test_unsigned_v2f64_v2i128:2267; CHECK-GI:       // %bb.0:2268; CHECK-GI-NEXT:    sub sp, sp, #642269; CHECK-GI-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill2270; CHECK-GI-NEXT:    str x30, [sp, #32] // 8-byte Spill2271; CHECK-GI-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill2272; CHECK-GI-NEXT:    .cfi_def_cfa_offset 642273; CHECK-GI-NEXT:    .cfi_offset w19, -82274; CHECK-GI-NEXT:    .cfi_offset w20, -162275; CHECK-GI-NEXT:    .cfi_offset w30, -322276; CHECK-GI-NEXT:    .cfi_offset b8, -402277; CHECK-GI-NEXT:    .cfi_offset b9, -482278; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill2279; CHECK-GI-NEXT:    mov d8, v0.d[1]2280; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q02281; CHECK-GI-NEXT:    bl __fixunsdfti2282; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload2283; CHECK-GI-NEXT:    mov x8, #5183643171103440895 // =0x47efffffffffffff2284; CHECK-GI-NEXT:    fmov d9, x82285; CHECK-GI-NEXT:    fcmp d0, #0.02286; CHECK-GI-NEXT:    csel x8, xzr, x0, lt2287; CHECK-GI-NEXT:    csel x9, xzr, x1, lt2288; CHECK-GI-NEXT:    fcmp d0, d92289; CHECK-GI-NEXT:    fmov d0, d82290; CHECK-GI-NEXT:    csinv x19, x8, xzr, le2291; CHECK-GI-NEXT:    csinv x20, x9, xzr, le2292; CHECK-GI-NEXT:    bl __fixunsdfti2293; CHECK-GI-NEXT:    fcmp d8, #0.02294; CHECK-GI-NEXT:    ldr x30, [sp, #32] // 8-byte Reload2295; CHECK-GI-NEXT:    csel x8, xzr, x0, lt2296; CHECK-GI-NEXT:    csel x9, xzr, x1, lt2297; CHECK-GI-NEXT:    fcmp d8, d92298; CHECK-GI-NEXT:    mov x0, x192299; CHECK-GI-NEXT:    mov x1, x202300; CHECK-GI-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload2301; CHECK-GI-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload2302; CHECK-GI-NEXT:    csinv x2, x8, xzr, le2303; CHECK-GI-NEXT:    csinv x3, x9, xzr, le2304; CHECK-GI-NEXT:    add sp, sp, #642305; CHECK-GI-NEXT:    ret2306    %x = call <2 x i128> @llvm.fptoui.sat.v2f64.v2i128(<2 x double> %f)2307    ret <2 x i128> %x2308}2309 2310;2311; 4-Vector half to unsigned integer -- result size variation2312;2313 2314declare <4 x   i1> @llvm.fptoui.sat.v4f16.v4i1  (<4 x half>)2315declare <4 x   i8> @llvm.fptoui.sat.v4f16.v4i8  (<4 x half>)2316declare <4 x  i13> @llvm.fptoui.sat.v4f16.v4i13 (<4 x half>)2317declare <4 x  i16> @llvm.fptoui.sat.v4f16.v4i16 (<4 x half>)2318declare <4 x  i19> @llvm.fptoui.sat.v4f16.v4i19 (<4 x half>)2319declare <4 x  i50> @llvm.fptoui.sat.v4f16.v4i50 (<4 x half>)2320declare <4 x  i64> @llvm.fptoui.sat.v4f16.v4i64 (<4 x half>)2321declare <4 x i100> @llvm.fptoui.sat.v4f16.v4i100(<4 x half>)2322declare <4 x i128> @llvm.fptoui.sat.v4f16.v4i128(<4 x half>)2323 2324define <4 x i1> @test_unsigned_v4f16_v4i1(<4 x half> %f) {2325; CHECK-CVT-LABEL: test_unsigned_v4f16_v4i1:2326; CHECK-CVT:       // %bb.0:2327; CHECK-CVT-NEXT:    fcvtl v0.4s, v0.4h2328; CHECK-CVT-NEXT:    movi v1.4s, #12329; CHECK-CVT-NEXT:    fcvtzu v0.4s, v0.4s2330; CHECK-CVT-NEXT:    umin v0.4s, v0.4s, v1.4s2331; CHECK-CVT-NEXT:    xtn v0.4h, v0.4s2332; CHECK-CVT-NEXT:    ret2333;2334; CHECK-FP16-LABEL: test_unsigned_v4f16_v4i1:2335; CHECK-FP16:       // %bb.0:2336; CHECK-FP16-NEXT:    movi v1.4h, #12337; CHECK-FP16-NEXT:    fcvtzu v0.4h, v0.4h2338; CHECK-FP16-NEXT:    umin v0.4h, v0.4h, v1.4h2339; CHECK-FP16-NEXT:    ret2340    %x = call <4 x i1> @llvm.fptoui.sat.v4f16.v4i1(<4 x half> %f)2341    ret <4 x i1> %x2342}2343 2344define <4 x i8> @test_unsigned_v4f16_v4i8(<4 x half> %f) {2345; CHECK-CVT-LABEL: test_unsigned_v4f16_v4i8:2346; CHECK-CVT:       // %bb.0:2347; CHECK-CVT-NEXT:    fcvtl v0.4s, v0.4h2348; CHECK-CVT-NEXT:    movi v1.2d, #0x0000ff000000ff2349; CHECK-CVT-NEXT:    fcvtzu v0.4s, v0.4s2350; CHECK-CVT-NEXT:    umin v0.4s, v0.4s, v1.4s2351; CHECK-CVT-NEXT:    xtn v0.4h, v0.4s2352; CHECK-CVT-NEXT:    ret2353;2354; CHECK-FP16-LABEL: test_unsigned_v4f16_v4i8:2355; CHECK-FP16:       // %bb.0:2356; CHECK-FP16-NEXT:    movi d1, #0xff00ff00ff00ff2357; CHECK-FP16-NEXT:    fcvtzu v0.4h, v0.4h2358; CHECK-FP16-NEXT:    umin v0.4h, v0.4h, v1.4h2359; CHECK-FP16-NEXT:    ret2360    %x = call <4 x i8> @llvm.fptoui.sat.v4f16.v4i8(<4 x half> %f)2361    ret <4 x i8> %x2362}2363 2364define <4 x i13> @test_unsigned_v4f16_v4i13(<4 x half> %f) {2365; CHECK-CVT-LABEL: test_unsigned_v4f16_v4i13:2366; CHECK-CVT:       // %bb.0:2367; CHECK-CVT-NEXT:    fcvtl v0.4s, v0.4h2368; CHECK-CVT-NEXT:    movi v1.4s, #31, msl #82369; CHECK-CVT-NEXT:    fcvtzu v0.4s, v0.4s2370; CHECK-CVT-NEXT:    umin v0.4s, v0.4s, v1.4s2371; CHECK-CVT-NEXT:    xtn v0.4h, v0.4s2372; CHECK-CVT-NEXT:    ret2373;2374; CHECK-FP16-LABEL: test_unsigned_v4f16_v4i13:2375; CHECK-FP16:       // %bb.0:2376; CHECK-FP16-NEXT:    fcvtzu v0.4h, v0.4h2377; CHECK-FP16-NEXT:    mvni v1.4h, #224, lsl #82378; CHECK-FP16-NEXT:    umin v0.4h, v0.4h, v1.4h2379; CHECK-FP16-NEXT:    ret2380    %x = call <4 x i13> @llvm.fptoui.sat.v4f16.v4i13(<4 x half> %f)2381    ret <4 x i13> %x2382}2383 2384define <4 x i16> @test_unsigned_v4f16_v4i16(<4 x half> %f) {2385; CHECK-CVT-LABEL: test_unsigned_v4f16_v4i16:2386; CHECK-CVT:       // %bb.0:2387; CHECK-CVT-NEXT:    fcvtl v0.4s, v0.4h2388; CHECK-CVT-NEXT:    fcvtzu v0.4s, v0.4s2389; CHECK-CVT-NEXT:    uqxtn v0.4h, v0.4s2390; CHECK-CVT-NEXT:    ret2391;2392; CHECK-FP16-LABEL: test_unsigned_v4f16_v4i16:2393; CHECK-FP16:       // %bb.0:2394; CHECK-FP16-NEXT:    fcvtzu v0.4h, v0.4h2395; CHECK-FP16-NEXT:    ret2396    %x = call <4 x i16> @llvm.fptoui.sat.v4f16.v4i16(<4 x half> %f)2397    ret <4 x i16> %x2398}2399 2400define <4 x i19> @test_unsigned_v4f16_v4i19(<4 x half> %f) {2401; CHECK-LABEL: test_unsigned_v4f16_v4i19:2402; CHECK:       // %bb.0:2403; CHECK-NEXT:    fcvtl v0.4s, v0.4h2404; CHECK-NEXT:    movi v1.4s, #7, msl #162405; CHECK-NEXT:    fcvtzu v0.4s, v0.4s2406; CHECK-NEXT:    umin v0.4s, v0.4s, v1.4s2407; CHECK-NEXT:    ret2408    %x = call <4 x i19> @llvm.fptoui.sat.v4f16.v4i19(<4 x half> %f)2409    ret <4 x i19> %x2410}2411 2412define <4 x i32> @test_unsigned_v4f16_v4i32_duplicate(<4 x half> %f) {2413; CHECK-LABEL: test_unsigned_v4f16_v4i32_duplicate:2414; CHECK:       // %bb.0:2415; CHECK-NEXT:    fcvtl v0.4s, v0.4h2416; CHECK-NEXT:    fcvtzu v0.4s, v0.4s2417; CHECK-NEXT:    ret2418    %x = call <4 x i32> @llvm.fptoui.sat.v4f16.v4i32(<4 x half> %f)2419    ret <4 x i32> %x2420}2421 2422define <4 x i50> @test_unsigned_v4f16_v4i50(<4 x half> %f) {2423; CHECK-CVT-LABEL: test_unsigned_v4f16_v4i50:2424; CHECK-CVT:       // %bb.0:2425; CHECK-CVT-NEXT:    // kill: def $d0 killed $d0 def $q02426; CHECK-CVT-NEXT:    mov h1, v0.h[1]2427; CHECK-CVT-NEXT:    mov h2, v0.h[2]2428; CHECK-CVT-NEXT:    mov x8, #1125899906842623 // =0x3ffffffffffff2429; CHECK-CVT-NEXT:    mov h3, v0.h[3]2430; CHECK-CVT-NEXT:    fcvt s0, h02431; CHECK-CVT-NEXT:    fcvt s1, h12432; CHECK-CVT-NEXT:    fcvt s2, h22433; CHECK-CVT-NEXT:    fcvt s3, h32434; CHECK-CVT-NEXT:    fcvtzu x9, s02435; CHECK-CVT-NEXT:    fcvtzu x10, s12436; CHECK-CVT-NEXT:    fcvtzu x11, s22437; CHECK-CVT-NEXT:    fcvtzu x12, s32438; CHECK-CVT-NEXT:    cmp x9, x82439; CHECK-CVT-NEXT:    csel x0, x9, x8, lo2440; CHECK-CVT-NEXT:    cmp x10, x82441; CHECK-CVT-NEXT:    csel x1, x10, x8, lo2442; CHECK-CVT-NEXT:    cmp x11, x82443; CHECK-CVT-NEXT:    csel x2, x11, x8, lo2444; CHECK-CVT-NEXT:    cmp x12, x82445; CHECK-CVT-NEXT:    csel x3, x12, x8, lo2446; CHECK-CVT-NEXT:    ret2447;2448; CHECK-FP16-LABEL: test_unsigned_v4f16_v4i50:2449; CHECK-FP16:       // %bb.0:2450; CHECK-FP16-NEXT:    // kill: def $d0 killed $d0 def $q02451; CHECK-FP16-NEXT:    mov h1, v0.h[1]2452; CHECK-FP16-NEXT:    mov h2, v0.h[2]2453; CHECK-FP16-NEXT:    mov x8, #1125899906842623 // =0x3ffffffffffff2454; CHECK-FP16-NEXT:    mov h3, v0.h[3]2455; CHECK-FP16-NEXT:    fcvtzu x9, h02456; CHECK-FP16-NEXT:    fcvtzu x10, h12457; CHECK-FP16-NEXT:    fcvtzu x11, h22458; CHECK-FP16-NEXT:    fcvtzu x12, h32459; CHECK-FP16-NEXT:    cmp x9, x82460; CHECK-FP16-NEXT:    csel x0, x9, x8, lo2461; CHECK-FP16-NEXT:    cmp x10, x82462; CHECK-FP16-NEXT:    csel x1, x10, x8, lo2463; CHECK-FP16-NEXT:    cmp x11, x82464; CHECK-FP16-NEXT:    csel x2, x11, x8, lo2465; CHECK-FP16-NEXT:    cmp x12, x82466; CHECK-FP16-NEXT:    csel x3, x12, x8, lo2467; CHECK-FP16-NEXT:    ret2468    %x = call <4 x i50> @llvm.fptoui.sat.v4f16.v4i50(<4 x half> %f)2469    ret <4 x i50> %x2470}2471 2472define <4 x i64> @test_unsigned_v4f16_v4i64(<4 x half> %f) {2473; CHECK-SD-CVT-LABEL: test_unsigned_v4f16_v4i64:2474; CHECK-SD-CVT:       // %bb.0:2475; CHECK-SD-CVT-NEXT:    // kill: def $d0 killed $d0 def $q02476; CHECK-SD-CVT-NEXT:    mov h1, v0.h[2]2477; CHECK-SD-CVT-NEXT:    mov h2, v0.h[1]2478; CHECK-SD-CVT-NEXT:    mov h3, v0.h[3]2479; CHECK-SD-CVT-NEXT:    fcvt s0, h02480; CHECK-SD-CVT-NEXT:    fcvt s1, h12481; CHECK-SD-CVT-NEXT:    fcvt s2, h22482; CHECK-SD-CVT-NEXT:    fcvt s3, h32483; CHECK-SD-CVT-NEXT:    fcvtzu x8, s02484; CHECK-SD-CVT-NEXT:    fcvtzu x9, s12485; CHECK-SD-CVT-NEXT:    fcvtzu x10, s22486; CHECK-SD-CVT-NEXT:    fcvtzu x11, s32487; CHECK-SD-CVT-NEXT:    fmov d0, x82488; CHECK-SD-CVT-NEXT:    fmov d1, x92489; CHECK-SD-CVT-NEXT:    mov v0.d[1], x102490; CHECK-SD-CVT-NEXT:    mov v1.d[1], x112491; CHECK-SD-CVT-NEXT:    ret2492;2493; CHECK-SD-FP16-LABEL: test_unsigned_v4f16_v4i64:2494; CHECK-SD-FP16:       // %bb.0:2495; CHECK-SD-FP16-NEXT:    // kill: def $d0 killed $d0 def $q02496; CHECK-SD-FP16-NEXT:    mov h1, v0.h[2]2497; CHECK-SD-FP16-NEXT:    mov h2, v0.h[1]2498; CHECK-SD-FP16-NEXT:    mov h3, v0.h[3]2499; CHECK-SD-FP16-NEXT:    fcvtzu x8, h02500; CHECK-SD-FP16-NEXT:    fcvtzu x9, h12501; CHECK-SD-FP16-NEXT:    fcvtzu x10, h22502; CHECK-SD-FP16-NEXT:    fcvtzu x11, h32503; CHECK-SD-FP16-NEXT:    fmov d0, x82504; CHECK-SD-FP16-NEXT:    fmov d1, x92505; CHECK-SD-FP16-NEXT:    mov v0.d[1], x102506; CHECK-SD-FP16-NEXT:    mov v1.d[1], x112507; CHECK-SD-FP16-NEXT:    ret2508;2509; CHECK-GI-LABEL: test_unsigned_v4f16_v4i64:2510; CHECK-GI:       // %bb.0:2511; CHECK-GI-NEXT:    fcvtl v0.4s, v0.4h2512; CHECK-GI-NEXT:    fcvtl v1.2d, v0.2s2513; CHECK-GI-NEXT:    fcvtl2 v2.2d, v0.4s2514; CHECK-GI-NEXT:    fcvtzu v0.2d, v1.2d2515; CHECK-GI-NEXT:    fcvtzu v1.2d, v2.2d2516; CHECK-GI-NEXT:    ret2517    %x = call <4 x i64> @llvm.fptoui.sat.v4f16.v4i64(<4 x half> %f)2518    ret <4 x i64> %x2519}2520 2521define <4 x i100> @test_unsigned_v4f16_v4i100(<4 x half> %f) {2522; CHECK-SD-LABEL: test_unsigned_v4f16_v4i100:2523; CHECK-SD:       // %bb.0:2524; CHECK-SD-NEXT:    sub sp, sp, #962525; CHECK-SD-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill2526; CHECK-SD-NEXT:    stp x30, x25, [sp, #32] // 16-byte Folded Spill2527; CHECK-SD-NEXT:    stp x24, x23, [sp, #48] // 16-byte Folded Spill2528; CHECK-SD-NEXT:    stp x22, x21, [sp, #64] // 16-byte Folded Spill2529; CHECK-SD-NEXT:    stp x20, x19, [sp, #80] // 16-byte Folded Spill2530; CHECK-SD-NEXT:    .cfi_def_cfa_offset 962531; CHECK-SD-NEXT:    .cfi_offset w19, -82532; CHECK-SD-NEXT:    .cfi_offset w20, -162533; CHECK-SD-NEXT:    .cfi_offset w21, -242534; CHECK-SD-NEXT:    .cfi_offset w22, -322535; CHECK-SD-NEXT:    .cfi_offset w23, -402536; CHECK-SD-NEXT:    .cfi_offset w24, -482537; CHECK-SD-NEXT:    .cfi_offset w25, -562538; CHECK-SD-NEXT:    .cfi_offset w30, -642539; CHECK-SD-NEXT:    .cfi_offset b8, -722540; CHECK-SD-NEXT:    .cfi_offset b9, -802541; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q02542; CHECK-SD-NEXT:    mov h1, v0.h[1]2543; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill2544; CHECK-SD-NEXT:    fcvt s8, h12545; CHECK-SD-NEXT:    fmov s0, s82546; CHECK-SD-NEXT:    bl __fixunssfti2547; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2548; CHECK-SD-NEXT:    mov w8, #1904214015 // =0x717fffff2549; CHECK-SD-NEXT:    fcmp s8, #0.02550; CHECK-SD-NEXT:    fmov s9, w82551; CHECK-SD-NEXT:    mov x25, #68719476735 // =0xfffffffff2552; CHECK-SD-NEXT:    mov h0, v0.h[2]2553; CHECK-SD-NEXT:    csel x9, xzr, x0, lt2554; CHECK-SD-NEXT:    csel x8, xzr, x1, lt2555; CHECK-SD-NEXT:    fcmp s8, s92556; CHECK-SD-NEXT:    fcvt s8, h02557; CHECK-SD-NEXT:    csel x19, x25, x8, gt2558; CHECK-SD-NEXT:    csinv x20, x9, xzr, le2559; CHECK-SD-NEXT:    fmov s0, s82560; CHECK-SD-NEXT:    bl __fixunssfti2561; CHECK-SD-NEXT:    fcmp s8, #0.02562; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2563; CHECK-SD-NEXT:    csel x8, xzr, x0, lt2564; CHECK-SD-NEXT:    csel x9, xzr, x1, lt2565; CHECK-SD-NEXT:    fcmp s8, s92566; CHECK-SD-NEXT:    fcvt s8, h02567; CHECK-SD-NEXT:    csel x21, x25, x9, gt2568; CHECK-SD-NEXT:    csinv x22, x8, xzr, le2569; CHECK-SD-NEXT:    fmov s0, s82570; CHECK-SD-NEXT:    bl __fixunssfti2571; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2572; CHECK-SD-NEXT:    fcmp s8, #0.02573; CHECK-SD-NEXT:    mov h0, v0.h[3]2574; CHECK-SD-NEXT:    csel x8, xzr, x0, lt2575; CHECK-SD-NEXT:    csel x9, xzr, x1, lt2576; CHECK-SD-NEXT:    fcmp s8, s92577; CHECK-SD-NEXT:    fcvt s8, h02578; CHECK-SD-NEXT:    csel x23, x25, x9, gt2579; CHECK-SD-NEXT:    csinv x24, x8, xzr, le2580; CHECK-SD-NEXT:    fmov s0, s82581; CHECK-SD-NEXT:    bl __fixunssfti2582; CHECK-SD-NEXT:    fcmp s8, #0.02583; CHECK-SD-NEXT:    mov x2, x202584; CHECK-SD-NEXT:    mov x3, x192585; CHECK-SD-NEXT:    mov x4, x222586; CHECK-SD-NEXT:    mov x5, x212587; CHECK-SD-NEXT:    ldp x20, x19, [sp, #80] // 16-byte Folded Reload2588; CHECK-SD-NEXT:    csel x8, xzr, x0, lt2589; CHECK-SD-NEXT:    csel x9, xzr, x1, lt2590; CHECK-SD-NEXT:    fcmp s8, s92591; CHECK-SD-NEXT:    mov x0, x242592; CHECK-SD-NEXT:    mov x1, x232593; CHECK-SD-NEXT:    ldp x22, x21, [sp, #64] // 16-byte Folded Reload2594; CHECK-SD-NEXT:    csel x7, x25, x9, gt2595; CHECK-SD-NEXT:    ldp x24, x23, [sp, #48] // 16-byte Folded Reload2596; CHECK-SD-NEXT:    ldp x30, x25, [sp, #32] // 16-byte Folded Reload2597; CHECK-SD-NEXT:    csinv x6, x8, xzr, le2598; CHECK-SD-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload2599; CHECK-SD-NEXT:    add sp, sp, #962600; CHECK-SD-NEXT:    ret2601;2602; CHECK-GI-CVT-LABEL: test_unsigned_v4f16_v4i100:2603; CHECK-GI-CVT:       // %bb.0:2604; CHECK-GI-CVT-NEXT:    // kill: def $d0 killed $d0 def $q02605; CHECK-GI-CVT-NEXT:    mov h1, v0.h[1]2606; CHECK-GI-CVT-NEXT:    mov h2, v0.h[2]2607; CHECK-GI-CVT-NEXT:    mov x1, xzr2608; CHECK-GI-CVT-NEXT:    mov h3, v0.h[3]2609; CHECK-GI-CVT-NEXT:    fcvt s0, h02610; CHECK-GI-CVT-NEXT:    mov x3, xzr2611; CHECK-GI-CVT-NEXT:    mov x5, xzr2612; CHECK-GI-CVT-NEXT:    mov x7, xzr2613; CHECK-GI-CVT-NEXT:    fcvt s1, h12614; CHECK-GI-CVT-NEXT:    fcvt s2, h22615; CHECK-GI-CVT-NEXT:    fcvt s3, h32616; CHECK-GI-CVT-NEXT:    fcvtzu x0, s02617; CHECK-GI-CVT-NEXT:    fcvtzu x2, s12618; CHECK-GI-CVT-NEXT:    fcvtzu x4, s22619; CHECK-GI-CVT-NEXT:    fcvtzu x6, s32620; CHECK-GI-CVT-NEXT:    ret2621;2622; CHECK-GI-FP16-LABEL: test_unsigned_v4f16_v4i100:2623; CHECK-GI-FP16:       // %bb.0:2624; CHECK-GI-FP16-NEXT:    // kill: def $d0 killed $d0 def $q02625; CHECK-GI-FP16-NEXT:    mov h1, v0.h[1]2626; CHECK-GI-FP16-NEXT:    mov h2, v0.h[2]2627; CHECK-GI-FP16-NEXT:    mov x1, xzr2628; CHECK-GI-FP16-NEXT:    mov h3, v0.h[3]2629; CHECK-GI-FP16-NEXT:    fcvtzu x0, h02630; CHECK-GI-FP16-NEXT:    mov x3, xzr2631; CHECK-GI-FP16-NEXT:    mov x5, xzr2632; CHECK-GI-FP16-NEXT:    mov x7, xzr2633; CHECK-GI-FP16-NEXT:    fcvtzu x2, h12634; CHECK-GI-FP16-NEXT:    fcvtzu x4, h22635; CHECK-GI-FP16-NEXT:    fcvtzu x6, h32636; CHECK-GI-FP16-NEXT:    ret2637    %x = call <4 x i100> @llvm.fptoui.sat.v4f16.v4i100(<4 x half> %f)2638    ret <4 x i100> %x2639}2640 2641define <4 x i128> @test_unsigned_v4f16_v4i128(<4 x half> %f) {2642; CHECK-SD-LABEL: test_unsigned_v4f16_v4i128:2643; CHECK-SD:       // %bb.0:2644; CHECK-SD-NEXT:    sub sp, sp, #962645; CHECK-SD-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill2646; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill2647; CHECK-SD-NEXT:    stp x24, x23, [sp, #48] // 16-byte Folded Spill2648; CHECK-SD-NEXT:    stp x22, x21, [sp, #64] // 16-byte Folded Spill2649; CHECK-SD-NEXT:    stp x20, x19, [sp, #80] // 16-byte Folded Spill2650; CHECK-SD-NEXT:    .cfi_def_cfa_offset 962651; CHECK-SD-NEXT:    .cfi_offset w19, -82652; CHECK-SD-NEXT:    .cfi_offset w20, -162653; CHECK-SD-NEXT:    .cfi_offset w21, -242654; CHECK-SD-NEXT:    .cfi_offset w22, -322655; CHECK-SD-NEXT:    .cfi_offset w23, -402656; CHECK-SD-NEXT:    .cfi_offset w24, -482657; CHECK-SD-NEXT:    .cfi_offset w30, -642658; CHECK-SD-NEXT:    .cfi_offset b8, -722659; CHECK-SD-NEXT:    .cfi_offset b9, -802660; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q02661; CHECK-SD-NEXT:    fcvt s8, h02662; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill2663; CHECK-SD-NEXT:    fmov s0, s82664; CHECK-SD-NEXT:    bl __fixunssfti2665; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2666; CHECK-SD-NEXT:    mov w8, #2139095039 // =0x7f7fffff2667; CHECK-SD-NEXT:    fcmp s8, #0.02668; CHECK-SD-NEXT:    fmov s9, w82669; CHECK-SD-NEXT:    mov h0, v0.h[1]2670; CHECK-SD-NEXT:    csel x9, xzr, x1, lt2671; CHECK-SD-NEXT:    csel x8, xzr, x0, lt2672; CHECK-SD-NEXT:    fcmp s8, s92673; CHECK-SD-NEXT:    fcvt s8, h02674; CHECK-SD-NEXT:    csinv x19, x8, xzr, le2675; CHECK-SD-NEXT:    csinv x20, x9, xzr, le2676; CHECK-SD-NEXT:    fmov s0, s82677; CHECK-SD-NEXT:    bl __fixunssfti2678; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2679; CHECK-SD-NEXT:    fcmp s8, #0.02680; CHECK-SD-NEXT:    mov h0, v0.h[2]2681; CHECK-SD-NEXT:    csel x8, xzr, x1, lt2682; CHECK-SD-NEXT:    csel x9, xzr, x0, lt2683; CHECK-SD-NEXT:    fcmp s8, s92684; CHECK-SD-NEXT:    fcvt s8, h02685; CHECK-SD-NEXT:    csinv x21, x9, xzr, le2686; CHECK-SD-NEXT:    csinv x22, x8, xzr, le2687; CHECK-SD-NEXT:    fmov s0, s82688; CHECK-SD-NEXT:    bl __fixunssfti2689; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2690; CHECK-SD-NEXT:    fcmp s8, #0.02691; CHECK-SD-NEXT:    mov h0, v0.h[3]2692; CHECK-SD-NEXT:    csel x8, xzr, x1, lt2693; CHECK-SD-NEXT:    csel x9, xzr, x0, lt2694; CHECK-SD-NEXT:    fcmp s8, s92695; CHECK-SD-NEXT:    fcvt s8, h02696; CHECK-SD-NEXT:    csinv x23, x9, xzr, le2697; CHECK-SD-NEXT:    csinv x24, x8, xzr, le2698; CHECK-SD-NEXT:    fmov s0, s82699; CHECK-SD-NEXT:    bl __fixunssfti2700; CHECK-SD-NEXT:    fcmp s8, #0.02701; CHECK-SD-NEXT:    mov x2, x212702; CHECK-SD-NEXT:    mov x3, x222703; CHECK-SD-NEXT:    mov x4, x232704; CHECK-SD-NEXT:    mov x5, x242705; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload2706; CHECK-SD-NEXT:    ldp x22, x21, [sp, #64] // 16-byte Folded Reload2707; CHECK-SD-NEXT:    csel x8, xzr, x1, lt2708; CHECK-SD-NEXT:    csel x9, xzr, x0, lt2709; CHECK-SD-NEXT:    fcmp s8, s92710; CHECK-SD-NEXT:    mov x0, x192711; CHECK-SD-NEXT:    mov x1, x202712; CHECK-SD-NEXT:    ldp x20, x19, [sp, #80] // 16-byte Folded Reload2713; CHECK-SD-NEXT:    ldp x24, x23, [sp, #48] // 16-byte Folded Reload2714; CHECK-SD-NEXT:    csinv x6, x9, xzr, le2715; CHECK-SD-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload2716; CHECK-SD-NEXT:    csinv x7, x8, xzr, le2717; CHECK-SD-NEXT:    add sp, sp, #962718; CHECK-SD-NEXT:    ret2719;2720; CHECK-GI-CVT-LABEL: test_unsigned_v4f16_v4i128:2721; CHECK-GI-CVT:       // %bb.0:2722; CHECK-GI-CVT-NEXT:    // kill: def $d0 killed $d0 def $q02723; CHECK-GI-CVT-NEXT:    mov h1, v0.h[1]2724; CHECK-GI-CVT-NEXT:    mov h2, v0.h[2]2725; CHECK-GI-CVT-NEXT:    mov x1, xzr2726; CHECK-GI-CVT-NEXT:    mov h3, v0.h[3]2727; CHECK-GI-CVT-NEXT:    fcvt s0, h02728; CHECK-GI-CVT-NEXT:    mov x3, xzr2729; CHECK-GI-CVT-NEXT:    mov x5, xzr2730; CHECK-GI-CVT-NEXT:    mov x7, xzr2731; CHECK-GI-CVT-NEXT:    fcvt s1, h12732; CHECK-GI-CVT-NEXT:    fcvt s2, h22733; CHECK-GI-CVT-NEXT:    fcvt s3, h32734; CHECK-GI-CVT-NEXT:    fcvtzu x0, s02735; CHECK-GI-CVT-NEXT:    fcvtzu x2, s12736; CHECK-GI-CVT-NEXT:    fcvtzu x4, s22737; CHECK-GI-CVT-NEXT:    fcvtzu x6, s32738; CHECK-GI-CVT-NEXT:    ret2739;2740; CHECK-GI-FP16-LABEL: test_unsigned_v4f16_v4i128:2741; CHECK-GI-FP16:       // %bb.0:2742; CHECK-GI-FP16-NEXT:    // kill: def $d0 killed $d0 def $q02743; CHECK-GI-FP16-NEXT:    mov h1, v0.h[1]2744; CHECK-GI-FP16-NEXT:    mov h2, v0.h[2]2745; CHECK-GI-FP16-NEXT:    mov x1, xzr2746; CHECK-GI-FP16-NEXT:    mov h3, v0.h[3]2747; CHECK-GI-FP16-NEXT:    fcvtzu x0, h02748; CHECK-GI-FP16-NEXT:    mov x3, xzr2749; CHECK-GI-FP16-NEXT:    mov x5, xzr2750; CHECK-GI-FP16-NEXT:    mov x7, xzr2751; CHECK-GI-FP16-NEXT:    fcvtzu x2, h12752; CHECK-GI-FP16-NEXT:    fcvtzu x4, h22753; CHECK-GI-FP16-NEXT:    fcvtzu x6, h32754; CHECK-GI-FP16-NEXT:    ret2755    %x = call <4 x i128> @llvm.fptoui.sat.v4f16.v4i128(<4 x half> %f)2756    ret <4 x i128> %x2757}2758 2759;2760; 8-Vector half to unsigned integer -- result size variation2761;2762 2763declare <8 x   i1> @llvm.fptoui.sat.v8f16.v8i1  (<8 x half>)2764declare <8 x   i8> @llvm.fptoui.sat.v8f16.v8i8  (<8 x half>)2765declare <8 x  i13> @llvm.fptoui.sat.v8f16.v8i13 (<8 x half>)2766declare <8 x  i16> @llvm.fptoui.sat.v8f16.v8i16 (<8 x half>)2767declare <8 x  i19> @llvm.fptoui.sat.v8f16.v8i19 (<8 x half>)2768declare <8 x  i50> @llvm.fptoui.sat.v8f16.v8i50 (<8 x half>)2769declare <8 x  i64> @llvm.fptoui.sat.v8f16.v8i64 (<8 x half>)2770declare <8 x i100> @llvm.fptoui.sat.v8f16.v8i100(<8 x half>)2771declare <8 x i128> @llvm.fptoui.sat.v8f16.v8i128(<8 x half>)2772 2773define <8 x i1> @test_unsigned_v8f16_v8i1(<8 x half> %f) {2774; CHECK-SD-CVT-LABEL: test_unsigned_v8f16_v8i1:2775; CHECK-SD-CVT:       // %bb.0:2776; CHECK-SD-CVT-NEXT:    fcvtl2 v2.4s, v0.8h2777; CHECK-SD-CVT-NEXT:    fcvtl v0.4s, v0.4h2778; CHECK-SD-CVT-NEXT:    movi v1.4s, #12779; CHECK-SD-CVT-NEXT:    fcvtzu v2.4s, v2.4s2780; CHECK-SD-CVT-NEXT:    fcvtzu v0.4s, v0.4s2781; CHECK-SD-CVT-NEXT:    umin v2.4s, v2.4s, v1.4s2782; CHECK-SD-CVT-NEXT:    umin v0.4s, v0.4s, v1.4s2783; CHECK-SD-CVT-NEXT:    uzp1 v0.8h, v0.8h, v2.8h2784; CHECK-SD-CVT-NEXT:    xtn v0.8b, v0.8h2785; CHECK-SD-CVT-NEXT:    ret2786;2787; CHECK-FP16-LABEL: test_unsigned_v8f16_v8i1:2788; CHECK-FP16:       // %bb.0:2789; CHECK-FP16-NEXT:    movi v1.8h, #12790; CHECK-FP16-NEXT:    fcvtzu v0.8h, v0.8h2791; CHECK-FP16-NEXT:    umin v0.8h, v0.8h, v1.8h2792; CHECK-FP16-NEXT:    xtn v0.8b, v0.8h2793; CHECK-FP16-NEXT:    ret2794;2795; CHECK-GI-CVT-LABEL: test_unsigned_v8f16_v8i1:2796; CHECK-GI-CVT:       // %bb.0:2797; CHECK-GI-CVT-NEXT:    fcvtl v2.4s, v0.4h2798; CHECK-GI-CVT-NEXT:    fcvtl2 v0.4s, v0.8h2799; CHECK-GI-CVT-NEXT:    movi v1.4s, #12800; CHECK-GI-CVT-NEXT:    fcvtzu v2.4s, v2.4s2801; CHECK-GI-CVT-NEXT:    fcvtzu v0.4s, v0.4s2802; CHECK-GI-CVT-NEXT:    umin v2.4s, v2.4s, v1.4s2803; CHECK-GI-CVT-NEXT:    umin v0.4s, v0.4s, v1.4s2804; CHECK-GI-CVT-NEXT:    uzp1 v0.8h, v2.8h, v0.8h2805; CHECK-GI-CVT-NEXT:    xtn v0.8b, v0.8h2806; CHECK-GI-CVT-NEXT:    ret2807    %x = call <8 x i1> @llvm.fptoui.sat.v8f16.v8i1(<8 x half> %f)2808    ret <8 x i1> %x2809}2810 2811define <8 x i8> @test_unsigned_v8f16_v8i8(<8 x half> %f) {2812; CHECK-SD-CVT-LABEL: test_unsigned_v8f16_v8i8:2813; CHECK-SD-CVT:       // %bb.0:2814; CHECK-SD-CVT-NEXT:    fcvtl2 v2.4s, v0.8h2815; CHECK-SD-CVT-NEXT:    fcvtl v0.4s, v0.4h2816; CHECK-SD-CVT-NEXT:    movi v1.2d, #0x0000ff000000ff2817; CHECK-SD-CVT-NEXT:    fcvtzu v2.4s, v2.4s2818; CHECK-SD-CVT-NEXT:    fcvtzu v0.4s, v0.4s2819; CHECK-SD-CVT-NEXT:    umin v2.4s, v2.4s, v1.4s2820; CHECK-SD-CVT-NEXT:    umin v0.4s, v0.4s, v1.4s2821; CHECK-SD-CVT-NEXT:    uzp1 v0.8h, v0.8h, v2.8h2822; CHECK-SD-CVT-NEXT:    xtn v0.8b, v0.8h2823; CHECK-SD-CVT-NEXT:    ret2824;2825; CHECK-FP16-LABEL: test_unsigned_v8f16_v8i8:2826; CHECK-FP16:       // %bb.0:2827; CHECK-FP16-NEXT:    fcvtzu v0.8h, v0.8h2828; CHECK-FP16-NEXT:    uqxtn v0.8b, v0.8h2829; CHECK-FP16-NEXT:    ret2830;2831; CHECK-GI-CVT-LABEL: test_unsigned_v8f16_v8i8:2832; CHECK-GI-CVT:       // %bb.0:2833; CHECK-GI-CVT-NEXT:    fcvtl v2.4s, v0.4h2834; CHECK-GI-CVT-NEXT:    fcvtl2 v0.4s, v0.8h2835; CHECK-GI-CVT-NEXT:    movi v1.2d, #0x0000ff000000ff2836; CHECK-GI-CVT-NEXT:    fcvtzu v2.4s, v2.4s2837; CHECK-GI-CVT-NEXT:    fcvtzu v0.4s, v0.4s2838; CHECK-GI-CVT-NEXT:    umin v2.4s, v2.4s, v1.4s2839; CHECK-GI-CVT-NEXT:    umin v0.4s, v0.4s, v1.4s2840; CHECK-GI-CVT-NEXT:    uzp1 v0.8h, v2.8h, v0.8h2841; CHECK-GI-CVT-NEXT:    xtn v0.8b, v0.8h2842; CHECK-GI-CVT-NEXT:    ret2843    %x = call <8 x i8> @llvm.fptoui.sat.v8f16.v8i8(<8 x half> %f)2844    ret <8 x i8> %x2845}2846 2847define <8 x i13> @test_unsigned_v8f16_v8i13(<8 x half> %f) {2848; CHECK-SD-CVT-LABEL: test_unsigned_v8f16_v8i13:2849; CHECK-SD-CVT:       // %bb.0:2850; CHECK-SD-CVT-NEXT:    fcvtl2 v2.4s, v0.8h2851; CHECK-SD-CVT-NEXT:    fcvtl v0.4s, v0.4h2852; CHECK-SD-CVT-NEXT:    movi v1.4s, #31, msl #82853; CHECK-SD-CVT-NEXT:    fcvtzu v2.4s, v2.4s2854; CHECK-SD-CVT-NEXT:    fcvtzu v0.4s, v0.4s2855; CHECK-SD-CVT-NEXT:    umin v2.4s, v2.4s, v1.4s2856; CHECK-SD-CVT-NEXT:    umin v0.4s, v0.4s, v1.4s2857; CHECK-SD-CVT-NEXT:    uzp1 v0.8h, v0.8h, v2.8h2858; CHECK-SD-CVT-NEXT:    ret2859;2860; CHECK-FP16-LABEL: test_unsigned_v8f16_v8i13:2861; CHECK-FP16:       // %bb.0:2862; CHECK-FP16-NEXT:    fcvtzu v0.8h, v0.8h2863; CHECK-FP16-NEXT:    mvni v1.8h, #224, lsl #82864; CHECK-FP16-NEXT:    umin v0.8h, v0.8h, v1.8h2865; CHECK-FP16-NEXT:    ret2866;2867; CHECK-GI-CVT-LABEL: test_unsigned_v8f16_v8i13:2868; CHECK-GI-CVT:       // %bb.0:2869; CHECK-GI-CVT-NEXT:    fcvtl v2.4s, v0.4h2870; CHECK-GI-CVT-NEXT:    fcvtl2 v0.4s, v0.8h2871; CHECK-GI-CVT-NEXT:    movi v1.4s, #31, msl #82872; CHECK-GI-CVT-NEXT:    fcvtzu v2.4s, v2.4s2873; CHECK-GI-CVT-NEXT:    fcvtzu v0.4s, v0.4s2874; CHECK-GI-CVT-NEXT:    umin v2.4s, v2.4s, v1.4s2875; CHECK-GI-CVT-NEXT:    umin v0.4s, v0.4s, v1.4s2876; CHECK-GI-CVT-NEXT:    uzp1 v0.8h, v2.8h, v0.8h2877; CHECK-GI-CVT-NEXT:    ret2878    %x = call <8 x i13> @llvm.fptoui.sat.v8f16.v8i13(<8 x half> %f)2879    ret <8 x i13> %x2880}2881 2882define <8 x i16> @test_unsigned_v8f16_v8i16(<8 x half> %f) {2883; CHECK-SD-CVT-LABEL: test_unsigned_v8f16_v8i16:2884; CHECK-SD-CVT:       // %bb.0:2885; CHECK-SD-CVT-NEXT:    fcvtl v1.4s, v0.4h2886; CHECK-SD-CVT-NEXT:    fcvtl2 v2.4s, v0.8h2887; CHECK-SD-CVT-NEXT:    fcvtzu v1.4s, v1.4s2888; CHECK-SD-CVT-NEXT:    uqxtn v0.4h, v1.4s2889; CHECK-SD-CVT-NEXT:    fcvtzu v1.4s, v2.4s2890; CHECK-SD-CVT-NEXT:    uqxtn2 v0.8h, v1.4s2891; CHECK-SD-CVT-NEXT:    ret2892;2893; CHECK-FP16-LABEL: test_unsigned_v8f16_v8i16:2894; CHECK-FP16:       // %bb.0:2895; CHECK-FP16-NEXT:    fcvtzu v0.8h, v0.8h2896; CHECK-FP16-NEXT:    ret2897;2898; CHECK-GI-CVT-LABEL: test_unsigned_v8f16_v8i16:2899; CHECK-GI-CVT:       // %bb.0:2900; CHECK-GI-CVT-NEXT:    fcvtl v1.4s, v0.4h2901; CHECK-GI-CVT-NEXT:    fcvtl2 v0.4s, v0.8h2902; CHECK-GI-CVT-NEXT:    fcvtzu v1.4s, v1.4s2903; CHECK-GI-CVT-NEXT:    fcvtzu v2.4s, v0.4s2904; CHECK-GI-CVT-NEXT:    uqxtn v0.4h, v1.4s2905; CHECK-GI-CVT-NEXT:    uqxtn2 v0.8h, v2.4s2906; CHECK-GI-CVT-NEXT:    ret2907    %x = call <8 x i16> @llvm.fptoui.sat.v8f16.v8i16(<8 x half> %f)2908    ret <8 x i16> %x2909}2910 2911define <8 x i19> @test_unsigned_v8f16_v8i19(<8 x half> %f) {2912; CHECK-LABEL: test_unsigned_v8f16_v8i19:2913; CHECK:       // %bb.0:2914; CHECK-NEXT:    fcvtl v2.4s, v0.4h2915; CHECK-NEXT:    fcvtl2 v0.4s, v0.8h2916; CHECK-NEXT:    movi v1.4s, #7, msl #162917; CHECK-NEXT:    fcvtzu v2.4s, v2.4s2918; CHECK-NEXT:    fcvtzu v0.4s, v0.4s2919; CHECK-NEXT:    umin v2.4s, v2.4s, v1.4s2920; CHECK-NEXT:    umin v0.4s, v0.4s, v1.4s2921; CHECK-NEXT:    mov w1, v2.s[1]2922; CHECK-NEXT:    mov w2, v2.s[2]2923; CHECK-NEXT:    mov w3, v2.s[3]2924; CHECK-NEXT:    mov w5, v0.s[1]2925; CHECK-NEXT:    mov w6, v0.s[2]2926; CHECK-NEXT:    mov w7, v0.s[3]2927; CHECK-NEXT:    fmov w4, s02928; CHECK-NEXT:    fmov w0, s22929; CHECK-NEXT:    ret2930    %x = call <8 x i19> @llvm.fptoui.sat.v8f16.v8i19(<8 x half> %f)2931    ret <8 x i19> %x2932}2933 2934define <8 x i32> @test_unsigned_v8f16_v8i32_duplicate(<8 x half> %f) {2935; CHECK-SD-LABEL: test_unsigned_v8f16_v8i32_duplicate:2936; CHECK-SD:       // %bb.0:2937; CHECK-SD-NEXT:    fcvtl2 v1.4s, v0.8h2938; CHECK-SD-NEXT:    fcvtl v0.4s, v0.4h2939; CHECK-SD-NEXT:    fcvtzu v1.4s, v1.4s2940; CHECK-SD-NEXT:    fcvtzu v0.4s, v0.4s2941; CHECK-SD-NEXT:    ret2942;2943; CHECK-GI-LABEL: test_unsigned_v8f16_v8i32_duplicate:2944; CHECK-GI:       // %bb.0:2945; CHECK-GI-NEXT:    fcvtl v1.4s, v0.4h2946; CHECK-GI-NEXT:    fcvtl2 v2.4s, v0.8h2947; CHECK-GI-NEXT:    fcvtzu v0.4s, v1.4s2948; CHECK-GI-NEXT:    fcvtzu v1.4s, v2.4s2949; CHECK-GI-NEXT:    ret2950    %x = call <8 x i32> @llvm.fptoui.sat.v8f16.v8i32(<8 x half> %f)2951    ret <8 x i32> %x2952}2953 2954define <8 x i50> @test_unsigned_v8f16_v8i50(<8 x half> %f) {2955; CHECK-CVT-LABEL: test_unsigned_v8f16_v8i50:2956; CHECK-CVT:       // %bb.0:2957; CHECK-CVT-NEXT:    ext v1.16b, v0.16b, v0.16b, #82958; CHECK-CVT-NEXT:    mov h5, v0.h[1]2959; CHECK-CVT-NEXT:    mov x8, #1125899906842623 // =0x3ffffffffffff2960; CHECK-CVT-NEXT:    mov h6, v0.h[2]2961; CHECK-CVT-NEXT:    mov h7, v0.h[3]2962; CHECK-CVT-NEXT:    fcvt s0, h02963; CHECK-CVT-NEXT:    mov h2, v1.h[1]2964; CHECK-CVT-NEXT:    mov h3, v1.h[2]2965; CHECK-CVT-NEXT:    mov h4, v1.h[3]2966; CHECK-CVT-NEXT:    fcvt s1, h12967; CHECK-CVT-NEXT:    fcvtzu x13, s02968; CHECK-CVT-NEXT:    fcvt s2, h22969; CHECK-CVT-NEXT:    fcvt s3, h32970; CHECK-CVT-NEXT:    fcvt s4, h42971; CHECK-CVT-NEXT:    fcvtzu x9, s12972; CHECK-CVT-NEXT:    fcvt s1, h52973; CHECK-CVT-NEXT:    fcvtzu x10, s22974; CHECK-CVT-NEXT:    fcvtzu x11, s32975; CHECK-CVT-NEXT:    fcvt s2, h62976; CHECK-CVT-NEXT:    fcvtzu x12, s42977; CHECK-CVT-NEXT:    fcvt s3, h72978; CHECK-CVT-NEXT:    cmp x9, x82979; CHECK-CVT-NEXT:    fcvtzu x14, s12980; CHECK-CVT-NEXT:    csel x4, x9, x8, lo2981; CHECK-CVT-NEXT:    cmp x10, x82982; CHECK-CVT-NEXT:    fcvtzu x9, s22983; CHECK-CVT-NEXT:    csel x5, x10, x8, lo2984; CHECK-CVT-NEXT:    cmp x11, x82985; CHECK-CVT-NEXT:    fcvtzu x10, s32986; CHECK-CVT-NEXT:    csel x6, x11, x8, lo2987; CHECK-CVT-NEXT:    cmp x12, x82988; CHECK-CVT-NEXT:    csel x7, x12, x8, lo2989; CHECK-CVT-NEXT:    cmp x13, x82990; CHECK-CVT-NEXT:    csel x0, x13, x8, lo2991; CHECK-CVT-NEXT:    cmp x14, x82992; CHECK-CVT-NEXT:    csel x1, x14, x8, lo2993; CHECK-CVT-NEXT:    cmp x9, x82994; CHECK-CVT-NEXT:    csel x2, x9, x8, lo2995; CHECK-CVT-NEXT:    cmp x10, x82996; CHECK-CVT-NEXT:    csel x3, x10, x8, lo2997; CHECK-CVT-NEXT:    ret2998;2999; CHECK-FP16-LABEL: test_unsigned_v8f16_v8i50:3000; CHECK-FP16:       // %bb.0:3001; CHECK-FP16-NEXT:    ext v1.16b, v0.16b, v0.16b, #83002; CHECK-FP16-NEXT:    mov x8, #1125899906842623 // =0x3ffffffffffff3003; CHECK-FP16-NEXT:    fcvtzu x13, h03004; CHECK-FP16-NEXT:    mov h2, v1.h[1]3005; CHECK-FP16-NEXT:    mov h3, v1.h[2]3006; CHECK-FP16-NEXT:    mov h4, v1.h[3]3007; CHECK-FP16-NEXT:    fcvtzu x9, h13008; CHECK-FP16-NEXT:    mov h1, v0.h[1]3009; CHECK-FP16-NEXT:    fcvtzu x10, h23010; CHECK-FP16-NEXT:    fcvtzu x11, h33011; CHECK-FP16-NEXT:    mov h2, v0.h[2]3012; CHECK-FP16-NEXT:    fcvtzu x12, h43013; CHECK-FP16-NEXT:    mov h3, v0.h[3]3014; CHECK-FP16-NEXT:    cmp x9, x83015; CHECK-FP16-NEXT:    fcvtzu x14, h13016; CHECK-FP16-NEXT:    csel x4, x9, x8, lo3017; CHECK-FP16-NEXT:    cmp x10, x83018; CHECK-FP16-NEXT:    fcvtzu x9, h23019; CHECK-FP16-NEXT:    csel x5, x10, x8, lo3020; CHECK-FP16-NEXT:    cmp x11, x83021; CHECK-FP16-NEXT:    fcvtzu x10, h33022; CHECK-FP16-NEXT:    csel x6, x11, x8, lo3023; CHECK-FP16-NEXT:    cmp x12, x83024; CHECK-FP16-NEXT:    csel x7, x12, x8, lo3025; CHECK-FP16-NEXT:    cmp x13, x83026; CHECK-FP16-NEXT:    csel x0, x13, x8, lo3027; CHECK-FP16-NEXT:    cmp x14, x83028; CHECK-FP16-NEXT:    csel x1, x14, x8, lo3029; CHECK-FP16-NEXT:    cmp x9, x83030; CHECK-FP16-NEXT:    csel x2, x9, x8, lo3031; CHECK-FP16-NEXT:    cmp x10, x83032; CHECK-FP16-NEXT:    csel x3, x10, x8, lo3033; CHECK-FP16-NEXT:    ret3034    %x = call <8 x i50> @llvm.fptoui.sat.v8f16.v8i50(<8 x half> %f)3035    ret <8 x i50> %x3036}3037 3038define <8 x i64> @test_unsigned_v8f16_v8i64(<8 x half> %f) {3039; CHECK-SD-CVT-LABEL: test_unsigned_v8f16_v8i64:3040; CHECK-SD-CVT:       // %bb.0:3041; CHECK-SD-CVT-NEXT:    ext v1.16b, v0.16b, v0.16b, #83042; CHECK-SD-CVT-NEXT:    mov h4, v0.h[2]3043; CHECK-SD-CVT-NEXT:    mov h3, v0.h[1]3044; CHECK-SD-CVT-NEXT:    mov h7, v0.h[3]3045; CHECK-SD-CVT-NEXT:    fcvt s0, h03046; CHECK-SD-CVT-NEXT:    mov h2, v1.h[2]3047; CHECK-SD-CVT-NEXT:    mov h5, v1.h[1]3048; CHECK-SD-CVT-NEXT:    mov h6, v1.h[3]3049; CHECK-SD-CVT-NEXT:    fcvt s1, h13050; CHECK-SD-CVT-NEXT:    fcvt s4, h43051; CHECK-SD-CVT-NEXT:    fcvt s3, h33052; CHECK-SD-CVT-NEXT:    fcvt s7, h73053; CHECK-SD-CVT-NEXT:    fcvtzu x9, s03054; CHECK-SD-CVT-NEXT:    fcvt s2, h23055; CHECK-SD-CVT-NEXT:    fcvt s5, h53056; CHECK-SD-CVT-NEXT:    fcvt s6, h63057; CHECK-SD-CVT-NEXT:    fcvtzu x8, s13058; CHECK-SD-CVT-NEXT:    fcvtzu x12, s43059; CHECK-SD-CVT-NEXT:    fcvtzu x11, s33060; CHECK-SD-CVT-NEXT:    fcvtzu x15, s73061; CHECK-SD-CVT-NEXT:    fmov d0, x93062; CHECK-SD-CVT-NEXT:    fcvtzu x10, s23063; CHECK-SD-CVT-NEXT:    fcvtzu x13, s53064; CHECK-SD-CVT-NEXT:    fcvtzu x14, s63065; CHECK-SD-CVT-NEXT:    fmov d2, x83066; CHECK-SD-CVT-NEXT:    fmov d1, x123067; CHECK-SD-CVT-NEXT:    mov v0.d[1], x113068; CHECK-SD-CVT-NEXT:    fmov d3, x103069; CHECK-SD-CVT-NEXT:    mov v2.d[1], x133070; CHECK-SD-CVT-NEXT:    mov v1.d[1], x153071; CHECK-SD-CVT-NEXT:    mov v3.d[1], x143072; CHECK-SD-CVT-NEXT:    ret3073;3074; CHECK-SD-FP16-LABEL: test_unsigned_v8f16_v8i64:3075; CHECK-SD-FP16:       // %bb.0:3076; CHECK-SD-FP16-NEXT:    ext v1.16b, v0.16b, v0.16b, #83077; CHECK-SD-FP16-NEXT:    mov h4, v0.h[2]3078; CHECK-SD-FP16-NEXT:    mov h3, v0.h[1]3079; CHECK-SD-FP16-NEXT:    mov h7, v0.h[3]3080; CHECK-SD-FP16-NEXT:    fcvtzu x9, h03081; CHECK-SD-FP16-NEXT:    mov h2, v1.h[2]3082; CHECK-SD-FP16-NEXT:    mov h5, v1.h[1]3083; CHECK-SD-FP16-NEXT:    mov h6, v1.h[3]3084; CHECK-SD-FP16-NEXT:    fcvtzu x8, h13085; CHECK-SD-FP16-NEXT:    fcvtzu x12, h43086; CHECK-SD-FP16-NEXT:    fcvtzu x11, h33087; CHECK-SD-FP16-NEXT:    fcvtzu x15, h73088; CHECK-SD-FP16-NEXT:    fmov d0, x93089; CHECK-SD-FP16-NEXT:    fcvtzu x10, h23090; CHECK-SD-FP16-NEXT:    fcvtzu x13, h53091; CHECK-SD-FP16-NEXT:    fcvtzu x14, h63092; CHECK-SD-FP16-NEXT:    fmov d2, x83093; CHECK-SD-FP16-NEXT:    fmov d1, x123094; CHECK-SD-FP16-NEXT:    mov v0.d[1], x113095; CHECK-SD-FP16-NEXT:    fmov d3, x103096; CHECK-SD-FP16-NEXT:    mov v2.d[1], x133097; CHECK-SD-FP16-NEXT:    mov v1.d[1], x153098; CHECK-SD-FP16-NEXT:    mov v3.d[1], x143099; CHECK-SD-FP16-NEXT:    ret3100;3101; CHECK-GI-LABEL: test_unsigned_v8f16_v8i64:3102; CHECK-GI:       // %bb.0:3103; CHECK-GI-NEXT:    fcvtl v1.4s, v0.4h3104; CHECK-GI-NEXT:    fcvtl2 v0.4s, v0.8h3105; CHECK-GI-NEXT:    fcvtl v2.2d, v1.2s3106; CHECK-GI-NEXT:    fcvtl2 v1.2d, v1.4s3107; CHECK-GI-NEXT:    fcvtl v3.2d, v0.2s3108; CHECK-GI-NEXT:    fcvtl2 v4.2d, v0.4s3109; CHECK-GI-NEXT:    fcvtzu v0.2d, v2.2d3110; CHECK-GI-NEXT:    fcvtzu v1.2d, v1.2d3111; CHECK-GI-NEXT:    fcvtzu v2.2d, v3.2d3112; CHECK-GI-NEXT:    fcvtzu v3.2d, v4.2d3113; CHECK-GI-NEXT:    ret3114    %x = call <8 x i64> @llvm.fptoui.sat.v8f16.v8i64(<8 x half> %f)3115    ret <8 x i64> %x3116}3117 3118define <8 x i100> @test_unsigned_v8f16_v8i100(<8 x half> %f) {3119; CHECK-LABEL: test_unsigned_v8f16_v8i100:3120; CHECK:       // %bb.0:3121; CHECK-NEXT:    sub sp, sp, #1763122; CHECK-NEXT:    stp d9, d8, [sp, #64] // 16-byte Folded Spill3123; CHECK-NEXT:    stp x29, x30, [sp, #80] // 16-byte Folded Spill3124; CHECK-NEXT:    stp x28, x27, [sp, #96] // 16-byte Folded Spill3125; CHECK-NEXT:    stp x26, x25, [sp, #112] // 16-byte Folded Spill3126; CHECK-NEXT:    stp x24, x23, [sp, #128] // 16-byte Folded Spill3127; CHECK-NEXT:    stp x22, x21, [sp, #144] // 16-byte Folded Spill3128; CHECK-NEXT:    stp x20, x19, [sp, #160] // 16-byte Folded Spill3129; CHECK-NEXT:    .cfi_def_cfa_offset 1763130; CHECK-NEXT:    .cfi_offset w19, -83131; CHECK-NEXT:    .cfi_offset w20, -163132; CHECK-NEXT:    .cfi_offset w21, -243133; CHECK-NEXT:    .cfi_offset w22, -323134; CHECK-NEXT:    .cfi_offset w23, -403135; CHECK-NEXT:    .cfi_offset w24, -483136; CHECK-NEXT:    .cfi_offset w25, -563137; CHECK-NEXT:    .cfi_offset w26, -643138; CHECK-NEXT:    .cfi_offset w27, -723139; CHECK-NEXT:    .cfi_offset w28, -803140; CHECK-NEXT:    .cfi_offset w30, -883141; CHECK-NEXT:    .cfi_offset w29, -963142; CHECK-NEXT:    .cfi_offset b8, -1043143; CHECK-NEXT:    .cfi_offset b9, -1123144; CHECK-NEXT:    str q0, [sp, #48] // 16-byte Spill3145; CHECK-NEXT:    ext v0.16b, v0.16b, v0.16b, #83146; CHECK-NEXT:    mov x19, x83147; CHECK-NEXT:    str q0, [sp, #32] // 16-byte Spill3148; CHECK-NEXT:    mov h0, v0.h[1]3149; CHECK-NEXT:    fcvt s8, h03150; CHECK-NEXT:    fmov s0, s83151; CHECK-NEXT:    bl __fixunssfti3152; CHECK-NEXT:    ldr q0, [sp, #32] // 16-byte Reload3153; CHECK-NEXT:    mov w8, #1904214015 // =0x717fffff3154; CHECK-NEXT:    fcmp s8, #0.03155; CHECK-NEXT:    fmov s9, w83156; CHECK-NEXT:    mov x23, #68719476735 // =0xfffffffff3157; CHECK-NEXT:    mov h0, v0.h[3]3158; CHECK-NEXT:    csel x9, xzr, x0, lt3159; CHECK-NEXT:    csel x8, xzr, x1, lt3160; CHECK-NEXT:    fcmp s8, s93161; CHECK-NEXT:    fcvt s8, h03162; CHECK-NEXT:    csel x10, x23, x8, gt3163; CHECK-NEXT:    csinv x8, x9, xzr, le3164; CHECK-NEXT:    stp x8, x10, [sp, #16] // 16-byte Folded Spill3165; CHECK-NEXT:    fmov s0, s83166; CHECK-NEXT:    bl __fixunssfti3167; CHECK-NEXT:    fcmp s8, #0.03168; CHECK-NEXT:    ldr q0, [sp, #32] // 16-byte Reload3169; CHECK-NEXT:    csel x8, xzr, x0, lt3170; CHECK-NEXT:    csel x9, xzr, x1, lt3171; CHECK-NEXT:    fcmp s8, s93172; CHECK-NEXT:    fcvt s8, h03173; CHECK-NEXT:    csel x9, x23, x9, gt3174; CHECK-NEXT:    csinv x8, x8, xzr, le3175; CHECK-NEXT:    stp x8, x9, [sp] // 16-byte Folded Spill3176; CHECK-NEXT:    fmov s0, s83177; CHECK-NEXT:    bl __fixunssfti3178; CHECK-NEXT:    ldr q0, [sp, #32] // 16-byte Reload3179; CHECK-NEXT:    fcmp s8, #0.03180; CHECK-NEXT:    mov h0, v0.h[2]3181; CHECK-NEXT:    csel x8, xzr, x0, lt3182; CHECK-NEXT:    csel x9, xzr, x1, lt3183; CHECK-NEXT:    fcmp s8, s93184; CHECK-NEXT:    fcvt s8, h03185; CHECK-NEXT:    csinv x8, x8, xzr, le3186; CHECK-NEXT:    csel x25, x23, x9, gt3187; CHECK-NEXT:    str x8, [sp, #32] // 8-byte Spill3188; CHECK-NEXT:    fmov s0, s83189; CHECK-NEXT:    bl __fixunssfti3190; CHECK-NEXT:    ldr q0, [sp, #48] // 16-byte Reload3191; CHECK-NEXT:    fcmp s8, #0.03192; CHECK-NEXT:    mov h0, v0.h[1]3193; CHECK-NEXT:    csel x8, xzr, x0, lt3194; CHECK-NEXT:    csel x9, xzr, x1, lt3195; CHECK-NEXT:    fcmp s8, s93196; CHECK-NEXT:    fcvt s8, h03197; CHECK-NEXT:    csel x26, x23, x9, gt3198; CHECK-NEXT:    csinv x28, x8, xzr, le3199; CHECK-NEXT:    fmov s0, s83200; CHECK-NEXT:    bl __fixunssfti3201; CHECK-NEXT:    ldr q0, [sp, #48] // 16-byte Reload3202; CHECK-NEXT:    fcmp s8, #0.03203; CHECK-NEXT:    mov h0, v0.h[3]3204; CHECK-NEXT:    csel x8, xzr, x0, lt3205; CHECK-NEXT:    csel x9, xzr, x1, lt3206; CHECK-NEXT:    fcmp s8, s93207; CHECK-NEXT:    fcvt s8, h03208; CHECK-NEXT:    csel x29, x23, x9, gt3209; CHECK-NEXT:    csinv x20, x8, xzr, le3210; CHECK-NEXT:    fmov s0, s83211; CHECK-NEXT:    bl __fixunssfti3212; CHECK-NEXT:    fcmp s8, #0.03213; CHECK-NEXT:    ldr q0, [sp, #48] // 16-byte Reload3214; CHECK-NEXT:    csel x8, xzr, x0, lt3215; CHECK-NEXT:    csel x9, xzr, x1, lt3216; CHECK-NEXT:    fcmp s8, s93217; CHECK-NEXT:    fcvt s8, h03218; CHECK-NEXT:    csel x21, x23, x9, gt3219; CHECK-NEXT:    csinv x27, x8, xzr, le3220; CHECK-NEXT:    fmov s0, s83221; CHECK-NEXT:    bl __fixunssfti3222; CHECK-NEXT:    ldr q0, [sp, #48] // 16-byte Reload3223; CHECK-NEXT:    fcmp s8, #0.03224; CHECK-NEXT:    mov h0, v0.h[2]3225; CHECK-NEXT:    csel x8, xzr, x0, lt3226; CHECK-NEXT:    csel x9, xzr, x1, lt3227; CHECK-NEXT:    fcmp s8, s93228; CHECK-NEXT:    fcvt s8, h03229; CHECK-NEXT:    csel x22, x23, x9, gt3230; CHECK-NEXT:    csinv x24, x8, xzr, le3231; CHECK-NEXT:    fmov s0, s83232; CHECK-NEXT:    bl __fixunssfti3233; CHECK-NEXT:    extr x8, x21, x27, #283234; CHECK-NEXT:    str x24, [x19]3235; CHECK-NEXT:    bfi x22, x20, #36, #283236; CHECK-NEXT:    stur x28, [x19, #75]3237; CHECK-NEXT:    extr x9, x29, x20, #283238; CHECK-NEXT:    fcmp s8, #0.03239; CHECK-NEXT:    stur x8, [x19, #41]3240; CHECK-NEXT:    ldr x11, [sp, #32] // 8-byte Reload3241; CHECK-NEXT:    stp x22, x9, [x19, #8]3242; CHECK-NEXT:    lsr x9, x29, #283243; CHECK-NEXT:    csel x8, xzr, x0, lt3244; CHECK-NEXT:    csel x10, xzr, x1, lt3245; CHECK-NEXT:    fcmp s8, s93246; CHECK-NEXT:    stur x11, [x19, #50]3247; CHECK-NEXT:    lsr x11, x21, #283248; CHECK-NEXT:    strb w9, [x19, #24]3249; CHECK-NEXT:    strb w11, [x19, #49]3250; CHECK-NEXT:    csel x10, x23, x10, gt3251; CHECK-NEXT:    csinv x8, x8, xzr, le3252; CHECK-NEXT:    ldp x12, x11, [sp] // 16-byte Folded Reload3253; CHECK-NEXT:    bfi x10, x27, #36, #283254; CHECK-NEXT:    stur x8, [x19, #25]3255; CHECK-NEXT:    stur x10, [x19, #33]3256; CHECK-NEXT:    extr x9, x11, x12, #283257; CHECK-NEXT:    bfi x26, x12, #36, #283258; CHECK-NEXT:    stur x9, [x19, #91]3259; CHECK-NEXT:    ldp x10, x9, [sp, #16] // 16-byte Folded Reload3260; CHECK-NEXT:    stur x26, [x19, #83]3261; CHECK-NEXT:    extr x8, x9, x10, #283262; CHECK-NEXT:    bfi x25, x10, #36, #283263; CHECK-NEXT:    lsr x9, x9, #283264; CHECK-NEXT:    stur x8, [x19, #66]3265; CHECK-NEXT:    lsr x8, x11, #283266; CHECK-NEXT:    stur x25, [x19, #58]3267; CHECK-NEXT:    strb w8, [x19, #99]3268; CHECK-NEXT:    strb w9, [x19, #74]3269; CHECK-NEXT:    ldp x20, x19, [sp, #160] // 16-byte Folded Reload3270; CHECK-NEXT:    ldp x22, x21, [sp, #144] // 16-byte Folded Reload3271; CHECK-NEXT:    ldp x24, x23, [sp, #128] // 16-byte Folded Reload3272; CHECK-NEXT:    ldp x26, x25, [sp, #112] // 16-byte Folded Reload3273; CHECK-NEXT:    ldp x28, x27, [sp, #96] // 16-byte Folded Reload3274; CHECK-NEXT:    ldp x29, x30, [sp, #80] // 16-byte Folded Reload3275; CHECK-NEXT:    ldp d9, d8, [sp, #64] // 16-byte Folded Reload3276; CHECK-NEXT:    add sp, sp, #1763277; CHECK-NEXT:    ret3278    %x = call <8 x i100> @llvm.fptoui.sat.v8f16.v8i100(<8 x half> %f)3279    ret <8 x i100> %x3280}3281 3282define <8 x i128> @test_unsigned_v8f16_v8i128(<8 x half> %f) {3283; CHECK-SD-LABEL: test_unsigned_v8f16_v8i128:3284; CHECK-SD:       // %bb.0:3285; CHECK-SD-NEXT:    sub sp, sp, #1763286; CHECK-SD-NEXT:    stp d9, d8, [sp, #64] // 16-byte Folded Spill3287; CHECK-SD-NEXT:    stp x29, x30, [sp, #80] // 16-byte Folded Spill3288; CHECK-SD-NEXT:    stp x28, x27, [sp, #96] // 16-byte Folded Spill3289; CHECK-SD-NEXT:    stp x26, x25, [sp, #112] // 16-byte Folded Spill3290; CHECK-SD-NEXT:    stp x24, x23, [sp, #128] // 16-byte Folded Spill3291; CHECK-SD-NEXT:    stp x22, x21, [sp, #144] // 16-byte Folded Spill3292; CHECK-SD-NEXT:    stp x20, x19, [sp, #160] // 16-byte Folded Spill3293; CHECK-SD-NEXT:    .cfi_def_cfa_offset 1763294; CHECK-SD-NEXT:    .cfi_offset w19, -83295; CHECK-SD-NEXT:    .cfi_offset w20, -163296; CHECK-SD-NEXT:    .cfi_offset w21, -243297; CHECK-SD-NEXT:    .cfi_offset w22, -323298; CHECK-SD-NEXT:    .cfi_offset w23, -403299; CHECK-SD-NEXT:    .cfi_offset w24, -483300; CHECK-SD-NEXT:    .cfi_offset w25, -563301; CHECK-SD-NEXT:    .cfi_offset w26, -643302; CHECK-SD-NEXT:    .cfi_offset w27, -723303; CHECK-SD-NEXT:    .cfi_offset w28, -803304; CHECK-SD-NEXT:    .cfi_offset w30, -883305; CHECK-SD-NEXT:    .cfi_offset w29, -963306; CHECK-SD-NEXT:    .cfi_offset b8, -1043307; CHECK-SD-NEXT:    .cfi_offset b9, -1123308; CHECK-SD-NEXT:    str q0, [sp, #48] // 16-byte Spill3309; CHECK-SD-NEXT:    ext v0.16b, v0.16b, v0.16b, #83310; CHECK-SD-NEXT:    mov x19, x83311; CHECK-SD-NEXT:    fcvt s8, h03312; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill3313; CHECK-SD-NEXT:    fmov s0, s83314; CHECK-SD-NEXT:    bl __fixunssfti3315; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload3316; CHECK-SD-NEXT:    mov w8, #2139095039 // =0x7f7fffff3317; CHECK-SD-NEXT:    fcmp s8, #0.03318; CHECK-SD-NEXT:    fmov s9, w83319; CHECK-SD-NEXT:    mov h0, v0.h[1]3320; CHECK-SD-NEXT:    csel x9, xzr, x1, lt3321; CHECK-SD-NEXT:    csel x8, xzr, x0, lt3322; CHECK-SD-NEXT:    fcmp s8, s93323; CHECK-SD-NEXT:    fcvt s8, h03324; CHECK-SD-NEXT:    csinv x10, x8, xzr, le3325; CHECK-SD-NEXT:    csinv x8, x9, xzr, le3326; CHECK-SD-NEXT:    stp x8, x10, [sp, #16] // 16-byte Folded Spill3327; CHECK-SD-NEXT:    fmov s0, s83328; CHECK-SD-NEXT:    bl __fixunssfti3329; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload3330; CHECK-SD-NEXT:    fcmp s8, #0.03331; CHECK-SD-NEXT:    mov h0, v0.h[2]3332; CHECK-SD-NEXT:    csel x8, xzr, x1, lt3333; CHECK-SD-NEXT:    csel x9, xzr, x0, lt3334; CHECK-SD-NEXT:    fcmp s8, s93335; CHECK-SD-NEXT:    fcvt s8, h03336; CHECK-SD-NEXT:    csinv x9, x9, xzr, le3337; CHECK-SD-NEXT:    csinv x8, x8, xzr, le3338; CHECK-SD-NEXT:    stp x8, x9, [sp] // 16-byte Folded Spill3339; CHECK-SD-NEXT:    fmov s0, s83340; CHECK-SD-NEXT:    bl __fixunssfti3341; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload3342; CHECK-SD-NEXT:    fcmp s8, #0.03343; CHECK-SD-NEXT:    mov h0, v0.h[3]3344; CHECK-SD-NEXT:    csel x8, xzr, x1, lt3345; CHECK-SD-NEXT:    csel x9, xzr, x0, lt3346; CHECK-SD-NEXT:    fcmp s8, s93347; CHECK-SD-NEXT:    fcvt s8, h03348; CHECK-SD-NEXT:    csinv x24, x9, xzr, le3349; CHECK-SD-NEXT:    csinv x25, x8, xzr, le3350; CHECK-SD-NEXT:    fmov s0, s83351; CHECK-SD-NEXT:    bl __fixunssfti3352; CHECK-SD-NEXT:    fcmp s8, #0.03353; CHECK-SD-NEXT:    ldr q0, [sp, #48] // 16-byte Reload3354; CHECK-SD-NEXT:    csel x8, xzr, x1, lt3355; CHECK-SD-NEXT:    csel x9, xzr, x0, lt3356; CHECK-SD-NEXT:    fcmp s8, s93357; CHECK-SD-NEXT:    fcvt s8, h03358; CHECK-SD-NEXT:    csinv x26, x9, xzr, le3359; CHECK-SD-NEXT:    csinv x27, x8, xzr, le3360; CHECK-SD-NEXT:    fmov s0, s83361; CHECK-SD-NEXT:    bl __fixunssfti3362; CHECK-SD-NEXT:    ldr q0, [sp, #48] // 16-byte Reload3363; CHECK-SD-NEXT:    fcmp s8, #0.03364; CHECK-SD-NEXT:    mov h0, v0.h[1]3365; CHECK-SD-NEXT:    csel x8, xzr, x1, lt3366; CHECK-SD-NEXT:    csel x9, xzr, x0, lt3367; CHECK-SD-NEXT:    fcmp s8, s93368; CHECK-SD-NEXT:    fcvt s8, h03369; CHECK-SD-NEXT:    csinv x28, x9, xzr, le3370; CHECK-SD-NEXT:    csinv x29, x8, xzr, le3371; CHECK-SD-NEXT:    fmov s0, s83372; CHECK-SD-NEXT:    bl __fixunssfti3373; CHECK-SD-NEXT:    ldr q0, [sp, #48] // 16-byte Reload3374; CHECK-SD-NEXT:    fcmp s8, #0.03375; CHECK-SD-NEXT:    mov h0, v0.h[2]3376; CHECK-SD-NEXT:    csel x8, xzr, x1, lt3377; CHECK-SD-NEXT:    csel x9, xzr, x0, lt3378; CHECK-SD-NEXT:    fcmp s8, s93379; CHECK-SD-NEXT:    fcvt s8, h03380; CHECK-SD-NEXT:    csinv x20, x9, xzr, le3381; CHECK-SD-NEXT:    csinv x21, x8, xzr, le3382; CHECK-SD-NEXT:    fmov s0, s83383; CHECK-SD-NEXT:    bl __fixunssfti3384; CHECK-SD-NEXT:    ldr q0, [sp, #48] // 16-byte Reload3385; CHECK-SD-NEXT:    fcmp s8, #0.03386; CHECK-SD-NEXT:    mov h0, v0.h[3]3387; CHECK-SD-NEXT:    csel x8, xzr, x1, lt3388; CHECK-SD-NEXT:    csel x9, xzr, x0, lt3389; CHECK-SD-NEXT:    fcmp s8, s93390; CHECK-SD-NEXT:    fcvt s8, h03391; CHECK-SD-NEXT:    csinv x22, x9, xzr, le3392; CHECK-SD-NEXT:    csinv x23, x8, xzr, le3393; CHECK-SD-NEXT:    fmov s0, s83394; CHECK-SD-NEXT:    bl __fixunssfti3395; CHECK-SD-NEXT:    fcmp s8, #0.03396; CHECK-SD-NEXT:    stp x22, x23, [x19, #32]3397; CHECK-SD-NEXT:    stp x20, x21, [x19, #16]3398; CHECK-SD-NEXT:    stp x28, x29, [x19]3399; CHECK-SD-NEXT:    csel x8, xzr, x1, lt3400; CHECK-SD-NEXT:    csel x9, xzr, x0, lt3401; CHECK-SD-NEXT:    fcmp s8, s93402; CHECK-SD-NEXT:    stp x26, x27, [x19, #112]3403; CHECK-SD-NEXT:    stp x24, x25, [x19, #96]3404; CHECK-SD-NEXT:    csinv x8, x8, xzr, le3405; CHECK-SD-NEXT:    csinv x9, x9, xzr, le3406; CHECK-SD-NEXT:    stp x9, x8, [x19, #48]3407; CHECK-SD-NEXT:    ldr x8, [sp] // 8-byte Reload3408; CHECK-SD-NEXT:    str x8, [x19, #88]3409; CHECK-SD-NEXT:    ldr x8, [sp, #8] // 8-byte Reload3410; CHECK-SD-NEXT:    str x8, [x19, #80]3411; CHECK-SD-NEXT:    ldr x8, [sp, #16] // 8-byte Reload3412; CHECK-SD-NEXT:    str x8, [x19, #72]3413; CHECK-SD-NEXT:    ldr x8, [sp, #24] // 8-byte Reload3414; CHECK-SD-NEXT:    str x8, [x19, #64]3415; CHECK-SD-NEXT:    ldp x20, x19, [sp, #160] // 16-byte Folded Reload3416; CHECK-SD-NEXT:    ldp x22, x21, [sp, #144] // 16-byte Folded Reload3417; CHECK-SD-NEXT:    ldp x24, x23, [sp, #128] // 16-byte Folded Reload3418; CHECK-SD-NEXT:    ldp x26, x25, [sp, #112] // 16-byte Folded Reload3419; CHECK-SD-NEXT:    ldp x28, x27, [sp, #96] // 16-byte Folded Reload3420; CHECK-SD-NEXT:    ldp x29, x30, [sp, #80] // 16-byte Folded Reload3421; CHECK-SD-NEXT:    ldp d9, d8, [sp, #64] // 16-byte Folded Reload3422; CHECK-SD-NEXT:    add sp, sp, #1763423; CHECK-SD-NEXT:    ret3424;3425; CHECK-GI-CVT-LABEL: test_unsigned_v8f16_v8i128:3426; CHECK-GI-CVT:       // %bb.0:3427; CHECK-GI-CVT-NEXT:    mov h1, v0.h[1]3428; CHECK-GI-CVT-NEXT:    mov h2, v0.h[2]3429; CHECK-GI-CVT-NEXT:    mov h3, v0.h[3]3430; CHECK-GI-CVT-NEXT:    mov h4, v0.h[4]3431; CHECK-GI-CVT-NEXT:    fcvt s5, h03432; CHECK-GI-CVT-NEXT:    mov h6, v0.h[5]3433; CHECK-GI-CVT-NEXT:    mov h7, v0.h[6]3434; CHECK-GI-CVT-NEXT:    mov h0, v0.h[7]3435; CHECK-GI-CVT-NEXT:    fcvt s1, h13436; CHECK-GI-CVT-NEXT:    fcvt s2, h23437; CHECK-GI-CVT-NEXT:    fcvt s3, h33438; CHECK-GI-CVT-NEXT:    fcvtzu x9, s53439; CHECK-GI-CVT-NEXT:    fcvt s4, h43440; CHECK-GI-CVT-NEXT:    fcvt s5, h63441; CHECK-GI-CVT-NEXT:    fcvt s0, h03442; CHECK-GI-CVT-NEXT:    fcvtzu x10, s13443; CHECK-GI-CVT-NEXT:    fcvt s1, h73444; CHECK-GI-CVT-NEXT:    fcvtzu x11, s23445; CHECK-GI-CVT-NEXT:    fcvtzu x12, s33446; CHECK-GI-CVT-NEXT:    mov v2.d[0], x93447; CHECK-GI-CVT-NEXT:    fcvtzu x9, s43448; CHECK-GI-CVT-NEXT:    mov v3.d[0], x103449; CHECK-GI-CVT-NEXT:    fcvtzu x10, s53450; CHECK-GI-CVT-NEXT:    mov v4.d[0], x113451; CHECK-GI-CVT-NEXT:    fcvtzu x11, s13452; CHECK-GI-CVT-NEXT:    mov v1.d[0], x123453; CHECK-GI-CVT-NEXT:    fcvtzu x12, s03454; CHECK-GI-CVT-NEXT:    mov v0.d[0], x93455; CHECK-GI-CVT-NEXT:    mov v2.d[1], xzr3456; CHECK-GI-CVT-NEXT:    mov v5.d[0], x103457; CHECK-GI-CVT-NEXT:    mov v3.d[1], xzr3458; CHECK-GI-CVT-NEXT:    mov v4.d[1], xzr3459; CHECK-GI-CVT-NEXT:    mov v6.d[0], x113460; CHECK-GI-CVT-NEXT:    mov v7.d[0], x123461; CHECK-GI-CVT-NEXT:    mov v1.d[1], xzr3462; CHECK-GI-CVT-NEXT:    mov v0.d[1], xzr3463; CHECK-GI-CVT-NEXT:    mov v5.d[1], xzr3464; CHECK-GI-CVT-NEXT:    stp q2, q3, [x8]3465; CHECK-GI-CVT-NEXT:    mov v6.d[1], xzr3466; CHECK-GI-CVT-NEXT:    mov v7.d[1], xzr3467; CHECK-GI-CVT-NEXT:    stp q4, q1, [x8, #32]3468; CHECK-GI-CVT-NEXT:    stp q0, q5, [x8, #64]3469; CHECK-GI-CVT-NEXT:    stp q6, q7, [x8, #96]3470; CHECK-GI-CVT-NEXT:    ret3471;3472; CHECK-GI-FP16-LABEL: test_unsigned_v8f16_v8i128:3473; CHECK-GI-FP16:       // %bb.0:3474; CHECK-GI-FP16-NEXT:    mov h1, v0.h[1]3475; CHECK-GI-FP16-NEXT:    mov h2, v0.h[2]3476; CHECK-GI-FP16-NEXT:    mov h3, v0.h[3]3477; CHECK-GI-FP16-NEXT:    mov h4, v0.h[4]3478; CHECK-GI-FP16-NEXT:    fcvtzu x9, h03479; CHECK-GI-FP16-NEXT:    mov h5, v0.h[5]3480; CHECK-GI-FP16-NEXT:    fcvtzu x10, h13481; CHECK-GI-FP16-NEXT:    mov h1, v0.h[6]3482; CHECK-GI-FP16-NEXT:    fcvtzu x11, h23483; CHECK-GI-FP16-NEXT:    mov h0, v0.h[7]3484; CHECK-GI-FP16-NEXT:    fcvtzu x12, h33485; CHECK-GI-FP16-NEXT:    mov v2.d[0], x93486; CHECK-GI-FP16-NEXT:    fcvtzu x9, h43487; CHECK-GI-FP16-NEXT:    mov v3.d[0], x103488; CHECK-GI-FP16-NEXT:    fcvtzu x10, h53489; CHECK-GI-FP16-NEXT:    mov v4.d[0], x113490; CHECK-GI-FP16-NEXT:    fcvtzu x11, h13491; CHECK-GI-FP16-NEXT:    mov v1.d[0], x123492; CHECK-GI-FP16-NEXT:    fcvtzu x12, h03493; CHECK-GI-FP16-NEXT:    mov v0.d[0], x93494; CHECK-GI-FP16-NEXT:    mov v2.d[1], xzr3495; CHECK-GI-FP16-NEXT:    mov v5.d[0], x103496; CHECK-GI-FP16-NEXT:    mov v3.d[1], xzr3497; CHECK-GI-FP16-NEXT:    mov v4.d[1], xzr3498; CHECK-GI-FP16-NEXT:    mov v6.d[0], x113499; CHECK-GI-FP16-NEXT:    mov v7.d[0], x123500; CHECK-GI-FP16-NEXT:    mov v1.d[1], xzr3501; CHECK-GI-FP16-NEXT:    mov v0.d[1], xzr3502; CHECK-GI-FP16-NEXT:    mov v5.d[1], xzr3503; CHECK-GI-FP16-NEXT:    stp q2, q3, [x8]3504; CHECK-GI-FP16-NEXT:    mov v6.d[1], xzr3505; CHECK-GI-FP16-NEXT:    mov v7.d[1], xzr3506; CHECK-GI-FP16-NEXT:    stp q4, q1, [x8, #32]3507; CHECK-GI-FP16-NEXT:    stp q0, q5, [x8, #64]3508; CHECK-GI-FP16-NEXT:    stp q6, q7, [x8, #96]3509; CHECK-GI-FP16-NEXT:    ret3510    %x = call <8 x i128> @llvm.fptoui.sat.v8f16.v8i128(<8 x half> %f)3511    ret <8 x i128> %x3512}3513 3514 3515declare <8 x i8> @llvm.fptoui.sat.v8f32.v8i8(<8 x float> %f)3516declare <8 x i16> @llvm.fptoui.sat.v8f32.v8i16(<8 x float> %f)3517declare <16 x i8> @llvm.fptoui.sat.v16f32.v16i8(<16 x float> %f)3518declare <16 x i16> @llvm.fptoui.sat.v16f32.v16i16(<16 x float> %f)3519 3520declare <16 x i8> @llvm.fptoui.sat.v16f16.v16i8(<16 x half> %f)3521declare <16 x i16> @llvm.fptoui.sat.v16f16.v16i16(<16 x half> %f)3522 3523declare <8 x i8> @llvm.fptoui.sat.v8f64.v8i8(<8 x double> %f)3524declare <8 x i16> @llvm.fptoui.sat.v8f64.v8i16(<8 x double> %f)3525declare <16 x i8> @llvm.fptoui.sat.v16f64.v16i8(<16 x double> %f)3526declare <16 x i16> @llvm.fptoui.sat.v16f64.v16i16(<16 x double> %f)3527 3528define <8 x i8> @test_unsigned_v8f32_v8i8(<8 x float> %f) {3529; CHECK-SD-LABEL: test_unsigned_v8f32_v8i8:3530; CHECK-SD:       // %bb.0:3531; CHECK-SD-NEXT:    movi v2.2d, #0x0000ff000000ff3532; CHECK-SD-NEXT:    fcvtzu v1.4s, v1.4s3533; CHECK-SD-NEXT:    fcvtzu v0.4s, v0.4s3534; CHECK-SD-NEXT:    umin v1.4s, v1.4s, v2.4s3535; CHECK-SD-NEXT:    umin v0.4s, v0.4s, v2.4s3536; CHECK-SD-NEXT:    uzp1 v0.8h, v0.8h, v1.8h3537; CHECK-SD-NEXT:    xtn v0.8b, v0.8h3538; CHECK-SD-NEXT:    ret3539;3540; CHECK-GI-LABEL: test_unsigned_v8f32_v8i8:3541; CHECK-GI:       // %bb.0:3542; CHECK-GI-NEXT:    movi v2.2d, #0x0000ff000000ff3543; CHECK-GI-NEXT:    fcvtzu v0.4s, v0.4s3544; CHECK-GI-NEXT:    fcvtzu v1.4s, v1.4s3545; CHECK-GI-NEXT:    umin v0.4s, v0.4s, v2.4s3546; CHECK-GI-NEXT:    umin v1.4s, v1.4s, v2.4s3547; CHECK-GI-NEXT:    uzp1 v0.8h, v0.8h, v1.8h3548; CHECK-GI-NEXT:    xtn v0.8b, v0.8h3549; CHECK-GI-NEXT:    ret3550    %x = call <8 x i8> @llvm.fptoui.sat.v8f32.v8i8(<8 x float> %f)3551    ret <8 x i8> %x3552}3553 3554define <16 x i8> @test_unsigned_v16f32_v16i8(<16 x float> %f) {3555; CHECK-SD-LABEL: test_unsigned_v16f32_v16i8:3556; CHECK-SD:       // %bb.0:3557; CHECK-SD-NEXT:    movi v4.2d, #0x0000ff000000ff3558; CHECK-SD-NEXT:    fcvtzu v3.4s, v3.4s3559; CHECK-SD-NEXT:    fcvtzu v2.4s, v2.4s3560; CHECK-SD-NEXT:    fcvtzu v1.4s, v1.4s3561; CHECK-SD-NEXT:    fcvtzu v0.4s, v0.4s3562; CHECK-SD-NEXT:    umin v3.4s, v3.4s, v4.4s3563; CHECK-SD-NEXT:    umin v2.4s, v2.4s, v4.4s3564; CHECK-SD-NEXT:    umin v1.4s, v1.4s, v4.4s3565; CHECK-SD-NEXT:    umin v0.4s, v0.4s, v4.4s3566; CHECK-SD-NEXT:    uzp1 v2.8h, v2.8h, v3.8h3567; CHECK-SD-NEXT:    uzp1 v0.8h, v0.8h, v1.8h3568; CHECK-SD-NEXT:    uzp1 v0.16b, v0.16b, v2.16b3569; CHECK-SD-NEXT:    ret3570;3571; CHECK-GI-LABEL: test_unsigned_v16f32_v16i8:3572; CHECK-GI:       // %bb.0:3573; CHECK-GI-NEXT:    movi v4.2d, #0x0000ff000000ff3574; CHECK-GI-NEXT:    fcvtzu v0.4s, v0.4s3575; CHECK-GI-NEXT:    fcvtzu v1.4s, v1.4s3576; CHECK-GI-NEXT:    fcvtzu v2.4s, v2.4s3577; CHECK-GI-NEXT:    fcvtzu v3.4s, v3.4s3578; CHECK-GI-NEXT:    umin v0.4s, v0.4s, v4.4s3579; CHECK-GI-NEXT:    umin v1.4s, v1.4s, v4.4s3580; CHECK-GI-NEXT:    umin v2.4s, v2.4s, v4.4s3581; CHECK-GI-NEXT:    umin v3.4s, v3.4s, v4.4s3582; CHECK-GI-NEXT:    uzp1 v0.8h, v0.8h, v1.8h3583; CHECK-GI-NEXT:    uzp1 v1.8h, v2.8h, v3.8h3584; CHECK-GI-NEXT:    uzp1 v0.16b, v0.16b, v1.16b3585; CHECK-GI-NEXT:    ret3586    %x = call <16 x i8> @llvm.fptoui.sat.v16f32.v16i8(<16 x float> %f)3587    ret <16 x i8> %x3588}3589 3590define <8 x i16> @test_unsigned_v8f32_v8i16(<8 x float> %f) {3591; CHECK-LABEL: test_unsigned_v8f32_v8i16:3592; CHECK:       // %bb.0:3593; CHECK-NEXT:    fcvtzu v0.4s, v0.4s3594; CHECK-NEXT:    fcvtzu v1.4s, v1.4s3595; CHECK-NEXT:    uqxtn v0.4h, v0.4s3596; CHECK-NEXT:    uqxtn2 v0.8h, v1.4s3597; CHECK-NEXT:    ret3598    %x = call <8 x i16> @llvm.fptoui.sat.v8f32.v8i16(<8 x float> %f)3599    ret <8 x i16> %x3600}3601 3602define <16 x i16> @test_unsigned_v16f32_v16i16(<16 x float> %f) {3603; CHECK-SD-LABEL: test_unsigned_v16f32_v16i16:3604; CHECK-SD:       // %bb.0:3605; CHECK-SD-NEXT:    fcvtzu v0.4s, v0.4s3606; CHECK-SD-NEXT:    fcvtzu v2.4s, v2.4s3607; CHECK-SD-NEXT:    fcvtzu v4.4s, v1.4s3608; CHECK-SD-NEXT:    uqxtn v0.4h, v0.4s3609; CHECK-SD-NEXT:    uqxtn v1.4h, v2.4s3610; CHECK-SD-NEXT:    fcvtzu v2.4s, v3.4s3611; CHECK-SD-NEXT:    uqxtn2 v0.8h, v4.4s3612; CHECK-SD-NEXT:    uqxtn2 v1.8h, v2.4s3613; CHECK-SD-NEXT:    ret3614;3615; CHECK-GI-LABEL: test_unsigned_v16f32_v16i16:3616; CHECK-GI:       // %bb.0:3617; CHECK-GI-NEXT:    fcvtzu v0.4s, v0.4s3618; CHECK-GI-NEXT:    fcvtzu v2.4s, v2.4s3619; CHECK-GI-NEXT:    fcvtzu v4.4s, v1.4s3620; CHECK-GI-NEXT:    fcvtzu v3.4s, v3.4s3621; CHECK-GI-NEXT:    uqxtn v0.4h, v0.4s3622; CHECK-GI-NEXT:    uqxtn v1.4h, v2.4s3623; CHECK-GI-NEXT:    uqxtn2 v0.8h, v4.4s3624; CHECK-GI-NEXT:    uqxtn2 v1.8h, v3.4s3625; CHECK-GI-NEXT:    ret3626    %x = call <16 x i16> @llvm.fptoui.sat.v16f32.v16i16(<16 x float> %f)3627    ret <16 x i16> %x3628}3629 3630 3631 3632define <16 x i8> @test_unsigned_v16f16_v16i8(<16 x half> %f) {3633; CHECK-SD-CVT-LABEL: test_unsigned_v16f16_v16i8:3634; CHECK-SD-CVT:       // %bb.0:3635; CHECK-SD-CVT-NEXT:    fcvtl2 v3.4s, v1.8h3636; CHECK-SD-CVT-NEXT:    fcvtl v1.4s, v1.4h3637; CHECK-SD-CVT-NEXT:    fcvtl2 v4.4s, v0.8h3638; CHECK-SD-CVT-NEXT:    fcvtl v0.4s, v0.4h3639; CHECK-SD-CVT-NEXT:    movi v2.2d, #0x0000ff000000ff3640; CHECK-SD-CVT-NEXT:    fcvtzu v3.4s, v3.4s3641; CHECK-SD-CVT-NEXT:    fcvtzu v1.4s, v1.4s3642; CHECK-SD-CVT-NEXT:    fcvtzu v4.4s, v4.4s3643; CHECK-SD-CVT-NEXT:    fcvtzu v0.4s, v0.4s3644; CHECK-SD-CVT-NEXT:    umin v3.4s, v3.4s, v2.4s3645; CHECK-SD-CVT-NEXT:    umin v1.4s, v1.4s, v2.4s3646; CHECK-SD-CVT-NEXT:    umin v4.4s, v4.4s, v2.4s3647; CHECK-SD-CVT-NEXT:    umin v0.4s, v0.4s, v2.4s3648; CHECK-SD-CVT-NEXT:    uzp1 v1.8h, v1.8h, v3.8h3649; CHECK-SD-CVT-NEXT:    uzp1 v0.8h, v0.8h, v4.8h3650; CHECK-SD-CVT-NEXT:    uzp1 v0.16b, v0.16b, v1.16b3651; CHECK-SD-CVT-NEXT:    ret3652;3653; CHECK-FP16-LABEL: test_unsigned_v16f16_v16i8:3654; CHECK-FP16:       // %bb.0:3655; CHECK-FP16-NEXT:    fcvtzu v0.8h, v0.8h3656; CHECK-FP16-NEXT:    fcvtzu v1.8h, v1.8h3657; CHECK-FP16-NEXT:    uqxtn v0.8b, v0.8h3658; CHECK-FP16-NEXT:    uqxtn2 v0.16b, v1.8h3659; CHECK-FP16-NEXT:    ret3660;3661; CHECK-GI-CVT-LABEL: test_unsigned_v16f16_v16i8:3662; CHECK-GI-CVT:       // %bb.0:3663; CHECK-GI-CVT-NEXT:    fcvtl v3.4s, v0.4h3664; CHECK-GI-CVT-NEXT:    fcvtl2 v0.4s, v0.8h3665; CHECK-GI-CVT-NEXT:    fcvtl v4.4s, v1.4h3666; CHECK-GI-CVT-NEXT:    fcvtl2 v1.4s, v1.8h3667; CHECK-GI-CVT-NEXT:    movi v2.2d, #0x0000ff000000ff3668; CHECK-GI-CVT-NEXT:    fcvtzu v3.4s, v3.4s3669; CHECK-GI-CVT-NEXT:    fcvtzu v0.4s, v0.4s3670; CHECK-GI-CVT-NEXT:    fcvtzu v4.4s, v4.4s3671; CHECK-GI-CVT-NEXT:    fcvtzu v1.4s, v1.4s3672; CHECK-GI-CVT-NEXT:    umin v3.4s, v3.4s, v2.4s3673; CHECK-GI-CVT-NEXT:    umin v0.4s, v0.4s, v2.4s3674; CHECK-GI-CVT-NEXT:    umin v4.4s, v4.4s, v2.4s3675; CHECK-GI-CVT-NEXT:    umin v1.4s, v1.4s, v2.4s3676; CHECK-GI-CVT-NEXT:    uzp1 v0.8h, v3.8h, v0.8h3677; CHECK-GI-CVT-NEXT:    uzp1 v1.8h, v4.8h, v1.8h3678; CHECK-GI-CVT-NEXT:    uzp1 v0.16b, v0.16b, v1.16b3679; CHECK-GI-CVT-NEXT:    ret3680    %x = call <16 x i8> @llvm.fptoui.sat.v16f16.v16i8(<16 x half> %f)3681    ret <16 x i8> %x3682}3683 3684define <16 x i16> @test_unsigned_v16f16_v16i16(<16 x half> %f) {3685; CHECK-SD-CVT-LABEL: test_unsigned_v16f16_v16i16:3686; CHECK-SD-CVT:       // %bb.0:3687; CHECK-SD-CVT-NEXT:    fcvtl v2.4s, v0.4h3688; CHECK-SD-CVT-NEXT:    fcvtl v3.4s, v1.4h3689; CHECK-SD-CVT-NEXT:    fcvtl2 v4.4s, v0.8h3690; CHECK-SD-CVT-NEXT:    fcvtl2 v5.4s, v1.8h3691; CHECK-SD-CVT-NEXT:    fcvtzu v2.4s, v2.4s3692; CHECK-SD-CVT-NEXT:    fcvtzu v1.4s, v3.4s3693; CHECK-SD-CVT-NEXT:    fcvtzu v3.4s, v5.4s3694; CHECK-SD-CVT-NEXT:    uqxtn v0.4h, v2.4s3695; CHECK-SD-CVT-NEXT:    fcvtzu v2.4s, v4.4s3696; CHECK-SD-CVT-NEXT:    uqxtn v1.4h, v1.4s3697; CHECK-SD-CVT-NEXT:    uqxtn2 v0.8h, v2.4s3698; CHECK-SD-CVT-NEXT:    uqxtn2 v1.8h, v3.4s3699; CHECK-SD-CVT-NEXT:    ret3700;3701; CHECK-FP16-LABEL: test_unsigned_v16f16_v16i16:3702; CHECK-FP16:       // %bb.0:3703; CHECK-FP16-NEXT:    fcvtzu v0.8h, v0.8h3704; CHECK-FP16-NEXT:    fcvtzu v1.8h, v1.8h3705; CHECK-FP16-NEXT:    ret3706;3707; CHECK-GI-CVT-LABEL: test_unsigned_v16f16_v16i16:3708; CHECK-GI-CVT:       // %bb.0:3709; CHECK-GI-CVT-NEXT:    fcvtl v2.4s, v0.4h3710; CHECK-GI-CVT-NEXT:    fcvtl v3.4s, v1.4h3711; CHECK-GI-CVT-NEXT:    fcvtl2 v0.4s, v0.8h3712; CHECK-GI-CVT-NEXT:    fcvtl2 v1.4s, v1.8h3713; CHECK-GI-CVT-NEXT:    fcvtzu v2.4s, v2.4s3714; CHECK-GI-CVT-NEXT:    fcvtzu v3.4s, v3.4s3715; CHECK-GI-CVT-NEXT:    fcvtzu v4.4s, v0.4s3716; CHECK-GI-CVT-NEXT:    fcvtzu v5.4s, v1.4s3717; CHECK-GI-CVT-NEXT:    uqxtn v0.4h, v2.4s3718; CHECK-GI-CVT-NEXT:    uqxtn v1.4h, v3.4s3719; CHECK-GI-CVT-NEXT:    uqxtn2 v0.8h, v4.4s3720; CHECK-GI-CVT-NEXT:    uqxtn2 v1.8h, v5.4s3721; CHECK-GI-CVT-NEXT:    ret3722    %x = call <16 x i16> @llvm.fptoui.sat.v16f16.v16i16(<16 x half> %f)3723    ret <16 x i16> %x3724}3725 3726define <8 x i8> @test_unsigned_v8f64_v8i8(<8 x double> %f) {3727; CHECK-SD-LABEL: test_unsigned_v8f64_v8i8:3728; CHECK-SD:       // %bb.0:3729; CHECK-SD-NEXT:    mov d4, v0.d[1]3730; CHECK-SD-NEXT:    fcvtzu w10, d03731; CHECK-SD-NEXT:    mov w8, #255 // =0xff3732; CHECK-SD-NEXT:    fcvtzu w11, d13733; CHECK-SD-NEXT:    mov d1, v1.d[1]3734; CHECK-SD-NEXT:    fcvtzu w9, d43735; CHECK-SD-NEXT:    cmp w9, #2553736; CHECK-SD-NEXT:    csel w9, w9, w8, lo3737; CHECK-SD-NEXT:    cmp w10, #2553738; CHECK-SD-NEXT:    csel w10, w10, w8, lo3739; CHECK-SD-NEXT:    cmp w11, #2553740; CHECK-SD-NEXT:    fmov s0, w103741; CHECK-SD-NEXT:    csel w10, w11, w8, lo3742; CHECK-SD-NEXT:    mov v0.b[1], w93743; CHECK-SD-NEXT:    fcvtzu w9, d13744; CHECK-SD-NEXT:    mov d1, v2.d[1]3745; CHECK-SD-NEXT:    mov v0.b[2], w103746; CHECK-SD-NEXT:    cmp w9, #2553747; CHECK-SD-NEXT:    fcvtzu w10, d23748; CHECK-SD-NEXT:    csel w9, w9, w8, lo3749; CHECK-SD-NEXT:    mov v0.b[3], w93750; CHECK-SD-NEXT:    cmp w10, #2553751; CHECK-SD-NEXT:    fcvtzu w9, d13752; CHECK-SD-NEXT:    csel w10, w10, w8, lo3753; CHECK-SD-NEXT:    mov d1, v3.d[1]3754; CHECK-SD-NEXT:    mov v0.b[4], w103755; CHECK-SD-NEXT:    cmp w9, #2553756; CHECK-SD-NEXT:    fcvtzu w10, d33757; CHECK-SD-NEXT:    csel w9, w9, w8, lo3758; CHECK-SD-NEXT:    mov v0.b[5], w93759; CHECK-SD-NEXT:    cmp w10, #2553760; CHECK-SD-NEXT:    fcvtzu w9, d13761; CHECK-SD-NEXT:    csel w10, w10, w8, lo3762; CHECK-SD-NEXT:    mov v0.b[6], w103763; CHECK-SD-NEXT:    cmp w9, #2553764; CHECK-SD-NEXT:    csel w8, w9, w8, lo3765; CHECK-SD-NEXT:    mov v0.b[7], w83766; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q03767; CHECK-SD-NEXT:    ret3768;3769; CHECK-GI-LABEL: test_unsigned_v8f64_v8i8:3770; CHECK-GI:       // %bb.0:3771; CHECK-GI-NEXT:    movi v4.2d, #0x000000000000ff3772; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d3773; CHECK-GI-NEXT:    fcvtzu v1.2d, v1.2d3774; CHECK-GI-NEXT:    fcvtzu v2.2d, v2.2d3775; CHECK-GI-NEXT:    fcvtzu v3.2d, v3.2d3776; CHECK-GI-NEXT:    cmhi v5.2d, v4.2d, v0.2d3777; CHECK-GI-NEXT:    cmhi v6.2d, v4.2d, v1.2d3778; CHECK-GI-NEXT:    cmhi v7.2d, v4.2d, v2.2d3779; CHECK-GI-NEXT:    cmhi v16.2d, v4.2d, v3.2d3780; CHECK-GI-NEXT:    bif v0.16b, v4.16b, v5.16b3781; CHECK-GI-NEXT:    bif v1.16b, v4.16b, v6.16b3782; CHECK-GI-NEXT:    bif v2.16b, v4.16b, v7.16b3783; CHECK-GI-NEXT:    bif v3.16b, v4.16b, v16.16b3784; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s3785; CHECK-GI-NEXT:    uzp1 v1.4s, v2.4s, v3.4s3786; CHECK-GI-NEXT:    uzp1 v0.8h, v0.8h, v1.8h3787; CHECK-GI-NEXT:    xtn v0.8b, v0.8h3788; CHECK-GI-NEXT:    ret3789    %x = call <8 x i8> @llvm.fptoui.sat.v8f64.v8i8(<8 x double> %f)3790    ret <8 x i8> %x3791}3792 3793define <16 x i8> @test_unsigned_v16f64_v16i8(<16 x double> %f) {3794; CHECK-SD-LABEL: test_unsigned_v16f64_v16i8:3795; CHECK-SD:       // %bb.0:3796; CHECK-SD-NEXT:    mov d16, v0.d[1]3797; CHECK-SD-NEXT:    fcvtzu w10, d03798; CHECK-SD-NEXT:    mov w8, #255 // =0xff3799; CHECK-SD-NEXT:    fcvtzu w11, d13800; CHECK-SD-NEXT:    mov d1, v1.d[1]3801; CHECK-SD-NEXT:    fcvtzu w9, d163802; CHECK-SD-NEXT:    cmp w9, #2553803; CHECK-SD-NEXT:    csel w9, w9, w8, lo3804; CHECK-SD-NEXT:    cmp w10, #2553805; CHECK-SD-NEXT:    csel w10, w10, w8, lo3806; CHECK-SD-NEXT:    cmp w11, #2553807; CHECK-SD-NEXT:    fmov s0, w103808; CHECK-SD-NEXT:    csel w10, w11, w8, lo3809; CHECK-SD-NEXT:    mov v0.b[1], w93810; CHECK-SD-NEXT:    fcvtzu w9, d13811; CHECK-SD-NEXT:    mov d1, v2.d[1]3812; CHECK-SD-NEXT:    mov v0.b[2], w103813; CHECK-SD-NEXT:    cmp w9, #2553814; CHECK-SD-NEXT:    fcvtzu w10, d23815; CHECK-SD-NEXT:    csel w9, w9, w8, lo3816; CHECK-SD-NEXT:    mov v0.b[3], w93817; CHECK-SD-NEXT:    cmp w10, #2553818; CHECK-SD-NEXT:    fcvtzu w9, d13819; CHECK-SD-NEXT:    csel w10, w10, w8, lo3820; CHECK-SD-NEXT:    mov d1, v3.d[1]3821; CHECK-SD-NEXT:    mov v0.b[4], w103822; CHECK-SD-NEXT:    cmp w9, #2553823; CHECK-SD-NEXT:    fcvtzu w10, d33824; CHECK-SD-NEXT:    csel w9, w9, w8, lo3825; CHECK-SD-NEXT:    mov v0.b[5], w93826; CHECK-SD-NEXT:    cmp w10, #2553827; CHECK-SD-NEXT:    fcvtzu w9, d13828; CHECK-SD-NEXT:    csel w10, w10, w8, lo3829; CHECK-SD-NEXT:    mov d1, v4.d[1]3830; CHECK-SD-NEXT:    mov v0.b[6], w103831; CHECK-SD-NEXT:    cmp w9, #2553832; CHECK-SD-NEXT:    fcvtzu w10, d43833; CHECK-SD-NEXT:    csel w9, w9, w8, lo3834; CHECK-SD-NEXT:    mov v0.b[7], w93835; CHECK-SD-NEXT:    cmp w10, #2553836; CHECK-SD-NEXT:    fcvtzu w9, d13837; CHECK-SD-NEXT:    csel w10, w10, w8, lo3838; CHECK-SD-NEXT:    mov d1, v5.d[1]3839; CHECK-SD-NEXT:    mov v0.b[8], w103840; CHECK-SD-NEXT:    cmp w9, #2553841; CHECK-SD-NEXT:    fcvtzu w10, d53842; CHECK-SD-NEXT:    csel w9, w9, w8, lo3843; CHECK-SD-NEXT:    mov v0.b[9], w93844; CHECK-SD-NEXT:    cmp w10, #2553845; CHECK-SD-NEXT:    fcvtzu w9, d13846; CHECK-SD-NEXT:    csel w10, w10, w8, lo3847; CHECK-SD-NEXT:    mov d1, v6.d[1]3848; CHECK-SD-NEXT:    mov v0.b[10], w103849; CHECK-SD-NEXT:    cmp w9, #2553850; CHECK-SD-NEXT:    fcvtzu w10, d63851; CHECK-SD-NEXT:    csel w9, w9, w8, lo3852; CHECK-SD-NEXT:    mov v0.b[11], w93853; CHECK-SD-NEXT:    cmp w10, #2553854; CHECK-SD-NEXT:    fcvtzu w9, d13855; CHECK-SD-NEXT:    csel w10, w10, w8, lo3856; CHECK-SD-NEXT:    mov d1, v7.d[1]3857; CHECK-SD-NEXT:    mov v0.b[12], w103858; CHECK-SD-NEXT:    cmp w9, #2553859; CHECK-SD-NEXT:    fcvtzu w10, d73860; CHECK-SD-NEXT:    csel w9, w9, w8, lo3861; CHECK-SD-NEXT:    mov v0.b[13], w93862; CHECK-SD-NEXT:    cmp w10, #2553863; CHECK-SD-NEXT:    fcvtzu w9, d13864; CHECK-SD-NEXT:    csel w10, w10, w8, lo3865; CHECK-SD-NEXT:    mov v0.b[14], w103866; CHECK-SD-NEXT:    cmp w9, #2553867; CHECK-SD-NEXT:    csel w8, w9, w8, lo3868; CHECK-SD-NEXT:    mov v0.b[15], w83869; CHECK-SD-NEXT:    ret3870;3871; CHECK-GI-LABEL: test_unsigned_v16f64_v16i8:3872; CHECK-GI:       // %bb.0:3873; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d3874; CHECK-GI-NEXT:    fcvtzu v1.2d, v1.2d3875; CHECK-GI-NEXT:    movi v16.2d, #0x000000000000ff3876; CHECK-GI-NEXT:    fcvtzu v2.2d, v2.2d3877; CHECK-GI-NEXT:    fcvtzu v3.2d, v3.2d3878; CHECK-GI-NEXT:    fcvtzu v4.2d, v4.2d3879; CHECK-GI-NEXT:    fcvtzu v5.2d, v5.2d3880; CHECK-GI-NEXT:    fcvtzu v6.2d, v6.2d3881; CHECK-GI-NEXT:    fcvtzu v7.2d, v7.2d3882; CHECK-GI-NEXT:    cmhi v17.2d, v16.2d, v0.2d3883; CHECK-GI-NEXT:    cmhi v18.2d, v16.2d, v1.2d3884; CHECK-GI-NEXT:    cmhi v19.2d, v16.2d, v2.2d3885; CHECK-GI-NEXT:    cmhi v20.2d, v16.2d, v3.2d3886; CHECK-GI-NEXT:    cmhi v21.2d, v16.2d, v4.2d3887; CHECK-GI-NEXT:    cmhi v22.2d, v16.2d, v5.2d3888; CHECK-GI-NEXT:    cmhi v23.2d, v16.2d, v6.2d3889; CHECK-GI-NEXT:    cmhi v24.2d, v16.2d, v7.2d3890; CHECK-GI-NEXT:    bif v0.16b, v16.16b, v17.16b3891; CHECK-GI-NEXT:    bif v1.16b, v16.16b, v18.16b3892; CHECK-GI-NEXT:    bif v2.16b, v16.16b, v19.16b3893; CHECK-GI-NEXT:    bif v3.16b, v16.16b, v20.16b3894; CHECK-GI-NEXT:    bif v4.16b, v16.16b, v21.16b3895; CHECK-GI-NEXT:    bif v5.16b, v16.16b, v22.16b3896; CHECK-GI-NEXT:    bif v6.16b, v16.16b, v23.16b3897; CHECK-GI-NEXT:    bif v7.16b, v16.16b, v24.16b3898; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s3899; CHECK-GI-NEXT:    uzp1 v1.4s, v2.4s, v3.4s3900; CHECK-GI-NEXT:    uzp1 v2.4s, v4.4s, v5.4s3901; CHECK-GI-NEXT:    uzp1 v3.4s, v6.4s, v7.4s3902; CHECK-GI-NEXT:    uzp1 v0.8h, v0.8h, v1.8h3903; CHECK-GI-NEXT:    uzp1 v1.8h, v2.8h, v3.8h3904; CHECK-GI-NEXT:    uzp1 v0.16b, v0.16b, v1.16b3905; CHECK-GI-NEXT:    ret3906    %x = call <16 x i8> @llvm.fptoui.sat.v16f64.v16i8(<16 x double> %f)3907    ret <16 x i8> %x3908}3909 3910define <8 x i16> @test_unsigned_v8f64_v8i16(<8 x double> %f) {3911; CHECK-SD-LABEL: test_unsigned_v8f64_v8i16:3912; CHECK-SD:       // %bb.0:3913; CHECK-SD-NEXT:    mov d4, v0.d[1]3914; CHECK-SD-NEXT:    fcvtzu w9, d03915; CHECK-SD-NEXT:    mov w10, #65535 // =0xffff3916; CHECK-SD-NEXT:    fcvtzu w11, d13917; CHECK-SD-NEXT:    mov d1, v1.d[1]3918; CHECK-SD-NEXT:    fcvtzu w8, d43919; CHECK-SD-NEXT:    cmp w8, w103920; CHECK-SD-NEXT:    csel w8, w8, w10, lo3921; CHECK-SD-NEXT:    cmp w9, w103922; CHECK-SD-NEXT:    csel w9, w9, w10, lo3923; CHECK-SD-NEXT:    cmp w11, w103924; CHECK-SD-NEXT:    fmov s0, w93925; CHECK-SD-NEXT:    csel w9, w11, w10, lo3926; CHECK-SD-NEXT:    mov v0.h[1], w83927; CHECK-SD-NEXT:    fcvtzu w8, d13928; CHECK-SD-NEXT:    mov d1, v2.d[1]3929; CHECK-SD-NEXT:    mov v0.h[2], w93930; CHECK-SD-NEXT:    cmp w8, w103931; CHECK-SD-NEXT:    fcvtzu w9, d23932; CHECK-SD-NEXT:    csel w8, w8, w10, lo3933; CHECK-SD-NEXT:    mov v0.h[3], w83934; CHECK-SD-NEXT:    cmp w9, w103935; CHECK-SD-NEXT:    fcvtzu w8, d13936; CHECK-SD-NEXT:    csel w9, w9, w10, lo3937; CHECK-SD-NEXT:    mov d1, v3.d[1]3938; CHECK-SD-NEXT:    mov v0.h[4], w93939; CHECK-SD-NEXT:    cmp w8, w103940; CHECK-SD-NEXT:    fcvtzu w9, d33941; CHECK-SD-NEXT:    csel w8, w8, w10, lo3942; CHECK-SD-NEXT:    mov v0.h[5], w83943; CHECK-SD-NEXT:    cmp w9, w103944; CHECK-SD-NEXT:    fcvtzu w8, d13945; CHECK-SD-NEXT:    csel w9, w9, w10, lo3946; CHECK-SD-NEXT:    mov v0.h[6], w93947; CHECK-SD-NEXT:    cmp w8, w103948; CHECK-SD-NEXT:    csel w8, w8, w10, lo3949; CHECK-SD-NEXT:    mov v0.h[7], w83950; CHECK-SD-NEXT:    ret3951;3952; CHECK-GI-LABEL: test_unsigned_v8f64_v8i16:3953; CHECK-GI:       // %bb.0:3954; CHECK-GI-NEXT:    movi v4.2d, #0x0000000000ffff3955; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d3956; CHECK-GI-NEXT:    fcvtzu v1.2d, v1.2d3957; CHECK-GI-NEXT:    fcvtzu v2.2d, v2.2d3958; CHECK-GI-NEXT:    fcvtzu v3.2d, v3.2d3959; CHECK-GI-NEXT:    cmhi v5.2d, v4.2d, v0.2d3960; CHECK-GI-NEXT:    cmhi v6.2d, v4.2d, v1.2d3961; CHECK-GI-NEXT:    cmhi v7.2d, v4.2d, v2.2d3962; CHECK-GI-NEXT:    cmhi v16.2d, v4.2d, v3.2d3963; CHECK-GI-NEXT:    bif v0.16b, v4.16b, v5.16b3964; CHECK-GI-NEXT:    bif v1.16b, v4.16b, v6.16b3965; CHECK-GI-NEXT:    bif v2.16b, v4.16b, v7.16b3966; CHECK-GI-NEXT:    bif v3.16b, v4.16b, v16.16b3967; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s3968; CHECK-GI-NEXT:    uzp1 v1.4s, v2.4s, v3.4s3969; CHECK-GI-NEXT:    uzp1 v0.8h, v0.8h, v1.8h3970; CHECK-GI-NEXT:    ret3971    %x = call <8 x i16> @llvm.fptoui.sat.v8f64.v8i16(<8 x double> %f)3972    ret <8 x i16> %x3973}3974 3975define <16 x i16> @test_unsigned_v16f64_v16i16(<16 x double> %f) {3976; CHECK-SD-LABEL: test_unsigned_v16f64_v16i16:3977; CHECK-SD:       // %bb.0:3978; CHECK-SD-NEXT:    mov d16, v0.d[1]3979; CHECK-SD-NEXT:    mov d17, v1.d[1]3980; CHECK-SD-NEXT:    mov w8, #65535 // =0xffff3981; CHECK-SD-NEXT:    fcvtzu w10, d03982; CHECK-SD-NEXT:    mov d0, v2.d[1]3983; CHECK-SD-NEXT:    fcvtzu w11, d13984; CHECK-SD-NEXT:    mov d1, v3.d[1]3985; CHECK-SD-NEXT:    fcvtzu w13, d23986; CHECK-SD-NEXT:    mov d2, v4.d[1]3987; CHECK-SD-NEXT:    fcvtzu w18, d43988; CHECK-SD-NEXT:    fcvtzu w9, d163989; CHECK-SD-NEXT:    fcvtzu w12, d173990; CHECK-SD-NEXT:    fcvtzu w16, d13991; CHECK-SD-NEXT:    fcvtzu w17, d23992; CHECK-SD-NEXT:    mov d2, v5.d[1]3993; CHECK-SD-NEXT:    cmp w9, w83994; CHECK-SD-NEXT:    csel w14, w9, w8, lo3995; CHECK-SD-NEXT:    cmp w10, w83996; CHECK-SD-NEXT:    fcvtzu w9, d03997; CHECK-SD-NEXT:    csel w15, w10, w8, lo3998; CHECK-SD-NEXT:    cmp w11, w83999; CHECK-SD-NEXT:    fcvtzu w10, d34000; CHECK-SD-NEXT:    csel w11, w11, w8, lo4001; CHECK-SD-NEXT:    cmp w12, w84002; CHECK-SD-NEXT:    fmov s0, w154003; CHECK-SD-NEXT:    csel w12, w12, w8, lo4004; CHECK-SD-NEXT:    cmp w13, w84005; CHECK-SD-NEXT:    csel w13, w13, w8, lo4006; CHECK-SD-NEXT:    cmp w9, w84007; CHECK-SD-NEXT:    csel w0, w9, w8, lo4008; CHECK-SD-NEXT:    cmp w10, w84009; CHECK-SD-NEXT:    mov v0.h[1], w144010; CHECK-SD-NEXT:    csel w10, w10, w8, lo4011; CHECK-SD-NEXT:    cmp w16, w84012; CHECK-SD-NEXT:    fcvtzu w14, d24013; CHECK-SD-NEXT:    csel w9, w16, w8, lo4014; CHECK-SD-NEXT:    cmp w17, w84015; CHECK-SD-NEXT:    mov d2, v6.d[1]4016; CHECK-SD-NEXT:    csel w16, w17, w8, lo4017; CHECK-SD-NEXT:    cmp w18, w84018; CHECK-SD-NEXT:    csel w17, w18, w8, lo4019; CHECK-SD-NEXT:    fcvtzu w18, d54020; CHECK-SD-NEXT:    mov v0.h[2], w114021; CHECK-SD-NEXT:    fmov s1, w174022; CHECK-SD-NEXT:    fcvtzu w11, d64023; CHECK-SD-NEXT:    mov v1.h[1], w164024; CHECK-SD-NEXT:    cmp w18, w84025; CHECK-SD-NEXT:    mov v0.h[3], w124026; CHECK-SD-NEXT:    csel w15, w18, w8, lo4027; CHECK-SD-NEXT:    cmp w14, w84028; CHECK-SD-NEXT:    fcvtzu w12, d24029; CHECK-SD-NEXT:    csel w14, w14, w8, lo4030; CHECK-SD-NEXT:    cmp w11, w84031; CHECK-SD-NEXT:    mov d2, v7.d[1]4032; CHECK-SD-NEXT:    csel w11, w11, w8, lo4033; CHECK-SD-NEXT:    mov v1.h[2], w154034; CHECK-SD-NEXT:    mov v0.h[4], w134035; CHECK-SD-NEXT:    cmp w12, w84036; CHECK-SD-NEXT:    csel w12, w12, w8, lo4037; CHECK-SD-NEXT:    mov v1.h[3], w144038; CHECK-SD-NEXT:    mov v0.h[5], w04039; CHECK-SD-NEXT:    mov v1.h[4], w114040; CHECK-SD-NEXT:    fcvtzu w11, d74041; CHECK-SD-NEXT:    mov v0.h[6], w104042; CHECK-SD-NEXT:    mov v1.h[5], w124043; CHECK-SD-NEXT:    cmp w11, w84044; CHECK-SD-NEXT:    fcvtzu w12, d24045; CHECK-SD-NEXT:    csel w11, w11, w8, lo4046; CHECK-SD-NEXT:    mov v0.h[7], w94047; CHECK-SD-NEXT:    mov v1.h[6], w114048; CHECK-SD-NEXT:    cmp w12, w84049; CHECK-SD-NEXT:    csel w8, w12, w8, lo4050; CHECK-SD-NEXT:    mov v1.h[7], w84051; CHECK-SD-NEXT:    ret4052;4053; CHECK-GI-LABEL: test_unsigned_v16f64_v16i16:4054; CHECK-GI:       // %bb.0:4055; CHECK-GI-NEXT:    fcvtzu v0.2d, v0.2d4056; CHECK-GI-NEXT:    fcvtzu v1.2d, v1.2d4057; CHECK-GI-NEXT:    movi v16.2d, #0x0000000000ffff4058; CHECK-GI-NEXT:    fcvtzu v2.2d, v2.2d4059; CHECK-GI-NEXT:    fcvtzu v3.2d, v3.2d4060; CHECK-GI-NEXT:    fcvtzu v4.2d, v4.2d4061; CHECK-GI-NEXT:    fcvtzu v5.2d, v5.2d4062; CHECK-GI-NEXT:    fcvtzu v6.2d, v6.2d4063; CHECK-GI-NEXT:    fcvtzu v7.2d, v7.2d4064; CHECK-GI-NEXT:    cmhi v17.2d, v16.2d, v0.2d4065; CHECK-GI-NEXT:    cmhi v18.2d, v16.2d, v1.2d4066; CHECK-GI-NEXT:    cmhi v19.2d, v16.2d, v2.2d4067; CHECK-GI-NEXT:    cmhi v20.2d, v16.2d, v3.2d4068; CHECK-GI-NEXT:    cmhi v21.2d, v16.2d, v4.2d4069; CHECK-GI-NEXT:    cmhi v22.2d, v16.2d, v5.2d4070; CHECK-GI-NEXT:    cmhi v23.2d, v16.2d, v6.2d4071; CHECK-GI-NEXT:    cmhi v24.2d, v16.2d, v7.2d4072; CHECK-GI-NEXT:    bif v0.16b, v16.16b, v17.16b4073; CHECK-GI-NEXT:    bif v1.16b, v16.16b, v18.16b4074; CHECK-GI-NEXT:    bif v2.16b, v16.16b, v19.16b4075; CHECK-GI-NEXT:    bif v3.16b, v16.16b, v20.16b4076; CHECK-GI-NEXT:    bif v4.16b, v16.16b, v21.16b4077; CHECK-GI-NEXT:    bif v5.16b, v16.16b, v22.16b4078; CHECK-GI-NEXT:    bif v6.16b, v16.16b, v23.16b4079; CHECK-GI-NEXT:    bif v7.16b, v16.16b, v24.16b4080; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s4081; CHECK-GI-NEXT:    uzp1 v1.4s, v2.4s, v3.4s4082; CHECK-GI-NEXT:    uzp1 v2.4s, v4.4s, v5.4s4083; CHECK-GI-NEXT:    uzp1 v3.4s, v6.4s, v7.4s4084; CHECK-GI-NEXT:    uzp1 v0.8h, v0.8h, v1.8h4085; CHECK-GI-NEXT:    uzp1 v1.8h, v2.8h, v3.8h4086; CHECK-GI-NEXT:    ret4087    %x = call <16 x i16> @llvm.fptoui.sat.v16f64.v16i16(<16 x double> %f)4088    ret <16 x i16> %x4089}4090 4091define <2 x i64> @test_signed_v2f128_v2i64(<2 x fp128> %f) {4092; CHECK-SD-LABEL: test_signed_v2f128_v2i64:4093; CHECK-SD:       // %bb.0:4094; CHECK-SD-NEXT:    sub sp, sp, #804095; CHECK-SD-NEXT:    stp x30, x19, [sp, #64] // 16-byte Folded Spill4096; CHECK-SD-NEXT:    .cfi_def_cfa_offset 804097; CHECK-SD-NEXT:    .cfi_offset w19, -84098; CHECK-SD-NEXT:    .cfi_offset w30, -164099; CHECK-SD-NEXT:    mov v2.16b, v1.16b4100; CHECK-SD-NEXT:    stp q1, q0, [sp, #32] // 32-byte Folded Spill4101; CHECK-SD-NEXT:    adrp x8, .LCPI86_04102; CHECK-SD-NEXT:    ldr q1, [x8, :lo12:.LCPI86_0]4103; CHECK-SD-NEXT:    mov v0.16b, v2.16b4104; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill4105; CHECK-SD-NEXT:    bl __getf24106; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload4107; CHECK-SD-NEXT:    mov w19, w04108; CHECK-SD-NEXT:    bl __fixunstfdi4109; CHECK-SD-NEXT:    adrp x8, .LCPI86_14110; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload4111; CHECK-SD-NEXT:    cmp w19, #04112; CHECK-SD-NEXT:    ldr q1, [x8, :lo12:.LCPI86_1]4113; CHECK-SD-NEXT:    csel x19, xzr, x0, mi4114; CHECK-SD-NEXT:    str q1, [sp] // 16-byte Spill4115; CHECK-SD-NEXT:    bl __gttf24116; CHECK-SD-NEXT:    cmp w0, #04117; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload4118; CHECK-SD-NEXT:    csinv x8, x19, xzr, le4119; CHECK-SD-NEXT:    fmov d0, x84120; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill4121; CHECK-SD-NEXT:    ldr q0, [sp, #48] // 16-byte Reload4122; CHECK-SD-NEXT:    bl __getf24123; CHECK-SD-NEXT:    ldr q0, [sp, #48] // 16-byte Reload4124; CHECK-SD-NEXT:    mov w19, w04125; CHECK-SD-NEXT:    bl __fixunstfdi4126; CHECK-SD-NEXT:    ldr q0, [sp, #48] // 16-byte Reload4127; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload4128; CHECK-SD-NEXT:    cmp w19, #04129; CHECK-SD-NEXT:    csel x19, xzr, x0, mi4130; CHECK-SD-NEXT:    bl __gttf24131; CHECK-SD-NEXT:    cmp w0, #04132; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload4133; CHECK-SD-NEXT:    csinv x8, x19, xzr, le4134; CHECK-SD-NEXT:    ldp x30, x19, [sp, #64] // 16-byte Folded Reload4135; CHECK-SD-NEXT:    fmov d0, x84136; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]4137; CHECK-SD-NEXT:    add sp, sp, #804138; CHECK-SD-NEXT:    ret4139;4140; CHECK-GI-LABEL: test_signed_v2f128_v2i64:4141; CHECK-GI:       // %bb.0:4142; CHECK-GI-NEXT:    sub sp, sp, #964143; CHECK-GI-NEXT:    stp x30, x23, [sp, #48] // 16-byte Folded Spill4144; CHECK-GI-NEXT:    stp x22, x21, [sp, #64] // 16-byte Folded Spill4145; CHECK-GI-NEXT:    stp x20, x19, [sp, #80] // 16-byte Folded Spill4146; CHECK-GI-NEXT:    .cfi_def_cfa_offset 964147; CHECK-GI-NEXT:    .cfi_offset w19, -84148; CHECK-GI-NEXT:    .cfi_offset w20, -164149; CHECK-GI-NEXT:    .cfi_offset w21, -244150; CHECK-GI-NEXT:    .cfi_offset w22, -324151; CHECK-GI-NEXT:    .cfi_offset w23, -404152; CHECK-GI-NEXT:    .cfi_offset w30, -484153; CHECK-GI-NEXT:    adrp x8, .LCPI86_14154; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill4155; CHECK-GI-NEXT:    ldr q2, [x8, :lo12:.LCPI86_1]4156; CHECK-GI-NEXT:    stp q2, q1, [sp, #16] // 32-byte Folded Spill4157; CHECK-GI-NEXT:    mov v1.16b, v2.16b4158; CHECK-GI-NEXT:    bl __gttf24159; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload4160; CHECK-GI-NEXT:    cmp w0, #04161; CHECK-GI-NEXT:    fmov x8, d04162; CHECK-GI-NEXT:    csel x19, x8, xzr, gt4163; CHECK-GI-NEXT:    mov x8, v0.d[1]4164; CHECK-GI-NEXT:    mov v0.d[0], x194165; CHECK-GI-NEXT:    csel x20, x8, xzr, gt4166; CHECK-GI-NEXT:    adrp x8, .LCPI86_04167; CHECK-GI-NEXT:    mov v0.d[1], x204168; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI86_0]4169; CHECK-GI-NEXT:    str q1, [sp] // 16-byte Spill4170; CHECK-GI-NEXT:    bl __lttf24171; CHECK-GI-NEXT:    mov x21, #-562949953421312 // =0xfffe0000000000004172; CHECK-GI-NEXT:    cmp w0, #04173; CHECK-GI-NEXT:    mov x22, #4629418941960159231 // =0x403effffffffffff4174; CHECK-GI-NEXT:    csel x8, x19, x21, mi4175; CHECK-GI-NEXT:    mov v0.d[0], x84176; CHECK-GI-NEXT:    csel x8, x20, x22, mi4177; CHECK-GI-NEXT:    mov v0.d[1], x84178; CHECK-GI-NEXT:    bl __fixunstfdi4179; CHECK-GI-NEXT:    ldp q1, q0, [sp, #16] // 32-byte Folded Reload4180; CHECK-GI-NEXT:    mov x19, x04181; CHECK-GI-NEXT:    bl __gttf24182; CHECK-GI-NEXT:    ldr q0, [sp, #32] // 16-byte Reload4183; CHECK-GI-NEXT:    cmp w0, #04184; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload4185; CHECK-GI-NEXT:    fmov x8, d04186; CHECK-GI-NEXT:    csel x20, x8, xzr, gt4187; CHECK-GI-NEXT:    mov x8, v0.d[1]4188; CHECK-GI-NEXT:    mov v0.d[0], x204189; CHECK-GI-NEXT:    csel x23, x8, xzr, gt4190; CHECK-GI-NEXT:    mov v0.d[1], x234191; CHECK-GI-NEXT:    bl __lttf24192; CHECK-GI-NEXT:    cmp w0, #04193; CHECK-GI-NEXT:    csel x8, x20, x21, mi4194; CHECK-GI-NEXT:    mov v0.d[0], x84195; CHECK-GI-NEXT:    csel x8, x23, x22, mi4196; CHECK-GI-NEXT:    mov v0.d[1], x84197; CHECK-GI-NEXT:    bl __fixunstfdi4198; CHECK-GI-NEXT:    fmov d0, x194199; CHECK-GI-NEXT:    ldp x20, x19, [sp, #80] // 16-byte Folded Reload4200; CHECK-GI-NEXT:    ldp x22, x21, [sp, #64] // 16-byte Folded Reload4201; CHECK-GI-NEXT:    ldp x30, x23, [sp, #48] // 16-byte Folded Reload4202; CHECK-GI-NEXT:    mov v0.d[1], x04203; CHECK-GI-NEXT:    add sp, sp, #964204; CHECK-GI-NEXT:    ret4205    %x = call <2 x i64> @llvm.fptoui.sat.v2f128.v2i64(<2 x fp128> %f)4206    ret <2 x i64> %x4207}4208