brintos

brintos / llvm-project-archived public Read only

0
0
Text · 111.3 KiB · c44b3bb Raw
3171 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=wasm32-unknown-unknown -mattr=+simd128,+nontrapping-fptoint | FileCheck %s3 4; i32 saturate5 6define <2 x i32> @stest_f64i32(<2 x double> %x) {7; CHECK-LABEL: stest_f64i32:8; CHECK:         .functype stest_f64i32 (v128) -> (v128)9; CHECK-NEXT:    .local v12810; CHECK-NEXT:  # %bb.0: # %entry11; CHECK-NEXT:    local.get 012; CHECK-NEXT:    f64x2.extract_lane 013; CHECK-NEXT:    i64.trunc_sat_f64_s14; CHECK-NEXT:    i64x2.splat15; CHECK-NEXT:    local.get 016; CHECK-NEXT:    f64x2.extract_lane 117; CHECK-NEXT:    i64.trunc_sat_f64_s18; CHECK-NEXT:    i64x2.replace_lane 119; CHECK-NEXT:    local.tee 020; CHECK-NEXT:    v128.const 2147483647, 214748364721; CHECK-NEXT:    local.tee 122; CHECK-NEXT:    local.get 023; CHECK-NEXT:    local.get 124; CHECK-NEXT:    i64x2.lt_s25; CHECK-NEXT:    v128.bitselect26; CHECK-NEXT:    local.tee 027; CHECK-NEXT:    v128.const -2147483648, -214748364828; CHECK-NEXT:    local.tee 129; CHECK-NEXT:    local.get 030; CHECK-NEXT:    local.get 131; CHECK-NEXT:    i64x2.gt_s32; CHECK-NEXT:    v128.bitselect33; CHECK-NEXT:    local.get 034; CHECK-NEXT:    i8x16.shuffle 0, 1, 2, 3, 8, 9, 10, 11, 0, 1, 2, 3, 0, 1, 2, 335; CHECK-NEXT:    # fallthrough-return36entry:37  %conv = fptosi <2 x double> %x to <2 x i64>38  %0 = icmp slt <2 x i64> %conv, <i64 2147483647, i64 2147483647>39  %spec.store.select = select <2 x i1> %0, <2 x i64> %conv, <2 x i64> <i64 2147483647, i64 2147483647>40  %1 = icmp sgt <2 x i64> %spec.store.select, <i64 -2147483648, i64 -2147483648>41  %spec.store.select7 = select <2 x i1> %1, <2 x i64> %spec.store.select, <2 x i64> <i64 -2147483648, i64 -2147483648>42  %conv6 = trunc <2 x i64> %spec.store.select7 to <2 x i32>43  ret <2 x i32> %conv644}45 46define <2 x i32> @utest_f64i32(<2 x double> %x) {47; CHECK-LABEL: utest_f64i32:48; CHECK:         .functype utest_f64i32 (v128) -> (v128)49; CHECK-NEXT:    .local i64, i6450; CHECK-NEXT:  # %bb.0: # %entry51; CHECK-NEXT:    local.get 052; CHECK-NEXT:    f64x2.extract_lane 053; CHECK-NEXT:    i64.trunc_sat_f64_u54; CHECK-NEXT:    local.tee 155; CHECK-NEXT:    i64x2.splat56; CHECK-NEXT:    local.get 057; CHECK-NEXT:    f64x2.extract_lane 158; CHECK-NEXT:    i64.trunc_sat_f64_u59; CHECK-NEXT:    local.tee 260; CHECK-NEXT:    i64x2.replace_lane 161; CHECK-NEXT:    v128.const 4294967295, 429496729562; CHECK-NEXT:    i64.const -163; CHECK-NEXT:    i64.const 064; CHECK-NEXT:    local.get 165; CHECK-NEXT:    i64.const 429496729566; CHECK-NEXT:    i64.lt_u67; CHECK-NEXT:    i64.select68; CHECK-NEXT:    i64x2.splat69; CHECK-NEXT:    i64.const -170; CHECK-NEXT:    i64.const 071; CHECK-NEXT:    local.get 272; CHECK-NEXT:    i64.const 429496729573; CHECK-NEXT:    i64.lt_u74; CHECK-NEXT:    i64.select75; CHECK-NEXT:    i64x2.replace_lane 176; CHECK-NEXT:    v128.bitselect77; CHECK-NEXT:    local.get 078; CHECK-NEXT:    i8x16.shuffle 0, 1, 2, 3, 8, 9, 10, 11, 0, 1, 2, 3, 0, 1, 2, 379; CHECK-NEXT:    # fallthrough-return80entry:81  %conv = fptoui <2 x double> %x to <2 x i64>82  %0 = icmp ult <2 x i64> %conv, <i64 4294967295, i64 4294967295>83  %spec.store.select = select <2 x i1> %0, <2 x i64> %conv, <2 x i64> <i64 4294967295, i64 4294967295>84  %conv6 = trunc <2 x i64> %spec.store.select to <2 x i32>85  ret <2 x i32> %conv686}87 88define <2 x i32> @ustest_f64i32(<2 x double> %x) {89; CHECK-LABEL: ustest_f64i32:90; CHECK:         .functype ustest_f64i32 (v128) -> (v128)91; CHECK-NEXT:    .local v12892; CHECK-NEXT:  # %bb.0: # %entry93; CHECK-NEXT:    local.get 094; CHECK-NEXT:    f64x2.extract_lane 095; CHECK-NEXT:    i64.trunc_sat_f64_s96; CHECK-NEXT:    i64x2.splat97; CHECK-NEXT:    local.get 098; CHECK-NEXT:    f64x2.extract_lane 199; CHECK-NEXT:    i64.trunc_sat_f64_s100; CHECK-NEXT:    i64x2.replace_lane 1101; CHECK-NEXT:    local.tee 0102; CHECK-NEXT:    v128.const 4294967295, 4294967295103; CHECK-NEXT:    local.tee 1104; CHECK-NEXT:    local.get 0105; CHECK-NEXT:    local.get 1106; CHECK-NEXT:    i64x2.lt_s107; CHECK-NEXT:    v128.bitselect108; CHECK-NEXT:    local.tee 0109; CHECK-NEXT:    v128.const 0, 0110; CHECK-NEXT:    i64x2.gt_s111; CHECK-NEXT:    local.get 0112; CHECK-NEXT:    v128.and113; CHECK-NEXT:    local.get 0114; CHECK-NEXT:    i8x16.shuffle 0, 1, 2, 3, 8, 9, 10, 11, 0, 1, 2, 3, 0, 1, 2, 3115; CHECK-NEXT:    # fallthrough-return116entry:117  %conv = fptosi <2 x double> %x to <2 x i64>118  %0 = icmp slt <2 x i64> %conv, <i64 4294967295, i64 4294967295>119  %spec.store.select = select <2 x i1> %0, <2 x i64> %conv, <2 x i64> <i64 4294967295, i64 4294967295>120  %1 = icmp sgt <2 x i64> %spec.store.select, zeroinitializer121  %spec.store.select7 = select <2 x i1> %1, <2 x i64> %spec.store.select, <2 x i64> zeroinitializer122  %conv6 = trunc <2 x i64> %spec.store.select7 to <2 x i32>123  ret <2 x i32> %conv6124}125 126define <4 x i32> @stest_f32i32(<4 x float> %x) {127; CHECK-LABEL: stest_f32i32:128; CHECK:         .functype stest_f32i32 (v128) -> (v128)129; CHECK-NEXT:  # %bb.0: # %entry130; CHECK-NEXT:    local.get 0131; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s132; CHECK-NEXT:    # fallthrough-return133entry:134  %conv = fptosi <4 x float> %x to <4 x i64>135  %0 = icmp slt <4 x i64> %conv, <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>136  %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>137  %1 = icmp sgt <4 x i64> %spec.store.select, <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>138  %spec.store.select7 = select <4 x i1> %1, <4 x i64> %spec.store.select, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>139  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>140  ret <4 x i32> %conv6141}142 143define <4 x i32> @utest_f32i32(<4 x float> %x) {144; CHECK-LABEL: utest_f32i32:145; CHECK:         .functype utest_f32i32 (v128) -> (v128)146; CHECK-NEXT:  # %bb.0: # %entry147; CHECK-NEXT:    local.get 0148; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u149; CHECK-NEXT:    # fallthrough-return150entry:151  %conv = fptoui <4 x float> %x to <4 x i64>152  %0 = icmp ult <4 x i64> %conv, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>153  %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>154  %conv6 = trunc <4 x i64> %spec.store.select to <4 x i32>155  ret <4 x i32> %conv6156}157 158define <4 x i32> @ustest_f32i32(<4 x float> %x) {159; CHECK-LABEL: ustest_f32i32:160; CHECK:         .functype ustest_f32i32 (v128) -> (v128)161; CHECK-NEXT:  # %bb.0: # %entry162; CHECK-NEXT:    local.get 0163; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u164; CHECK-NEXT:    # fallthrough-return165entry:166  %conv = fptosi <4 x float> %x to <4 x i64>167  %0 = icmp slt <4 x i64> %conv, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>168  %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>169  %1 = icmp sgt <4 x i64> %spec.store.select, zeroinitializer170  %spec.store.select7 = select <4 x i1> %1, <4 x i64> %spec.store.select, <4 x i64> zeroinitializer171  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>172  ret <4 x i32> %conv6173}174 175define <4 x i32> @stest_f16i32(<4 x half> %x) {176; CHECK-LABEL: stest_f16i32:177; CHECK:         .functype stest_f16i32 (f32, f32, f32, f32) -> (v128)178; CHECK-NEXT:  # %bb.0: # %entry179; CHECK-NEXT:    local.get 1180; CHECK-NEXT:    call __truncsfhf2181; CHECK-NEXT:    call __extendhfsf2182; CHECK-NEXT:    local.set 1183; CHECK-NEXT:    local.get 0184; CHECK-NEXT:    call __truncsfhf2185; CHECK-NEXT:    call __extendhfsf2186; CHECK-NEXT:    i32.trunc_sat_f32_s187; CHECK-NEXT:    i32x4.splat188; CHECK-NEXT:    local.get 1189; CHECK-NEXT:    i32.trunc_sat_f32_s190; CHECK-NEXT:    i32x4.replace_lane 1191; CHECK-NEXT:    local.get 2192; CHECK-NEXT:    call __truncsfhf2193; CHECK-NEXT:    call __extendhfsf2194; CHECK-NEXT:    i32.trunc_sat_f32_s195; CHECK-NEXT:    i32x4.replace_lane 2196; CHECK-NEXT:    local.get 3197; CHECK-NEXT:    call __truncsfhf2198; CHECK-NEXT:    call __extendhfsf2199; CHECK-NEXT:    i32.trunc_sat_f32_s200; CHECK-NEXT:    i32x4.replace_lane 3201; CHECK-NEXT:    # fallthrough-return202entry:203  %conv = fptosi <4 x half> %x to <4 x i64>204  %0 = icmp slt <4 x i64> %conv, <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>205  %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>206  %1 = icmp sgt <4 x i64> %spec.store.select, <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>207  %spec.store.select7 = select <4 x i1> %1, <4 x i64> %spec.store.select, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>208  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>209  ret <4 x i32> %conv6210}211 212define <4 x i32> @utest_f16i32(<4 x half> %x) {213; CHECK-LABEL: utest_f16i32:214; CHECK:         .functype utest_f16i32 (f32, f32, f32, f32) -> (v128)215; CHECK-NEXT:  # %bb.0: # %entry216; CHECK-NEXT:    local.get 1217; CHECK-NEXT:    call __truncsfhf2218; CHECK-NEXT:    call __extendhfsf2219; CHECK-NEXT:    local.set 1220; CHECK-NEXT:    local.get 0221; CHECK-NEXT:    call __truncsfhf2222; CHECK-NEXT:    call __extendhfsf2223; CHECK-NEXT:    i32.trunc_sat_f32_u224; CHECK-NEXT:    i32x4.splat225; CHECK-NEXT:    local.get 1226; CHECK-NEXT:    i32.trunc_sat_f32_u227; CHECK-NEXT:    i32x4.replace_lane 1228; CHECK-NEXT:    local.get 2229; CHECK-NEXT:    call __truncsfhf2230; CHECK-NEXT:    call __extendhfsf2231; CHECK-NEXT:    i32.trunc_sat_f32_u232; CHECK-NEXT:    i32x4.replace_lane 2233; CHECK-NEXT:    local.get 3234; CHECK-NEXT:    call __truncsfhf2235; CHECK-NEXT:    call __extendhfsf2236; CHECK-NEXT:    i32.trunc_sat_f32_u237; CHECK-NEXT:    i32x4.replace_lane 3238; CHECK-NEXT:    # fallthrough-return239entry:240  %conv = fptoui <4 x half> %x to <4 x i64>241  %0 = icmp ult <4 x i64> %conv, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>242  %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>243  %conv6 = trunc <4 x i64> %spec.store.select to <4 x i32>244  ret <4 x i32> %conv6245}246 247define <4 x i32> @ustest_f16i32(<4 x half> %x) {248; CHECK-LABEL: ustest_f16i32:249; CHECK:         .functype ustest_f16i32 (f32, f32, f32, f32) -> (v128)250; CHECK-NEXT:  # %bb.0: # %entry251; CHECK-NEXT:    local.get 1252; CHECK-NEXT:    call __truncsfhf2253; CHECK-NEXT:    call __extendhfsf2254; CHECK-NEXT:    local.set 1255; CHECK-NEXT:    local.get 0256; CHECK-NEXT:    call __truncsfhf2257; CHECK-NEXT:    call __extendhfsf2258; CHECK-NEXT:    i32.trunc_sat_f32_u259; CHECK-NEXT:    i32x4.splat260; CHECK-NEXT:    local.get 1261; CHECK-NEXT:    i32.trunc_sat_f32_u262; CHECK-NEXT:    i32x4.replace_lane 1263; CHECK-NEXT:    local.get 2264; CHECK-NEXT:    call __truncsfhf2265; CHECK-NEXT:    call __extendhfsf2266; CHECK-NEXT:    i32.trunc_sat_f32_u267; CHECK-NEXT:    i32x4.replace_lane 2268; CHECK-NEXT:    local.get 3269; CHECK-NEXT:    call __truncsfhf2270; CHECK-NEXT:    call __extendhfsf2271; CHECK-NEXT:    i32.trunc_sat_f32_u272; CHECK-NEXT:    i32x4.replace_lane 3273; CHECK-NEXT:    # fallthrough-return274entry:275  %conv = fptosi <4 x half> %x to <4 x i64>276  %0 = icmp slt <4 x i64> %conv, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>277  %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>278  %1 = icmp sgt <4 x i64> %spec.store.select, zeroinitializer279  %spec.store.select7 = select <4 x i1> %1, <4 x i64> %spec.store.select, <4 x i64> zeroinitializer280  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>281  ret <4 x i32> %conv6282}283 284; i16 saturate285 286define <2 x i16> @stest_f64i16(<2 x double> %x) {287; CHECK-LABEL: stest_f64i16:288; CHECK:         .functype stest_f64i16 (v128) -> (v128)289; CHECK-NEXT:  # %bb.0: # %entry290; CHECK-NEXT:    local.get 0291; CHECK-NEXT:    f64x2.extract_lane 0292; CHECK-NEXT:    i32.trunc_sat_f64_s293; CHECK-NEXT:    i32x4.splat294; CHECK-NEXT:    local.get 0295; CHECK-NEXT:    f64x2.extract_lane 1296; CHECK-NEXT:    i32.trunc_sat_f64_s297; CHECK-NEXT:    i32x4.replace_lane 1298; CHECK-NEXT:    v128.const 32767, 32767, 32767, 32767299; CHECK-NEXT:    i32x4.min_s300; CHECK-NEXT:    v128.const -32768, -32768, -32768, -32768301; CHECK-NEXT:    i32x4.max_s302; CHECK-NEXT:    local.get 0303; CHECK-NEXT:    i8x16.shuffle 0, 1, 4, 5, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1304; CHECK-NEXT:    # fallthrough-return305entry:306  %conv = fptosi <2 x double> %x to <2 x i32>307  %0 = icmp slt <2 x i32> %conv, <i32 32767, i32 32767>308  %spec.store.select = select <2 x i1> %0, <2 x i32> %conv, <2 x i32> <i32 32767, i32 32767>309  %1 = icmp sgt <2 x i32> %spec.store.select, <i32 -32768, i32 -32768>310  %spec.store.select7 = select <2 x i1> %1, <2 x i32> %spec.store.select, <2 x i32> <i32 -32768, i32 -32768>311  %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i16>312  ret <2 x i16> %conv6313}314 315define <2 x i16> @utest_f64i16(<2 x double> %x) {316; CHECK-LABEL: utest_f64i16:317; CHECK:         .functype utest_f64i16 (v128) -> (v128)318; CHECK-NEXT:  # %bb.0: # %entry319; CHECK-NEXT:    local.get 0320; CHECK-NEXT:    f64x2.extract_lane 0321; CHECK-NEXT:    i32.trunc_sat_f64_u322; CHECK-NEXT:    i32x4.splat323; CHECK-NEXT:    local.get 0324; CHECK-NEXT:    f64x2.extract_lane 1325; CHECK-NEXT:    i32.trunc_sat_f64_u326; CHECK-NEXT:    i32x4.replace_lane 1327; CHECK-NEXT:    v128.const 65535, 65535, 65535, 65535328; CHECK-NEXT:    i32x4.min_u329; CHECK-NEXT:    local.get 0330; CHECK-NEXT:    i8x16.shuffle 0, 1, 4, 5, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1331; CHECK-NEXT:    # fallthrough-return332entry:333  %conv = fptoui <2 x double> %x to <2 x i32>334  %0 = icmp ult <2 x i32> %conv, <i32 65535, i32 65535>335  %spec.store.select = select <2 x i1> %0, <2 x i32> %conv, <2 x i32> <i32 65535, i32 65535>336  %conv6 = trunc <2 x i32> %spec.store.select to <2 x i16>337  ret <2 x i16> %conv6338}339 340define <2 x i16> @ustest_f64i16(<2 x double> %x) {341; CHECK-LABEL: ustest_f64i16:342; CHECK:         .functype ustest_f64i16 (v128) -> (v128)343; CHECK-NEXT:  # %bb.0: # %entry344; CHECK-NEXT:    local.get 0345; CHECK-NEXT:    f64x2.extract_lane 0346; CHECK-NEXT:    i32.trunc_sat_f64_s347; CHECK-NEXT:    i32x4.splat348; CHECK-NEXT:    local.get 0349; CHECK-NEXT:    f64x2.extract_lane 1350; CHECK-NEXT:    i32.trunc_sat_f64_s351; CHECK-NEXT:    i32x4.replace_lane 1352; CHECK-NEXT:    v128.const 65535, 65535, 65535, 65535353; CHECK-NEXT:    i32x4.min_s354; CHECK-NEXT:    v128.const 0, 0, 0, 0355; CHECK-NEXT:    i32x4.max_s356; CHECK-NEXT:    local.get 0357; CHECK-NEXT:    i8x16.shuffle 0, 1, 4, 5, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1358; CHECK-NEXT:    # fallthrough-return359entry:360  %conv = fptosi <2 x double> %x to <2 x i32>361  %0 = icmp slt <2 x i32> %conv, <i32 65535, i32 65535>362  %spec.store.select = select <2 x i1> %0, <2 x i32> %conv, <2 x i32> <i32 65535, i32 65535>363  %1 = icmp sgt <2 x i32> %spec.store.select, zeroinitializer364  %spec.store.select7 = select <2 x i1> %1, <2 x i32> %spec.store.select, <2 x i32> zeroinitializer365  %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i16>366  ret <2 x i16> %conv6367}368 369define <4 x i16> @stest_f32i16(<4 x float> %x) {370; CHECK-LABEL: stest_f32i16:371; CHECK:         .functype stest_f32i16 (v128) -> (v128)372; CHECK-NEXT:  # %bb.0: # %entry373; CHECK-NEXT:    local.get 0374; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s375; CHECK-NEXT:    v128.const 32767, 32767, 32767, 32767376; CHECK-NEXT:    i32x4.min_s377; CHECK-NEXT:    v128.const -32768, -32768, -32768, -32768378; CHECK-NEXT:    i32x4.max_s379; CHECK-NEXT:    local.get 0380; CHECK-NEXT:    i8x16.shuffle 0, 1, 4, 5, 8, 9, 12, 13, 0, 1, 0, 1, 0, 1, 0, 1381; CHECK-NEXT:    # fallthrough-return382entry:383  %conv = fptosi <4 x float> %x to <4 x i32>384  %0 = icmp slt <4 x i32> %conv, <i32 32767, i32 32767, i32 32767, i32 32767>385  %spec.store.select = select <4 x i1> %0, <4 x i32> %conv, <4 x i32> <i32 32767, i32 32767, i32 32767, i32 32767>386  %1 = icmp sgt <4 x i32> %spec.store.select, <i32 -32768, i32 -32768, i32 -32768, i32 -32768>387  %spec.store.select7 = select <4 x i1> %1, <4 x i32> %spec.store.select, <4 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768>388  %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i16>389  ret <4 x i16> %conv6390}391 392define <4 x i16> @utest_f32i16(<4 x float> %x) {393; CHECK-LABEL: utest_f32i16:394; CHECK:         .functype utest_f32i16 (v128) -> (v128)395; CHECK-NEXT:  # %bb.0: # %entry396; CHECK-NEXT:    local.get 0397; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u398; CHECK-NEXT:    v128.const 65535, 65535, 65535, 65535399; CHECK-NEXT:    i32x4.min_u400; CHECK-NEXT:    local.get 0401; CHECK-NEXT:    i8x16.shuffle 0, 1, 4, 5, 8, 9, 12, 13, 0, 1, 0, 1, 0, 1, 0, 1402; CHECK-NEXT:    # fallthrough-return403entry:404  %conv = fptoui <4 x float> %x to <4 x i32>405  %0 = icmp ult <4 x i32> %conv, <i32 65535, i32 65535, i32 65535, i32 65535>406  %spec.store.select = select <4 x i1> %0, <4 x i32> %conv, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>407  %conv6 = trunc <4 x i32> %spec.store.select to <4 x i16>408  ret <4 x i16> %conv6409}410 411define <4 x i16> @ustest_f32i16(<4 x float> %x) {412; CHECK-LABEL: ustest_f32i16:413; CHECK:         .functype ustest_f32i16 (v128) -> (v128)414; CHECK-NEXT:  # %bb.0: # %entry415; CHECK-NEXT:    local.get 0416; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s417; CHECK-NEXT:    v128.const 65535, 65535, 65535, 65535418; CHECK-NEXT:    i32x4.min_s419; CHECK-NEXT:    v128.const 0, 0, 0, 0420; CHECK-NEXT:    i32x4.max_s421; CHECK-NEXT:    local.get 0422; CHECK-NEXT:    i8x16.shuffle 0, 1, 4, 5, 8, 9, 12, 13, 0, 1, 0, 1, 0, 1, 0, 1423; CHECK-NEXT:    # fallthrough-return424entry:425  %conv = fptosi <4 x float> %x to <4 x i32>426  %0 = icmp slt <4 x i32> %conv, <i32 65535, i32 65535, i32 65535, i32 65535>427  %spec.store.select = select <4 x i1> %0, <4 x i32> %conv, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>428  %1 = icmp sgt <4 x i32> %spec.store.select, zeroinitializer429  %spec.store.select7 = select <4 x i1> %1, <4 x i32> %spec.store.select, <4 x i32> zeroinitializer430  %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i16>431  ret <4 x i16> %conv6432}433 434define <8 x i16> @stest_f16i16(<8 x half> %x) {435; CHECK-LABEL: stest_f16i16:436; CHECK:         .functype stest_f16i16 (f32, f32, f32, f32, f32, f32, f32, f32) -> (v128)437; CHECK-NEXT:  # %bb.0: # %entry438; CHECK-NEXT:    local.get 5439; CHECK-NEXT:    call __truncsfhf2440; CHECK-NEXT:    call __extendhfsf2441; CHECK-NEXT:    local.set 5442; CHECK-NEXT:    local.get 4443; CHECK-NEXT:    call __truncsfhf2444; CHECK-NEXT:    call __extendhfsf2445; CHECK-NEXT:    local.set 4446; CHECK-NEXT:    local.get 6447; CHECK-NEXT:    call __truncsfhf2448; CHECK-NEXT:    call __extendhfsf2449; CHECK-NEXT:    local.set 6450; CHECK-NEXT:    local.get 7451; CHECK-NEXT:    call __truncsfhf2452; CHECK-NEXT:    call __extendhfsf2453; CHECK-NEXT:    local.set 7454; CHECK-NEXT:    local.get 1455; CHECK-NEXT:    call __truncsfhf2456; CHECK-NEXT:    call __extendhfsf2457; CHECK-NEXT:    local.set 1458; CHECK-NEXT:    local.get 0459; CHECK-NEXT:    call __truncsfhf2460; CHECK-NEXT:    call __extendhfsf2461; CHECK-NEXT:    i32.trunc_sat_f32_s462; CHECK-NEXT:    i32x4.splat463; CHECK-NEXT:    local.get 1464; CHECK-NEXT:    i32.trunc_sat_f32_s465; CHECK-NEXT:    i32x4.replace_lane 1466; CHECK-NEXT:    local.get 2467; CHECK-NEXT:    call __truncsfhf2468; CHECK-NEXT:    call __extendhfsf2469; CHECK-NEXT:    i32.trunc_sat_f32_s470; CHECK-NEXT:    i32x4.replace_lane 2471; CHECK-NEXT:    local.get 3472; CHECK-NEXT:    call __truncsfhf2473; CHECK-NEXT:    call __extendhfsf2474; CHECK-NEXT:    i32.trunc_sat_f32_s475; CHECK-NEXT:    i32x4.replace_lane 3476; CHECK-NEXT:    local.get 4477; CHECK-NEXT:    i32.trunc_sat_f32_s478; CHECK-NEXT:    i32x4.splat479; CHECK-NEXT:    local.get 5480; CHECK-NEXT:    i32.trunc_sat_f32_s481; CHECK-NEXT:    i32x4.replace_lane 1482; CHECK-NEXT:    local.get 6483; CHECK-NEXT:    i32.trunc_sat_f32_s484; CHECK-NEXT:    i32x4.replace_lane 2485; CHECK-NEXT:    local.get 7486; CHECK-NEXT:    i32.trunc_sat_f32_s487; CHECK-NEXT:    i32x4.replace_lane 3488; CHECK-NEXT:    i16x8.narrow_i32x4_s489; CHECK-NEXT:    # fallthrough-return490entry:491  %conv = fptosi <8 x half> %x to <8 x i32>492  %0 = icmp slt <8 x i32> %conv, <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>493  %spec.store.select = select <8 x i1> %0, <8 x i32> %conv, <8 x i32> <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>494  %1 = icmp sgt <8 x i32> %spec.store.select, <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>495  %spec.store.select7 = select <8 x i1> %1, <8 x i32> %spec.store.select, <8 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>496  %conv6 = trunc <8 x i32> %spec.store.select7 to <8 x i16>497  ret <8 x i16> %conv6498}499 500define <8 x i16> @utest_f16i16(<8 x half> %x) {501; CHECK-LABEL: utest_f16i16:502; CHECK:         .functype utest_f16i16 (f32, f32, f32, f32, f32, f32, f32, f32) -> (v128)503; CHECK-NEXT:  # %bb.0: # %entry504; CHECK-NEXT:    local.get 5505; CHECK-NEXT:    call __truncsfhf2506; CHECK-NEXT:    call __extendhfsf2507; CHECK-NEXT:    local.set 5508; CHECK-NEXT:    local.get 4509; CHECK-NEXT:    call __truncsfhf2510; CHECK-NEXT:    call __extendhfsf2511; CHECK-NEXT:    local.set 4512; CHECK-NEXT:    local.get 6513; CHECK-NEXT:    call __truncsfhf2514; CHECK-NEXT:    call __extendhfsf2515; CHECK-NEXT:    local.set 6516; CHECK-NEXT:    local.get 7517; CHECK-NEXT:    call __truncsfhf2518; CHECK-NEXT:    call __extendhfsf2519; CHECK-NEXT:    local.set 7520; CHECK-NEXT:    local.get 1521; CHECK-NEXT:    call __truncsfhf2522; CHECK-NEXT:    call __extendhfsf2523; CHECK-NEXT:    local.set 1524; CHECK-NEXT:    local.get 0525; CHECK-NEXT:    call __truncsfhf2526; CHECK-NEXT:    call __extendhfsf2527; CHECK-NEXT:    i32.trunc_sat_f32_u528; CHECK-NEXT:    i32x4.splat529; CHECK-NEXT:    local.get 1530; CHECK-NEXT:    i32.trunc_sat_f32_u531; CHECK-NEXT:    i32x4.replace_lane 1532; CHECK-NEXT:    local.get 2533; CHECK-NEXT:    call __truncsfhf2534; CHECK-NEXT:    call __extendhfsf2535; CHECK-NEXT:    i32.trunc_sat_f32_u536; CHECK-NEXT:    i32x4.replace_lane 2537; CHECK-NEXT:    local.get 3538; CHECK-NEXT:    call __truncsfhf2539; CHECK-NEXT:    call __extendhfsf2540; CHECK-NEXT:    i32.trunc_sat_f32_u541; CHECK-NEXT:    i32x4.replace_lane 3542; CHECK-NEXT:    local.get 4543; CHECK-NEXT:    i32.trunc_sat_f32_u544; CHECK-NEXT:    i32x4.splat545; CHECK-NEXT:    local.get 5546; CHECK-NEXT:    i32.trunc_sat_f32_u547; CHECK-NEXT:    i32x4.replace_lane 1548; CHECK-NEXT:    local.get 6549; CHECK-NEXT:    i32.trunc_sat_f32_u550; CHECK-NEXT:    i32x4.replace_lane 2551; CHECK-NEXT:    local.get 7552; CHECK-NEXT:    i32.trunc_sat_f32_u553; CHECK-NEXT:    i32x4.replace_lane 3554; CHECK-NEXT:    i16x8.narrow_i32x4_u555; CHECK-NEXT:    # fallthrough-return556entry:557  %conv = fptoui <8 x half> %x to <8 x i32>558  %0 = icmp ult <8 x i32> %conv, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>559  %spec.store.select = select <8 x i1> %0, <8 x i32> %conv, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>560  %conv6 = trunc <8 x i32> %spec.store.select to <8 x i16>561  ret <8 x i16> %conv6562}563 564define <8 x i16> @ustest_f16i16(<8 x half> %x) {565; CHECK-LABEL: ustest_f16i16:566; CHECK:         .functype ustest_f16i16 (f32, f32, f32, f32, f32, f32, f32, f32) -> (v128)567; CHECK-NEXT:    .local v128, v128568; CHECK-NEXT:  # %bb.0: # %entry569; CHECK-NEXT:    local.get 5570; CHECK-NEXT:    call __truncsfhf2571; CHECK-NEXT:    call __extendhfsf2572; CHECK-NEXT:    local.set 5573; CHECK-NEXT:    local.get 4574; CHECK-NEXT:    call __truncsfhf2575; CHECK-NEXT:    call __extendhfsf2576; CHECK-NEXT:    local.set 4577; CHECK-NEXT:    local.get 6578; CHECK-NEXT:    call __truncsfhf2579; CHECK-NEXT:    call __extendhfsf2580; CHECK-NEXT:    local.set 6581; CHECK-NEXT:    local.get 7582; CHECK-NEXT:    call __truncsfhf2583; CHECK-NEXT:    call __extendhfsf2584; CHECK-NEXT:    local.set 7585; CHECK-NEXT:    local.get 1586; CHECK-NEXT:    call __truncsfhf2587; CHECK-NEXT:    call __extendhfsf2588; CHECK-NEXT:    local.set 1589; CHECK-NEXT:    local.get 0590; CHECK-NEXT:    call __truncsfhf2591; CHECK-NEXT:    call __extendhfsf2592; CHECK-NEXT:    i32.trunc_sat_f32_s593; CHECK-NEXT:    i32x4.splat594; CHECK-NEXT:    local.get 1595; CHECK-NEXT:    i32.trunc_sat_f32_s596; CHECK-NEXT:    i32x4.replace_lane 1597; CHECK-NEXT:    local.get 2598; CHECK-NEXT:    call __truncsfhf2599; CHECK-NEXT:    call __extendhfsf2600; CHECK-NEXT:    i32.trunc_sat_f32_s601; CHECK-NEXT:    i32x4.replace_lane 2602; CHECK-NEXT:    local.get 3603; CHECK-NEXT:    call __truncsfhf2604; CHECK-NEXT:    call __extendhfsf2605; CHECK-NEXT:    i32.trunc_sat_f32_s606; CHECK-NEXT:    i32x4.replace_lane 3607; CHECK-NEXT:    v128.const 65535, 65535, 65535, 65535608; CHECK-NEXT:    local.tee 8609; CHECK-NEXT:    i32x4.min_s610; CHECK-NEXT:    v128.const 0, 0, 0, 0611; CHECK-NEXT:    local.tee 9612; CHECK-NEXT:    i32x4.max_s613; CHECK-NEXT:    local.get 4614; CHECK-NEXT:    i32.trunc_sat_f32_s615; CHECK-NEXT:    i32x4.splat616; CHECK-NEXT:    local.get 5617; CHECK-NEXT:    i32.trunc_sat_f32_s618; CHECK-NEXT:    i32x4.replace_lane 1619; CHECK-NEXT:    local.get 6620; CHECK-NEXT:    i32.trunc_sat_f32_s621; CHECK-NEXT:    i32x4.replace_lane 2622; CHECK-NEXT:    local.get 7623; CHECK-NEXT:    i32.trunc_sat_f32_s624; CHECK-NEXT:    i32x4.replace_lane 3625; CHECK-NEXT:    local.get 8626; CHECK-NEXT:    i32x4.min_s627; CHECK-NEXT:    local.get 9628; CHECK-NEXT:    i32x4.max_s629; CHECK-NEXT:    i16x8.narrow_i32x4_u630; CHECK-NEXT:    # fallthrough-return631entry:632  %conv = fptosi <8 x half> %x to <8 x i32>633  %0 = icmp slt <8 x i32> %conv, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>634  %spec.store.select = select <8 x i1> %0, <8 x i32> %conv, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>635  %1 = icmp sgt <8 x i32> %spec.store.select, zeroinitializer636  %spec.store.select7 = select <8 x i1> %1, <8 x i32> %spec.store.select, <8 x i32> zeroinitializer637  %conv6 = trunc <8 x i32> %spec.store.select7 to <8 x i16>638  ret <8 x i16> %conv6639}640 641; i64 saturate642 643define <2 x i64> @stest_f64i64(<2 x double> %x) {644; CHECK-LABEL: stest_f64i64:645; CHECK:         .functype stest_f64i64 (v128) -> (v128)646; CHECK-NEXT:    .local i32, i64, i64, i64, i64647; CHECK-NEXT:  # %bb.0: # %entry648; CHECK-NEXT:    global.get __stack_pointer649; CHECK-NEXT:    i32.const 32650; CHECK-NEXT:    i32.sub651; CHECK-NEXT:    local.tee 1652; CHECK-NEXT:    global.set __stack_pointer653; CHECK-NEXT:    local.get 1654; CHECK-NEXT:    i32.const 16655; CHECK-NEXT:    i32.add656; CHECK-NEXT:    local.get 0657; CHECK-NEXT:    f64x2.extract_lane 1658; CHECK-NEXT:    call __fixdfti659; CHECK-NEXT:    local.get 1660; CHECK-NEXT:    local.get 0661; CHECK-NEXT:    f64x2.extract_lane 0662; CHECK-NEXT:    call __fixdfti663; CHECK-NEXT:    local.get 1664; CHECK-NEXT:    i64.load 24665; CHECK-NEXT:    local.set 2666; CHECK-NEXT:    local.get 1667; CHECK-NEXT:    i64.load 16668; CHECK-NEXT:    local.set 3669; CHECK-NEXT:    local.get 1670; CHECK-NEXT:    i64.load 8671; CHECK-NEXT:    local.set 4672; CHECK-NEXT:    local.get 1673; CHECK-NEXT:    i64.load 0674; CHECK-NEXT:    local.set 5675; CHECK-NEXT:    local.get 1676; CHECK-NEXT:    i32.const 32677; CHECK-NEXT:    i32.add678; CHECK-NEXT:    global.set __stack_pointer679; CHECK-NEXT:    local.get 5680; CHECK-NEXT:    i64.const 9223372036854775807681; CHECK-NEXT:    local.get 5682; CHECK-NEXT:    i64.const 9223372036854775807683; CHECK-NEXT:    i64.lt_u684; CHECK-NEXT:    local.get 4685; CHECK-NEXT:    i64.const 0686; CHECK-NEXT:    i64.lt_s687; CHECK-NEXT:    local.get 4688; CHECK-NEXT:    i64.eqz689; CHECK-NEXT:    i32.select690; CHECK-NEXT:    local.tee 1691; CHECK-NEXT:    i64.select692; CHECK-NEXT:    local.tee 5693; CHECK-NEXT:    i64.const -9223372036854775808694; CHECK-NEXT:    local.get 5695; CHECK-NEXT:    i64.const -9223372036854775808696; CHECK-NEXT:    i64.gt_u697; CHECK-NEXT:    local.get 4698; CHECK-NEXT:    i64.const 0699; CHECK-NEXT:    local.get 1700; CHECK-NEXT:    i64.select701; CHECK-NEXT:    local.tee 4702; CHECK-NEXT:    i64.const -1703; CHECK-NEXT:    i64.gt_s704; CHECK-NEXT:    local.get 4705; CHECK-NEXT:    i64.const -1706; CHECK-NEXT:    i64.eq707; CHECK-NEXT:    i32.select708; CHECK-NEXT:    i64.select709; CHECK-NEXT:    i64x2.splat710; CHECK-NEXT:    local.get 3711; CHECK-NEXT:    i64.const 9223372036854775807712; CHECK-NEXT:    local.get 3713; CHECK-NEXT:    i64.const 9223372036854775807714; CHECK-NEXT:    i64.lt_u715; CHECK-NEXT:    local.get 2716; CHECK-NEXT:    i64.const 0717; CHECK-NEXT:    i64.lt_s718; CHECK-NEXT:    local.get 2719; CHECK-NEXT:    i64.eqz720; CHECK-NEXT:    i32.select721; CHECK-NEXT:    local.tee 1722; CHECK-NEXT:    i64.select723; CHECK-NEXT:    local.tee 4724; CHECK-NEXT:    i64.const -9223372036854775808725; CHECK-NEXT:    local.get 4726; CHECK-NEXT:    i64.const -9223372036854775808727; CHECK-NEXT:    i64.gt_u728; CHECK-NEXT:    local.get 2729; CHECK-NEXT:    i64.const 0730; CHECK-NEXT:    local.get 1731; CHECK-NEXT:    i64.select732; CHECK-NEXT:    local.tee 2733; CHECK-NEXT:    i64.const -1734; CHECK-NEXT:    i64.gt_s735; CHECK-NEXT:    local.get 2736; CHECK-NEXT:    i64.const -1737; CHECK-NEXT:    i64.eq738; CHECK-NEXT:    i32.select739; CHECK-NEXT:    i64.select740; CHECK-NEXT:    i64x2.replace_lane 1741; CHECK-NEXT:    # fallthrough-return742entry:743  %conv = fptosi <2 x double> %x to <2 x i128>744  %0 = icmp slt <2 x i128> %conv, <i128 9223372036854775807, i128 9223372036854775807>745  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>746  %1 = icmp sgt <2 x i128> %spec.store.select, <i128 -9223372036854775808, i128 -9223372036854775808>747  %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>748  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>749  ret <2 x i64> %conv6750}751 752define <2 x i64> @utest_f64i64(<2 x double> %x) {753; CHECK-LABEL: utest_f64i64:754; CHECK:         .functype utest_f64i64 (v128) -> (v128)755; CHECK-NEXT:    .local i32, i64, i64, i64, i64756; CHECK-NEXT:  # %bb.0: # %entry757; CHECK-NEXT:    global.get __stack_pointer758; CHECK-NEXT:    i32.const 32759; CHECK-NEXT:    i32.sub760; CHECK-NEXT:    local.tee 1761; CHECK-NEXT:    global.set __stack_pointer762; CHECK-NEXT:    local.get 1763; CHECK-NEXT:    i32.const 16764; CHECK-NEXT:    i32.add765; CHECK-NEXT:    local.get 0766; CHECK-NEXT:    f64x2.extract_lane 1767; CHECK-NEXT:    call __fixunsdfti768; CHECK-NEXT:    local.get 1769; CHECK-NEXT:    local.get 0770; CHECK-NEXT:    f64x2.extract_lane 0771; CHECK-NEXT:    call __fixunsdfti772; CHECK-NEXT:    local.get 1773; CHECK-NEXT:    i64.load 24774; CHECK-NEXT:    local.set 2775; CHECK-NEXT:    local.get 1776; CHECK-NEXT:    i64.load 16777; CHECK-NEXT:    local.set 3778; CHECK-NEXT:    local.get 1779; CHECK-NEXT:    i64.load 8780; CHECK-NEXT:    local.set 4781; CHECK-NEXT:    local.get 1782; CHECK-NEXT:    i64.load 0783; CHECK-NEXT:    local.set 5784; CHECK-NEXT:    local.get 1785; CHECK-NEXT:    i32.const 32786; CHECK-NEXT:    i32.add787; CHECK-NEXT:    global.set __stack_pointer788; CHECK-NEXT:    local.get 5789; CHECK-NEXT:    i64.const 0790; CHECK-NEXT:    local.get 4791; CHECK-NEXT:    i64.eqz792; CHECK-NEXT:    i64.select793; CHECK-NEXT:    i64x2.splat794; CHECK-NEXT:    local.get 3795; CHECK-NEXT:    i64.const 0796; CHECK-NEXT:    local.get 2797; CHECK-NEXT:    i64.eqz798; CHECK-NEXT:    i64.select799; CHECK-NEXT:    i64x2.replace_lane 1800; CHECK-NEXT:    # fallthrough-return801entry:802  %conv = fptoui <2 x double> %x to <2 x i128>803  %0 = icmp ult <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>804  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>805  %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>806  ret <2 x i64> %conv6807}808 809define <2 x i64> @ustest_f64i64(<2 x double> %x) {810; CHECK-LABEL: ustest_f64i64:811; CHECK:         .functype ustest_f64i64 (v128) -> (v128)812; CHECK-NEXT:    .local i32, i64, i64, i64, i64813; CHECK-NEXT:  # %bb.0: # %entry814; CHECK-NEXT:    global.get __stack_pointer815; CHECK-NEXT:    i32.const 32816; CHECK-NEXT:    i32.sub817; CHECK-NEXT:    local.tee 1818; CHECK-NEXT:    global.set __stack_pointer819; CHECK-NEXT:    local.get 1820; CHECK-NEXT:    i32.const 16821; CHECK-NEXT:    i32.add822; CHECK-NEXT:    local.get 0823; CHECK-NEXT:    f64x2.extract_lane 1824; CHECK-NEXT:    call __fixdfti825; CHECK-NEXT:    local.get 1826; CHECK-NEXT:    local.get 0827; CHECK-NEXT:    f64x2.extract_lane 0828; CHECK-NEXT:    call __fixdfti829; CHECK-NEXT:    local.get 1830; CHECK-NEXT:    i64.load 24831; CHECK-NEXT:    local.set 2832; CHECK-NEXT:    local.get 1833; CHECK-NEXT:    i64.load 16834; CHECK-NEXT:    local.set 3835; CHECK-NEXT:    local.get 1836; CHECK-NEXT:    i64.load 8837; CHECK-NEXT:    local.set 4838; CHECK-NEXT:    local.get 1839; CHECK-NEXT:    i64.load 0840; CHECK-NEXT:    local.set 5841; CHECK-NEXT:    local.get 1842; CHECK-NEXT:    i32.const 32843; CHECK-NEXT:    i32.add844; CHECK-NEXT:    global.set __stack_pointer845; CHECK-NEXT:    local.get 5846; CHECK-NEXT:    i64.const 0847; CHECK-NEXT:    local.get 4848; CHECK-NEXT:    i64.const 1849; CHECK-NEXT:    i64.lt_s850; CHECK-NEXT:    local.tee 1851; CHECK-NEXT:    i64.select852; CHECK-NEXT:    local.tee 5853; CHECK-NEXT:    i64.const 0854; CHECK-NEXT:    local.get 5855; CHECK-NEXT:    i64.const 0856; CHECK-NEXT:    i64.ne857; CHECK-NEXT:    local.get 4858; CHECK-NEXT:    i64.const 1859; CHECK-NEXT:    local.get 1860; CHECK-NEXT:    i64.select861; CHECK-NEXT:    local.tee 4862; CHECK-NEXT:    i64.const 0863; CHECK-NEXT:    i64.gt_s864; CHECK-NEXT:    local.get 4865; CHECK-NEXT:    i64.eqz866; CHECK-NEXT:    i32.select867; CHECK-NEXT:    i64.select868; CHECK-NEXT:    i64x2.splat869; CHECK-NEXT:    local.get 3870; CHECK-NEXT:    i64.const 0871; CHECK-NEXT:    local.get 2872; CHECK-NEXT:    i64.const 1873; CHECK-NEXT:    i64.lt_s874; CHECK-NEXT:    local.tee 1875; CHECK-NEXT:    i64.select876; CHECK-NEXT:    local.tee 4877; CHECK-NEXT:    i64.const 0878; CHECK-NEXT:    local.get 4879; CHECK-NEXT:    i64.const 0880; CHECK-NEXT:    i64.ne881; CHECK-NEXT:    local.get 2882; CHECK-NEXT:    i64.const 1883; CHECK-NEXT:    local.get 1884; CHECK-NEXT:    i64.select885; CHECK-NEXT:    local.tee 2886; CHECK-NEXT:    i64.const 0887; CHECK-NEXT:    i64.gt_s888; CHECK-NEXT:    local.get 2889; CHECK-NEXT:    i64.eqz890; CHECK-NEXT:    i32.select891; CHECK-NEXT:    i64.select892; CHECK-NEXT:    i64x2.replace_lane 1893; CHECK-NEXT:    # fallthrough-return894entry:895  %conv = fptosi <2 x double> %x to <2 x i128>896  %0 = icmp slt <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>897  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>898  %1 = icmp sgt <2 x i128> %spec.store.select, zeroinitializer899  %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> zeroinitializer900  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>901  ret <2 x i64> %conv6902}903 904define <2 x i64> @stest_f32i64(<2 x float> %x) {905; CHECK-LABEL: stest_f32i64:906; CHECK:         .functype stest_f32i64 (v128) -> (v128)907; CHECK-NEXT:    .local i32, i64, i64, i64, i64908; CHECK-NEXT:  # %bb.0: # %entry909; CHECK-NEXT:    global.get __stack_pointer910; CHECK-NEXT:    i32.const 32911; CHECK-NEXT:    i32.sub912; CHECK-NEXT:    local.tee 1913; CHECK-NEXT:    global.set __stack_pointer914; CHECK-NEXT:    local.get 1915; CHECK-NEXT:    i32.const 16916; CHECK-NEXT:    i32.add917; CHECK-NEXT:    local.get 0918; CHECK-NEXT:    f32x4.extract_lane 1919; CHECK-NEXT:    call __fixsfti920; CHECK-NEXT:    local.get 1921; CHECK-NEXT:    local.get 0922; CHECK-NEXT:    f32x4.extract_lane 0923; CHECK-NEXT:    call __fixsfti924; CHECK-NEXT:    local.get 1925; CHECK-NEXT:    i64.load 24926; CHECK-NEXT:    local.set 2927; CHECK-NEXT:    local.get 1928; CHECK-NEXT:    i64.load 16929; CHECK-NEXT:    local.set 3930; CHECK-NEXT:    local.get 1931; CHECK-NEXT:    i64.load 8932; CHECK-NEXT:    local.set 4933; CHECK-NEXT:    local.get 1934; CHECK-NEXT:    i64.load 0935; CHECK-NEXT:    local.set 5936; CHECK-NEXT:    local.get 1937; CHECK-NEXT:    i32.const 32938; CHECK-NEXT:    i32.add939; CHECK-NEXT:    global.set __stack_pointer940; CHECK-NEXT:    local.get 5941; CHECK-NEXT:    i64.const 9223372036854775807942; CHECK-NEXT:    local.get 5943; CHECK-NEXT:    i64.const 9223372036854775807944; CHECK-NEXT:    i64.lt_u945; CHECK-NEXT:    local.get 4946; CHECK-NEXT:    i64.const 0947; CHECK-NEXT:    i64.lt_s948; CHECK-NEXT:    local.get 4949; CHECK-NEXT:    i64.eqz950; CHECK-NEXT:    i32.select951; CHECK-NEXT:    local.tee 1952; CHECK-NEXT:    i64.select953; CHECK-NEXT:    local.tee 5954; CHECK-NEXT:    i64.const -9223372036854775808955; CHECK-NEXT:    local.get 5956; CHECK-NEXT:    i64.const -9223372036854775808957; CHECK-NEXT:    i64.gt_u958; CHECK-NEXT:    local.get 4959; CHECK-NEXT:    i64.const 0960; CHECK-NEXT:    local.get 1961; CHECK-NEXT:    i64.select962; CHECK-NEXT:    local.tee 4963; CHECK-NEXT:    i64.const -1964; CHECK-NEXT:    i64.gt_s965; CHECK-NEXT:    local.get 4966; CHECK-NEXT:    i64.const -1967; CHECK-NEXT:    i64.eq968; CHECK-NEXT:    i32.select969; CHECK-NEXT:    i64.select970; CHECK-NEXT:    i64x2.splat971; CHECK-NEXT:    local.get 3972; CHECK-NEXT:    i64.const 9223372036854775807973; CHECK-NEXT:    local.get 3974; CHECK-NEXT:    i64.const 9223372036854775807975; CHECK-NEXT:    i64.lt_u976; CHECK-NEXT:    local.get 2977; CHECK-NEXT:    i64.const 0978; CHECK-NEXT:    i64.lt_s979; CHECK-NEXT:    local.get 2980; CHECK-NEXT:    i64.eqz981; CHECK-NEXT:    i32.select982; CHECK-NEXT:    local.tee 1983; CHECK-NEXT:    i64.select984; CHECK-NEXT:    local.tee 4985; CHECK-NEXT:    i64.const -9223372036854775808986; CHECK-NEXT:    local.get 4987; CHECK-NEXT:    i64.const -9223372036854775808988; CHECK-NEXT:    i64.gt_u989; CHECK-NEXT:    local.get 2990; CHECK-NEXT:    i64.const 0991; CHECK-NEXT:    local.get 1992; CHECK-NEXT:    i64.select993; CHECK-NEXT:    local.tee 2994; CHECK-NEXT:    i64.const -1995; CHECK-NEXT:    i64.gt_s996; CHECK-NEXT:    local.get 2997; CHECK-NEXT:    i64.const -1998; CHECK-NEXT:    i64.eq999; CHECK-NEXT:    i32.select1000; CHECK-NEXT:    i64.select1001; CHECK-NEXT:    i64x2.replace_lane 11002; CHECK-NEXT:    # fallthrough-return1003entry:1004  %conv = fptosi <2 x float> %x to <2 x i128>1005  %0 = icmp slt <2 x i128> %conv, <i128 9223372036854775807, i128 9223372036854775807>1006  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>1007  %1 = icmp sgt <2 x i128> %spec.store.select, <i128 -9223372036854775808, i128 -9223372036854775808>1008  %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>1009  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>1010  ret <2 x i64> %conv61011}1012 1013define <2 x i64> @utest_f32i64(<2 x float> %x) {1014; CHECK-LABEL: utest_f32i64:1015; CHECK:         .functype utest_f32i64 (v128) -> (v128)1016; CHECK-NEXT:    .local i32, i64, i64, i64, i641017; CHECK-NEXT:  # %bb.0: # %entry1018; CHECK-NEXT:    global.get __stack_pointer1019; CHECK-NEXT:    i32.const 321020; CHECK-NEXT:    i32.sub1021; CHECK-NEXT:    local.tee 11022; CHECK-NEXT:    global.set __stack_pointer1023; CHECK-NEXT:    local.get 11024; CHECK-NEXT:    i32.const 161025; CHECK-NEXT:    i32.add1026; CHECK-NEXT:    local.get 01027; CHECK-NEXT:    f32x4.extract_lane 11028; CHECK-NEXT:    call __fixunssfti1029; CHECK-NEXT:    local.get 11030; CHECK-NEXT:    local.get 01031; CHECK-NEXT:    f32x4.extract_lane 01032; CHECK-NEXT:    call __fixunssfti1033; CHECK-NEXT:    local.get 11034; CHECK-NEXT:    i64.load 241035; CHECK-NEXT:    local.set 21036; CHECK-NEXT:    local.get 11037; CHECK-NEXT:    i64.load 161038; CHECK-NEXT:    local.set 31039; CHECK-NEXT:    local.get 11040; CHECK-NEXT:    i64.load 81041; CHECK-NEXT:    local.set 41042; CHECK-NEXT:    local.get 11043; CHECK-NEXT:    i64.load 01044; CHECK-NEXT:    local.set 51045; CHECK-NEXT:    local.get 11046; CHECK-NEXT:    i32.const 321047; CHECK-NEXT:    i32.add1048; CHECK-NEXT:    global.set __stack_pointer1049; CHECK-NEXT:    local.get 51050; CHECK-NEXT:    i64.const 01051; CHECK-NEXT:    local.get 41052; CHECK-NEXT:    i64.eqz1053; CHECK-NEXT:    i64.select1054; CHECK-NEXT:    i64x2.splat1055; CHECK-NEXT:    local.get 31056; CHECK-NEXT:    i64.const 01057; CHECK-NEXT:    local.get 21058; CHECK-NEXT:    i64.eqz1059; CHECK-NEXT:    i64.select1060; CHECK-NEXT:    i64x2.replace_lane 11061; CHECK-NEXT:    # fallthrough-return1062entry:1063  %conv = fptoui <2 x float> %x to <2 x i128>1064  %0 = icmp ult <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>1065  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>1066  %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>1067  ret <2 x i64> %conv61068}1069 1070define <2 x i64> @ustest_f32i64(<2 x float> %x) {1071; CHECK-LABEL: ustest_f32i64:1072; CHECK:         .functype ustest_f32i64 (v128) -> (v128)1073; CHECK-NEXT:    .local i32, i64, i64, i64, i641074; CHECK-NEXT:  # %bb.0: # %entry1075; CHECK-NEXT:    global.get __stack_pointer1076; CHECK-NEXT:    i32.const 321077; CHECK-NEXT:    i32.sub1078; CHECK-NEXT:    local.tee 11079; CHECK-NEXT:    global.set __stack_pointer1080; CHECK-NEXT:    local.get 11081; CHECK-NEXT:    i32.const 161082; CHECK-NEXT:    i32.add1083; CHECK-NEXT:    local.get 01084; CHECK-NEXT:    f32x4.extract_lane 11085; CHECK-NEXT:    call __fixsfti1086; CHECK-NEXT:    local.get 11087; CHECK-NEXT:    local.get 01088; CHECK-NEXT:    f32x4.extract_lane 01089; CHECK-NEXT:    call __fixsfti1090; CHECK-NEXT:    local.get 11091; CHECK-NEXT:    i64.load 241092; CHECK-NEXT:    local.set 21093; CHECK-NEXT:    local.get 11094; CHECK-NEXT:    i64.load 161095; CHECK-NEXT:    local.set 31096; CHECK-NEXT:    local.get 11097; CHECK-NEXT:    i64.load 81098; CHECK-NEXT:    local.set 41099; CHECK-NEXT:    local.get 11100; CHECK-NEXT:    i64.load 01101; CHECK-NEXT:    local.set 51102; CHECK-NEXT:    local.get 11103; CHECK-NEXT:    i32.const 321104; CHECK-NEXT:    i32.add1105; CHECK-NEXT:    global.set __stack_pointer1106; CHECK-NEXT:    local.get 51107; CHECK-NEXT:    i64.const 01108; CHECK-NEXT:    local.get 41109; CHECK-NEXT:    i64.const 11110; CHECK-NEXT:    i64.lt_s1111; CHECK-NEXT:    local.tee 11112; CHECK-NEXT:    i64.select1113; CHECK-NEXT:    local.tee 51114; CHECK-NEXT:    i64.const 01115; CHECK-NEXT:    local.get 51116; CHECK-NEXT:    i64.const 01117; CHECK-NEXT:    i64.ne1118; CHECK-NEXT:    local.get 41119; CHECK-NEXT:    i64.const 11120; CHECK-NEXT:    local.get 11121; CHECK-NEXT:    i64.select1122; CHECK-NEXT:    local.tee 41123; CHECK-NEXT:    i64.const 01124; CHECK-NEXT:    i64.gt_s1125; CHECK-NEXT:    local.get 41126; CHECK-NEXT:    i64.eqz1127; CHECK-NEXT:    i32.select1128; CHECK-NEXT:    i64.select1129; CHECK-NEXT:    i64x2.splat1130; CHECK-NEXT:    local.get 31131; CHECK-NEXT:    i64.const 01132; CHECK-NEXT:    local.get 21133; CHECK-NEXT:    i64.const 11134; CHECK-NEXT:    i64.lt_s1135; CHECK-NEXT:    local.tee 11136; CHECK-NEXT:    i64.select1137; CHECK-NEXT:    local.tee 41138; CHECK-NEXT:    i64.const 01139; CHECK-NEXT:    local.get 41140; CHECK-NEXT:    i64.const 01141; CHECK-NEXT:    i64.ne1142; CHECK-NEXT:    local.get 21143; CHECK-NEXT:    i64.const 11144; CHECK-NEXT:    local.get 11145; CHECK-NEXT:    i64.select1146; CHECK-NEXT:    local.tee 21147; CHECK-NEXT:    i64.const 01148; CHECK-NEXT:    i64.gt_s1149; CHECK-NEXT:    local.get 21150; CHECK-NEXT:    i64.eqz1151; CHECK-NEXT:    i32.select1152; CHECK-NEXT:    i64.select1153; CHECK-NEXT:    i64x2.replace_lane 11154; CHECK-NEXT:    # fallthrough-return1155entry:1156  %conv = fptosi <2 x float> %x to <2 x i128>1157  %0 = icmp slt <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>1158  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>1159  %1 = icmp sgt <2 x i128> %spec.store.select, zeroinitializer1160  %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> zeroinitializer1161  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>1162  ret <2 x i64> %conv61163}1164 1165define <2 x i64> @stest_f16i64(<2 x half> %x) {1166; CHECK-LABEL: stest_f16i64:1167; CHECK:         .functype stest_f16i64 (f32, f32) -> (v128)1168; CHECK-NEXT:    .local i32, i64, i64, i64, i641169; CHECK-NEXT:  # %bb.0: # %entry1170; CHECK-NEXT:    global.get __stack_pointer1171; CHECK-NEXT:    i32.const 321172; CHECK-NEXT:    i32.sub1173; CHECK-NEXT:    local.tee 21174; CHECK-NEXT:    global.set __stack_pointer1175; CHECK-NEXT:    local.get 21176; CHECK-NEXT:    i32.const 161177; CHECK-NEXT:    i32.add1178; CHECK-NEXT:    local.get 11179; CHECK-NEXT:    call __truncsfhf21180; CHECK-NEXT:    call __extendhfsf21181; CHECK-NEXT:    call __fixsfti1182; CHECK-NEXT:    local.get 21183; CHECK-NEXT:    local.get 01184; CHECK-NEXT:    call __truncsfhf21185; CHECK-NEXT:    call __extendhfsf21186; CHECK-NEXT:    call __fixsfti1187; CHECK-NEXT:    local.get 21188; CHECK-NEXT:    i64.load 241189; CHECK-NEXT:    local.set 31190; CHECK-NEXT:    local.get 21191; CHECK-NEXT:    i64.load 161192; CHECK-NEXT:    local.set 41193; CHECK-NEXT:    local.get 21194; CHECK-NEXT:    i64.load 81195; CHECK-NEXT:    local.set 51196; CHECK-NEXT:    local.get 21197; CHECK-NEXT:    i64.load 01198; CHECK-NEXT:    local.set 61199; CHECK-NEXT:    local.get 21200; CHECK-NEXT:    i32.const 321201; CHECK-NEXT:    i32.add1202; CHECK-NEXT:    global.set __stack_pointer1203; CHECK-NEXT:    local.get 61204; CHECK-NEXT:    i64.const 92233720368547758071205; CHECK-NEXT:    local.get 61206; CHECK-NEXT:    i64.const 92233720368547758071207; CHECK-NEXT:    i64.lt_u1208; CHECK-NEXT:    local.get 51209; CHECK-NEXT:    i64.const 01210; CHECK-NEXT:    i64.lt_s1211; CHECK-NEXT:    local.get 51212; CHECK-NEXT:    i64.eqz1213; CHECK-NEXT:    i32.select1214; CHECK-NEXT:    local.tee 21215; CHECK-NEXT:    i64.select1216; CHECK-NEXT:    local.tee 61217; CHECK-NEXT:    i64.const -92233720368547758081218; CHECK-NEXT:    local.get 61219; CHECK-NEXT:    i64.const -92233720368547758081220; CHECK-NEXT:    i64.gt_u1221; CHECK-NEXT:    local.get 51222; CHECK-NEXT:    i64.const 01223; CHECK-NEXT:    local.get 21224; CHECK-NEXT:    i64.select1225; CHECK-NEXT:    local.tee 51226; CHECK-NEXT:    i64.const -11227; CHECK-NEXT:    i64.gt_s1228; CHECK-NEXT:    local.get 51229; CHECK-NEXT:    i64.const -11230; CHECK-NEXT:    i64.eq1231; CHECK-NEXT:    i32.select1232; CHECK-NEXT:    i64.select1233; CHECK-NEXT:    i64x2.splat1234; CHECK-NEXT:    local.get 41235; CHECK-NEXT:    i64.const 92233720368547758071236; CHECK-NEXT:    local.get 41237; CHECK-NEXT:    i64.const 92233720368547758071238; CHECK-NEXT:    i64.lt_u1239; CHECK-NEXT:    local.get 31240; CHECK-NEXT:    i64.const 01241; CHECK-NEXT:    i64.lt_s1242; CHECK-NEXT:    local.get 31243; CHECK-NEXT:    i64.eqz1244; CHECK-NEXT:    i32.select1245; CHECK-NEXT:    local.tee 21246; CHECK-NEXT:    i64.select1247; CHECK-NEXT:    local.tee 51248; CHECK-NEXT:    i64.const -92233720368547758081249; CHECK-NEXT:    local.get 51250; CHECK-NEXT:    i64.const -92233720368547758081251; CHECK-NEXT:    i64.gt_u1252; CHECK-NEXT:    local.get 31253; CHECK-NEXT:    i64.const 01254; CHECK-NEXT:    local.get 21255; CHECK-NEXT:    i64.select1256; CHECK-NEXT:    local.tee 31257; CHECK-NEXT:    i64.const -11258; CHECK-NEXT:    i64.gt_s1259; CHECK-NEXT:    local.get 31260; CHECK-NEXT:    i64.const -11261; CHECK-NEXT:    i64.eq1262; CHECK-NEXT:    i32.select1263; CHECK-NEXT:    i64.select1264; CHECK-NEXT:    i64x2.replace_lane 11265; CHECK-NEXT:    # fallthrough-return1266entry:1267  %conv = fptosi <2 x half> %x to <2 x i128>1268  %0 = icmp slt <2 x i128> %conv, <i128 9223372036854775807, i128 9223372036854775807>1269  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>1270  %1 = icmp sgt <2 x i128> %spec.store.select, <i128 -9223372036854775808, i128 -9223372036854775808>1271  %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>1272  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>1273  ret <2 x i64> %conv61274}1275 1276define <2 x i64> @utest_f16i64(<2 x half> %x) {1277; CHECK-LABEL: utest_f16i64:1278; CHECK:         .functype utest_f16i64 (f32, f32) -> (v128)1279; CHECK-NEXT:    .local i32, i64, i64, i64, i641280; CHECK-NEXT:  # %bb.0: # %entry1281; CHECK-NEXT:    global.get __stack_pointer1282; CHECK-NEXT:    i32.const 321283; CHECK-NEXT:    i32.sub1284; CHECK-NEXT:    local.tee 21285; CHECK-NEXT:    global.set __stack_pointer1286; CHECK-NEXT:    local.get 21287; CHECK-NEXT:    i32.const 161288; CHECK-NEXT:    i32.add1289; CHECK-NEXT:    local.get 11290; CHECK-NEXT:    call __truncsfhf21291; CHECK-NEXT:    call __extendhfsf21292; CHECK-NEXT:    call __fixunssfti1293; CHECK-NEXT:    local.get 21294; CHECK-NEXT:    local.get 01295; CHECK-NEXT:    call __truncsfhf21296; CHECK-NEXT:    call __extendhfsf21297; CHECK-NEXT:    call __fixunssfti1298; CHECK-NEXT:    local.get 21299; CHECK-NEXT:    i64.load 241300; CHECK-NEXT:    local.set 31301; CHECK-NEXT:    local.get 21302; CHECK-NEXT:    i64.load 161303; CHECK-NEXT:    local.set 41304; CHECK-NEXT:    local.get 21305; CHECK-NEXT:    i64.load 81306; CHECK-NEXT:    local.set 51307; CHECK-NEXT:    local.get 21308; CHECK-NEXT:    i64.load 01309; CHECK-NEXT:    local.set 61310; CHECK-NEXT:    local.get 21311; CHECK-NEXT:    i32.const 321312; CHECK-NEXT:    i32.add1313; CHECK-NEXT:    global.set __stack_pointer1314; CHECK-NEXT:    local.get 61315; CHECK-NEXT:    i64.const 01316; CHECK-NEXT:    local.get 51317; CHECK-NEXT:    i64.eqz1318; CHECK-NEXT:    i64.select1319; CHECK-NEXT:    i64x2.splat1320; CHECK-NEXT:    local.get 41321; CHECK-NEXT:    i64.const 01322; CHECK-NEXT:    local.get 31323; CHECK-NEXT:    i64.eqz1324; CHECK-NEXT:    i64.select1325; CHECK-NEXT:    i64x2.replace_lane 11326; CHECK-NEXT:    # fallthrough-return1327entry:1328  %conv = fptoui <2 x half> %x to <2 x i128>1329  %0 = icmp ult <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>1330  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>1331  %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>1332  ret <2 x i64> %conv61333}1334 1335define <2 x i64> @ustest_f16i64(<2 x half> %x) {1336; CHECK-LABEL: ustest_f16i64:1337; CHECK:         .functype ustest_f16i64 (f32, f32) -> (v128)1338; CHECK-NEXT:    .local i32, i64, i64, i64, i641339; CHECK-NEXT:  # %bb.0: # %entry1340; CHECK-NEXT:    global.get __stack_pointer1341; CHECK-NEXT:    i32.const 321342; CHECK-NEXT:    i32.sub1343; CHECK-NEXT:    local.tee 21344; CHECK-NEXT:    global.set __stack_pointer1345; CHECK-NEXT:    local.get 21346; CHECK-NEXT:    i32.const 161347; CHECK-NEXT:    i32.add1348; CHECK-NEXT:    local.get 11349; CHECK-NEXT:    call __truncsfhf21350; CHECK-NEXT:    call __extendhfsf21351; CHECK-NEXT:    call __fixsfti1352; CHECK-NEXT:    local.get 21353; CHECK-NEXT:    local.get 01354; CHECK-NEXT:    call __truncsfhf21355; CHECK-NEXT:    call __extendhfsf21356; CHECK-NEXT:    call __fixsfti1357; CHECK-NEXT:    local.get 21358; CHECK-NEXT:    i64.load 241359; CHECK-NEXT:    local.set 31360; CHECK-NEXT:    local.get 21361; CHECK-NEXT:    i64.load 161362; CHECK-NEXT:    local.set 41363; CHECK-NEXT:    local.get 21364; CHECK-NEXT:    i64.load 81365; CHECK-NEXT:    local.set 51366; CHECK-NEXT:    local.get 21367; CHECK-NEXT:    i64.load 01368; CHECK-NEXT:    local.set 61369; CHECK-NEXT:    local.get 21370; CHECK-NEXT:    i32.const 321371; CHECK-NEXT:    i32.add1372; CHECK-NEXT:    global.set __stack_pointer1373; CHECK-NEXT:    local.get 61374; CHECK-NEXT:    i64.const 01375; CHECK-NEXT:    local.get 51376; CHECK-NEXT:    i64.const 11377; CHECK-NEXT:    i64.lt_s1378; CHECK-NEXT:    local.tee 21379; CHECK-NEXT:    i64.select1380; CHECK-NEXT:    local.tee 61381; CHECK-NEXT:    i64.const 01382; CHECK-NEXT:    local.get 61383; CHECK-NEXT:    i64.const 01384; CHECK-NEXT:    i64.ne1385; CHECK-NEXT:    local.get 51386; CHECK-NEXT:    i64.const 11387; CHECK-NEXT:    local.get 21388; CHECK-NEXT:    i64.select1389; CHECK-NEXT:    local.tee 51390; CHECK-NEXT:    i64.const 01391; CHECK-NEXT:    i64.gt_s1392; CHECK-NEXT:    local.get 51393; CHECK-NEXT:    i64.eqz1394; CHECK-NEXT:    i32.select1395; CHECK-NEXT:    i64.select1396; CHECK-NEXT:    i64x2.splat1397; CHECK-NEXT:    local.get 41398; CHECK-NEXT:    i64.const 01399; CHECK-NEXT:    local.get 31400; CHECK-NEXT:    i64.const 11401; CHECK-NEXT:    i64.lt_s1402; CHECK-NEXT:    local.tee 21403; CHECK-NEXT:    i64.select1404; CHECK-NEXT:    local.tee 51405; CHECK-NEXT:    i64.const 01406; CHECK-NEXT:    local.get 51407; CHECK-NEXT:    i64.const 01408; CHECK-NEXT:    i64.ne1409; CHECK-NEXT:    local.get 31410; CHECK-NEXT:    i64.const 11411; CHECK-NEXT:    local.get 21412; CHECK-NEXT:    i64.select1413; CHECK-NEXT:    local.tee 31414; CHECK-NEXT:    i64.const 01415; CHECK-NEXT:    i64.gt_s1416; CHECK-NEXT:    local.get 31417; CHECK-NEXT:    i64.eqz1418; CHECK-NEXT:    i32.select1419; CHECK-NEXT:    i64.select1420; CHECK-NEXT:    i64x2.replace_lane 11421; CHECK-NEXT:    # fallthrough-return1422entry:1423  %conv = fptosi <2 x half> %x to <2 x i128>1424  %0 = icmp slt <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>1425  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>1426  %1 = icmp sgt <2 x i128> %spec.store.select, zeroinitializer1427  %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> zeroinitializer1428  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>1429  ret <2 x i64> %conv61430}1431 1432 1433 1434; i32 saturate1435 1436define <2 x i32> @stest_f64i32_mm(<2 x double> %x) {1437; CHECK-LABEL: stest_f64i32_mm:1438; CHECK:         .functype stest_f64i32_mm (v128) -> (v128)1439; CHECK-NEXT:    .local v1281440; CHECK-NEXT:  # %bb.0: # %entry1441; CHECK-NEXT:    local.get 01442; CHECK-NEXT:    f64x2.extract_lane 01443; CHECK-NEXT:    i64.trunc_sat_f64_s1444; CHECK-NEXT:    i64x2.splat1445; CHECK-NEXT:    local.get 01446; CHECK-NEXT:    f64x2.extract_lane 11447; CHECK-NEXT:    i64.trunc_sat_f64_s1448; CHECK-NEXT:    i64x2.replace_lane 11449; CHECK-NEXT:    local.tee 01450; CHECK-NEXT:    v128.const 2147483647, 21474836471451; CHECK-NEXT:    local.tee 11452; CHECK-NEXT:    local.get 01453; CHECK-NEXT:    local.get 11454; CHECK-NEXT:    i64x2.lt_s1455; CHECK-NEXT:    v128.bitselect1456; CHECK-NEXT:    local.tee 01457; CHECK-NEXT:    v128.const -2147483648, -21474836481458; CHECK-NEXT:    local.tee 11459; CHECK-NEXT:    local.get 01460; CHECK-NEXT:    local.get 11461; CHECK-NEXT:    i64x2.gt_s1462; CHECK-NEXT:    v128.bitselect1463; CHECK-NEXT:    local.get 01464; CHECK-NEXT:    i8x16.shuffle 0, 1, 2, 3, 8, 9, 10, 11, 0, 1, 2, 3, 0, 1, 2, 31465; CHECK-NEXT:    # fallthrough-return1466entry:1467  %conv = fptosi <2 x double> %x to <2 x i64>1468  %spec.store.select = call <2 x i64> @llvm.smin.v2i64(<2 x i64> %conv, <2 x i64> <i64 2147483647, i64 2147483647>)1469  %spec.store.select7 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %spec.store.select, <2 x i64> <i64 -2147483648, i64 -2147483648>)1470  %conv6 = trunc <2 x i64> %spec.store.select7 to <2 x i32>1471  ret <2 x i32> %conv61472}1473 1474define <2 x i32> @utest_f64i32_mm(<2 x double> %x) {1475; CHECK-LABEL: utest_f64i32_mm:1476; CHECK:         .functype utest_f64i32_mm (v128) -> (v128)1477; CHECK-NEXT:    .local i64, i641478; CHECK-NEXT:  # %bb.0: # %entry1479; CHECK-NEXT:    local.get 01480; CHECK-NEXT:    f64x2.extract_lane 01481; CHECK-NEXT:    i64.trunc_sat_f64_u1482; CHECK-NEXT:    local.tee 11483; CHECK-NEXT:    i64x2.splat1484; CHECK-NEXT:    local.get 01485; CHECK-NEXT:    f64x2.extract_lane 11486; CHECK-NEXT:    i64.trunc_sat_f64_u1487; CHECK-NEXT:    local.tee 21488; CHECK-NEXT:    i64x2.replace_lane 11489; CHECK-NEXT:    v128.const 4294967295, 42949672951490; CHECK-NEXT:    i64.const -11491; CHECK-NEXT:    i64.const 01492; CHECK-NEXT:    local.get 11493; CHECK-NEXT:    i64.const 42949672951494; CHECK-NEXT:    i64.lt_u1495; CHECK-NEXT:    i64.select1496; CHECK-NEXT:    i64x2.splat1497; CHECK-NEXT:    i64.const -11498; CHECK-NEXT:    i64.const 01499; CHECK-NEXT:    local.get 21500; CHECK-NEXT:    i64.const 42949672951501; CHECK-NEXT:    i64.lt_u1502; CHECK-NEXT:    i64.select1503; CHECK-NEXT:    i64x2.replace_lane 11504; CHECK-NEXT:    v128.bitselect1505; CHECK-NEXT:    local.get 01506; CHECK-NEXT:    i8x16.shuffle 0, 1, 2, 3, 8, 9, 10, 11, 0, 1, 2, 3, 0, 1, 2, 31507; CHECK-NEXT:    # fallthrough-return1508entry:1509  %conv = fptoui <2 x double> %x to <2 x i64>1510  %spec.store.select = call <2 x i64> @llvm.umin.v2i64(<2 x i64> %conv, <2 x i64> <i64 4294967295, i64 4294967295>)1511  %conv6 = trunc <2 x i64> %spec.store.select to <2 x i32>1512  ret <2 x i32> %conv61513}1514 1515define <2 x i32> @ustest_f64i32_mm(<2 x double> %x) {1516; CHECK-LABEL: ustest_f64i32_mm:1517; CHECK:         .functype ustest_f64i32_mm (v128) -> (v128)1518; CHECK-NEXT:    .local v1281519; CHECK-NEXT:  # %bb.0: # %entry1520; CHECK-NEXT:    local.get 01521; CHECK-NEXT:    f64x2.extract_lane 01522; CHECK-NEXT:    i64.trunc_sat_f64_s1523; CHECK-NEXT:    i64x2.splat1524; CHECK-NEXT:    local.get 01525; CHECK-NEXT:    f64x2.extract_lane 11526; CHECK-NEXT:    i64.trunc_sat_f64_s1527; CHECK-NEXT:    i64x2.replace_lane 11528; CHECK-NEXT:    local.tee 01529; CHECK-NEXT:    v128.const 4294967295, 42949672951530; CHECK-NEXT:    local.tee 11531; CHECK-NEXT:    local.get 01532; CHECK-NEXT:    local.get 11533; CHECK-NEXT:    i64x2.lt_s1534; CHECK-NEXT:    v128.bitselect1535; CHECK-NEXT:    local.tee 01536; CHECK-NEXT:    v128.const 0, 01537; CHECK-NEXT:    i64x2.gt_s1538; CHECK-NEXT:    local.get 01539; CHECK-NEXT:    v128.and1540; CHECK-NEXT:    local.get 01541; CHECK-NEXT:    i8x16.shuffle 0, 1, 2, 3, 8, 9, 10, 11, 0, 1, 2, 3, 0, 1, 2, 31542; CHECK-NEXT:    # fallthrough-return1543entry:1544  %conv = fptosi <2 x double> %x to <2 x i64>1545  %spec.store.select = call <2 x i64> @llvm.smin.v2i64(<2 x i64> %conv, <2 x i64> <i64 4294967295, i64 4294967295>)1546  %spec.store.select7 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %spec.store.select, <2 x i64> zeroinitializer)1547  %conv6 = trunc <2 x i64> %spec.store.select7 to <2 x i32>1548  ret <2 x i32> %conv61549}1550 1551define <4 x i32> @stest_f32i32_mm(<4 x float> %x) {1552; CHECK-LABEL: stest_f32i32_mm:1553; CHECK:         .functype stest_f32i32_mm (v128) -> (v128)1554; CHECK-NEXT:  # %bb.0: # %entry1555; CHECK-NEXT:    local.get 01556; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s1557; CHECK-NEXT:    # fallthrough-return1558entry:1559  %conv = fptosi <4 x float> %x to <4 x i64>1560  %spec.store.select = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %conv, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>)1561  %spec.store.select7 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %spec.store.select, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>)1562  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>1563  ret <4 x i32> %conv61564}1565 1566define <4 x i32> @utest_f32i32_mm(<4 x float> %x) {1567; CHECK-LABEL: utest_f32i32_mm:1568; CHECK:         .functype utest_f32i32_mm (v128) -> (v128)1569; CHECK-NEXT:  # %bb.0: # %entry1570; CHECK-NEXT:    local.get 01571; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u1572; CHECK-NEXT:    # fallthrough-return1573entry:1574  %conv = fptoui <4 x float> %x to <4 x i64>1575  %spec.store.select = call <4 x i64> @llvm.umin.v4i64(<4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>)1576  %conv6 = trunc <4 x i64> %spec.store.select to <4 x i32>1577  ret <4 x i32> %conv61578}1579 1580define <4 x i32> @ustest_f32i32_mm(<4 x float> %x) {1581; CHECK-LABEL: ustest_f32i32_mm:1582; CHECK:         .functype ustest_f32i32_mm (v128) -> (v128)1583; CHECK-NEXT:  # %bb.0: # %entry1584; CHECK-NEXT:    local.get 01585; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u1586; CHECK-NEXT:    # fallthrough-return1587entry:1588  %conv = fptosi <4 x float> %x to <4 x i64>1589  %spec.store.select = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>)1590  %spec.store.select7 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %spec.store.select, <4 x i64> zeroinitializer)1591  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>1592  ret <4 x i32> %conv61593}1594 1595define <4 x i32> @stest_f16i32_mm(<4 x half> %x) {1596; CHECK-LABEL: stest_f16i32_mm:1597; CHECK:         .functype stest_f16i32_mm (f32, f32, f32, f32) -> (v128)1598; CHECK-NEXT:  # %bb.0: # %entry1599; CHECK-NEXT:    local.get 11600; CHECK-NEXT:    call __truncsfhf21601; CHECK-NEXT:    call __extendhfsf21602; CHECK-NEXT:    local.set 11603; CHECK-NEXT:    local.get 01604; CHECK-NEXT:    call __truncsfhf21605; CHECK-NEXT:    call __extendhfsf21606; CHECK-NEXT:    i32.trunc_sat_f32_s1607; CHECK-NEXT:    i32x4.splat1608; CHECK-NEXT:    local.get 11609; CHECK-NEXT:    i32.trunc_sat_f32_s1610; CHECK-NEXT:    i32x4.replace_lane 11611; CHECK-NEXT:    local.get 21612; CHECK-NEXT:    call __truncsfhf21613; CHECK-NEXT:    call __extendhfsf21614; CHECK-NEXT:    i32.trunc_sat_f32_s1615; CHECK-NEXT:    i32x4.replace_lane 21616; CHECK-NEXT:    local.get 31617; CHECK-NEXT:    call __truncsfhf21618; CHECK-NEXT:    call __extendhfsf21619; CHECK-NEXT:    i32.trunc_sat_f32_s1620; CHECK-NEXT:    i32x4.replace_lane 31621; CHECK-NEXT:    # fallthrough-return1622entry:1623  %conv = fptosi <4 x half> %x to <4 x i64>1624  %spec.store.select = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %conv, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>)1625  %spec.store.select7 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %spec.store.select, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>)1626  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>1627  ret <4 x i32> %conv61628}1629 1630define <4 x i32> @utest_f16i32_mm(<4 x half> %x) {1631; CHECK-LABEL: utest_f16i32_mm:1632; CHECK:         .functype utest_f16i32_mm (f32, f32, f32, f32) -> (v128)1633; CHECK-NEXT:  # %bb.0: # %entry1634; CHECK-NEXT:    local.get 11635; CHECK-NEXT:    call __truncsfhf21636; CHECK-NEXT:    call __extendhfsf21637; CHECK-NEXT:    local.set 11638; CHECK-NEXT:    local.get 01639; CHECK-NEXT:    call __truncsfhf21640; CHECK-NEXT:    call __extendhfsf21641; CHECK-NEXT:    i32.trunc_sat_f32_u1642; CHECK-NEXT:    i32x4.splat1643; CHECK-NEXT:    local.get 11644; CHECK-NEXT:    i32.trunc_sat_f32_u1645; CHECK-NEXT:    i32x4.replace_lane 11646; CHECK-NEXT:    local.get 21647; CHECK-NEXT:    call __truncsfhf21648; CHECK-NEXT:    call __extendhfsf21649; CHECK-NEXT:    i32.trunc_sat_f32_u1650; CHECK-NEXT:    i32x4.replace_lane 21651; CHECK-NEXT:    local.get 31652; CHECK-NEXT:    call __truncsfhf21653; CHECK-NEXT:    call __extendhfsf21654; CHECK-NEXT:    i32.trunc_sat_f32_u1655; CHECK-NEXT:    i32x4.replace_lane 31656; CHECK-NEXT:    # fallthrough-return1657entry:1658  %conv = fptoui <4 x half> %x to <4 x i64>1659  %spec.store.select = call <4 x i64> @llvm.umin.v4i64(<4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>)1660  %conv6 = trunc <4 x i64> %spec.store.select to <4 x i32>1661  ret <4 x i32> %conv61662}1663 1664define <4 x i32> @ustest_f16i32_mm(<4 x half> %x) {1665; CHECK-LABEL: ustest_f16i32_mm:1666; CHECK:         .functype ustest_f16i32_mm (f32, f32, f32, f32) -> (v128)1667; CHECK-NEXT:  # %bb.0: # %entry1668; CHECK-NEXT:    local.get 11669; CHECK-NEXT:    call __truncsfhf21670; CHECK-NEXT:    call __extendhfsf21671; CHECK-NEXT:    local.set 11672; CHECK-NEXT:    local.get 01673; CHECK-NEXT:    call __truncsfhf21674; CHECK-NEXT:    call __extendhfsf21675; CHECK-NEXT:    i32.trunc_sat_f32_u1676; CHECK-NEXT:    i32x4.splat1677; CHECK-NEXT:    local.get 11678; CHECK-NEXT:    i32.trunc_sat_f32_u1679; CHECK-NEXT:    i32x4.replace_lane 11680; CHECK-NEXT:    local.get 21681; CHECK-NEXT:    call __truncsfhf21682; CHECK-NEXT:    call __extendhfsf21683; CHECK-NEXT:    i32.trunc_sat_f32_u1684; CHECK-NEXT:    i32x4.replace_lane 21685; CHECK-NEXT:    local.get 31686; CHECK-NEXT:    call __truncsfhf21687; CHECK-NEXT:    call __extendhfsf21688; CHECK-NEXT:    i32.trunc_sat_f32_u1689; CHECK-NEXT:    i32x4.replace_lane 31690; CHECK-NEXT:    # fallthrough-return1691entry:1692  %conv = fptosi <4 x half> %x to <4 x i64>1693  %spec.store.select = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>)1694  %spec.store.select7 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %spec.store.select, <4 x i64> zeroinitializer)1695  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>1696  ret <4 x i32> %conv61697}1698 1699; i16 saturate1700 1701define <2 x i16> @stest_f64i16_mm(<2 x double> %x) {1702; CHECK-LABEL: stest_f64i16_mm:1703; CHECK:         .functype stest_f64i16_mm (v128) -> (v128)1704; CHECK-NEXT:  # %bb.0: # %entry1705; CHECK-NEXT:    local.get 01706; CHECK-NEXT:    f64x2.extract_lane 01707; CHECK-NEXT:    i32.trunc_sat_f64_s1708; CHECK-NEXT:    i32x4.splat1709; CHECK-NEXT:    local.get 01710; CHECK-NEXT:    f64x2.extract_lane 11711; CHECK-NEXT:    i32.trunc_sat_f64_s1712; CHECK-NEXT:    i32x4.replace_lane 11713; CHECK-NEXT:    v128.const 32767, 32767, 32767, 327671714; CHECK-NEXT:    i32x4.min_s1715; CHECK-NEXT:    v128.const -32768, -32768, -32768, -327681716; CHECK-NEXT:    i32x4.max_s1717; CHECK-NEXT:    local.get 01718; CHECK-NEXT:    i8x16.shuffle 0, 1, 4, 5, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 11719; CHECK-NEXT:    # fallthrough-return1720entry:1721  %conv = fptosi <2 x double> %x to <2 x i32>1722  %spec.store.select = call <2 x i32> @llvm.smin.v2i32(<2 x i32> %conv, <2 x i32> <i32 32767, i32 32767>)1723  %spec.store.select7 = call <2 x i32> @llvm.smax.v2i32(<2 x i32> %spec.store.select, <2 x i32> <i32 -32768, i32 -32768>)1724  %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i16>1725  ret <2 x i16> %conv61726}1727 1728define <2 x i16> @utest_f64i16_mm(<2 x double> %x) {1729; CHECK-LABEL: utest_f64i16_mm:1730; CHECK:         .functype utest_f64i16_mm (v128) -> (v128)1731; CHECK-NEXT:  # %bb.0: # %entry1732; CHECK-NEXT:    local.get 01733; CHECK-NEXT:    f64x2.extract_lane 01734; CHECK-NEXT:    i32.trunc_sat_f64_u1735; CHECK-NEXT:    i32x4.splat1736; CHECK-NEXT:    local.get 01737; CHECK-NEXT:    f64x2.extract_lane 11738; CHECK-NEXT:    i32.trunc_sat_f64_u1739; CHECK-NEXT:    i32x4.replace_lane 11740; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655351741; CHECK-NEXT:    i32x4.min_u1742; CHECK-NEXT:    local.get 01743; CHECK-NEXT:    i8x16.shuffle 0, 1, 4, 5, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 11744; CHECK-NEXT:    # fallthrough-return1745entry:1746  %conv = fptoui <2 x double> %x to <2 x i32>1747  %spec.store.select = call <2 x i32> @llvm.umin.v2i32(<2 x i32> %conv, <2 x i32> <i32 65535, i32 65535>)1748  %conv6 = trunc <2 x i32> %spec.store.select to <2 x i16>1749  ret <2 x i16> %conv61750}1751 1752define <2 x i16> @ustest_f64i16_mm(<2 x double> %x) {1753; CHECK-LABEL: ustest_f64i16_mm:1754; CHECK:         .functype ustest_f64i16_mm (v128) -> (v128)1755; CHECK-NEXT:  # %bb.0: # %entry1756; CHECK-NEXT:    local.get 01757; CHECK-NEXT:    f64x2.extract_lane 01758; CHECK-NEXT:    i32.trunc_sat_f64_s1759; CHECK-NEXT:    i32x4.splat1760; CHECK-NEXT:    local.get 01761; CHECK-NEXT:    f64x2.extract_lane 11762; CHECK-NEXT:    i32.trunc_sat_f64_s1763; CHECK-NEXT:    i32x4.replace_lane 11764; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655351765; CHECK-NEXT:    i32x4.min_s1766; CHECK-NEXT:    v128.const 0, 0, 0, 01767; CHECK-NEXT:    i32x4.max_s1768; CHECK-NEXT:    local.get 01769; CHECK-NEXT:    i8x16.shuffle 0, 1, 4, 5, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 11770; CHECK-NEXT:    # fallthrough-return1771entry:1772  %conv = fptosi <2 x double> %x to <2 x i32>1773  %spec.store.select = call <2 x i32> @llvm.smin.v2i32(<2 x i32> %conv, <2 x i32> <i32 65535, i32 65535>)1774  %spec.store.select7 = call <2 x i32> @llvm.smax.v2i32(<2 x i32> %spec.store.select, <2 x i32> zeroinitializer)1775  %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i16>1776  ret <2 x i16> %conv61777}1778 1779define <4 x i16> @stest_f32i16_mm(<4 x float> %x) {1780; CHECK-LABEL: stest_f32i16_mm:1781; CHECK:         .functype stest_f32i16_mm (v128) -> (v128)1782; CHECK-NEXT:  # %bb.0: # %entry1783; CHECK-NEXT:    local.get 01784; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s1785; CHECK-NEXT:    v128.const 32767, 32767, 32767, 327671786; CHECK-NEXT:    i32x4.min_s1787; CHECK-NEXT:    v128.const -32768, -32768, -32768, -327681788; CHECK-NEXT:    i32x4.max_s1789; CHECK-NEXT:    local.get 01790; CHECK-NEXT:    i8x16.shuffle 0, 1, 4, 5, 8, 9, 12, 13, 0, 1, 0, 1, 0, 1, 0, 11791; CHECK-NEXT:    # fallthrough-return1792entry:1793  %conv = fptosi <4 x float> %x to <4 x i32>1794  %spec.store.select = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %conv, <4 x i32> <i32 32767, i32 32767, i32 32767, i32 32767>)1795  %spec.store.select7 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %spec.store.select, <4 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768>)1796  %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i16>1797  ret <4 x i16> %conv61798}1799 1800define <4 x i16> @utest_f32i16_mm(<4 x float> %x) {1801; CHECK-LABEL: utest_f32i16_mm:1802; CHECK:         .functype utest_f32i16_mm (v128) -> (v128)1803; CHECK-NEXT:  # %bb.0: # %entry1804; CHECK-NEXT:    local.get 01805; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u1806; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655351807; CHECK-NEXT:    i32x4.min_u1808; CHECK-NEXT:    local.get 01809; CHECK-NEXT:    i8x16.shuffle 0, 1, 4, 5, 8, 9, 12, 13, 0, 1, 0, 1, 0, 1, 0, 11810; CHECK-NEXT:    # fallthrough-return1811entry:1812  %conv = fptoui <4 x float> %x to <4 x i32>1813  %spec.store.select = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %conv, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>)1814  %conv6 = trunc <4 x i32> %spec.store.select to <4 x i16>1815  ret <4 x i16> %conv61816}1817 1818define <4 x i16> @ustest_f32i16_mm(<4 x float> %x) {1819; CHECK-LABEL: ustest_f32i16_mm:1820; CHECK:         .functype ustest_f32i16_mm (v128) -> (v128)1821; CHECK-NEXT:  # %bb.0: # %entry1822; CHECK-NEXT:    local.get 01823; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s1824; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655351825; CHECK-NEXT:    i32x4.min_s1826; CHECK-NEXT:    v128.const 0, 0, 0, 01827; CHECK-NEXT:    i32x4.max_s1828; CHECK-NEXT:    local.get 01829; CHECK-NEXT:    i8x16.shuffle 0, 1, 4, 5, 8, 9, 12, 13, 0, 1, 0, 1, 0, 1, 0, 11830; CHECK-NEXT:    # fallthrough-return1831entry:1832  %conv = fptosi <4 x float> %x to <4 x i32>1833  %spec.store.select = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %conv, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>)1834  %spec.store.select7 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %spec.store.select, <4 x i32> zeroinitializer)1835  %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i16>1836  ret <4 x i16> %conv61837}1838 1839define <8 x i16> @stest_f16i16_mm(<8 x half> %x) {1840; CHECK-LABEL: stest_f16i16_mm:1841; CHECK:         .functype stest_f16i16_mm (f32, f32, f32, f32, f32, f32, f32, f32) -> (v128)1842; CHECK-NEXT:  # %bb.0: # %entry1843; CHECK-NEXT:    local.get 51844; CHECK-NEXT:    call __truncsfhf21845; CHECK-NEXT:    call __extendhfsf21846; CHECK-NEXT:    local.set 51847; CHECK-NEXT:    local.get 41848; CHECK-NEXT:    call __truncsfhf21849; CHECK-NEXT:    call __extendhfsf21850; CHECK-NEXT:    local.set 41851; CHECK-NEXT:    local.get 61852; CHECK-NEXT:    call __truncsfhf21853; CHECK-NEXT:    call __extendhfsf21854; CHECK-NEXT:    local.set 61855; CHECK-NEXT:    local.get 71856; CHECK-NEXT:    call __truncsfhf21857; CHECK-NEXT:    call __extendhfsf21858; CHECK-NEXT:    local.set 71859; CHECK-NEXT:    local.get 11860; CHECK-NEXT:    call __truncsfhf21861; CHECK-NEXT:    call __extendhfsf21862; CHECK-NEXT:    local.set 11863; CHECK-NEXT:    local.get 01864; CHECK-NEXT:    call __truncsfhf21865; CHECK-NEXT:    call __extendhfsf21866; CHECK-NEXT:    i32.trunc_sat_f32_s1867; CHECK-NEXT:    i32x4.splat1868; CHECK-NEXT:    local.get 11869; CHECK-NEXT:    i32.trunc_sat_f32_s1870; CHECK-NEXT:    i32x4.replace_lane 11871; CHECK-NEXT:    local.get 21872; CHECK-NEXT:    call __truncsfhf21873; CHECK-NEXT:    call __extendhfsf21874; CHECK-NEXT:    i32.trunc_sat_f32_s1875; CHECK-NEXT:    i32x4.replace_lane 21876; CHECK-NEXT:    local.get 31877; CHECK-NEXT:    call __truncsfhf21878; CHECK-NEXT:    call __extendhfsf21879; CHECK-NEXT:    i32.trunc_sat_f32_s1880; CHECK-NEXT:    i32x4.replace_lane 31881; CHECK-NEXT:    local.get 41882; CHECK-NEXT:    i32.trunc_sat_f32_s1883; CHECK-NEXT:    i32x4.splat1884; CHECK-NEXT:    local.get 51885; CHECK-NEXT:    i32.trunc_sat_f32_s1886; CHECK-NEXT:    i32x4.replace_lane 11887; CHECK-NEXT:    local.get 61888; CHECK-NEXT:    i32.trunc_sat_f32_s1889; CHECK-NEXT:    i32x4.replace_lane 21890; CHECK-NEXT:    local.get 71891; CHECK-NEXT:    i32.trunc_sat_f32_s1892; CHECK-NEXT:    i32x4.replace_lane 31893; CHECK-NEXT:    i16x8.narrow_i32x4_s1894; CHECK-NEXT:    # fallthrough-return1895entry:1896  %conv = fptosi <8 x half> %x to <8 x i32>1897  %spec.store.select = call <8 x i32> @llvm.smin.v8i32(<8 x i32> %conv, <8 x i32> <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>)1898  %spec.store.select7 = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %spec.store.select, <8 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>)1899  %conv6 = trunc <8 x i32> %spec.store.select7 to <8 x i16>1900  ret <8 x i16> %conv61901}1902 1903define <8 x i16> @utest_f16i16_mm(<8 x half> %x) {1904; CHECK-LABEL: utest_f16i16_mm:1905; CHECK:         .functype utest_f16i16_mm (f32, f32, f32, f32, f32, f32, f32, f32) -> (v128)1906; CHECK-NEXT:  # %bb.0: # %entry1907; CHECK-NEXT:    local.get 51908; CHECK-NEXT:    call __truncsfhf21909; CHECK-NEXT:    call __extendhfsf21910; CHECK-NEXT:    local.set 51911; CHECK-NEXT:    local.get 41912; CHECK-NEXT:    call __truncsfhf21913; CHECK-NEXT:    call __extendhfsf21914; CHECK-NEXT:    local.set 41915; CHECK-NEXT:    local.get 61916; CHECK-NEXT:    call __truncsfhf21917; CHECK-NEXT:    call __extendhfsf21918; CHECK-NEXT:    local.set 61919; CHECK-NEXT:    local.get 71920; CHECK-NEXT:    call __truncsfhf21921; CHECK-NEXT:    call __extendhfsf21922; CHECK-NEXT:    local.set 71923; CHECK-NEXT:    local.get 11924; CHECK-NEXT:    call __truncsfhf21925; CHECK-NEXT:    call __extendhfsf21926; CHECK-NEXT:    local.set 11927; CHECK-NEXT:    local.get 01928; CHECK-NEXT:    call __truncsfhf21929; CHECK-NEXT:    call __extendhfsf21930; CHECK-NEXT:    i32.trunc_sat_f32_u1931; CHECK-NEXT:    i32x4.splat1932; CHECK-NEXT:    local.get 11933; CHECK-NEXT:    i32.trunc_sat_f32_u1934; CHECK-NEXT:    i32x4.replace_lane 11935; CHECK-NEXT:    local.get 21936; CHECK-NEXT:    call __truncsfhf21937; CHECK-NEXT:    call __extendhfsf21938; CHECK-NEXT:    i32.trunc_sat_f32_u1939; CHECK-NEXT:    i32x4.replace_lane 21940; CHECK-NEXT:    local.get 31941; CHECK-NEXT:    call __truncsfhf21942; CHECK-NEXT:    call __extendhfsf21943; CHECK-NEXT:    i32.trunc_sat_f32_u1944; CHECK-NEXT:    i32x4.replace_lane 31945; CHECK-NEXT:    local.get 41946; CHECK-NEXT:    i32.trunc_sat_f32_u1947; CHECK-NEXT:    i32x4.splat1948; CHECK-NEXT:    local.get 51949; CHECK-NEXT:    i32.trunc_sat_f32_u1950; CHECK-NEXT:    i32x4.replace_lane 11951; CHECK-NEXT:    local.get 61952; CHECK-NEXT:    i32.trunc_sat_f32_u1953; CHECK-NEXT:    i32x4.replace_lane 21954; CHECK-NEXT:    local.get 71955; CHECK-NEXT:    i32.trunc_sat_f32_u1956; CHECK-NEXT:    i32x4.replace_lane 31957; CHECK-NEXT:    i16x8.narrow_i32x4_u1958; CHECK-NEXT:    # fallthrough-return1959entry:1960  %conv = fptoui <8 x half> %x to <8 x i32>1961  %spec.store.select = call <8 x i32> @llvm.umin.v8i32(<8 x i32> %conv, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>)1962  %conv6 = trunc <8 x i32> %spec.store.select to <8 x i16>1963  ret <8 x i16> %conv61964}1965 1966define <8 x i16> @ustest_f16i16_mm(<8 x half> %x) {1967; CHECK-LABEL: ustest_f16i16_mm:1968; CHECK:         .functype ustest_f16i16_mm (f32, f32, f32, f32, f32, f32, f32, f32) -> (v128)1969; CHECK-NEXT:    .local v128, v1281970; CHECK-NEXT:  # %bb.0: # %entry1971; CHECK-NEXT:    local.get 51972; CHECK-NEXT:    call __truncsfhf21973; CHECK-NEXT:    call __extendhfsf21974; CHECK-NEXT:    local.set 51975; CHECK-NEXT:    local.get 41976; CHECK-NEXT:    call __truncsfhf21977; CHECK-NEXT:    call __extendhfsf21978; CHECK-NEXT:    local.set 41979; CHECK-NEXT:    local.get 61980; CHECK-NEXT:    call __truncsfhf21981; CHECK-NEXT:    call __extendhfsf21982; CHECK-NEXT:    local.set 61983; CHECK-NEXT:    local.get 71984; CHECK-NEXT:    call __truncsfhf21985; CHECK-NEXT:    call __extendhfsf21986; CHECK-NEXT:    local.set 71987; CHECK-NEXT:    local.get 11988; CHECK-NEXT:    call __truncsfhf21989; CHECK-NEXT:    call __extendhfsf21990; CHECK-NEXT:    local.set 11991; CHECK-NEXT:    local.get 01992; CHECK-NEXT:    call __truncsfhf21993; CHECK-NEXT:    call __extendhfsf21994; CHECK-NEXT:    i32.trunc_sat_f32_s1995; CHECK-NEXT:    i32x4.splat1996; CHECK-NEXT:    local.get 11997; CHECK-NEXT:    i32.trunc_sat_f32_s1998; CHECK-NEXT:    i32x4.replace_lane 11999; CHECK-NEXT:    local.get 22000; CHECK-NEXT:    call __truncsfhf22001; CHECK-NEXT:    call __extendhfsf22002; CHECK-NEXT:    i32.trunc_sat_f32_s2003; CHECK-NEXT:    i32x4.replace_lane 22004; CHECK-NEXT:    local.get 32005; CHECK-NEXT:    call __truncsfhf22006; CHECK-NEXT:    call __extendhfsf22007; CHECK-NEXT:    i32.trunc_sat_f32_s2008; CHECK-NEXT:    i32x4.replace_lane 32009; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655352010; CHECK-NEXT:    local.tee 82011; CHECK-NEXT:    i32x4.min_s2012; CHECK-NEXT:    v128.const 0, 0, 0, 02013; CHECK-NEXT:    local.tee 92014; CHECK-NEXT:    i32x4.max_s2015; CHECK-NEXT:    local.get 42016; CHECK-NEXT:    i32.trunc_sat_f32_s2017; CHECK-NEXT:    i32x4.splat2018; CHECK-NEXT:    local.get 52019; CHECK-NEXT:    i32.trunc_sat_f32_s2020; CHECK-NEXT:    i32x4.replace_lane 12021; CHECK-NEXT:    local.get 62022; CHECK-NEXT:    i32.trunc_sat_f32_s2023; CHECK-NEXT:    i32x4.replace_lane 22024; CHECK-NEXT:    local.get 72025; CHECK-NEXT:    i32.trunc_sat_f32_s2026; CHECK-NEXT:    i32x4.replace_lane 32027; CHECK-NEXT:    local.get 82028; CHECK-NEXT:    i32x4.min_s2029; CHECK-NEXT:    local.get 92030; CHECK-NEXT:    i32x4.max_s2031; CHECK-NEXT:    i16x8.narrow_i32x4_u2032; CHECK-NEXT:    # fallthrough-return2033entry:2034  %conv = fptosi <8 x half> %x to <8 x i32>2035  %spec.store.select = call <8 x i32> @llvm.smin.v8i32(<8 x i32> %conv, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>)2036  %spec.store.select7 = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %spec.store.select, <8 x i32> zeroinitializer)2037  %conv6 = trunc <8 x i32> %spec.store.select7 to <8 x i16>2038  ret <8 x i16> %conv62039}2040 2041; i64 saturate2042 2043define <2 x i64> @stest_f64i64_mm(<2 x double> %x) {2044; CHECK-LABEL: stest_f64i64_mm:2045; CHECK:         .functype stest_f64i64_mm (v128) -> (v128)2046; CHECK-NEXT:    .local i32, i64, i64, i64, i642047; CHECK-NEXT:  # %bb.0: # %entry2048; CHECK-NEXT:    global.get __stack_pointer2049; CHECK-NEXT:    i32.const 322050; CHECK-NEXT:    i32.sub2051; CHECK-NEXT:    local.tee 12052; CHECK-NEXT:    global.set __stack_pointer2053; CHECK-NEXT:    local.get 12054; CHECK-NEXT:    i32.const 162055; CHECK-NEXT:    i32.add2056; CHECK-NEXT:    local.get 02057; CHECK-NEXT:    f64x2.extract_lane 12058; CHECK-NEXT:    call __fixdfti2059; CHECK-NEXT:    local.get 12060; CHECK-NEXT:    local.get 02061; CHECK-NEXT:    f64x2.extract_lane 02062; CHECK-NEXT:    call __fixdfti2063; CHECK-NEXT:    local.get 12064; CHECK-NEXT:    i64.load 242065; CHECK-NEXT:    local.set 22066; CHECK-NEXT:    local.get 12067; CHECK-NEXT:    i64.load 162068; CHECK-NEXT:    local.set 32069; CHECK-NEXT:    local.get 12070; CHECK-NEXT:    i64.load 82071; CHECK-NEXT:    local.set 42072; CHECK-NEXT:    local.get 12073; CHECK-NEXT:    i64.load 02074; CHECK-NEXT:    local.set 52075; CHECK-NEXT:    local.get 12076; CHECK-NEXT:    i32.const 322077; CHECK-NEXT:    i32.add2078; CHECK-NEXT:    global.set __stack_pointer2079; CHECK-NEXT:    local.get 52080; CHECK-NEXT:    i64.const 92233720368547758072081; CHECK-NEXT:    local.get 52082; CHECK-NEXT:    i64.const 92233720368547758072083; CHECK-NEXT:    i64.lt_u2084; CHECK-NEXT:    local.get 42085; CHECK-NEXT:    i64.const 02086; CHECK-NEXT:    i64.lt_s2087; CHECK-NEXT:    local.get 42088; CHECK-NEXT:    i64.eqz2089; CHECK-NEXT:    i32.select2090; CHECK-NEXT:    local.tee 12091; CHECK-NEXT:    i64.select2092; CHECK-NEXT:    local.tee 52093; CHECK-NEXT:    i64.const -92233720368547758082094; CHECK-NEXT:    local.get 52095; CHECK-NEXT:    i64.const -92233720368547758082096; CHECK-NEXT:    i64.gt_u2097; CHECK-NEXT:    local.get 42098; CHECK-NEXT:    i64.const 02099; CHECK-NEXT:    local.get 12100; CHECK-NEXT:    i64.select2101; CHECK-NEXT:    local.tee 42102; CHECK-NEXT:    i64.const -12103; CHECK-NEXT:    i64.gt_s2104; CHECK-NEXT:    local.get 42105; CHECK-NEXT:    i64.const -12106; CHECK-NEXT:    i64.eq2107; CHECK-NEXT:    i32.select2108; CHECK-NEXT:    i64.select2109; CHECK-NEXT:    i64x2.splat2110; CHECK-NEXT:    local.get 32111; CHECK-NEXT:    i64.const 92233720368547758072112; CHECK-NEXT:    local.get 32113; CHECK-NEXT:    i64.const 92233720368547758072114; CHECK-NEXT:    i64.lt_u2115; CHECK-NEXT:    local.get 22116; CHECK-NEXT:    i64.const 02117; CHECK-NEXT:    i64.lt_s2118; CHECK-NEXT:    local.get 22119; CHECK-NEXT:    i64.eqz2120; CHECK-NEXT:    i32.select2121; CHECK-NEXT:    local.tee 12122; CHECK-NEXT:    i64.select2123; CHECK-NEXT:    local.tee 42124; CHECK-NEXT:    i64.const -92233720368547758082125; CHECK-NEXT:    local.get 42126; CHECK-NEXT:    i64.const -92233720368547758082127; CHECK-NEXT:    i64.gt_u2128; CHECK-NEXT:    local.get 22129; CHECK-NEXT:    i64.const 02130; CHECK-NEXT:    local.get 12131; CHECK-NEXT:    i64.select2132; CHECK-NEXT:    local.tee 22133; CHECK-NEXT:    i64.const -12134; CHECK-NEXT:    i64.gt_s2135; CHECK-NEXT:    local.get 22136; CHECK-NEXT:    i64.const -12137; CHECK-NEXT:    i64.eq2138; CHECK-NEXT:    i32.select2139; CHECK-NEXT:    i64.select2140; CHECK-NEXT:    i64x2.replace_lane 12141; CHECK-NEXT:    # fallthrough-return2142entry:2143  %conv = fptosi <2 x double> %x to <2 x i128>2144  %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>)2145  %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>)2146  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>2147  ret <2 x i64> %conv62148}2149 2150define <2 x i64> @utest_f64i64_mm(<2 x double> %x) {2151; CHECK-LABEL: utest_f64i64_mm:2152; CHECK:         .functype utest_f64i64_mm (v128) -> (v128)2153; CHECK-NEXT:    .local i32, i64, i64, i64, i642154; CHECK-NEXT:  # %bb.0: # %entry2155; CHECK-NEXT:    global.get __stack_pointer2156; CHECK-NEXT:    i32.const 322157; CHECK-NEXT:    i32.sub2158; CHECK-NEXT:    local.tee 12159; CHECK-NEXT:    global.set __stack_pointer2160; CHECK-NEXT:    local.get 12161; CHECK-NEXT:    i32.const 162162; CHECK-NEXT:    i32.add2163; CHECK-NEXT:    local.get 02164; CHECK-NEXT:    f64x2.extract_lane 12165; CHECK-NEXT:    call __fixunsdfti2166; CHECK-NEXT:    local.get 12167; CHECK-NEXT:    local.get 02168; CHECK-NEXT:    f64x2.extract_lane 02169; CHECK-NEXT:    call __fixunsdfti2170; CHECK-NEXT:    local.get 12171; CHECK-NEXT:    i64.load 242172; CHECK-NEXT:    local.set 22173; CHECK-NEXT:    local.get 12174; CHECK-NEXT:    i64.load 162175; CHECK-NEXT:    local.set 32176; CHECK-NEXT:    local.get 12177; CHECK-NEXT:    i64.load 82178; CHECK-NEXT:    local.set 42179; CHECK-NEXT:    local.get 12180; CHECK-NEXT:    i64.load 02181; CHECK-NEXT:    local.set 52182; CHECK-NEXT:    local.get 12183; CHECK-NEXT:    i32.const 322184; CHECK-NEXT:    i32.add2185; CHECK-NEXT:    global.set __stack_pointer2186; CHECK-NEXT:    local.get 52187; CHECK-NEXT:    i64.const 02188; CHECK-NEXT:    local.get 42189; CHECK-NEXT:    i64.eqz2190; CHECK-NEXT:    i64.select2191; CHECK-NEXT:    i64x2.splat2192; CHECK-NEXT:    local.get 32193; CHECK-NEXT:    i64.const 02194; CHECK-NEXT:    local.get 22195; CHECK-NEXT:    i64.eqz2196; CHECK-NEXT:    i64.select2197; CHECK-NEXT:    i64x2.replace_lane 12198; CHECK-NEXT:    # fallthrough-return2199entry:2200  %conv = fptoui <2 x double> %x to <2 x i128>2201  %spec.store.select = call <2 x i128> @llvm.umin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)2202  %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>2203  ret <2 x i64> %conv62204}2205 2206define <2 x i64> @ustest_f64i64_mm(<2 x double> %x) {2207; CHECK-LABEL: ustest_f64i64_mm:2208; CHECK:         .functype ustest_f64i64_mm (v128) -> (v128)2209; CHECK-NEXT:    .local i32, i64, i64, i64, i642210; CHECK-NEXT:  # %bb.0: # %entry2211; CHECK-NEXT:    global.get __stack_pointer2212; CHECK-NEXT:    i32.const 322213; CHECK-NEXT:    i32.sub2214; CHECK-NEXT:    local.tee 12215; CHECK-NEXT:    global.set __stack_pointer2216; CHECK-NEXT:    local.get 12217; CHECK-NEXT:    i32.const 162218; CHECK-NEXT:    i32.add2219; CHECK-NEXT:    local.get 02220; CHECK-NEXT:    f64x2.extract_lane 12221; CHECK-NEXT:    call __fixdfti2222; CHECK-NEXT:    local.get 12223; CHECK-NEXT:    local.get 02224; CHECK-NEXT:    f64x2.extract_lane 02225; CHECK-NEXT:    call __fixdfti2226; CHECK-NEXT:    local.get 12227; CHECK-NEXT:    i64.load 242228; CHECK-NEXT:    local.set 22229; CHECK-NEXT:    local.get 12230; CHECK-NEXT:    i64.load 162231; CHECK-NEXT:    local.set 32232; CHECK-NEXT:    local.get 12233; CHECK-NEXT:    i64.load 82234; CHECK-NEXT:    local.set 42235; CHECK-NEXT:    local.get 12236; CHECK-NEXT:    i64.load 02237; CHECK-NEXT:    local.set 52238; CHECK-NEXT:    local.get 12239; CHECK-NEXT:    i32.const 322240; CHECK-NEXT:    i32.add2241; CHECK-NEXT:    global.set __stack_pointer2242; CHECK-NEXT:    i64.const 02243; CHECK-NEXT:    local.get 52244; CHECK-NEXT:    i64.const 02245; CHECK-NEXT:    local.get 42246; CHECK-NEXT:    i64.const 12247; CHECK-NEXT:    i64.lt_s2248; CHECK-NEXT:    local.tee 12249; CHECK-NEXT:    i64.select2250; CHECK-NEXT:    local.get 42251; CHECK-NEXT:    i64.const 12252; CHECK-NEXT:    local.get 12253; CHECK-NEXT:    i64.select2254; CHECK-NEXT:    i64.const 02255; CHECK-NEXT:    i64.lt_s2256; CHECK-NEXT:    i64.select2257; CHECK-NEXT:    i64x2.splat2258; CHECK-NEXT:    i64.const 02259; CHECK-NEXT:    local.get 32260; CHECK-NEXT:    i64.const 02261; CHECK-NEXT:    local.get 22262; CHECK-NEXT:    i64.const 12263; CHECK-NEXT:    i64.lt_s2264; CHECK-NEXT:    local.tee 12265; CHECK-NEXT:    i64.select2266; CHECK-NEXT:    local.get 22267; CHECK-NEXT:    i64.const 12268; CHECK-NEXT:    local.get 12269; CHECK-NEXT:    i64.select2270; CHECK-NEXT:    i64.const 02271; CHECK-NEXT:    i64.lt_s2272; CHECK-NEXT:    i64.select2273; CHECK-NEXT:    i64x2.replace_lane 12274; CHECK-NEXT:    # fallthrough-return2275entry:2276  %conv = fptosi <2 x double> %x to <2 x i128>2277  %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)2278  %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> zeroinitializer)2279  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>2280  ret <2 x i64> %conv62281}2282 2283define <2 x i64> @stest_f32i64_mm(<2 x float> %x) {2284; CHECK-LABEL: stest_f32i64_mm:2285; CHECK:         .functype stest_f32i64_mm (v128) -> (v128)2286; CHECK-NEXT:    .local i32, i64, i64, i64, i642287; CHECK-NEXT:  # %bb.0: # %entry2288; CHECK-NEXT:    global.get __stack_pointer2289; CHECK-NEXT:    i32.const 322290; CHECK-NEXT:    i32.sub2291; CHECK-NEXT:    local.tee 12292; CHECK-NEXT:    global.set __stack_pointer2293; CHECK-NEXT:    local.get 12294; CHECK-NEXT:    i32.const 162295; CHECK-NEXT:    i32.add2296; CHECK-NEXT:    local.get 02297; CHECK-NEXT:    f32x4.extract_lane 12298; CHECK-NEXT:    call __fixsfti2299; CHECK-NEXT:    local.get 12300; CHECK-NEXT:    local.get 02301; CHECK-NEXT:    f32x4.extract_lane 02302; CHECK-NEXT:    call __fixsfti2303; CHECK-NEXT:    local.get 12304; CHECK-NEXT:    i64.load 242305; CHECK-NEXT:    local.set 22306; CHECK-NEXT:    local.get 12307; CHECK-NEXT:    i64.load 162308; CHECK-NEXT:    local.set 32309; CHECK-NEXT:    local.get 12310; CHECK-NEXT:    i64.load 82311; CHECK-NEXT:    local.set 42312; CHECK-NEXT:    local.get 12313; CHECK-NEXT:    i64.load 02314; CHECK-NEXT:    local.set 52315; CHECK-NEXT:    local.get 12316; CHECK-NEXT:    i32.const 322317; CHECK-NEXT:    i32.add2318; CHECK-NEXT:    global.set __stack_pointer2319; CHECK-NEXT:    local.get 52320; CHECK-NEXT:    i64.const 92233720368547758072321; CHECK-NEXT:    local.get 52322; CHECK-NEXT:    i64.const 92233720368547758072323; CHECK-NEXT:    i64.lt_u2324; CHECK-NEXT:    local.get 42325; CHECK-NEXT:    i64.const 02326; CHECK-NEXT:    i64.lt_s2327; CHECK-NEXT:    local.get 42328; CHECK-NEXT:    i64.eqz2329; CHECK-NEXT:    i32.select2330; CHECK-NEXT:    local.tee 12331; CHECK-NEXT:    i64.select2332; CHECK-NEXT:    local.tee 52333; CHECK-NEXT:    i64.const -92233720368547758082334; CHECK-NEXT:    local.get 52335; CHECK-NEXT:    i64.const -92233720368547758082336; CHECK-NEXT:    i64.gt_u2337; CHECK-NEXT:    local.get 42338; CHECK-NEXT:    i64.const 02339; CHECK-NEXT:    local.get 12340; CHECK-NEXT:    i64.select2341; CHECK-NEXT:    local.tee 42342; CHECK-NEXT:    i64.const -12343; CHECK-NEXT:    i64.gt_s2344; CHECK-NEXT:    local.get 42345; CHECK-NEXT:    i64.const -12346; CHECK-NEXT:    i64.eq2347; CHECK-NEXT:    i32.select2348; CHECK-NEXT:    i64.select2349; CHECK-NEXT:    i64x2.splat2350; CHECK-NEXT:    local.get 32351; CHECK-NEXT:    i64.const 92233720368547758072352; CHECK-NEXT:    local.get 32353; CHECK-NEXT:    i64.const 92233720368547758072354; CHECK-NEXT:    i64.lt_u2355; CHECK-NEXT:    local.get 22356; CHECK-NEXT:    i64.const 02357; CHECK-NEXT:    i64.lt_s2358; CHECK-NEXT:    local.get 22359; CHECK-NEXT:    i64.eqz2360; CHECK-NEXT:    i32.select2361; CHECK-NEXT:    local.tee 12362; CHECK-NEXT:    i64.select2363; CHECK-NEXT:    local.tee 42364; CHECK-NEXT:    i64.const -92233720368547758082365; CHECK-NEXT:    local.get 42366; CHECK-NEXT:    i64.const -92233720368547758082367; CHECK-NEXT:    i64.gt_u2368; CHECK-NEXT:    local.get 22369; CHECK-NEXT:    i64.const 02370; CHECK-NEXT:    local.get 12371; CHECK-NEXT:    i64.select2372; CHECK-NEXT:    local.tee 22373; CHECK-NEXT:    i64.const -12374; CHECK-NEXT:    i64.gt_s2375; CHECK-NEXT:    local.get 22376; CHECK-NEXT:    i64.const -12377; CHECK-NEXT:    i64.eq2378; CHECK-NEXT:    i32.select2379; CHECK-NEXT:    i64.select2380; CHECK-NEXT:    i64x2.replace_lane 12381; CHECK-NEXT:    # fallthrough-return2382entry:2383  %conv = fptosi <2 x float> %x to <2 x i128>2384  %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>)2385  %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>)2386  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>2387  ret <2 x i64> %conv62388}2389 2390define <2 x i64> @utest_f32i64_mm(<2 x float> %x) {2391; CHECK-LABEL: utest_f32i64_mm:2392; CHECK:         .functype utest_f32i64_mm (v128) -> (v128)2393; CHECK-NEXT:    .local i32, i64, i64, i64, i642394; CHECK-NEXT:  # %bb.0: # %entry2395; CHECK-NEXT:    global.get __stack_pointer2396; CHECK-NEXT:    i32.const 322397; CHECK-NEXT:    i32.sub2398; CHECK-NEXT:    local.tee 12399; CHECK-NEXT:    global.set __stack_pointer2400; CHECK-NEXT:    local.get 12401; CHECK-NEXT:    i32.const 162402; CHECK-NEXT:    i32.add2403; CHECK-NEXT:    local.get 02404; CHECK-NEXT:    f32x4.extract_lane 12405; CHECK-NEXT:    call __fixunssfti2406; CHECK-NEXT:    local.get 12407; CHECK-NEXT:    local.get 02408; CHECK-NEXT:    f32x4.extract_lane 02409; CHECK-NEXT:    call __fixunssfti2410; CHECK-NEXT:    local.get 12411; CHECK-NEXT:    i64.load 242412; CHECK-NEXT:    local.set 22413; CHECK-NEXT:    local.get 12414; CHECK-NEXT:    i64.load 162415; CHECK-NEXT:    local.set 32416; CHECK-NEXT:    local.get 12417; CHECK-NEXT:    i64.load 82418; CHECK-NEXT:    local.set 42419; CHECK-NEXT:    local.get 12420; CHECK-NEXT:    i64.load 02421; CHECK-NEXT:    local.set 52422; CHECK-NEXT:    local.get 12423; CHECK-NEXT:    i32.const 322424; CHECK-NEXT:    i32.add2425; CHECK-NEXT:    global.set __stack_pointer2426; CHECK-NEXT:    local.get 52427; CHECK-NEXT:    i64.const 02428; CHECK-NEXT:    local.get 42429; CHECK-NEXT:    i64.eqz2430; CHECK-NEXT:    i64.select2431; CHECK-NEXT:    i64x2.splat2432; CHECK-NEXT:    local.get 32433; CHECK-NEXT:    i64.const 02434; CHECK-NEXT:    local.get 22435; CHECK-NEXT:    i64.eqz2436; CHECK-NEXT:    i64.select2437; CHECK-NEXT:    i64x2.replace_lane 12438; CHECK-NEXT:    # fallthrough-return2439entry:2440  %conv = fptoui <2 x float> %x to <2 x i128>2441  %spec.store.select = call <2 x i128> @llvm.umin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)2442  %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>2443  ret <2 x i64> %conv62444}2445 2446define <2 x i64> @ustest_f32i64_mm(<2 x float> %x) {2447; CHECK-LABEL: ustest_f32i64_mm:2448; CHECK:         .functype ustest_f32i64_mm (v128) -> (v128)2449; CHECK-NEXT:    .local i32, i64, i64, i64, i642450; CHECK-NEXT:  # %bb.0: # %entry2451; CHECK-NEXT:    global.get __stack_pointer2452; CHECK-NEXT:    i32.const 322453; CHECK-NEXT:    i32.sub2454; CHECK-NEXT:    local.tee 12455; CHECK-NEXT:    global.set __stack_pointer2456; CHECK-NEXT:    local.get 12457; CHECK-NEXT:    i32.const 162458; CHECK-NEXT:    i32.add2459; CHECK-NEXT:    local.get 02460; CHECK-NEXT:    f32x4.extract_lane 12461; CHECK-NEXT:    call __fixsfti2462; CHECK-NEXT:    local.get 12463; CHECK-NEXT:    local.get 02464; CHECK-NEXT:    f32x4.extract_lane 02465; CHECK-NEXT:    call __fixsfti2466; CHECK-NEXT:    local.get 12467; CHECK-NEXT:    i64.load 242468; CHECK-NEXT:    local.set 22469; CHECK-NEXT:    local.get 12470; CHECK-NEXT:    i64.load 162471; CHECK-NEXT:    local.set 32472; CHECK-NEXT:    local.get 12473; CHECK-NEXT:    i64.load 82474; CHECK-NEXT:    local.set 42475; CHECK-NEXT:    local.get 12476; CHECK-NEXT:    i64.load 02477; CHECK-NEXT:    local.set 52478; CHECK-NEXT:    local.get 12479; CHECK-NEXT:    i32.const 322480; CHECK-NEXT:    i32.add2481; CHECK-NEXT:    global.set __stack_pointer2482; CHECK-NEXT:    i64.const 02483; CHECK-NEXT:    local.get 52484; CHECK-NEXT:    i64.const 02485; CHECK-NEXT:    local.get 42486; CHECK-NEXT:    i64.const 12487; CHECK-NEXT:    i64.lt_s2488; CHECK-NEXT:    local.tee 12489; CHECK-NEXT:    i64.select2490; CHECK-NEXT:    local.get 42491; CHECK-NEXT:    i64.const 12492; CHECK-NEXT:    local.get 12493; CHECK-NEXT:    i64.select2494; CHECK-NEXT:    i64.const 02495; CHECK-NEXT:    i64.lt_s2496; CHECK-NEXT:    i64.select2497; CHECK-NEXT:    i64x2.splat2498; CHECK-NEXT:    i64.const 02499; CHECK-NEXT:    local.get 32500; CHECK-NEXT:    i64.const 02501; CHECK-NEXT:    local.get 22502; CHECK-NEXT:    i64.const 12503; CHECK-NEXT:    i64.lt_s2504; CHECK-NEXT:    local.tee 12505; CHECK-NEXT:    i64.select2506; CHECK-NEXT:    local.get 22507; CHECK-NEXT:    i64.const 12508; CHECK-NEXT:    local.get 12509; CHECK-NEXT:    i64.select2510; CHECK-NEXT:    i64.const 02511; CHECK-NEXT:    i64.lt_s2512; CHECK-NEXT:    i64.select2513; CHECK-NEXT:    i64x2.replace_lane 12514; CHECK-NEXT:    # fallthrough-return2515entry:2516  %conv = fptosi <2 x float> %x to <2 x i128>2517  %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)2518  %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> zeroinitializer)2519  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>2520  ret <2 x i64> %conv62521}2522 2523define <2 x i64> @stest_f16i64_mm(<2 x half> %x) {2524; CHECK-LABEL: stest_f16i64_mm:2525; CHECK:         .functype stest_f16i64_mm (f32, f32) -> (v128)2526; CHECK-NEXT:    .local i32, i64, i64, i64, i642527; CHECK-NEXT:  # %bb.0: # %entry2528; CHECK-NEXT:    global.get __stack_pointer2529; CHECK-NEXT:    i32.const 322530; CHECK-NEXT:    i32.sub2531; CHECK-NEXT:    local.tee 22532; CHECK-NEXT:    global.set __stack_pointer2533; CHECK-NEXT:    local.get 22534; CHECK-NEXT:    i32.const 162535; CHECK-NEXT:    i32.add2536; CHECK-NEXT:    local.get 12537; CHECK-NEXT:    call __truncsfhf22538; CHECK-NEXT:    call __extendhfsf22539; CHECK-NEXT:    call __fixsfti2540; CHECK-NEXT:    local.get 22541; CHECK-NEXT:    local.get 02542; CHECK-NEXT:    call __truncsfhf22543; CHECK-NEXT:    call __extendhfsf22544; CHECK-NEXT:    call __fixsfti2545; CHECK-NEXT:    local.get 22546; CHECK-NEXT:    i64.load 242547; CHECK-NEXT:    local.set 32548; CHECK-NEXT:    local.get 22549; CHECK-NEXT:    i64.load 162550; CHECK-NEXT:    local.set 42551; CHECK-NEXT:    local.get 22552; CHECK-NEXT:    i64.load 82553; CHECK-NEXT:    local.set 52554; CHECK-NEXT:    local.get 22555; CHECK-NEXT:    i64.load 02556; CHECK-NEXT:    local.set 62557; CHECK-NEXT:    local.get 22558; CHECK-NEXT:    i32.const 322559; CHECK-NEXT:    i32.add2560; CHECK-NEXT:    global.set __stack_pointer2561; CHECK-NEXT:    local.get 62562; CHECK-NEXT:    i64.const 92233720368547758072563; CHECK-NEXT:    local.get 62564; CHECK-NEXT:    i64.const 92233720368547758072565; CHECK-NEXT:    i64.lt_u2566; CHECK-NEXT:    local.get 52567; CHECK-NEXT:    i64.const 02568; CHECK-NEXT:    i64.lt_s2569; CHECK-NEXT:    local.get 52570; CHECK-NEXT:    i64.eqz2571; CHECK-NEXT:    i32.select2572; CHECK-NEXT:    local.tee 22573; CHECK-NEXT:    i64.select2574; CHECK-NEXT:    local.tee 62575; CHECK-NEXT:    i64.const -92233720368547758082576; CHECK-NEXT:    local.get 62577; CHECK-NEXT:    i64.const -92233720368547758082578; CHECK-NEXT:    i64.gt_u2579; CHECK-NEXT:    local.get 52580; CHECK-NEXT:    i64.const 02581; CHECK-NEXT:    local.get 22582; CHECK-NEXT:    i64.select2583; CHECK-NEXT:    local.tee 52584; CHECK-NEXT:    i64.const -12585; CHECK-NEXT:    i64.gt_s2586; CHECK-NEXT:    local.get 52587; CHECK-NEXT:    i64.const -12588; CHECK-NEXT:    i64.eq2589; CHECK-NEXT:    i32.select2590; CHECK-NEXT:    i64.select2591; CHECK-NEXT:    i64x2.splat2592; CHECK-NEXT:    local.get 42593; CHECK-NEXT:    i64.const 92233720368547758072594; CHECK-NEXT:    local.get 42595; CHECK-NEXT:    i64.const 92233720368547758072596; CHECK-NEXT:    i64.lt_u2597; CHECK-NEXT:    local.get 32598; CHECK-NEXT:    i64.const 02599; CHECK-NEXT:    i64.lt_s2600; CHECK-NEXT:    local.get 32601; CHECK-NEXT:    i64.eqz2602; CHECK-NEXT:    i32.select2603; CHECK-NEXT:    local.tee 22604; CHECK-NEXT:    i64.select2605; CHECK-NEXT:    local.tee 52606; CHECK-NEXT:    i64.const -92233720368547758082607; CHECK-NEXT:    local.get 52608; CHECK-NEXT:    i64.const -92233720368547758082609; CHECK-NEXT:    i64.gt_u2610; CHECK-NEXT:    local.get 32611; CHECK-NEXT:    i64.const 02612; CHECK-NEXT:    local.get 22613; CHECK-NEXT:    i64.select2614; CHECK-NEXT:    local.tee 32615; CHECK-NEXT:    i64.const -12616; CHECK-NEXT:    i64.gt_s2617; CHECK-NEXT:    local.get 32618; CHECK-NEXT:    i64.const -12619; CHECK-NEXT:    i64.eq2620; CHECK-NEXT:    i32.select2621; CHECK-NEXT:    i64.select2622; CHECK-NEXT:    i64x2.replace_lane 12623; CHECK-NEXT:    # fallthrough-return2624entry:2625  %conv = fptosi <2 x half> %x to <2 x i128>2626  %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>)2627  %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>)2628  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>2629  ret <2 x i64> %conv62630}2631 2632define <2 x i64> @utest_f16i64_mm(<2 x half> %x) {2633; CHECK-LABEL: utest_f16i64_mm:2634; CHECK:         .functype utest_f16i64_mm (f32, f32) -> (v128)2635; CHECK-NEXT:    .local i32, i64, i64, i64, i642636; CHECK-NEXT:  # %bb.0: # %entry2637; CHECK-NEXT:    global.get __stack_pointer2638; CHECK-NEXT:    i32.const 322639; CHECK-NEXT:    i32.sub2640; CHECK-NEXT:    local.tee 22641; CHECK-NEXT:    global.set __stack_pointer2642; CHECK-NEXT:    local.get 22643; CHECK-NEXT:    i32.const 162644; CHECK-NEXT:    i32.add2645; CHECK-NEXT:    local.get 12646; CHECK-NEXT:    call __truncsfhf22647; CHECK-NEXT:    call __extendhfsf22648; CHECK-NEXT:    call __fixunssfti2649; CHECK-NEXT:    local.get 22650; CHECK-NEXT:    local.get 02651; CHECK-NEXT:    call __truncsfhf22652; CHECK-NEXT:    call __extendhfsf22653; CHECK-NEXT:    call __fixunssfti2654; CHECK-NEXT:    local.get 22655; CHECK-NEXT:    i64.load 242656; CHECK-NEXT:    local.set 32657; CHECK-NEXT:    local.get 22658; CHECK-NEXT:    i64.load 162659; CHECK-NEXT:    local.set 42660; CHECK-NEXT:    local.get 22661; CHECK-NEXT:    i64.load 82662; CHECK-NEXT:    local.set 52663; CHECK-NEXT:    local.get 22664; CHECK-NEXT:    i64.load 02665; CHECK-NEXT:    local.set 62666; CHECK-NEXT:    local.get 22667; CHECK-NEXT:    i32.const 322668; CHECK-NEXT:    i32.add2669; CHECK-NEXT:    global.set __stack_pointer2670; CHECK-NEXT:    local.get 62671; CHECK-NEXT:    i64.const 02672; CHECK-NEXT:    local.get 52673; CHECK-NEXT:    i64.eqz2674; CHECK-NEXT:    i64.select2675; CHECK-NEXT:    i64x2.splat2676; CHECK-NEXT:    local.get 42677; CHECK-NEXT:    i64.const 02678; CHECK-NEXT:    local.get 32679; CHECK-NEXT:    i64.eqz2680; CHECK-NEXT:    i64.select2681; CHECK-NEXT:    i64x2.replace_lane 12682; CHECK-NEXT:    # fallthrough-return2683entry:2684  %conv = fptoui <2 x half> %x to <2 x i128>2685  %spec.store.select = call <2 x i128> @llvm.umin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)2686  %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>2687  ret <2 x i64> %conv62688}2689 2690define <2 x i64> @ustest_f16i64_mm(<2 x half> %x) {2691; CHECK-LABEL: ustest_f16i64_mm:2692; CHECK:         .functype ustest_f16i64_mm (f32, f32) -> (v128)2693; CHECK-NEXT:    .local i32, i64, i64, i64, i642694; CHECK-NEXT:  # %bb.0: # %entry2695; CHECK-NEXT:    global.get __stack_pointer2696; CHECK-NEXT:    i32.const 322697; CHECK-NEXT:    i32.sub2698; CHECK-NEXT:    local.tee 22699; CHECK-NEXT:    global.set __stack_pointer2700; CHECK-NEXT:    local.get 22701; CHECK-NEXT:    i32.const 162702; CHECK-NEXT:    i32.add2703; CHECK-NEXT:    local.get 12704; CHECK-NEXT:    call __truncsfhf22705; CHECK-NEXT:    call __extendhfsf22706; CHECK-NEXT:    call __fixsfti2707; CHECK-NEXT:    local.get 22708; CHECK-NEXT:    local.get 02709; CHECK-NEXT:    call __truncsfhf22710; CHECK-NEXT:    call __extendhfsf22711; CHECK-NEXT:    call __fixsfti2712; CHECK-NEXT:    local.get 22713; CHECK-NEXT:    i64.load 242714; CHECK-NEXT:    local.set 32715; CHECK-NEXT:    local.get 22716; CHECK-NEXT:    i64.load 162717; CHECK-NEXT:    local.set 42718; CHECK-NEXT:    local.get 22719; CHECK-NEXT:    i64.load 82720; CHECK-NEXT:    local.set 52721; CHECK-NEXT:    local.get 22722; CHECK-NEXT:    i64.load 02723; CHECK-NEXT:    local.set 62724; CHECK-NEXT:    local.get 22725; CHECK-NEXT:    i32.const 322726; CHECK-NEXT:    i32.add2727; CHECK-NEXT:    global.set __stack_pointer2728; CHECK-NEXT:    i64.const 02729; CHECK-NEXT:    local.get 62730; CHECK-NEXT:    i64.const 02731; CHECK-NEXT:    local.get 52732; CHECK-NEXT:    i64.const 12733; CHECK-NEXT:    i64.lt_s2734; CHECK-NEXT:    local.tee 22735; CHECK-NEXT:    i64.select2736; CHECK-NEXT:    local.get 52737; CHECK-NEXT:    i64.const 12738; CHECK-NEXT:    local.get 22739; CHECK-NEXT:    i64.select2740; CHECK-NEXT:    i64.const 02741; CHECK-NEXT:    i64.lt_s2742; CHECK-NEXT:    i64.select2743; CHECK-NEXT:    i64x2.splat2744; CHECK-NEXT:    i64.const 02745; CHECK-NEXT:    local.get 42746; CHECK-NEXT:    i64.const 02747; CHECK-NEXT:    local.get 32748; CHECK-NEXT:    i64.const 12749; CHECK-NEXT:    i64.lt_s2750; CHECK-NEXT:    local.tee 22751; CHECK-NEXT:    i64.select2752; CHECK-NEXT:    local.get 32753; CHECK-NEXT:    i64.const 12754; CHECK-NEXT:    local.get 22755; CHECK-NEXT:    i64.select2756; CHECK-NEXT:    i64.const 02757; CHECK-NEXT:    i64.lt_s2758; CHECK-NEXT:    i64.select2759; CHECK-NEXT:    i64x2.replace_lane 12760; CHECK-NEXT:    # fallthrough-return2761entry:2762  %conv = fptosi <2 x half> %x to <2 x i128>2763  %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)2764  %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> zeroinitializer)2765  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>2766  ret <2 x i64> %conv62767}2768 2769; i32 non saturate2770 2771define <4 x i32> @ustest_f16i32_nsat(<4 x half> %x) {2772; CHECK-LABEL: ustest_f16i32_nsat:2773; CHECK:         .functype ustest_f16i32_nsat (f32, f32, f32, f32) -> (v128)2774; CHECK-NEXT:    .local v1282775; CHECK-NEXT:  # %bb.0: # %entry2776; CHECK-NEXT:    local.get 12777; CHECK-NEXT:    call __truncsfhf22778; CHECK-NEXT:    call __extendhfsf22779; CHECK-NEXT:    local.set 12780; CHECK-NEXT:    local.get 02781; CHECK-NEXT:    call __truncsfhf22782; CHECK-NEXT:    call __extendhfsf22783; CHECK-NEXT:    i32.trunc_sat_f32_s2784; CHECK-NEXT:    i32x4.splat2785; CHECK-NEXT:    local.get 12786; CHECK-NEXT:    i32.trunc_sat_f32_s2787; CHECK-NEXT:    i32x4.replace_lane 12788; CHECK-NEXT:    local.get 22789; CHECK-NEXT:    call __truncsfhf22790; CHECK-NEXT:    call __extendhfsf22791; CHECK-NEXT:    i32.trunc_sat_f32_s2792; CHECK-NEXT:    i32x4.replace_lane 22793; CHECK-NEXT:    local.get 32794; CHECK-NEXT:    call __truncsfhf22795; CHECK-NEXT:    call __extendhfsf22796; CHECK-NEXT:    i32.trunc_sat_f32_s2797; CHECK-NEXT:    i32x4.replace_lane 32798; CHECK-NEXT:    v128.const 0, 0, 0, 02799; CHECK-NEXT:    local.tee 42800; CHECK-NEXT:    i32x4.min_s2801; CHECK-NEXT:    local.get 42802; CHECK-NEXT:    i32x4.max_s2803; CHECK-NEXT:    # fallthrough-return2804entry:2805  %conv = fptosi <4 x half> %x to <4 x i32>2806  %spec.store.select = call <4 x i32> @llvm.smin.v4i32(<4 x i32> zeroinitializer, <4 x i32> %conv)2807  %spec.store.select7 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %spec.store.select, <4 x i32> zeroinitializer)2808  ret <4 x i32> %spec.store.select72809}2810 2811define <2 x i8> @fptosi_v2f32_v2i8(<2 x float> %x) {2812; CHECK-LABEL: fptosi_v2f32_v2i8:2813; CHECK:         .functype fptosi_v2f32_v2i8 (v128) -> (v128)2814; CHECK-NEXT:  # %bb.0:2815; CHECK-NEXT:    local.get 02816; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s2817; CHECK-NEXT:    v128.const 255, 255, 255, 2552818; CHECK-NEXT:    v128.and2819; CHECK-NEXT:    local.get 02820; CHECK-NEXT:    i16x8.narrow_i32x4_u2821; CHECK-NEXT:    local.get 02822; CHECK-NEXT:    local.get 02823; CHECK-NEXT:    i16x8.narrow_i32x4_u2824; CHECK-NEXT:    i8x16.narrow_i16x8_u2825; CHECK-NEXT:    # fallthrough-return2826  %conv = fptosi <2 x float> %x to <2 x i8>2827  ret <2 x i8> %conv2828}2829 2830define <2 x i8> @fptoui_v2f32_v2i8(<2 x float> %x) {2831; CHECK-LABEL: fptoui_v2f32_v2i8:2832; CHECK:         .functype fptoui_v2f32_v2i8 (v128) -> (v128)2833; CHECK-NEXT:  # %bb.0:2834; CHECK-NEXT:    local.get 02835; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u2836; CHECK-NEXT:    v128.const 255, 255, 255, 2552837; CHECK-NEXT:    v128.and2838; CHECK-NEXT:    local.get 02839; CHECK-NEXT:    i16x8.narrow_i32x4_u2840; CHECK-NEXT:    local.get 02841; CHECK-NEXT:    local.get 02842; CHECK-NEXT:    i16x8.narrow_i32x4_u2843; CHECK-NEXT:    i8x16.narrow_i16x8_u2844; CHECK-NEXT:    # fallthrough-return2845  %conv = fptoui <2 x float> %x to <2 x i8>2846  ret <2 x i8> %conv2847}2848 2849define <2 x i16> @fptosi_v2f32_v2i16(<2 x float> %x) {2850; CHECK-LABEL: fptosi_v2f32_v2i16:2851; CHECK:         .functype fptosi_v2f32_v2i16 (v128) -> (v128)2852; CHECK-NEXT:  # %bb.0:2853; CHECK-NEXT:    local.get 02854; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s2855; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655352856; CHECK-NEXT:    v128.and2857; CHECK-NEXT:    local.get 02858; CHECK-NEXT:    i16x8.narrow_i32x4_u2859; CHECK-NEXT:    # fallthrough-return2860  %conv = fptosi <2 x float> %x to <2 x i16>2861  ret <2 x i16> %conv2862}2863 2864define <2 x i16> @fptoui_v2f32_v2i16(<2 x float> %x) {2865; CHECK-LABEL: fptoui_v2f32_v2i16:2866; CHECK:         .functype fptoui_v2f32_v2i16 (v128) -> (v128)2867; CHECK-NEXT:  # %bb.0:2868; CHECK-NEXT:    local.get 02869; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u2870; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655352871; CHECK-NEXT:    v128.and2872; CHECK-NEXT:    local.get 02873; CHECK-NEXT:    i16x8.narrow_i32x4_u2874; CHECK-NEXT:    # fallthrough-return2875  %conv = fptoui <2 x float> %x to <2 x i16>2876  ret <2 x i16> %conv2877}2878 2879define <4 x i8> @fptosi_v4f32_v4i8(<4 x float> %x) {2880; CHECK-LABEL: fptosi_v4f32_v4i8:2881; CHECK:         .functype fptosi_v4f32_v4i8 (v128) -> (v128)2882; CHECK-NEXT:  # %bb.0:2883; CHECK-NEXT:    local.get 02884; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s2885; CHECK-NEXT:    v128.const 255, 255, 255, 2552886; CHECK-NEXT:    v128.and2887; CHECK-NEXT:    local.get 02888; CHECK-NEXT:    i16x8.narrow_i32x4_u2889; CHECK-NEXT:    local.get 02890; CHECK-NEXT:    local.get 02891; CHECK-NEXT:    i16x8.narrow_i32x4_u2892; CHECK-NEXT:    i8x16.narrow_i16x8_u2893; CHECK-NEXT:    # fallthrough-return2894  %conv = fptosi <4 x float> %x to <4 x i8>2895  ret <4 x i8> %conv2896}2897 2898define <4 x i8> @fptoui_v4f32_v4i8(<4 x float> %x) {2899; CHECK-LABEL: fptoui_v4f32_v4i8:2900; CHECK:         .functype fptoui_v4f32_v4i8 (v128) -> (v128)2901; CHECK-NEXT:  # %bb.0:2902; CHECK-NEXT:    local.get 02903; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u2904; CHECK-NEXT:    v128.const 255, 255, 255, 2552905; CHECK-NEXT:    v128.and2906; CHECK-NEXT:    local.get 02907; CHECK-NEXT:    i16x8.narrow_i32x4_u2908; CHECK-NEXT:    local.get 02909; CHECK-NEXT:    local.get 02910; CHECK-NEXT:    i16x8.narrow_i32x4_u2911; CHECK-NEXT:    i8x16.narrow_i16x8_u2912; CHECK-NEXT:    # fallthrough-return2913  %conv = fptoui <4 x float> %x to <4 x i8>2914  ret <4 x i8> %conv2915}2916 2917define <4 x i16> @fptosi_v4f32_v4i16(<4 x float> %x) {2918; CHECK-LABEL: fptosi_v4f32_v4i16:2919; CHECK:         .functype fptosi_v4f32_v4i16 (v128) -> (v128)2920; CHECK-NEXT:  # %bb.0:2921; CHECK-NEXT:    local.get 02922; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s2923; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655352924; CHECK-NEXT:    v128.and2925; CHECK-NEXT:    local.get 02926; CHECK-NEXT:    i16x8.narrow_i32x4_u2927; CHECK-NEXT:    # fallthrough-return2928  %conv = fptosi <4 x float> %x to <4 x i16>2929  ret <4 x i16> %conv2930}2931 2932define <4 x i16> @fptoui_v4f32_v4i16(<4 x float> %x) {2933; CHECK-LABEL: fptoui_v4f32_v4i16:2934; CHECK:         .functype fptoui_v4f32_v4i16 (v128) -> (v128)2935; CHECK-NEXT:  # %bb.0:2936; CHECK-NEXT:    local.get 02937; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u2938; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655352939; CHECK-NEXT:    v128.and2940; CHECK-NEXT:    local.get 02941; CHECK-NEXT:    i16x8.narrow_i32x4_u2942; CHECK-NEXT:    # fallthrough-return2943  %conv = fptoui <4 x float> %x to <4 x i16>2944  ret <4 x i16> %conv2945}2946 2947define <8 x i8> @fptosi_v8f32_v8i8(<8 x float> %x) {2948; CHECK-LABEL: fptosi_v8f32_v8i8:2949; CHECK:         .functype fptosi_v8f32_v8i8 (v128, v128) -> (v128)2950; CHECK-NEXT:  # %bb.0:2951; CHECK-NEXT:    local.get 02952; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s2953; CHECK-NEXT:    v128.const 255, 255, 255, 2552954; CHECK-NEXT:    local.tee 02955; CHECK-NEXT:    v128.and2956; CHECK-NEXT:    local.get 12957; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s2958; CHECK-NEXT:    local.get 02959; CHECK-NEXT:    v128.and2960; CHECK-NEXT:    i16x8.narrow_i32x4_u2961; CHECK-NEXT:    local.get 12962; CHECK-NEXT:    local.get 12963; CHECK-NEXT:    i16x8.narrow_i32x4_u2964; CHECK-NEXT:    i8x16.narrow_i16x8_u2965; CHECK-NEXT:    # fallthrough-return2966  %conv = fptosi <8 x float> %x to <8 x i8>2967  ret <8 x i8> %conv2968}2969 2970define <8 x i8> @fptoui_v8f32_v8i8(<8 x float> %x) {2971; CHECK-LABEL: fptoui_v8f32_v8i8:2972; CHECK:         .functype fptoui_v8f32_v8i8 (v128, v128) -> (v128)2973; CHECK-NEXT:  # %bb.0:2974; CHECK-NEXT:    local.get 02975; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u2976; CHECK-NEXT:    v128.const 255, 255, 255, 2552977; CHECK-NEXT:    local.tee 02978; CHECK-NEXT:    v128.and2979; CHECK-NEXT:    local.get 12980; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u2981; CHECK-NEXT:    local.get 02982; CHECK-NEXT:    v128.and2983; CHECK-NEXT:    i16x8.narrow_i32x4_u2984; CHECK-NEXT:    local.get 12985; CHECK-NEXT:    local.get 12986; CHECK-NEXT:    i16x8.narrow_i32x4_u2987; CHECK-NEXT:    i8x16.narrow_i16x8_u2988; CHECK-NEXT:    # fallthrough-return2989  %conv = fptoui <8 x float> %x to <8 x i8>2990  ret <8 x i8> %conv2991}2992 2993define <8 x i16> @fptosi_v8f32_v8i16(<8 x float> %x) {2994; CHECK-LABEL: fptosi_v8f32_v8i16:2995; CHECK:         .functype fptosi_v8f32_v8i16 (v128, v128) -> (v128)2996; CHECK-NEXT:  # %bb.0:2997; CHECK-NEXT:    local.get 02998; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s2999; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655353000; CHECK-NEXT:    local.tee 03001; CHECK-NEXT:    v128.and3002; CHECK-NEXT:    local.get 13003; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s3004; CHECK-NEXT:    local.get 03005; CHECK-NEXT:    v128.and3006; CHECK-NEXT:    i16x8.narrow_i32x4_u3007; CHECK-NEXT:    # fallthrough-return3008  %conv = fptosi <8 x float> %x to <8 x i16>3009  ret <8 x i16> %conv3010}3011 3012define <8 x i16> @fptoui_v8f32_v8i16(<8 x float> %x) {3013; CHECK-LABEL: fptoui_v8f32_v8i16:3014; CHECK:         .functype fptoui_v8f32_v8i16 (v128, v128) -> (v128)3015; CHECK-NEXT:  # %bb.0:3016; CHECK-NEXT:    local.get 03017; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u3018; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655353019; CHECK-NEXT:    local.tee 03020; CHECK-NEXT:    v128.and3021; CHECK-NEXT:    local.get 13022; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u3023; CHECK-NEXT:    local.get 03024; CHECK-NEXT:    v128.and3025; CHECK-NEXT:    i16x8.narrow_i32x4_u3026; CHECK-NEXT:    # fallthrough-return3027  %conv = fptoui <8 x float> %x to <8 x i16>3028  ret <8 x i16> %conv3029}3030 3031define <16 x i8> @fptosi_v16f32_v16i8(<16 x float> %x) {3032; CHECK-LABEL: fptosi_v16f32_v16i8:3033; CHECK:         .functype fptosi_v16f32_v16i8 (v128, v128, v128, v128) -> (v128)3034; CHECK-NEXT:  # %bb.0:3035; CHECK-NEXT:    local.get 03036; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s3037; CHECK-NEXT:    v128.const 255, 255, 255, 2553038; CHECK-NEXT:    local.tee 03039; CHECK-NEXT:    v128.and3040; CHECK-NEXT:    local.get 13041; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s3042; CHECK-NEXT:    local.get 03043; CHECK-NEXT:    v128.and3044; CHECK-NEXT:    i16x8.narrow_i32x4_u3045; CHECK-NEXT:    local.get 23046; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s3047; CHECK-NEXT:    local.get 03048; CHECK-NEXT:    v128.and3049; CHECK-NEXT:    local.get 33050; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s3051; CHECK-NEXT:    local.get 03052; CHECK-NEXT:    v128.and3053; CHECK-NEXT:    i16x8.narrow_i32x4_u3054; CHECK-NEXT:    i8x16.narrow_i16x8_u3055; CHECK-NEXT:    # fallthrough-return3056  %conv = fptosi <16 x float> %x to <16 x i8>3057  ret <16 x i8> %conv3058}3059 3060define <16 x i8> @fptoui_v16f32_v16i8(<16 x float> %x) {3061; CHECK-LABEL: fptoui_v16f32_v16i8:3062; CHECK:         .functype fptoui_v16f32_v16i8 (v128, v128, v128, v128) -> (v128)3063; CHECK-NEXT:  # %bb.0:3064; CHECK-NEXT:    local.get 03065; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u3066; CHECK-NEXT:    v128.const 255, 255, 255, 2553067; CHECK-NEXT:    local.tee 03068; CHECK-NEXT:    v128.and3069; CHECK-NEXT:    local.get 13070; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u3071; CHECK-NEXT:    local.get 03072; CHECK-NEXT:    v128.and3073; CHECK-NEXT:    i16x8.narrow_i32x4_u3074; CHECK-NEXT:    local.get 23075; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u3076; CHECK-NEXT:    local.get 03077; CHECK-NEXT:    v128.and3078; CHECK-NEXT:    local.get 33079; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u3080; CHECK-NEXT:    local.get 03081; CHECK-NEXT:    v128.and3082; CHECK-NEXT:    i16x8.narrow_i32x4_u3083; CHECK-NEXT:    i8x16.narrow_i16x8_u3084; CHECK-NEXT:    # fallthrough-return3085  %conv = fptoui <16 x float> %x to <16 x i8>3086  ret <16 x i8> %conv3087}3088 3089define <16 x i16> @fptosi_v16f32_v16i16(<16 x float> %x) {3090; CHECK-LABEL: fptosi_v16f32_v16i16:3091; CHECK:         .functype fptosi_v16f32_v16i16 (i32, v128, v128, v128, v128) -> ()3092; CHECK-NEXT:  # %bb.0:3093; CHECK-NEXT:    local.get 03094; CHECK-NEXT:    local.get 33095; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s3096; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655353097; CHECK-NEXT:    local.tee 33098; CHECK-NEXT:    v128.and3099; CHECK-NEXT:    local.get 43100; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s3101; CHECK-NEXT:    local.get 33102; CHECK-NEXT:    v128.and3103; CHECK-NEXT:    i16x8.narrow_i32x4_u3104; CHECK-NEXT:    v128.store 163105; CHECK-NEXT:    local.get 03106; CHECK-NEXT:    local.get 13107; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s3108; CHECK-NEXT:    local.get 33109; CHECK-NEXT:    v128.and3110; CHECK-NEXT:    local.get 23111; CHECK-NEXT:    i32x4.trunc_sat_f32x4_s3112; CHECK-NEXT:    local.get 33113; CHECK-NEXT:    v128.and3114; CHECK-NEXT:    i16x8.narrow_i32x4_u3115; CHECK-NEXT:    v128.store 03116; CHECK-NEXT:    # fallthrough-return3117  %conv = fptosi <16 x float> %x to <16 x i16>3118  ret <16 x i16> %conv3119}3120 3121define <16 x i16> @fptoui_v16f32_v16i16(<16 x float> %x) {3122; CHECK-LABEL: fptoui_v16f32_v16i16:3123; CHECK:         .functype fptoui_v16f32_v16i16 (i32, v128, v128, v128, v128) -> ()3124; CHECK-NEXT:  # %bb.0:3125; CHECK-NEXT:    local.get 03126; CHECK-NEXT:    local.get 33127; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u3128; CHECK-NEXT:    v128.const 65535, 65535, 65535, 655353129; CHECK-NEXT:    local.tee 33130; CHECK-NEXT:    v128.and3131; CHECK-NEXT:    local.get 43132; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u3133; CHECK-NEXT:    local.get 33134; CHECK-NEXT:    v128.and3135; CHECK-NEXT:    i16x8.narrow_i32x4_u3136; CHECK-NEXT:    v128.store 163137; CHECK-NEXT:    local.get 03138; CHECK-NEXT:    local.get 13139; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u3140; CHECK-NEXT:    local.get 33141; CHECK-NEXT:    v128.and3142; CHECK-NEXT:    local.get 23143; CHECK-NEXT:    i32x4.trunc_sat_f32x4_u3144; CHECK-NEXT:    local.get 33145; CHECK-NEXT:    v128.and3146; CHECK-NEXT:    i16x8.narrow_i32x4_u3147; CHECK-NEXT:    v128.store 03148; CHECK-NEXT:    # fallthrough-return3149  %conv = fptoui <16 x float> %x to <16 x i16>3150  ret <16 x i16> %conv3151}3152 3153declare <2 x i32> @llvm.smin.v2i32(<2 x i32>, <2 x i32>)3154declare <2 x i32> @llvm.smax.v2i32(<2 x i32>, <2 x i32>)3155declare <2 x i32> @llvm.umin.v2i32(<2 x i32>, <2 x i32>)3156declare <4 x i32> @llvm.smin.v4i32(<4 x i32>, <4 x i32>)3157declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>)3158declare <4 x i32> @llvm.umin.v4i32(<4 x i32>, <4 x i32>)3159declare <8 x i32> @llvm.smin.v8i32(<8 x i32>, <8 x i32>)3160declare <8 x i32> @llvm.smax.v8i32(<8 x i32>, <8 x i32>)3161declare <8 x i32> @llvm.umin.v8i32(<8 x i32>, <8 x i32>)3162declare <2 x i64> @llvm.smin.v2i64(<2 x i64>, <2 x i64>)3163declare <2 x i64> @llvm.smax.v2i64(<2 x i64>, <2 x i64>)3164declare <2 x i64> @llvm.umin.v2i64(<2 x i64>, <2 x i64>)3165declare <4 x i64> @llvm.smin.v4i64(<4 x i64>, <4 x i64>)3166declare <4 x i64> @llvm.smax.v4i64(<4 x i64>, <4 x i64>)3167declare <4 x i64> @llvm.umin.v4i64(<4 x i64>, <4 x i64>)3168declare <2 x i128> @llvm.smin.v2i128(<2 x i128>, <2 x i128>)3169declare <2 x i128> @llvm.smax.v2i128(<2 x i128>, <2 x i128>)3170declare <2 x i128> @llvm.umin.v2i128(<2 x i128>, <2 x i128>)3171