brintos

brintos / llvm-project-archived public Read only

0
0
Text · 57.6 KiB · 7b1db5c Raw
1391 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s3 4;5; 32-bit float to unsigned integer6;7 8declare <4 x i1> @llvm.fptoui.sat.v4i1.v4f32(<4 x float>)9declare <4 x i8> @llvm.fptoui.sat.v4i8.v4f32(<4 x float>)10declare <4 x i16> @llvm.fptoui.sat.v4i16.v4f32(<4 x float>)11declare <4 x i32> @llvm.fptoui.sat.v4i32.v4f32(<4 x float>)12declare <4 x i64> @llvm.fptoui.sat.v4i64.v4f32(<4 x float>)13declare <4 x i128> @llvm.fptoui.sat.v4i128.v4f32(<4 x float>)14 15define <4 x i1> @test_unsigned_v4i1_v4f32(<4 x float> %f) nounwind {16; CHECK-LABEL: test_unsigned_v4i1_v4f32:17; CHECK:       # %bb.0:18; CHECK-NEXT:    movaps %xmm0, %xmm119; CHECK-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,3],xmm0[3,3]20; CHECK-NEXT:    xorps %xmm2, %xmm221; CHECK-NEXT:    maxss %xmm2, %xmm122; CHECK-NEXT:    movss {{.*#+}} xmm3 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]23; CHECK-NEXT:    minss %xmm3, %xmm124; CHECK-NEXT:    cvttss2si %xmm1, %eax25; CHECK-NEXT:    movd %eax, %xmm126; CHECK-NEXT:    movaps %xmm0, %xmm427; CHECK-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm0[1]28; CHECK-NEXT:    maxss %xmm2, %xmm429; CHECK-NEXT:    minss %xmm3, %xmm430; CHECK-NEXT:    cvttss2si %xmm4, %eax31; CHECK-NEXT:    movd %eax, %xmm432; CHECK-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1]33; CHECK-NEXT:    movaps %xmm0, %xmm134; CHECK-NEXT:    maxss %xmm2, %xmm135; CHECK-NEXT:    minss %xmm3, %xmm136; CHECK-NEXT:    cvttss2si %xmm1, %eax37; CHECK-NEXT:    movd %eax, %xmm138; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]39; CHECK-NEXT:    maxss %xmm2, %xmm040; CHECK-NEXT:    minss %xmm3, %xmm041; CHECK-NEXT:    cvttss2si %xmm0, %eax42; CHECK-NEXT:    movd %eax, %xmm043; CHECK-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]44; CHECK-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]45; CHECK-NEXT:    movdqa %xmm1, %xmm046; CHECK-NEXT:    retq47  %x = call <4 x i1> @llvm.fptoui.sat.v4i1.v4f32(<4 x float> %f)48  ret <4 x i1> %x49}50 51define <4 x i1> @test_freeze_unsigned_v4i1_v4f32(<4 x float> %f) nounwind {52; CHECK-LABEL: test_freeze_unsigned_v4i1_v4f32:53; CHECK:       # %bb.0:54; CHECK-NEXT:    movaps %xmm0, %xmm155; CHECK-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,3],xmm0[3,3]56; CHECK-NEXT:    xorps %xmm2, %xmm257; CHECK-NEXT:    maxss %xmm2, %xmm158; CHECK-NEXT:    movss {{.*#+}} xmm3 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]59; CHECK-NEXT:    minss %xmm3, %xmm160; CHECK-NEXT:    cvttss2si %xmm1, %eax61; CHECK-NEXT:    movd %eax, %xmm162; CHECK-NEXT:    movaps %xmm0, %xmm463; CHECK-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm0[1]64; CHECK-NEXT:    maxss %xmm2, %xmm465; CHECK-NEXT:    minss %xmm3, %xmm466; CHECK-NEXT:    cvttss2si %xmm4, %eax67; CHECK-NEXT:    movd %eax, %xmm468; CHECK-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1]69; CHECK-NEXT:    movaps %xmm0, %xmm170; CHECK-NEXT:    maxss %xmm2, %xmm171; CHECK-NEXT:    minss %xmm3, %xmm172; CHECK-NEXT:    cvttss2si %xmm1, %eax73; CHECK-NEXT:    movd %eax, %xmm174; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]75; CHECK-NEXT:    maxss %xmm2, %xmm076; CHECK-NEXT:    minss %xmm3, %xmm077; CHECK-NEXT:    cvttss2si %xmm0, %eax78; CHECK-NEXT:    movd %eax, %xmm079; CHECK-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]80; CHECK-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]81; CHECK-NEXT:    movdqa %xmm1, %xmm082; CHECK-NEXT:    retq83  %x = call <4 x i1> @llvm.fptoui.sat.v4i1.v4f32(<4 x float> %f)84  %y = freeze <4 x i1> %x85  ret <4 x i1> %y86}87 88define <4 x i8> @test_unsigned_v4i8_v4f32(<4 x float> %f) nounwind {89; CHECK-LABEL: test_unsigned_v4i8_v4f32:90; CHECK:       # %bb.0:91; CHECK-NEXT:    xorps %xmm1, %xmm192; CHECK-NEXT:    xorps %xmm3, %xmm393; CHECK-NEXT:    maxss %xmm0, %xmm394; CHECK-NEXT:    movss {{.*#+}} xmm2 = [2.55E+2,0.0E+0,0.0E+0,0.0E+0]95; CHECK-NEXT:    movaps %xmm2, %xmm496; CHECK-NEXT:    minss %xmm3, %xmm497; CHECK-NEXT:    cvttss2si %xmm4, %eax98; CHECK-NEXT:    movzbl %al, %eax99; CHECK-NEXT:    movaps %xmm0, %xmm3100; CHECK-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1],xmm0[1,1]101; CHECK-NEXT:    xorps %xmm4, %xmm4102; CHECK-NEXT:    maxss %xmm3, %xmm4103; CHECK-NEXT:    movaps %xmm2, %xmm3104; CHECK-NEXT:    minss %xmm4, %xmm3105; CHECK-NEXT:    cvttss2si %xmm3, %ecx106; CHECK-NEXT:    movzbl %cl, %ecx107; CHECK-NEXT:    shll $8, %ecx108; CHECK-NEXT:    orl %eax, %ecx109; CHECK-NEXT:    movaps %xmm0, %xmm3110; CHECK-NEXT:    unpckhpd {{.*#+}} xmm3 = xmm3[1],xmm0[1]111; CHECK-NEXT:    xorps %xmm4, %xmm4112; CHECK-NEXT:    maxss %xmm3, %xmm4113; CHECK-NEXT:    movaps %xmm2, %xmm3114; CHECK-NEXT:    minss %xmm4, %xmm3115; CHECK-NEXT:    cvttss2si %xmm3, %eax116; CHECK-NEXT:    movzbl %al, %eax117; CHECK-NEXT:    shll $16, %eax118; CHECK-NEXT:    orl %ecx, %eax119; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]120; CHECK-NEXT:    maxss %xmm0, %xmm1121; CHECK-NEXT:    minss %xmm1, %xmm2122; CHECK-NEXT:    cvttss2si %xmm2, %ecx123; CHECK-NEXT:    shll $24, %ecx124; CHECK-NEXT:    orl %eax, %ecx125; CHECK-NEXT:    movd %ecx, %xmm0126; CHECK-NEXT:    retq127  %x = call <4 x i8> @llvm.fptoui.sat.v4i8.v4f32(<4 x float> %f)128  ret <4 x i8> %x129}130 131define <4 x i16> @test_unsigned_v4i16_v4f32(<4 x float> %f) nounwind {132; CHECK-LABEL: test_unsigned_v4i16_v4f32:133; CHECK:       # %bb.0:134; CHECK-NEXT:    movaps %xmm0, %xmm1135; CHECK-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]136; CHECK-NEXT:    xorps %xmm2, %xmm2137; CHECK-NEXT:    xorps %xmm3, %xmm3138; CHECK-NEXT:    maxss %xmm1, %xmm3139; CHECK-NEXT:    movss {{.*#+}} xmm4 = [6.5535E+4,0.0E+0,0.0E+0,0.0E+0]140; CHECK-NEXT:    movaps %xmm4, %xmm1141; CHECK-NEXT:    minss %xmm3, %xmm1142; CHECK-NEXT:    cvttss2si %xmm1, %eax143; CHECK-NEXT:    xorps %xmm1, %xmm1144; CHECK-NEXT:    maxss %xmm0, %xmm1145; CHECK-NEXT:    movaps %xmm4, %xmm3146; CHECK-NEXT:    minss %xmm1, %xmm3147; CHECK-NEXT:    cvttss2si %xmm3, %ecx148; CHECK-NEXT:    movd %ecx, %xmm1149; CHECK-NEXT:    pinsrw $1, %eax, %xmm1150; CHECK-NEXT:    movaps %xmm0, %xmm3151; CHECK-NEXT:    unpckhpd {{.*#+}} xmm3 = xmm3[1],xmm0[1]152; CHECK-NEXT:    xorps %xmm5, %xmm5153; CHECK-NEXT:    maxss %xmm3, %xmm5154; CHECK-NEXT:    movaps %xmm4, %xmm3155; CHECK-NEXT:    minss %xmm5, %xmm3156; CHECK-NEXT:    cvttss2si %xmm3, %eax157; CHECK-NEXT:    pinsrw $2, %eax, %xmm1158; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]159; CHECK-NEXT:    maxss %xmm0, %xmm2160; CHECK-NEXT:    minss %xmm2, %xmm4161; CHECK-NEXT:    cvttss2si %xmm4, %eax162; CHECK-NEXT:    pinsrw $3, %eax, %xmm1163; CHECK-NEXT:    movdqa %xmm1, %xmm0164; CHECK-NEXT:    retq165  %x = call <4 x i16> @llvm.fptoui.sat.v4i16.v4f32(<4 x float> %f)166  ret <4 x i16> %x167}168 169define <4 x i32> @test_unsigned_v4i32_v4f32(<4 x float> %f) nounwind {170; CHECK-LABEL: test_unsigned_v4i32_v4f32:171; CHECK:       # %bb.0:172; CHECK-NEXT:    movaps %xmm0, %xmm1173; CHECK-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,3],xmm0[3,3]174; CHECK-NEXT:    cvttss2si %xmm1, %rdx175; CHECK-NEXT:    xorl %eax, %eax176; CHECK-NEXT:    xorps %xmm2, %xmm2177; CHECK-NEXT:    ucomiss %xmm2, %xmm1178; CHECK-NEXT:    cmovbl %eax, %edx179; CHECK-NEXT:    movss {{.*#+}} xmm3 = [4.29496704E+9,0.0E+0,0.0E+0,0.0E+0]180; CHECK-NEXT:    ucomiss %xmm3, %xmm1181; CHECK-NEXT:    movl $-1, %ecx182; CHECK-NEXT:    cmoval %ecx, %edx183; CHECK-NEXT:    movd %edx, %xmm1184; CHECK-NEXT:    movaps %xmm0, %xmm4185; CHECK-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm0[1]186; CHECK-NEXT:    cvttss2si %xmm4, %rdx187; CHECK-NEXT:    ucomiss %xmm2, %xmm4188; CHECK-NEXT:    cmovbl %eax, %edx189; CHECK-NEXT:    ucomiss %xmm3, %xmm4190; CHECK-NEXT:    cmoval %ecx, %edx191; CHECK-NEXT:    movd %edx, %xmm4192; CHECK-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1]193; CHECK-NEXT:    cvttss2si %xmm0, %rdx194; CHECK-NEXT:    ucomiss %xmm2, %xmm0195; CHECK-NEXT:    cmovbl %eax, %edx196; CHECK-NEXT:    ucomiss %xmm3, %xmm0197; CHECK-NEXT:    cmoval %ecx, %edx198; CHECK-NEXT:    movd %edx, %xmm1199; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]200; CHECK-NEXT:    cvttss2si %xmm0, %rdx201; CHECK-NEXT:    ucomiss %xmm2, %xmm0202; CHECK-NEXT:    cmovbl %eax, %edx203; CHECK-NEXT:    ucomiss %xmm3, %xmm0204; CHECK-NEXT:    cmoval %ecx, %edx205; CHECK-NEXT:    movd %edx, %xmm0206; CHECK-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]207; CHECK-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]208; CHECK-NEXT:    movdqa %xmm1, %xmm0209; CHECK-NEXT:    retq210  %x = call <4 x i32> @llvm.fptoui.sat.v4i32.v4f32(<4 x float> %f)211  ret <4 x i32> %x212}213 214define <4 x i64> @test_unsigned_v4i64_v4f32(<4 x float> %f) nounwind {215; CHECK-LABEL: test_unsigned_v4i64_v4f32:216; CHECK:       # %bb.0:217; CHECK-NEXT:    movss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]218; CHECK-NEXT:    movaps %xmm0, %xmm2219; CHECK-NEXT:    subss %xmm1, %xmm2220; CHECK-NEXT:    cvttss2si %xmm2, %rax221; CHECK-NEXT:    cvttss2si %xmm0, %rcx222; CHECK-NEXT:    movq %rcx, %rdx223; CHECK-NEXT:    sarq $63, %rdx224; CHECK-NEXT:    andq %rax, %rdx225; CHECK-NEXT:    orq %rcx, %rdx226; CHECK-NEXT:    xorl %eax, %eax227; CHECK-NEXT:    xorps %xmm3, %xmm3228; CHECK-NEXT:    ucomiss %xmm3, %xmm0229; CHECK-NEXT:    cmovbq %rax, %rdx230; CHECK-NEXT:    movss {{.*#+}} xmm4 = [1.8446743E+19,0.0E+0,0.0E+0,0.0E+0]231; CHECK-NEXT:    ucomiss %xmm4, %xmm0232; CHECK-NEXT:    movq $-1, %rcx233; CHECK-NEXT:    cmovaq %rcx, %rdx234; CHECK-NEXT:    movq %rdx, %xmm2235; CHECK-NEXT:    movaps %xmm0, %xmm5236; CHECK-NEXT:    shufps {{.*#+}} xmm5 = xmm5[1,1],xmm0[1,1]237; CHECK-NEXT:    movaps %xmm5, %xmm6238; CHECK-NEXT:    subss %xmm1, %xmm6239; CHECK-NEXT:    cvttss2si %xmm6, %rdx240; CHECK-NEXT:    cvttss2si %xmm5, %rsi241; CHECK-NEXT:    movq %rsi, %rdi242; CHECK-NEXT:    sarq $63, %rdi243; CHECK-NEXT:    andq %rdx, %rdi244; CHECK-NEXT:    orq %rsi, %rdi245; CHECK-NEXT:    ucomiss %xmm3, %xmm5246; CHECK-NEXT:    cmovbq %rax, %rdi247; CHECK-NEXT:    ucomiss %xmm4, %xmm5248; CHECK-NEXT:    cmovaq %rcx, %rdi249; CHECK-NEXT:    movq %rdi, %xmm5250; CHECK-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]251; CHECK-NEXT:    movaps %xmm0, %xmm5252; CHECK-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm0[3,3]253; CHECK-NEXT:    movaps %xmm5, %xmm6254; CHECK-NEXT:    subss %xmm1, %xmm6255; CHECK-NEXT:    cvttss2si %xmm6, %rdx256; CHECK-NEXT:    cvttss2si %xmm5, %rsi257; CHECK-NEXT:    movq %rsi, %rdi258; CHECK-NEXT:    sarq $63, %rdi259; CHECK-NEXT:    andq %rdx, %rdi260; CHECK-NEXT:    orq %rsi, %rdi261; CHECK-NEXT:    ucomiss %xmm3, %xmm5262; CHECK-NEXT:    cmovbq %rax, %rdi263; CHECK-NEXT:    ucomiss %xmm4, %xmm5264; CHECK-NEXT:    cmovaq %rcx, %rdi265; CHECK-NEXT:    movq %rdi, %xmm5266; CHECK-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]267; CHECK-NEXT:    movaps %xmm0, %xmm6268; CHECK-NEXT:    subss %xmm1, %xmm6269; CHECK-NEXT:    cvttss2si %xmm6, %rdx270; CHECK-NEXT:    cvttss2si %xmm0, %rsi271; CHECK-NEXT:    movq %rsi, %rdi272; CHECK-NEXT:    sarq $63, %rdi273; CHECK-NEXT:    andq %rdx, %rdi274; CHECK-NEXT:    orq %rsi, %rdi275; CHECK-NEXT:    ucomiss %xmm3, %xmm0276; CHECK-NEXT:    cmovbq %rax, %rdi277; CHECK-NEXT:    ucomiss %xmm4, %xmm0278; CHECK-NEXT:    cmovaq %rcx, %rdi279; CHECK-NEXT:    movq %rdi, %xmm1280; CHECK-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]281; CHECK-NEXT:    movdqa %xmm2, %xmm0282; CHECK-NEXT:    retq283  %x = call <4 x i64> @llvm.fptoui.sat.v4i64.v4f32(<4 x float> %f)284  ret <4 x i64> %x285}286 287define <4 x i128> @test_unsigned_v4i128_v4f32(<4 x float> %f) nounwind {288; CHECK-LABEL: test_unsigned_v4i128_v4f32:289; CHECK:       # %bb.0:290; CHECK-NEXT:    pushq %rbp291; CHECK-NEXT:    pushq %r15292; CHECK-NEXT:    pushq %r14293; CHECK-NEXT:    pushq %r13294; CHECK-NEXT:    pushq %r12295; CHECK-NEXT:    pushq %rbx296; CHECK-NEXT:    subq $56, %rsp297; CHECK-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill298; CHECK-NEXT:    movq %rdi, %rbx299; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]300; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill301; CHECK-NEXT:    callq __fixunssfti@PLT302; CHECK-NEXT:    movq %rdx, %r15303; CHECK-NEXT:    xorl %r14d, %r14d304; CHECK-NEXT:    xorps %xmm0, %xmm0305; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload306; CHECK-NEXT:    ucomiss %xmm0, %xmm1307; CHECK-NEXT:    cmovbq %r14, %r15308; CHECK-NEXT:    cmovbq %r14, %rax309; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1310; CHECK-NEXT:    movq $-1, %rbp311; CHECK-NEXT:    cmovaq %rbp, %rax312; CHECK-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill313; CHECK-NEXT:    cmovaq %rbp, %r15314; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload315; CHECK-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]316; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill317; CHECK-NEXT:    callq __fixunssfti@PLT318; CHECK-NEXT:    movq %rax, %r12319; CHECK-NEXT:    movq %rdx, %r13320; CHECK-NEXT:    xorps %xmm0, %xmm0321; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload322; CHECK-NEXT:    ucomiss %xmm0, %xmm1323; CHECK-NEXT:    cmovbq %r14, %r13324; CHECK-NEXT:    cmovbq %r14, %r12325; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1326; CHECK-NEXT:    cmovaq %rbp, %r12327; CHECK-NEXT:    cmovaq %rbp, %r13328; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload329; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]330; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill331; CHECK-NEXT:    callq __fixunssfti@PLT332; CHECK-NEXT:    movq %rax, %rbp333; CHECK-NEXT:    movq %rdx, %r14334; CHECK-NEXT:    xorps %xmm0, %xmm0335; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload336; CHECK-NEXT:    ucomiss %xmm0, %xmm1337; CHECK-NEXT:    movl $0, %eax338; CHECK-NEXT:    cmovbq %rax, %r14339; CHECK-NEXT:    cmovbq %rax, %rbp340; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1341; CHECK-NEXT:    movq $-1, %rax342; CHECK-NEXT:    cmovaq %rax, %rbp343; CHECK-NEXT:    cmovaq %rax, %r14344; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload345; CHECK-NEXT:    callq __fixunssfti@PLT346; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload347; CHECK-NEXT:    xorps %xmm1, %xmm1348; CHECK-NEXT:    ucomiss %xmm1, %xmm0349; CHECK-NEXT:    movl $0, %ecx350; CHECK-NEXT:    cmovbq %rcx, %rdx351; CHECK-NEXT:    cmovbq %rcx, %rax352; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0353; CHECK-NEXT:    movq $-1, %rcx354; CHECK-NEXT:    cmovaq %rcx, %rax355; CHECK-NEXT:    cmovaq %rcx, %rdx356; CHECK-NEXT:    movq %rdx, 8(%rbx)357; CHECK-NEXT:    movq %rax, (%rbx)358; CHECK-NEXT:    movq %r14, 56(%rbx)359; CHECK-NEXT:    movq %rbp, 48(%rbx)360; CHECK-NEXT:    movq %r13, 40(%rbx)361; CHECK-NEXT:    movq %r12, 32(%rbx)362; CHECK-NEXT:    movq %r15, 24(%rbx)363; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload364; CHECK-NEXT:    movq %rax, 16(%rbx)365; CHECK-NEXT:    movq %rbx, %rax366; CHECK-NEXT:    addq $56, %rsp367; CHECK-NEXT:    popq %rbx368; CHECK-NEXT:    popq %r12369; CHECK-NEXT:    popq %r13370; CHECK-NEXT:    popq %r14371; CHECK-NEXT:    popq %r15372; CHECK-NEXT:    popq %rbp373; CHECK-NEXT:    retq374  %x = call <4 x i128> @llvm.fptoui.sat.v4i128.v4f32(<4 x float> %f)375  ret <4 x i128> %x376}377 378;379; 64-bit float to unsigned integer380;381 382declare <2 x i1> @llvm.fptoui.sat.v2i1.v2f64(<2 x double>)383declare <2 x i8> @llvm.fptoui.sat.v2i8.v2f64(<2 x double>)384declare <2 x i16> @llvm.fptoui.sat.v2i16.v2f64(<2 x double>)385declare <2 x i32> @llvm.fptoui.sat.v2i32.v2f64(<2 x double>)386declare <2 x i64> @llvm.fptoui.sat.v2i64.v2f64(<2 x double>)387declare <2 x i128> @llvm.fptoui.sat.v2i128.v2f64(<2 x double>)388 389define <2 x i1> @test_unsigned_v2i1_v2f64(<2 x double> %f) nounwind {390; CHECK-LABEL: test_unsigned_v2i1_v2f64:391; CHECK:       # %bb.0:392; CHECK-NEXT:    xorpd %xmm2, %xmm2393; CHECK-NEXT:    movapd %xmm0, %xmm1394; CHECK-NEXT:    maxsd %xmm2, %xmm1395; CHECK-NEXT:    movsd {{.*#+}} xmm3 = [1.0E+0,0.0E+0]396; CHECK-NEXT:    minsd %xmm3, %xmm1397; CHECK-NEXT:    cvttsd2si %xmm1, %rax398; CHECK-NEXT:    movq %rax, %xmm1399; CHECK-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]400; CHECK-NEXT:    maxsd %xmm2, %xmm0401; CHECK-NEXT:    minsd %xmm3, %xmm0402; CHECK-NEXT:    cvttsd2si %xmm0, %rax403; CHECK-NEXT:    movq %rax, %xmm0404; CHECK-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]405; CHECK-NEXT:    movdqa %xmm1, %xmm0406; CHECK-NEXT:    retq407  %x = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f64(<2 x double> %f)408  ret <2 x i1> %x409}410 411define <2 x i8> @test_unsigned_v2i8_v2f64(<2 x double> %f) nounwind {412; CHECK-LABEL: test_unsigned_v2i8_v2f64:413; CHECK:       # %bb.0:414; CHECK-NEXT:    xorpd %xmm1, %xmm1415; CHECK-NEXT:    xorpd %xmm2, %xmm2416; CHECK-NEXT:    maxsd %xmm0, %xmm2417; CHECK-NEXT:    movsd {{.*#+}} xmm3 = [2.55E+2,0.0E+0]418; CHECK-NEXT:    movapd %xmm3, %xmm4419; CHECK-NEXT:    minsd %xmm2, %xmm4420; CHECK-NEXT:    cvttsd2si %xmm4, %eax421; CHECK-NEXT:    movzbl %al, %eax422; CHECK-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]423; CHECK-NEXT:    maxsd %xmm0, %xmm1424; CHECK-NEXT:    minsd %xmm1, %xmm3425; CHECK-NEXT:    cvttsd2si %xmm3, %ecx426; CHECK-NEXT:    shll $8, %ecx427; CHECK-NEXT:    orl %eax, %ecx428; CHECK-NEXT:    movd %ecx, %xmm0429; CHECK-NEXT:    retq430  %x = call <2 x i8> @llvm.fptoui.sat.v2i8.v2f64(<2 x double> %f)431  ret <2 x i8> %x432}433 434define <2 x i16> @test_unsigned_v2i16_v2f64(<2 x double> %f) nounwind {435; CHECK-LABEL: test_unsigned_v2i16_v2f64:436; CHECK:       # %bb.0:437; CHECK-NEXT:    xorpd %xmm1, %xmm1438; CHECK-NEXT:    maxsd %xmm0, %xmm1439; CHECK-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]440; CHECK-NEXT:    xorpd %xmm2, %xmm2441; CHECK-NEXT:    maxsd %xmm0, %xmm2442; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [6.5535E+4,0.0E+0]443; CHECK-NEXT:    movapd %xmm0, %xmm3444; CHECK-NEXT:    minsd %xmm2, %xmm3445; CHECK-NEXT:    cvttsd2si %xmm3, %eax446; CHECK-NEXT:    minsd %xmm1, %xmm0447; CHECK-NEXT:    cvttsd2si %xmm0, %ecx448; CHECK-NEXT:    movd %ecx, %xmm0449; CHECK-NEXT:    pinsrw $1, %eax, %xmm0450; CHECK-NEXT:    retq451  %x = call <2 x i16> @llvm.fptoui.sat.v2i16.v2f64(<2 x double> %f)452  ret <2 x i16> %x453}454 455define <2 x i32> @test_unsigned_v2i32_v2f64(<2 x double> %f) nounwind {456; CHECK-LABEL: test_unsigned_v2i32_v2f64:457; CHECK:       # %bb.0:458; CHECK-NEXT:    xorpd %xmm2, %xmm2459; CHECK-NEXT:    xorpd %xmm1, %xmm1460; CHECK-NEXT:    maxsd %xmm0, %xmm1461; CHECK-NEXT:    movsd {{.*#+}} xmm3 = [4.294967295E+9,0.0E+0]462; CHECK-NEXT:    movapd %xmm3, %xmm4463; CHECK-NEXT:    minsd %xmm1, %xmm4464; CHECK-NEXT:    cvttsd2si %xmm4, %rax465; CHECK-NEXT:    movd %eax, %xmm1466; CHECK-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]467; CHECK-NEXT:    maxsd %xmm0, %xmm2468; CHECK-NEXT:    minsd %xmm2, %xmm3469; CHECK-NEXT:    cvttsd2si %xmm3, %rax470; CHECK-NEXT:    movd %eax, %xmm0471; CHECK-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]472; CHECK-NEXT:    movdqa %xmm1, %xmm0473; CHECK-NEXT:    retq474  %x = call <2 x i32> @llvm.fptoui.sat.v2i32.v2f64(<2 x double> %f)475  ret <2 x i32> %x476}477 478define <2 x i64> @test_unsigned_v2i64_v2f64(<2 x double> %f) nounwind {479; CHECK-LABEL: test_unsigned_v2i64_v2f64:480; CHECK:       # %bb.0:481; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [9.2233720368547758E+18,0.0E+0]482; CHECK-NEXT:    movapd %xmm0, %xmm1483; CHECK-NEXT:    subsd %xmm2, %xmm1484; CHECK-NEXT:    cvttsd2si %xmm1, %rax485; CHECK-NEXT:    cvttsd2si %xmm0, %rcx486; CHECK-NEXT:    movq %rcx, %rdx487; CHECK-NEXT:    sarq $63, %rdx488; CHECK-NEXT:    andq %rax, %rdx489; CHECK-NEXT:    orq %rcx, %rdx490; CHECK-NEXT:    xorl %eax, %eax491; CHECK-NEXT:    xorpd %xmm3, %xmm3492; CHECK-NEXT:    ucomisd %xmm3, %xmm0493; CHECK-NEXT:    cmovbq %rax, %rdx494; CHECK-NEXT:    movsd {{.*#+}} xmm4 = [1.844674407370955E+19,0.0E+0]495; CHECK-NEXT:    ucomisd %xmm4, %xmm0496; CHECK-NEXT:    movq $-1, %rcx497; CHECK-NEXT:    cmovaq %rcx, %rdx498; CHECK-NEXT:    movq %rdx, %xmm1499; CHECK-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]500; CHECK-NEXT:    movapd %xmm0, %xmm5501; CHECK-NEXT:    subsd %xmm2, %xmm5502; CHECK-NEXT:    cvttsd2si %xmm5, %rdx503; CHECK-NEXT:    cvttsd2si %xmm0, %rsi504; CHECK-NEXT:    movq %rsi, %rdi505; CHECK-NEXT:    sarq $63, %rdi506; CHECK-NEXT:    andq %rdx, %rdi507; CHECK-NEXT:    orq %rsi, %rdi508; CHECK-NEXT:    ucomisd %xmm3, %xmm0509; CHECK-NEXT:    cmovbq %rax, %rdi510; CHECK-NEXT:    ucomisd %xmm4, %xmm0511; CHECK-NEXT:    cmovaq %rcx, %rdi512; CHECK-NEXT:    movq %rdi, %xmm0513; CHECK-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]514; CHECK-NEXT:    movdqa %xmm1, %xmm0515; CHECK-NEXT:    retq516  %x = call <2 x i64> @llvm.fptoui.sat.v2i64.v2f64(<2 x double> %f)517  ret <2 x i64> %x518}519 520define <2 x i128> @test_unsigned_v2i128_v2f64(<2 x double> %f) nounwind {521; CHECK-LABEL: test_unsigned_v2i128_v2f64:522; CHECK:       # %bb.0:523; CHECK-NEXT:    pushq %r15524; CHECK-NEXT:    pushq %r14525; CHECK-NEXT:    pushq %r13526; CHECK-NEXT:    pushq %r12527; CHECK-NEXT:    pushq %rbx528; CHECK-NEXT:    subq $32, %rsp529; CHECK-NEXT:    movapd %xmm0, (%rsp) # 16-byte Spill530; CHECK-NEXT:    movq %rdi, %rbx531; CHECK-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]532; CHECK-NEXT:    movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill533; CHECK-NEXT:    callq __fixunsdfti@PLT534; CHECK-NEXT:    movq %rax, %r14535; CHECK-NEXT:    movq %rdx, %r15536; CHECK-NEXT:    xorl %r12d, %r12d537; CHECK-NEXT:    xorpd %xmm0, %xmm0538; CHECK-NEXT:    movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload539; CHECK-NEXT:    ucomisd %xmm0, %xmm1540; CHECK-NEXT:    cmovbq %r12, %r15541; CHECK-NEXT:    cmovbq %r12, %r14542; CHECK-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1543; CHECK-NEXT:    movq $-1, %r13544; CHECK-NEXT:    cmovaq %r13, %r14545; CHECK-NEXT:    cmovaq %r13, %r15546; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload547; CHECK-NEXT:    callq __fixunsdfti@PLT548; CHECK-NEXT:    movapd (%rsp), %xmm0 # 16-byte Reload549; CHECK-NEXT:    xorpd %xmm1, %xmm1550; CHECK-NEXT:    ucomisd %xmm1, %xmm0551; CHECK-NEXT:    cmovbq %r12, %rdx552; CHECK-NEXT:    cmovbq %r12, %rax553; CHECK-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0554; CHECK-NEXT:    cmovaq %r13, %rax555; CHECK-NEXT:    cmovaq %r13, %rdx556; CHECK-NEXT:    movq %rdx, 8(%rbx)557; CHECK-NEXT:    movq %rax, (%rbx)558; CHECK-NEXT:    movq %r15, 24(%rbx)559; CHECK-NEXT:    movq %r14, 16(%rbx)560; CHECK-NEXT:    movq %rbx, %rax561; CHECK-NEXT:    addq $32, %rsp562; CHECK-NEXT:    popq %rbx563; CHECK-NEXT:    popq %r12564; CHECK-NEXT:    popq %r13565; CHECK-NEXT:    popq %r14566; CHECK-NEXT:    popq %r15567; CHECK-NEXT:    retq568  %x = call <2 x i128> @llvm.fptoui.sat.v2i128.v2f64(<2 x double> %f)569  ret <2 x i128> %x570}571 572;573; 16-bit float to unsigned integer574;575 576declare <8 x i1> @llvm.fptoui.sat.v8i1.v8f16(<8 x half>)577declare <8 x i8> @llvm.fptoui.sat.v8i8.v8f16(<8 x half>)578declare <8 x i16> @llvm.fptoui.sat.v8i16.v8f16(<8 x half>)579declare <8 x i32> @llvm.fptoui.sat.v8i32.v8f16(<8 x half>)580declare <8 x i64> @llvm.fptoui.sat.v8i64.v8f16(<8 x half>)581declare <8 x i128> @llvm.fptoui.sat.v8i128.v8f16(<8 x half>)582 583define <8 x i1> @test_unsigned_v8i1_v8f16(<8 x half> %f) nounwind {584; CHECK-LABEL: test_unsigned_v8i1_v8f16:585; CHECK:       # %bb.0:586; CHECK-NEXT:    pushq %rbp587; CHECK-NEXT:    pushq %rbx588; CHECK-NEXT:    subq $72, %rsp589; CHECK-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill590; CHECK-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero591; CHECK-NEXT:    callq __extendhfsf2@PLT592; CHECK-NEXT:    cvttss2si %xmm0, %eax593; CHECK-NEXT:    xorl %ebx, %ebx594; CHECK-NEXT:    xorps %xmm1, %xmm1595; CHECK-NEXT:    ucomiss %xmm1, %xmm0596; CHECK-NEXT:    cmovbl %ebx, %eax597; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0598; CHECK-NEXT:    movl $1, %ebp599; CHECK-NEXT:    cmoval %ebp, %eax600; CHECK-NEXT:    movd %eax, %xmm0601; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill602; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload603; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]604; CHECK-NEXT:    callq __extendhfsf2@PLT605; CHECK-NEXT:    cvttss2si %xmm0, %eax606; CHECK-NEXT:    xorps %xmm1, %xmm1607; CHECK-NEXT:    ucomiss %xmm1, %xmm0608; CHECK-NEXT:    cmovbl %ebx, %eax609; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0610; CHECK-NEXT:    cmoval %ebp, %eax611; CHECK-NEXT:    movd %eax, %xmm0612; CHECK-NEXT:    punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload613; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]614; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill615; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload616; CHECK-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero617; CHECK-NEXT:    callq __extendhfsf2@PLT618; CHECK-NEXT:    cvttss2si %xmm0, %eax619; CHECK-NEXT:    xorps %xmm1, %xmm1620; CHECK-NEXT:    ucomiss %xmm1, %xmm0621; CHECK-NEXT:    cmovbl %ebx, %eax622; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0623; CHECK-NEXT:    cmoval %ebp, %eax624; CHECK-NEXT:    movd %eax, %xmm0625; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill626; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload627; CHECK-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]628; CHECK-NEXT:    callq __extendhfsf2@PLT629; CHECK-NEXT:    cvttss2si %xmm0, %eax630; CHECK-NEXT:    xorps %xmm1, %xmm1631; CHECK-NEXT:    ucomiss %xmm1, %xmm0632; CHECK-NEXT:    cmovbl %ebx, %eax633; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0634; CHECK-NEXT:    cmoval %ebp, %eax635; CHECK-NEXT:    movd %eax, %xmm0636; CHECK-NEXT:    punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload637; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]638; CHECK-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload639; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]640; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill641; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload642; CHECK-NEXT:    psrlq $48, %xmm0643; CHECK-NEXT:    callq __extendhfsf2@PLT644; CHECK-NEXT:    cvttss2si %xmm0, %eax645; CHECK-NEXT:    xorps %xmm1, %xmm1646; CHECK-NEXT:    ucomiss %xmm1, %xmm0647; CHECK-NEXT:    cmovbl %ebx, %eax648; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0649; CHECK-NEXT:    cmoval %ebp, %eax650; CHECK-NEXT:    movd %eax, %xmm0651; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill652; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload653; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]654; CHECK-NEXT:    callq __extendhfsf2@PLT655; CHECK-NEXT:    cvttss2si %xmm0, %eax656; CHECK-NEXT:    xorps %xmm1, %xmm1657; CHECK-NEXT:    ucomiss %xmm1, %xmm0658; CHECK-NEXT:    cmovbl %ebx, %eax659; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0660; CHECK-NEXT:    cmoval %ebp, %eax661; CHECK-NEXT:    movd %eax, %xmm0662; CHECK-NEXT:    punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload663; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]664; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill665; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload666; CHECK-NEXT:    callq __extendhfsf2@PLT667; CHECK-NEXT:    cvttss2si %xmm0, %eax668; CHECK-NEXT:    xorps %xmm1, %xmm1669; CHECK-NEXT:    ucomiss %xmm1, %xmm0670; CHECK-NEXT:    cmovbl %ebx, %eax671; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0672; CHECK-NEXT:    cmoval %ebp, %eax673; CHECK-NEXT:    movd %eax, %xmm0674; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill675; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload676; CHECK-NEXT:    psrld $16, %xmm0677; CHECK-NEXT:    callq __extendhfsf2@PLT678; CHECK-NEXT:    cvttss2si %xmm0, %eax679; CHECK-NEXT:    xorps %xmm1, %xmm1680; CHECK-NEXT:    ucomiss %xmm1, %xmm0681; CHECK-NEXT:    cmovbl %ebx, %eax682; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0683; CHECK-NEXT:    cmoval %ebp, %eax684; CHECK-NEXT:    movd %eax, %xmm1685; CHECK-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload686; CHECK-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]687; CHECK-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload688; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]689; CHECK-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload690; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0]691; CHECK-NEXT:    addq $72, %rsp692; CHECK-NEXT:    popq %rbx693; CHECK-NEXT:    popq %rbp694; CHECK-NEXT:    retq695  %x = call <8 x i1> @llvm.fptoui.sat.v8i1.v8f16(<8 x half> %f)696  ret <8 x i1> %x697}698 699define <8 x i8> @test_unsigned_v8i8_v8f16(<8 x half> %f) nounwind {700; CHECK-LABEL: test_unsigned_v8i8_v8f16:701; CHECK:       # %bb.0:702; CHECK-NEXT:    pushq %rbp703; CHECK-NEXT:    pushq %r15704; CHECK-NEXT:    pushq %r14705; CHECK-NEXT:    pushq %r12706; CHECK-NEXT:    pushq %rbx707; CHECK-NEXT:    subq $32, %rsp708; CHECK-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill709; CHECK-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero710; CHECK-NEXT:    callq __extendhfsf2@PLT711; CHECK-NEXT:    cvttss2si %xmm0, %r15d712; CHECK-NEXT:    xorl %ebx, %ebx713; CHECK-NEXT:    xorps %xmm1, %xmm1714; CHECK-NEXT:    ucomiss %xmm1, %xmm0715; CHECK-NEXT:    cmovbl %ebx, %r15d716; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0717; CHECK-NEXT:    movl $255, %ebp718; CHECK-NEXT:    cmoval %ebp, %r15d719; CHECK-NEXT:    shll $8, %r15d720; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload721; CHECK-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]722; CHECK-NEXT:    callq __extendhfsf2@PLT723; CHECK-NEXT:    cvttss2si %xmm0, %eax724; CHECK-NEXT:    xorps %xmm1, %xmm1725; CHECK-NEXT:    ucomiss %xmm1, %xmm0726; CHECK-NEXT:    cmovbl %ebx, %eax727; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0728; CHECK-NEXT:    cmoval %ebp, %eax729; CHECK-NEXT:    movzbl %al, %r14d730; CHECK-NEXT:    orl %r15d, %r14d731; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload732; CHECK-NEXT:    callq __extendhfsf2@PLT733; CHECK-NEXT:    cvttss2si %xmm0, %eax734; CHECK-NEXT:    xorps %xmm1, %xmm1735; CHECK-NEXT:    ucomiss %xmm1, %xmm0736; CHECK-NEXT:    cmovbl %ebx, %eax737; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0738; CHECK-NEXT:    cmoval %ebp, %eax739; CHECK-NEXT:    movzbl %al, %r15d740; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload741; CHECK-NEXT:    psrld $16, %xmm0742; CHECK-NEXT:    callq __extendhfsf2@PLT743; CHECK-NEXT:    cvttss2si %xmm0, %eax744; CHECK-NEXT:    xorps %xmm1, %xmm1745; CHECK-NEXT:    ucomiss %xmm1, %xmm0746; CHECK-NEXT:    cmovbl %ebx, %eax747; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0748; CHECK-NEXT:    cmoval %ebp, %eax749; CHECK-NEXT:    movzbl %al, %r12d750; CHECK-NEXT:    shll $8, %r12d751; CHECK-NEXT:    orl %r15d, %r12d752; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload753; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]754; CHECK-NEXT:    callq __extendhfsf2@PLT755; CHECK-NEXT:    cvttss2si %xmm0, %eax756; CHECK-NEXT:    xorps %xmm1, %xmm1757; CHECK-NEXT:    ucomiss %xmm1, %xmm0758; CHECK-NEXT:    cmovbl %ebx, %eax759; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0760; CHECK-NEXT:    cmoval %ebp, %eax761; CHECK-NEXT:    movzbl %al, %r15d762; CHECK-NEXT:    shll $16, %r15d763; CHECK-NEXT:    orl %r12d, %r15d764; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload765; CHECK-NEXT:    psrlq $48, %xmm0766; CHECK-NEXT:    callq __extendhfsf2@PLT767; CHECK-NEXT:    cvttss2si %xmm0, %eax768; CHECK-NEXT:    xorps %xmm1, %xmm1769; CHECK-NEXT:    ucomiss %xmm1, %xmm0770; CHECK-NEXT:    cmovbl %ebx, %eax771; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0772; CHECK-NEXT:    cmoval %ebp, %eax773; CHECK-NEXT:    shll $24, %eax774; CHECK-NEXT:    orl %r15d, %eax775; CHECK-NEXT:    movd %eax, %xmm0776; CHECK-NEXT:    pinsrw $2, %r14d, %xmm0777; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill778; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload779; CHECK-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero780; CHECK-NEXT:    callq __extendhfsf2@PLT781; CHECK-NEXT:    cvttss2si %xmm0, %r14d782; CHECK-NEXT:    xorps %xmm1, %xmm1783; CHECK-NEXT:    ucomiss %xmm1, %xmm0784; CHECK-NEXT:    cmovbl %ebx, %r14d785; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0786; CHECK-NEXT:    cmoval %ebp, %r14d787; CHECK-NEXT:    shll $8, %r14d788; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload789; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]790; CHECK-NEXT:    callq __extendhfsf2@PLT791; CHECK-NEXT:    cvttss2si %xmm0, %eax792; CHECK-NEXT:    xorps %xmm1, %xmm1793; CHECK-NEXT:    ucomiss %xmm1, %xmm0794; CHECK-NEXT:    cmovbl %ebx, %eax795; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0796; CHECK-NEXT:    cmoval %ebp, %eax797; CHECK-NEXT:    movzbl %al, %eax798; CHECK-NEXT:    orl %r14d, %eax799; CHECK-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload800; CHECK-NEXT:    pinsrw $3, %eax, %xmm0801; CHECK-NEXT:    addq $32, %rsp802; CHECK-NEXT:    popq %rbx803; CHECK-NEXT:    popq %r12804; CHECK-NEXT:    popq %r14805; CHECK-NEXT:    popq %r15806; CHECK-NEXT:    popq %rbp807; CHECK-NEXT:    retq808  %x = call <8 x i8> @llvm.fptoui.sat.v8i8.v8f16(<8 x half> %f)809  ret <8 x i8> %x810}811 812define <8 x i16> @test_unsigned_v8i16_v8f16(<8 x half> %f) nounwind {813; CHECK-LABEL: test_unsigned_v8i16_v8f16:814; CHECK:       # %bb.0:815; CHECK-NEXT:    pushq %rbp816; CHECK-NEXT:    pushq %rbx817; CHECK-NEXT:    subq $72, %rsp818; CHECK-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill819; CHECK-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero820; CHECK-NEXT:    callq __extendhfsf2@PLT821; CHECK-NEXT:    cvttss2si %xmm0, %eax822; CHECK-NEXT:    xorl %ebx, %ebx823; CHECK-NEXT:    xorps %xmm1, %xmm1824; CHECK-NEXT:    ucomiss %xmm1, %xmm0825; CHECK-NEXT:    cmovbl %ebx, %eax826; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0827; CHECK-NEXT:    movl $65535, %ebp # imm = 0xFFFF828; CHECK-NEXT:    cmoval %ebp, %eax829; CHECK-NEXT:    movd %eax, %xmm0830; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill831; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload832; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]833; CHECK-NEXT:    callq __extendhfsf2@PLT834; CHECK-NEXT:    cvttss2si %xmm0, %eax835; CHECK-NEXT:    xorps %xmm1, %xmm1836; CHECK-NEXT:    ucomiss %xmm1, %xmm0837; CHECK-NEXT:    cmovbl %ebx, %eax838; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0839; CHECK-NEXT:    cmoval %ebp, %eax840; CHECK-NEXT:    movd %eax, %xmm0841; CHECK-NEXT:    punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload842; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]843; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill844; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload845; CHECK-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero846; CHECK-NEXT:    callq __extendhfsf2@PLT847; CHECK-NEXT:    cvttss2si %xmm0, %eax848; CHECK-NEXT:    xorps %xmm1, %xmm1849; CHECK-NEXT:    ucomiss %xmm1, %xmm0850; CHECK-NEXT:    cmovbl %ebx, %eax851; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0852; CHECK-NEXT:    cmoval %ebp, %eax853; CHECK-NEXT:    movd %eax, %xmm0854; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill855; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload856; CHECK-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]857; CHECK-NEXT:    callq __extendhfsf2@PLT858; CHECK-NEXT:    cvttss2si %xmm0, %eax859; CHECK-NEXT:    xorps %xmm1, %xmm1860; CHECK-NEXT:    ucomiss %xmm1, %xmm0861; CHECK-NEXT:    cmovbl %ebx, %eax862; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0863; CHECK-NEXT:    cmoval %ebp, %eax864; CHECK-NEXT:    movd %eax, %xmm0865; CHECK-NEXT:    punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload866; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]867; CHECK-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload868; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]869; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill870; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload871; CHECK-NEXT:    psrlq $48, %xmm0872; CHECK-NEXT:    callq __extendhfsf2@PLT873; CHECK-NEXT:    cvttss2si %xmm0, %eax874; CHECK-NEXT:    xorps %xmm1, %xmm1875; CHECK-NEXT:    ucomiss %xmm1, %xmm0876; CHECK-NEXT:    cmovbl %ebx, %eax877; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0878; CHECK-NEXT:    cmoval %ebp, %eax879; CHECK-NEXT:    movd %eax, %xmm0880; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill881; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload882; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]883; CHECK-NEXT:    callq __extendhfsf2@PLT884; CHECK-NEXT:    cvttss2si %xmm0, %eax885; CHECK-NEXT:    xorps %xmm1, %xmm1886; CHECK-NEXT:    ucomiss %xmm1, %xmm0887; CHECK-NEXT:    cmovbl %ebx, %eax888; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0889; CHECK-NEXT:    cmoval %ebp, %eax890; CHECK-NEXT:    movd %eax, %xmm0891; CHECK-NEXT:    punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload892; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]893; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill894; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload895; CHECK-NEXT:    callq __extendhfsf2@PLT896; CHECK-NEXT:    cvttss2si %xmm0, %eax897; CHECK-NEXT:    xorps %xmm1, %xmm1898; CHECK-NEXT:    ucomiss %xmm1, %xmm0899; CHECK-NEXT:    cmovbl %ebx, %eax900; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0901; CHECK-NEXT:    cmoval %ebp, %eax902; CHECK-NEXT:    movd %eax, %xmm0903; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill904; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload905; CHECK-NEXT:    psrld $16, %xmm0906; CHECK-NEXT:    callq __extendhfsf2@PLT907; CHECK-NEXT:    cvttss2si %xmm0, %eax908; CHECK-NEXT:    xorps %xmm1, %xmm1909; CHECK-NEXT:    ucomiss %xmm1, %xmm0910; CHECK-NEXT:    cmovbl %ebx, %eax911; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0912; CHECK-NEXT:    cmoval %ebp, %eax913; CHECK-NEXT:    movd %eax, %xmm1914; CHECK-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload915; CHECK-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]916; CHECK-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload917; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]918; CHECK-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload919; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0]920; CHECK-NEXT:    addq $72, %rsp921; CHECK-NEXT:    popq %rbx922; CHECK-NEXT:    popq %rbp923; CHECK-NEXT:    retq924  %x = call <8 x i16> @llvm.fptoui.sat.v8i16.v8f16(<8 x half> %f)925  ret <8 x i16> %x926}927 928define <8 x i32> @test_unsigned_v8i32_v8f16(<8 x half> %f) nounwind {929; CHECK-LABEL: test_unsigned_v8i32_v8f16:930; CHECK:       # %bb.0:931; CHECK-NEXT:    pushq %rbp932; CHECK-NEXT:    pushq %rbx933; CHECK-NEXT:    subq $72, %rsp934; CHECK-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill935; CHECK-NEXT:    psrlq $48, %xmm0936; CHECK-NEXT:    callq __extendhfsf2@PLT937; CHECK-NEXT:    cvttss2si %xmm0, %rax938; CHECK-NEXT:    xorl %ebx, %ebx939; CHECK-NEXT:    xorps %xmm1, %xmm1940; CHECK-NEXT:    ucomiss %xmm1, %xmm0941; CHECK-NEXT:    cmovbl %ebx, %eax942; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0943; CHECK-NEXT:    movl $-1, %ebp944; CHECK-NEXT:    cmoval %ebp, %eax945; CHECK-NEXT:    movd %eax, %xmm0946; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill947; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload948; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]949; CHECK-NEXT:    callq __extendhfsf2@PLT950; CHECK-NEXT:    cvttss2si %xmm0, %rax951; CHECK-NEXT:    xorps %xmm1, %xmm1952; CHECK-NEXT:    ucomiss %xmm1, %xmm0953; CHECK-NEXT:    cmovbl %ebx, %eax954; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0955; CHECK-NEXT:    cmoval %ebp, %eax956; CHECK-NEXT:    movd %eax, %xmm0957; CHECK-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload958; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]959; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill960; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload961; CHECK-NEXT:    callq __extendhfsf2@PLT962; CHECK-NEXT:    cvttss2si %xmm0, %rax963; CHECK-NEXT:    xorps %xmm1, %xmm1964; CHECK-NEXT:    ucomiss %xmm1, %xmm0965; CHECK-NEXT:    cmovbl %ebx, %eax966; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0967; CHECK-NEXT:    cmoval %ebp, %eax968; CHECK-NEXT:    movd %eax, %xmm0969; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill970; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload971; CHECK-NEXT:    psrld $16, %xmm0972; CHECK-NEXT:    callq __extendhfsf2@PLT973; CHECK-NEXT:    cvttss2si %xmm0, %rax974; CHECK-NEXT:    xorps %xmm1, %xmm1975; CHECK-NEXT:    ucomiss %xmm1, %xmm0976; CHECK-NEXT:    cmovbl %ebx, %eax977; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0978; CHECK-NEXT:    cmoval %ebp, %eax979; CHECK-NEXT:    movd %eax, %xmm0980; CHECK-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload981; CHECK-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]982; CHECK-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload983; CHECK-NEXT:    # xmm1 = xmm1[0],mem[0]984; CHECK-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill985; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload986; CHECK-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero987; CHECK-NEXT:    callq __extendhfsf2@PLT988; CHECK-NEXT:    cvttss2si %xmm0, %rax989; CHECK-NEXT:    pxor %xmm1, %xmm1990; CHECK-NEXT:    ucomiss %xmm1, %xmm0991; CHECK-NEXT:    cmovbl %ebx, %eax992; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0993; CHECK-NEXT:    cmoval %ebp, %eax994; CHECK-NEXT:    movd %eax, %xmm0995; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill996; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload997; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]998; CHECK-NEXT:    callq __extendhfsf2@PLT999; CHECK-NEXT:    cvttss2si %xmm0, %rax1000; CHECK-NEXT:    xorps %xmm1, %xmm11001; CHECK-NEXT:    ucomiss %xmm1, %xmm01002; CHECK-NEXT:    cmovbl %ebx, %eax1003; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01004; CHECK-NEXT:    cmoval %ebp, %eax1005; CHECK-NEXT:    movd %eax, %xmm01006; CHECK-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1007; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1008; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1009; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1010; CHECK-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1011; CHECK-NEXT:    callq __extendhfsf2@PLT1012; CHECK-NEXT:    cvttss2si %xmm0, %rax1013; CHECK-NEXT:    xorps %xmm1, %xmm11014; CHECK-NEXT:    ucomiss %xmm1, %xmm01015; CHECK-NEXT:    cmovbl %ebx, %eax1016; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01017; CHECK-NEXT:    cmoval %ebp, %eax1018; CHECK-NEXT:    movd %eax, %xmm01019; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1020; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1021; CHECK-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1022; CHECK-NEXT:    callq __extendhfsf2@PLT1023; CHECK-NEXT:    cvttss2si %xmm0, %rax1024; CHECK-NEXT:    xorps %xmm1, %xmm11025; CHECK-NEXT:    ucomiss %xmm1, %xmm01026; CHECK-NEXT:    cmovbl %ebx, %eax1027; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01028; CHECK-NEXT:    cmoval %ebp, %eax1029; CHECK-NEXT:    movd %eax, %xmm11030; CHECK-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload1031; CHECK-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]1032; CHECK-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload1033; CHECK-NEXT:    # xmm1 = xmm1[0],mem[0]1034; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1035; CHECK-NEXT:    addq $72, %rsp1036; CHECK-NEXT:    popq %rbx1037; CHECK-NEXT:    popq %rbp1038; CHECK-NEXT:    retq1039  %x = call <8 x i32> @llvm.fptoui.sat.v8i32.v8f16(<8 x half> %f)1040  ret <8 x i32> %x1041}1042 1043define <8 x i64> @test_unsigned_v8i64_v8f16(<8 x half> %f) nounwind {1044; CHECK-LABEL: test_unsigned_v8i64_v8f16:1045; CHECK:       # %bb.0:1046; CHECK-NEXT:    pushq %r141047; CHECK-NEXT:    pushq %rbx1048; CHECK-NEXT:    subq $88, %rsp1049; CHECK-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill1050; CHECK-NEXT:    callq __extendhfsf2@PLT1051; CHECK-NEXT:    movaps %xmm0, %xmm11052; CHECK-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11053; CHECK-NEXT:    cvttss2si %xmm1, %rax1054; CHECK-NEXT:    cvttss2si %xmm0, %rcx1055; CHECK-NEXT:    movq %rcx, %rdx1056; CHECK-NEXT:    sarq $63, %rdx1057; CHECK-NEXT:    andq %rax, %rdx1058; CHECK-NEXT:    orq %rcx, %rdx1059; CHECK-NEXT:    xorl %ebx, %ebx1060; CHECK-NEXT:    xorps %xmm1, %xmm11061; CHECK-NEXT:    ucomiss %xmm1, %xmm01062; CHECK-NEXT:    cmovbq %rbx, %rdx1063; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01064; CHECK-NEXT:    movq $-1, %r141065; CHECK-NEXT:    cmovaq %r14, %rdx1066; CHECK-NEXT:    movq %rdx, %xmm01067; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1068; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1069; CHECK-NEXT:    psrld $16, %xmm01070; CHECK-NEXT:    callq __extendhfsf2@PLT1071; CHECK-NEXT:    movdqa %xmm0, %xmm11072; CHECK-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11073; CHECK-NEXT:    cvttss2si %xmm1, %rax1074; CHECK-NEXT:    cvttss2si %xmm0, %rcx1075; CHECK-NEXT:    movq %rcx, %rdx1076; CHECK-NEXT:    sarq $63, %rdx1077; CHECK-NEXT:    andq %rax, %rdx1078; CHECK-NEXT:    orq %rcx, %rdx1079; CHECK-NEXT:    xorps %xmm1, %xmm11080; CHECK-NEXT:    ucomiss %xmm1, %xmm01081; CHECK-NEXT:    cmovbq %rbx, %rdx1082; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01083; CHECK-NEXT:    cmovaq %r14, %rdx1084; CHECK-NEXT:    movq %rdx, %xmm01085; CHECK-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1086; CHECK-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]1087; CHECK-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1088; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1089; CHECK-NEXT:    psrlq $48, %xmm01090; CHECK-NEXT:    callq __extendhfsf2@PLT1091; CHECK-NEXT:    movdqa %xmm0, %xmm11092; CHECK-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11093; CHECK-NEXT:    cvttss2si %xmm1, %rax1094; CHECK-NEXT:    cvttss2si %xmm0, %rcx1095; CHECK-NEXT:    movq %rcx, %rdx1096; CHECK-NEXT:    sarq $63, %rdx1097; CHECK-NEXT:    andq %rax, %rdx1098; CHECK-NEXT:    orq %rcx, %rdx1099; CHECK-NEXT:    xorps %xmm1, %xmm11100; CHECK-NEXT:    ucomiss %xmm1, %xmm01101; CHECK-NEXT:    cmovbq %rbx, %rdx1102; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01103; CHECK-NEXT:    cmovaq %r14, %rdx1104; CHECK-NEXT:    movq %rdx, %xmm01105; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1106; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1107; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1108; CHECK-NEXT:    callq __extendhfsf2@PLT1109; CHECK-NEXT:    movaps %xmm0, %xmm11110; CHECK-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11111; CHECK-NEXT:    cvttss2si %xmm1, %rax1112; CHECK-NEXT:    cvttss2si %xmm0, %rcx1113; CHECK-NEXT:    movq %rcx, %rdx1114; CHECK-NEXT:    sarq $63, %rdx1115; CHECK-NEXT:    andq %rax, %rdx1116; CHECK-NEXT:    orq %rcx, %rdx1117; CHECK-NEXT:    xorps %xmm1, %xmm11118; CHECK-NEXT:    ucomiss %xmm1, %xmm01119; CHECK-NEXT:    cmovbq %rbx, %rdx1120; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01121; CHECK-NEXT:    cmovaq %r14, %rdx1122; CHECK-NEXT:    movq %rdx, %xmm01123; CHECK-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1124; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0]1125; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1126; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1127; CHECK-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1128; CHECK-NEXT:    callq __extendhfsf2@PLT1129; CHECK-NEXT:    movdqa %xmm0, %xmm11130; CHECK-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11131; CHECK-NEXT:    cvttss2si %xmm1, %rax1132; CHECK-NEXT:    cvttss2si %xmm0, %rcx1133; CHECK-NEXT:    movq %rcx, %rdx1134; CHECK-NEXT:    sarq $63, %rdx1135; CHECK-NEXT:    andq %rax, %rdx1136; CHECK-NEXT:    orq %rcx, %rdx1137; CHECK-NEXT:    xorps %xmm1, %xmm11138; CHECK-NEXT:    ucomiss %xmm1, %xmm01139; CHECK-NEXT:    cmovbq %rbx, %rdx1140; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01141; CHECK-NEXT:    cmovaq %r14, %rdx1142; CHECK-NEXT:    movq %rdx, %xmm01143; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1144; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1145; CHECK-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1146; CHECK-NEXT:    callq __extendhfsf2@PLT1147; CHECK-NEXT:    movaps %xmm0, %xmm11148; CHECK-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11149; CHECK-NEXT:    cvttss2si %xmm1, %rax1150; CHECK-NEXT:    cvttss2si %xmm0, %rcx1151; CHECK-NEXT:    movq %rcx, %rdx1152; CHECK-NEXT:    sarq $63, %rdx1153; CHECK-NEXT:    andq %rax, %rdx1154; CHECK-NEXT:    orq %rcx, %rdx1155; CHECK-NEXT:    xorps %xmm1, %xmm11156; CHECK-NEXT:    ucomiss %xmm1, %xmm01157; CHECK-NEXT:    cmovbq %rbx, %rdx1158; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01159; CHECK-NEXT:    cmovaq %r14, %rdx1160; CHECK-NEXT:    movq %rdx, %xmm01161; CHECK-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1162; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0]1163; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1164; CHECK-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1165; CHECK-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1166; CHECK-NEXT:    callq __extendhfsf2@PLT1167; CHECK-NEXT:    movdqa %xmm0, %xmm11168; CHECK-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11169; CHECK-NEXT:    cvttss2si %xmm1, %rax1170; CHECK-NEXT:    cvttss2si %xmm0, %rcx1171; CHECK-NEXT:    movq %rcx, %rdx1172; CHECK-NEXT:    sarq $63, %rdx1173; CHECK-NEXT:    andq %rax, %rdx1174; CHECK-NEXT:    orq %rcx, %rdx1175; CHECK-NEXT:    xorps %xmm1, %xmm11176; CHECK-NEXT:    ucomiss %xmm1, %xmm01177; CHECK-NEXT:    cmovbq %rbx, %rdx1178; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01179; CHECK-NEXT:    cmovaq %r14, %rdx1180; CHECK-NEXT:    movq %rdx, %xmm01181; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1182; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1183; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1184; CHECK-NEXT:    callq __extendhfsf2@PLT1185; CHECK-NEXT:    movaps %xmm0, %xmm11186; CHECK-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11187; CHECK-NEXT:    cvttss2si %xmm1, %rax1188; CHECK-NEXT:    cvttss2si %xmm0, %rcx1189; CHECK-NEXT:    movq %rcx, %rdx1190; CHECK-NEXT:    sarq $63, %rdx1191; CHECK-NEXT:    andq %rax, %rdx1192; CHECK-NEXT:    orq %rcx, %rdx1193; CHECK-NEXT:    xorps %xmm1, %xmm11194; CHECK-NEXT:    ucomiss %xmm1, %xmm01195; CHECK-NEXT:    cmovbq %rbx, %rdx1196; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01197; CHECK-NEXT:    cmovaq %r14, %rdx1198; CHECK-NEXT:    movq %rdx, %xmm31199; CHECK-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Folded Reload1200; CHECK-NEXT:    # xmm3 = xmm3[0],mem[0]1201; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1202; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1203; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload1204; CHECK-NEXT:    addq $88, %rsp1205; CHECK-NEXT:    popq %rbx1206; CHECK-NEXT:    popq %r141207; CHECK-NEXT:    retq1208  %x = call <8 x i64> @llvm.fptoui.sat.v8i64.v8f16(<8 x half> %f)1209  ret <8 x i64> %x1210}1211 1212define <8 x i128> @test_unsigned_v8i128_v8f16(<8 x half> %f) nounwind {1213; CHECK-LABEL: test_unsigned_v8i128_v8f16:1214; CHECK:       # %bb.0:1215; CHECK-NEXT:    pushq %rbp1216; CHECK-NEXT:    pushq %r151217; CHECK-NEXT:    pushq %r141218; CHECK-NEXT:    pushq %r131219; CHECK-NEXT:    pushq %r121220; CHECK-NEXT:    pushq %rbx1221; CHECK-NEXT:    subq $104, %rsp1222; CHECK-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1223; CHECK-NEXT:    movq %rdi, %rbx1224; CHECK-NEXT:    psrld $16, %xmm01225; CHECK-NEXT:    callq __extendhfsf2@PLT1226; CHECK-NEXT:    movd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1227; CHECK-NEXT:    callq __fixunssfti@PLT1228; CHECK-NEXT:    xorl %r12d, %r12d1229; CHECK-NEXT:    pxor %xmm0, %xmm01230; CHECK-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1231; CHECK-NEXT:    # xmm1 = mem[0],zero,zero,zero1232; CHECK-NEXT:    ucomiss %xmm0, %xmm11233; CHECK-NEXT:    cmovbq %r12, %rdx1234; CHECK-NEXT:    cmovbq %r12, %rax1235; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11236; CHECK-NEXT:    movq $-1, %r131237; CHECK-NEXT:    cmovaq %r13, %rax1238; CHECK-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1239; CHECK-NEXT:    cmovaq %r13, %rdx1240; CHECK-NEXT:    movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1241; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1242; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1243; CHECK-NEXT:    callq __extendhfsf2@PLT1244; CHECK-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1245; CHECK-NEXT:    callq __fixunssfti@PLT1246; CHECK-NEXT:    xorps %xmm0, %xmm01247; CHECK-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1248; CHECK-NEXT:    # xmm1 = mem[0],zero,zero,zero1249; CHECK-NEXT:    ucomiss %xmm0, %xmm11250; CHECK-NEXT:    cmovbq %r12, %rdx1251; CHECK-NEXT:    cmovbq %r12, %rax1252; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11253; CHECK-NEXT:    cmovaq %r13, %rax1254; CHECK-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1255; CHECK-NEXT:    cmovaq %r13, %rdx1256; CHECK-NEXT:    movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1257; CHECK-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1258; CHECK-NEXT:    psrlq $48, %xmm01259; CHECK-NEXT:    callq __extendhfsf2@PLT1260; CHECK-NEXT:    movd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1261; CHECK-NEXT:    callq __fixunssfti@PLT1262; CHECK-NEXT:    pxor %xmm0, %xmm01263; CHECK-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1264; CHECK-NEXT:    # xmm1 = mem[0],zero,zero,zero1265; CHECK-NEXT:    ucomiss %xmm0, %xmm11266; CHECK-NEXT:    cmovbq %r12, %rdx1267; CHECK-NEXT:    cmovbq %r12, %rax1268; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11269; CHECK-NEXT:    cmovaq %r13, %rax1270; CHECK-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1271; CHECK-NEXT:    cmovaq %r13, %rdx1272; CHECK-NEXT:    movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1273; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1274; CHECK-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1275; CHECK-NEXT:    callq __extendhfsf2@PLT1276; CHECK-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1277; CHECK-NEXT:    callq __fixunssfti@PLT1278; CHECK-NEXT:    xorps %xmm0, %xmm01279; CHECK-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1280; CHECK-NEXT:    # xmm1 = mem[0],zero,zero,zero1281; CHECK-NEXT:    ucomiss %xmm0, %xmm11282; CHECK-NEXT:    cmovbq %r12, %rdx1283; CHECK-NEXT:    cmovbq %r12, %rax1284; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11285; CHECK-NEXT:    cmovaq %r13, %rax1286; CHECK-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1287; CHECK-NEXT:    cmovaq %r13, %rdx1288; CHECK-NEXT:    movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1289; CHECK-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1290; CHECK-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1291; CHECK-NEXT:    callq __extendhfsf2@PLT1292; CHECK-NEXT:    movd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1293; CHECK-NEXT:    callq __fixunssfti@PLT1294; CHECK-NEXT:    movq %rdx, %rbp1295; CHECK-NEXT:    pxor %xmm0, %xmm01296; CHECK-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1297; CHECK-NEXT:    # xmm1 = mem[0],zero,zero,zero1298; CHECK-NEXT:    ucomiss %xmm0, %xmm11299; CHECK-NEXT:    cmovbq %r12, %rbp1300; CHECK-NEXT:    cmovbq %r12, %rax1301; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11302; CHECK-NEXT:    cmovaq %r13, %rax1303; CHECK-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1304; CHECK-NEXT:    cmovaq %r13, %rbp1305; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1306; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1307; CHECK-NEXT:    callq __extendhfsf2@PLT1308; CHECK-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1309; CHECK-NEXT:    callq __fixunssfti@PLT1310; CHECK-NEXT:    movq %rax, %r141311; CHECK-NEXT:    movq %rdx, %r151312; CHECK-NEXT:    xorps %xmm0, %xmm01313; CHECK-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1314; CHECK-NEXT:    # xmm1 = mem[0],zero,zero,zero1315; CHECK-NEXT:    ucomiss %xmm0, %xmm11316; CHECK-NEXT:    cmovbq %r12, %r151317; CHECK-NEXT:    cmovbq %r12, %r141318; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11319; CHECK-NEXT:    cmovaq %r13, %r141320; CHECK-NEXT:    cmovaq %r13, %r151321; CHECK-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1322; CHECK-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1323; CHECK-NEXT:    callq __extendhfsf2@PLT1324; CHECK-NEXT:    movd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1325; CHECK-NEXT:    callq __fixunssfti@PLT1326; CHECK-NEXT:    movq %rax, %r121327; CHECK-NEXT:    movq %rdx, %r131328; CHECK-NEXT:    pxor %xmm0, %xmm01329; CHECK-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1330; CHECK-NEXT:    # xmm1 = mem[0],zero,zero,zero1331; CHECK-NEXT:    ucomiss %xmm0, %xmm11332; CHECK-NEXT:    movl $0, %eax1333; CHECK-NEXT:    cmovbq %rax, %r131334; CHECK-NEXT:    cmovbq %rax, %r121335; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11336; CHECK-NEXT:    movq $-1, %rax1337; CHECK-NEXT:    cmovaq %rax, %r121338; CHECK-NEXT:    cmovaq %rax, %r131339; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1340; CHECK-NEXT:    callq __extendhfsf2@PLT1341; CHECK-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1342; CHECK-NEXT:    callq __fixunssfti@PLT1343; CHECK-NEXT:    xorps %xmm0, %xmm01344; CHECK-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1345; CHECK-NEXT:    # xmm1 = mem[0],zero,zero,zero1346; CHECK-NEXT:    ucomiss %xmm0, %xmm11347; CHECK-NEXT:    movl $0, %ecx1348; CHECK-NEXT:    cmovbq %rcx, %rdx1349; CHECK-NEXT:    cmovbq %rcx, %rax1350; CHECK-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11351; CHECK-NEXT:    movq $-1, %rcx1352; CHECK-NEXT:    cmovaq %rcx, %rax1353; CHECK-NEXT:    cmovaq %rcx, %rdx1354; CHECK-NEXT:    movq %rdx, 8(%rbx)1355; CHECK-NEXT:    movq %rax, (%rbx)1356; CHECK-NEXT:    movq %r13, 120(%rbx)1357; CHECK-NEXT:    movq %r12, 112(%rbx)1358; CHECK-NEXT:    movq %r15, 104(%rbx)1359; CHECK-NEXT:    movq %r14, 96(%rbx)1360; CHECK-NEXT:    movq %rbp, 88(%rbx)1361; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1362; CHECK-NEXT:    movq %rax, 80(%rbx)1363; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1364; CHECK-NEXT:    movq %rax, 72(%rbx)1365; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1366; CHECK-NEXT:    movq %rax, 64(%rbx)1367; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1368; CHECK-NEXT:    movq %rax, 56(%rbx)1369; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1370; CHECK-NEXT:    movq %rax, 48(%rbx)1371; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1372; CHECK-NEXT:    movq %rax, 40(%rbx)1373; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1374; CHECK-NEXT:    movq %rax, 32(%rbx)1375; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1376; CHECK-NEXT:    movq %rax, 24(%rbx)1377; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1378; CHECK-NEXT:    movq %rax, 16(%rbx)1379; CHECK-NEXT:    movq %rbx, %rax1380; CHECK-NEXT:    addq $104, %rsp1381; CHECK-NEXT:    popq %rbx1382; CHECK-NEXT:    popq %r121383; CHECK-NEXT:    popq %r131384; CHECK-NEXT:    popq %r141385; CHECK-NEXT:    popq %r151386; CHECK-NEXT:    popq %rbp1387; CHECK-NEXT:    retq1388  %x = call <8 x i128> @llvm.fptoui.sat.v8i128.v8f16(<8 x half> %f)1389  ret <8 x i128> %x1390}1391