brintos

brintos / llvm-project-archived public Read only

0
0
Text · 60.9 KiB · 18d175e Raw
1030 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,SSE3; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX256,AVX14; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=bdver1 -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX256,AVX15; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX256,AVX26; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skylake-avx512 -mattr=-prefer-256-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX5127; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skylake-avx512 -mattr=+prefer-256-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX256,AVX256DQ8 9target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"10 11@src64 = common global [8 x i64] zeroinitializer, align 6412@src32 = common global [16 x i32] zeroinitializer, align 6413@src16 = common global [32 x i16] zeroinitializer, align 6414@src8  = common global [64 x i8] zeroinitializer, align 6415 16@dst64 = common global [8 x double] zeroinitializer, align 6417@dst32 = common global [16 x float] zeroinitializer, align 6418 19;20; UITOFP to vXf6421;22 23define void @uitofp_2i64_2f64() #0 {24; CHECK-LABEL: @uitofp_2i64_2f64(25; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 6426; CHECK-NEXT:    [[TMP2:%.*]] = uitofp <2 x i64> [[TMP1]] to <2 x double>27; CHECK-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 6428; CHECK-NEXT:    ret void29;30  %ld0 = load i64, ptr @src64, align 6431  %ld1 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 1), align 832  %cvt0 = uitofp i64 %ld0 to double33  %cvt1 = uitofp i64 %ld1 to double34  store double %cvt0, ptr @dst64, align 6435  store double %cvt1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 836  ret void37}38 39define void @uitofp_4i64_4f64() #0 {40; SSE-LABEL: @uitofp_4i64_4f64(41; SSE-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 6442; SSE-NEXT:    [[TMP2:%.*]] = uitofp <2 x i64> [[TMP1]] to <2 x double>43; SSE-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 6444; SSE-NEXT:    [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 2), align 1645; SSE-NEXT:    [[TMP4:%.*]] = uitofp <2 x i64> [[TMP3]] to <2 x double>46; SSE-NEXT:    store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 1647; SSE-NEXT:    ret void48;49; AVX-LABEL: @uitofp_4i64_4f64(50; AVX-NEXT:    [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 6451; AVX-NEXT:    [[TMP2:%.*]] = uitofp <4 x i64> [[TMP1]] to <4 x double>52; AVX-NEXT:    store <4 x double> [[TMP2]], ptr @dst64, align 6453; AVX-NEXT:    ret void54;55  %ld0 = load i64, ptr @src64, align 6456  %ld1 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 1), align 857  %ld2 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 2), align 1658  %ld3 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 3), align 859  %cvt0 = uitofp i64 %ld0 to double60  %cvt1 = uitofp i64 %ld1 to double61  %cvt2 = uitofp i64 %ld2 to double62  %cvt3 = uitofp i64 %ld3 to double63  store double %cvt0, ptr @dst64, align 6464  store double %cvt1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 865  store double %cvt2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 1666  store double %cvt3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 867  ret void68}69 70define void @uitofp_8i64_8f64() #0 {71; SSE-LABEL: @uitofp_8i64_8f64(72; SSE-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 6473; SSE-NEXT:    [[TMP2:%.*]] = uitofp <2 x i64> [[TMP1]] to <2 x double>74; SSE-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 6475; SSE-NEXT:    [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 2), align 1676; SSE-NEXT:    [[TMP4:%.*]] = uitofp <2 x i64> [[TMP3]] to <2 x double>77; SSE-NEXT:    store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 1678; SSE-NEXT:    [[TMP5:%.*]] = load <2 x i64>, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 4), align 3279; SSE-NEXT:    [[TMP6:%.*]] = uitofp <2 x i64> [[TMP5]] to <2 x double>80; SSE-NEXT:    store <2 x double> [[TMP6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 3281; SSE-NEXT:    [[TMP7:%.*]] = load <2 x i64>, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 6), align 1682; SSE-NEXT:    [[TMP8:%.*]] = uitofp <2 x i64> [[TMP7]] to <2 x double>83; SSE-NEXT:    store <2 x double> [[TMP8]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 1684; SSE-NEXT:    ret void85;86; AVX256-LABEL: @uitofp_8i64_8f64(87; AVX256-NEXT:    [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 6488; AVX256-NEXT:    [[TMP2:%.*]] = uitofp <4 x i64> [[TMP1]] to <4 x double>89; AVX256-NEXT:    store <4 x double> [[TMP2]], ptr @dst64, align 6490; AVX256-NEXT:    [[TMP3:%.*]] = load <4 x i64>, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 4), align 3291; AVX256-NEXT:    [[TMP4:%.*]] = uitofp <4 x i64> [[TMP3]] to <4 x double>92; AVX256-NEXT:    store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 3293; AVX256-NEXT:    ret void94;95; AVX512-LABEL: @uitofp_8i64_8f64(96; AVX512-NEXT:    [[TMP1:%.*]] = load <8 x i64>, ptr @src64, align 6497; AVX512-NEXT:    [[TMP2:%.*]] = uitofp <8 x i64> [[TMP1]] to <8 x double>98; AVX512-NEXT:    store <8 x double> [[TMP2]], ptr @dst64, align 6499; AVX512-NEXT:    ret void100;101  %ld0 = load i64, ptr @src64, align 64102  %ld1 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 1), align 8103  %ld2 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 2), align 16104  %ld3 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 3), align 8105  %ld4 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 4), align 32106  %ld5 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 5), align 8107  %ld6 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 6), align 16108  %ld7 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 7), align 8109  %cvt0 = uitofp i64 %ld0 to double110  %cvt1 = uitofp i64 %ld1 to double111  %cvt2 = uitofp i64 %ld2 to double112  %cvt3 = uitofp i64 %ld3 to double113  %cvt4 = uitofp i64 %ld4 to double114  %cvt5 = uitofp i64 %ld5 to double115  %cvt6 = uitofp i64 %ld6 to double116  %cvt7 = uitofp i64 %ld7 to double117  store double %cvt0, ptr @dst64, align 64118  store double %cvt1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8119  store double %cvt2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16120  store double %cvt3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8121  store double %cvt4, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 32122  store double %cvt5, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8123  store double %cvt6, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 16124  store double %cvt7, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8125  ret void126}127 128define void @uitofp_2i32_2f64() #0 {129; SSE-LABEL: @uitofp_2i32_2f64(130; SSE-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr @src32, align 64131; SSE-NEXT:    [[TMP2:%.*]] = uitofp <2 x i32> [[TMP1]] to <2 x double>132; SSE-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 64133; SSE-NEXT:    ret void134;135; AVX1-LABEL: @uitofp_2i32_2f64(136; AVX1-NEXT:    [[LD0:%.*]] = load i32, ptr @src32, align 64137; AVX1-NEXT:    [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 1), align 4138; AVX1-NEXT:    [[CVT0:%.*]] = uitofp i32 [[LD0]] to double139; AVX1-NEXT:    [[CVT1:%.*]] = uitofp i32 [[LD1]] to double140; AVX1-NEXT:    store double [[CVT0]], ptr @dst64, align 64141; AVX1-NEXT:    store double [[CVT1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8142; AVX1-NEXT:    ret void143;144; AVX2-LABEL: @uitofp_2i32_2f64(145; AVX2-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr @src32, align 64146; AVX2-NEXT:    [[TMP2:%.*]] = uitofp <2 x i32> [[TMP1]] to <2 x double>147; AVX2-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 64148; AVX2-NEXT:    ret void149;150; AVX512-LABEL: @uitofp_2i32_2f64(151; AVX512-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr @src32, align 64152; AVX512-NEXT:    [[TMP2:%.*]] = uitofp <2 x i32> [[TMP1]] to <2 x double>153; AVX512-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 64154; AVX512-NEXT:    ret void155;156; AVX256DQ-LABEL: @uitofp_2i32_2f64(157; AVX256DQ-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr @src32, align 64158; AVX256DQ-NEXT:    [[TMP2:%.*]] = uitofp <2 x i32> [[TMP1]] to <2 x double>159; AVX256DQ-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 64160; AVX256DQ-NEXT:    ret void161;162  %ld0 = load i32, ptr @src32, align 64163  %ld1 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 1), align 4164  %cvt0 = uitofp i32 %ld0 to double165  %cvt1 = uitofp i32 %ld1 to double166  store double %cvt0, ptr @dst64, align 64167  store double %cvt1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8168  ret void169}170 171define void @uitofp_4i32_4f64() #0 {172; SSE-LABEL: @uitofp_4i32_4f64(173; SSE-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr @src32, align 64174; SSE-NEXT:    [[TMP2:%.*]] = uitofp <2 x i32> [[TMP1]] to <2 x double>175; SSE-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 64176; SSE-NEXT:    [[TMP3:%.*]] = load <2 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 2), align 8177; SSE-NEXT:    [[TMP4:%.*]] = uitofp <2 x i32> [[TMP3]] to <2 x double>178; SSE-NEXT:    store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16179; SSE-NEXT:    ret void180;181; AVX-LABEL: @uitofp_4i32_4f64(182; AVX-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 64183; AVX-NEXT:    [[TMP2:%.*]] = uitofp <4 x i32> [[TMP1]] to <4 x double>184; AVX-NEXT:    store <4 x double> [[TMP2]], ptr @dst64, align 64185; AVX-NEXT:    ret void186;187  %ld0 = load i32, ptr @src32, align 64188  %ld1 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 1), align 4189  %ld2 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 2), align 8190  %ld3 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 3), align 4191  %cvt0 = uitofp i32 %ld0 to double192  %cvt1 = uitofp i32 %ld1 to double193  %cvt2 = uitofp i32 %ld2 to double194  %cvt3 = uitofp i32 %ld3 to double195  store double %cvt0, ptr @dst64, align 64196  store double %cvt1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8197  store double %cvt2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16198  store double %cvt3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8199  ret void200}201 202define void @uitofp_8i32_8f64() #0 {203; SSE-LABEL: @uitofp_8i32_8f64(204; SSE-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr @src32, align 64205; SSE-NEXT:    [[TMP2:%.*]] = uitofp <2 x i32> [[TMP1]] to <2 x double>206; SSE-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 64207; SSE-NEXT:    [[TMP3:%.*]] = load <2 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 2), align 8208; SSE-NEXT:    [[TMP4:%.*]] = uitofp <2 x i32> [[TMP3]] to <2 x double>209; SSE-NEXT:    store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16210; SSE-NEXT:    [[TMP5:%.*]] = load <2 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 4), align 16211; SSE-NEXT:    [[TMP6:%.*]] = uitofp <2 x i32> [[TMP5]] to <2 x double>212; SSE-NEXT:    store <2 x double> [[TMP6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 32213; SSE-NEXT:    [[TMP7:%.*]] = load <2 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 6), align 8214; SSE-NEXT:    [[TMP8:%.*]] = uitofp <2 x i32> [[TMP7]] to <2 x double>215; SSE-NEXT:    store <2 x double> [[TMP8]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 16216; SSE-NEXT:    ret void217;218; AVX256-LABEL: @uitofp_8i32_8f64(219; AVX256-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 64220; AVX256-NEXT:    [[TMP2:%.*]] = uitofp <4 x i32> [[TMP1]] to <4 x double>221; AVX256-NEXT:    store <4 x double> [[TMP2]], ptr @dst64, align 64222; AVX256-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 4), align 16223; AVX256-NEXT:    [[TMP4:%.*]] = uitofp <4 x i32> [[TMP3]] to <4 x double>224; AVX256-NEXT:    store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 32225; AVX256-NEXT:    ret void226;227; AVX512-LABEL: @uitofp_8i32_8f64(228; AVX512-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 64229; AVX512-NEXT:    [[TMP2:%.*]] = uitofp <8 x i32> [[TMP1]] to <8 x double>230; AVX512-NEXT:    store <8 x double> [[TMP2]], ptr @dst64, align 64231; AVX512-NEXT:    ret void232;233  %ld0 = load i32, ptr @src32, align 64234  %ld1 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 1), align 4235  %ld2 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 2), align 8236  %ld3 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 3), align 4237  %ld4 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 4), align 16238  %ld5 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 5), align 4239  %ld6 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 6), align 8240  %ld7 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 7), align 4241  %cvt0 = uitofp i32 %ld0 to double242  %cvt1 = uitofp i32 %ld1 to double243  %cvt2 = uitofp i32 %ld2 to double244  %cvt3 = uitofp i32 %ld3 to double245  %cvt4 = uitofp i32 %ld4 to double246  %cvt5 = uitofp i32 %ld5 to double247  %cvt6 = uitofp i32 %ld6 to double248  %cvt7 = uitofp i32 %ld7 to double249  store double %cvt0, ptr @dst64, align 64250  store double %cvt1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8251  store double %cvt2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16252  store double %cvt3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8253  store double %cvt4, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 32254  store double %cvt5, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8255  store double %cvt6, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 16256  store double %cvt7, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8257  ret void258}259 260define void @uitofp_2i16_2f64() #0 {261; CHECK-LABEL: @uitofp_2i16_2f64(262; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i16>, ptr @src16, align 64263; CHECK-NEXT:    [[TMP2:%.*]] = uitofp <2 x i16> [[TMP1]] to <2 x double>264; CHECK-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 64265; CHECK-NEXT:    ret void266;267  %ld0 = load i16, ptr @src16, align 64268  %ld1 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 1), align 2269  %cvt0 = uitofp i16 %ld0 to double270  %cvt1 = uitofp i16 %ld1 to double271  store double %cvt0, ptr @dst64, align 64272  store double %cvt1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8273  ret void274}275 276define void @uitofp_4i16_4f64() #0 {277; SSE-LABEL: @uitofp_4i16_4f64(278; SSE-NEXT:    [[TMP1:%.*]] = load <2 x i16>, ptr @src16, align 64279; SSE-NEXT:    [[TMP2:%.*]] = uitofp <2 x i16> [[TMP1]] to <2 x double>280; SSE-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 64281; SSE-NEXT:    [[TMP3:%.*]] = load <2 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 2), align 4282; SSE-NEXT:    [[TMP4:%.*]] = uitofp <2 x i16> [[TMP3]] to <2 x double>283; SSE-NEXT:    store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16284; SSE-NEXT:    ret void285;286; AVX-LABEL: @uitofp_4i16_4f64(287; AVX-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr @src16, align 64288; AVX-NEXT:    [[TMP2:%.*]] = uitofp <4 x i16> [[TMP1]] to <4 x double>289; AVX-NEXT:    store <4 x double> [[TMP2]], ptr @dst64, align 64290; AVX-NEXT:    ret void291;292  %ld0 = load i16, ptr @src16, align 64293  %ld1 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 1), align 2294  %ld2 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 2), align 4295  %ld3 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 3), align 2296  %cvt0 = uitofp i16 %ld0 to double297  %cvt1 = uitofp i16 %ld1 to double298  %cvt2 = uitofp i16 %ld2 to double299  %cvt3 = uitofp i16 %ld3 to double300  store double %cvt0, ptr @dst64, align 64301  store double %cvt1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8302  store double %cvt2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16303  store double %cvt3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8304  ret void305}306 307define void @uitofp_8i16_8f64() #0 {308; SSE-LABEL: @uitofp_8i16_8f64(309; SSE-NEXT:    [[TMP1:%.*]] = load <2 x i16>, ptr @src16, align 64310; SSE-NEXT:    [[TMP2:%.*]] = uitofp <2 x i16> [[TMP1]] to <2 x double>311; SSE-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 64312; SSE-NEXT:    [[TMP3:%.*]] = load <2 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 2), align 4313; SSE-NEXT:    [[TMP4:%.*]] = uitofp <2 x i16> [[TMP3]] to <2 x double>314; SSE-NEXT:    store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16315; SSE-NEXT:    [[TMP5:%.*]] = load <2 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 4), align 8316; SSE-NEXT:    [[TMP6:%.*]] = uitofp <2 x i16> [[TMP5]] to <2 x double>317; SSE-NEXT:    store <2 x double> [[TMP6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 32318; SSE-NEXT:    [[TMP7:%.*]] = load <2 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 6), align 4319; SSE-NEXT:    [[TMP8:%.*]] = uitofp <2 x i16> [[TMP7]] to <2 x double>320; SSE-NEXT:    store <2 x double> [[TMP8]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 16321; SSE-NEXT:    ret void322;323; AVX256-LABEL: @uitofp_8i16_8f64(324; AVX256-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr @src16, align 64325; AVX256-NEXT:    [[TMP2:%.*]] = uitofp <4 x i16> [[TMP1]] to <4 x double>326; AVX256-NEXT:    store <4 x double> [[TMP2]], ptr @dst64, align 64327; AVX256-NEXT:    [[TMP3:%.*]] = load <4 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 4), align 8328; AVX256-NEXT:    [[TMP4:%.*]] = uitofp <4 x i16> [[TMP3]] to <4 x double>329; AVX256-NEXT:    store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 32330; AVX256-NEXT:    ret void331;332; AVX512-LABEL: @uitofp_8i16_8f64(333; AVX512-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 64334; AVX512-NEXT:    [[TMP2:%.*]] = uitofp <8 x i16> [[TMP1]] to <8 x double>335; AVX512-NEXT:    store <8 x double> [[TMP2]], ptr @dst64, align 64336; AVX512-NEXT:    ret void337;338  %ld0 = load i16, ptr @src16, align 64339  %ld1 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 1), align 2340  %ld2 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 2), align 4341  %ld3 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 3), align 2342  %ld4 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 4), align 8343  %ld5 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 5), align 2344  %ld6 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 6), align 4345  %ld7 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 7), align 2346  %cvt0 = uitofp i16 %ld0 to double347  %cvt1 = uitofp i16 %ld1 to double348  %cvt2 = uitofp i16 %ld2 to double349  %cvt3 = uitofp i16 %ld3 to double350  %cvt4 = uitofp i16 %ld4 to double351  %cvt5 = uitofp i16 %ld5 to double352  %cvt6 = uitofp i16 %ld6 to double353  %cvt7 = uitofp i16 %ld7 to double354  store double %cvt0, ptr @dst64, align 64355  store double %cvt1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8356  store double %cvt2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16357  store double %cvt3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8358  store double %cvt4, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 32359  store double %cvt5, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8360  store double %cvt6, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 16361  store double %cvt7, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8362  ret void363}364 365define void @uitofp_2i8_2f64() #0 {366; CHECK-LABEL: @uitofp_2i8_2f64(367; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i8>, ptr @src8, align 64368; CHECK-NEXT:    [[TMP2:%.*]] = uitofp <2 x i8> [[TMP1]] to <2 x double>369; CHECK-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 64370; CHECK-NEXT:    ret void371;372  %ld0 = load i8, ptr @src8, align 64373  %ld1 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 1), align 1374  %cvt0 = uitofp i8 %ld0 to double375  %cvt1 = uitofp i8 %ld1 to double376  store double %cvt0, ptr @dst64, align 64377  store double %cvt1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8378  ret void379}380 381define void @uitofp_4i8_4f64() #0 {382; SSE-LABEL: @uitofp_4i8_4f64(383; SSE-NEXT:    [[TMP1:%.*]] = load <2 x i8>, ptr @src8, align 64384; SSE-NEXT:    [[TMP2:%.*]] = uitofp <2 x i8> [[TMP1]] to <2 x double>385; SSE-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 64386; SSE-NEXT:    [[TMP3:%.*]] = load <2 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 2), align 2387; SSE-NEXT:    [[TMP4:%.*]] = uitofp <2 x i8> [[TMP3]] to <2 x double>388; SSE-NEXT:    store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16389; SSE-NEXT:    ret void390;391; AVX-LABEL: @uitofp_4i8_4f64(392; AVX-NEXT:    [[TMP1:%.*]] = load <4 x i8>, ptr @src8, align 64393; AVX-NEXT:    [[TMP2:%.*]] = uitofp <4 x i8> [[TMP1]] to <4 x double>394; AVX-NEXT:    store <4 x double> [[TMP2]], ptr @dst64, align 64395; AVX-NEXT:    ret void396;397  %ld0 = load i8, ptr @src8, align 64398  %ld1 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 1), align 1399  %ld2 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 2), align 2400  %ld3 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 3), align 1401  %cvt0 = uitofp i8 %ld0 to double402  %cvt1 = uitofp i8 %ld1 to double403  %cvt2 = uitofp i8 %ld2 to double404  %cvt3 = uitofp i8 %ld3 to double405  store double %cvt0, ptr @dst64, align 64406  store double %cvt1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8407  store double %cvt2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16408  store double %cvt3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8409  ret void410}411 412define void @uitofp_8i8_8f64() #0 {413; SSE-LABEL: @uitofp_8i8_8f64(414; SSE-NEXT:    [[TMP1:%.*]] = load <2 x i8>, ptr @src8, align 64415; SSE-NEXT:    [[TMP2:%.*]] = uitofp <2 x i8> [[TMP1]] to <2 x double>416; SSE-NEXT:    store <2 x double> [[TMP2]], ptr @dst64, align 64417; SSE-NEXT:    [[TMP3:%.*]] = load <2 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 2), align 2418; SSE-NEXT:    [[TMP4:%.*]] = uitofp <2 x i8> [[TMP3]] to <2 x double>419; SSE-NEXT:    store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16420; SSE-NEXT:    [[TMP5:%.*]] = load <2 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 4), align 4421; SSE-NEXT:    [[TMP6:%.*]] = uitofp <2 x i8> [[TMP5]] to <2 x double>422; SSE-NEXT:    store <2 x double> [[TMP6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 32423; SSE-NEXT:    [[TMP7:%.*]] = load <2 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 6), align 2424; SSE-NEXT:    [[TMP8:%.*]] = uitofp <2 x i8> [[TMP7]] to <2 x double>425; SSE-NEXT:    store <2 x double> [[TMP8]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 16426; SSE-NEXT:    ret void427;428; AVX256-LABEL: @uitofp_8i8_8f64(429; AVX256-NEXT:    [[TMP1:%.*]] = load <4 x i8>, ptr @src8, align 64430; AVX256-NEXT:    [[TMP2:%.*]] = uitofp <4 x i8> [[TMP1]] to <4 x double>431; AVX256-NEXT:    store <4 x double> [[TMP2]], ptr @dst64, align 64432; AVX256-NEXT:    [[TMP3:%.*]] = load <4 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 4), align 4433; AVX256-NEXT:    [[TMP4:%.*]] = uitofp <4 x i8> [[TMP3]] to <4 x double>434; AVX256-NEXT:    store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 32435; AVX256-NEXT:    ret void436;437; AVX512-LABEL: @uitofp_8i8_8f64(438; AVX512-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr @src8, align 64439; AVX512-NEXT:    [[TMP2:%.*]] = uitofp <8 x i8> [[TMP1]] to <8 x double>440; AVX512-NEXT:    store <8 x double> [[TMP2]], ptr @dst64, align 64441; AVX512-NEXT:    ret void442;443  %ld0 = load i8, ptr @src8, align 64444  %ld1 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 1), align 1445  %ld2 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 2), align 2446  %ld3 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 3), align 1447  %ld4 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 4), align 4448  %ld5 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 5), align 1449  %ld6 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 6), align 2450  %ld7 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 7), align 1451  %cvt0 = uitofp i8 %ld0 to double452  %cvt1 = uitofp i8 %ld1 to double453  %cvt2 = uitofp i8 %ld2 to double454  %cvt3 = uitofp i8 %ld3 to double455  %cvt4 = uitofp i8 %ld4 to double456  %cvt5 = uitofp i8 %ld5 to double457  %cvt6 = uitofp i8 %ld6 to double458  %cvt7 = uitofp i8 %ld7 to double459  store double %cvt0, ptr @dst64, align 64460  store double %cvt1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8461  store double %cvt2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 16462  store double %cvt3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8463  store double %cvt4, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 32464  store double %cvt5, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8465  store double %cvt6, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 16466  store double %cvt7, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8467  ret void468}469 470;471; UITOFP to vXf32472;473 474define void @uitofp_2i64_2f32() #0 {475; SSE-LABEL: @uitofp_2i64_2f32(476; SSE-NEXT:    [[LD0:%.*]] = load i64, ptr @src64, align 64477; SSE-NEXT:    [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 1), align 8478; SSE-NEXT:    [[CVT0:%.*]] = uitofp i64 [[LD0]] to float479; SSE-NEXT:    [[CVT1:%.*]] = uitofp i64 [[LD1]] to float480; SSE-NEXT:    store float [[CVT0]], ptr @dst32, align 64481; SSE-NEXT:    store float [[CVT1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4482; SSE-NEXT:    ret void483;484; AVX1-LABEL: @uitofp_2i64_2f32(485; AVX1-NEXT:    [[LD0:%.*]] = load i64, ptr @src64, align 64486; AVX1-NEXT:    [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 1), align 8487; AVX1-NEXT:    [[CVT0:%.*]] = uitofp i64 [[LD0]] to float488; AVX1-NEXT:    [[CVT1:%.*]] = uitofp i64 [[LD1]] to float489; AVX1-NEXT:    store float [[CVT0]], ptr @dst32, align 64490; AVX1-NEXT:    store float [[CVT1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4491; AVX1-NEXT:    ret void492;493; AVX2-LABEL: @uitofp_2i64_2f32(494; AVX2-NEXT:    [[LD0:%.*]] = load i64, ptr @src64, align 64495; AVX2-NEXT:    [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 1), align 8496; AVX2-NEXT:    [[CVT0:%.*]] = uitofp i64 [[LD0]] to float497; AVX2-NEXT:    [[CVT1:%.*]] = uitofp i64 [[LD1]] to float498; AVX2-NEXT:    store float [[CVT0]], ptr @dst32, align 64499; AVX2-NEXT:    store float [[CVT1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4500; AVX2-NEXT:    ret void501;502; AVX512-LABEL: @uitofp_2i64_2f32(503; AVX512-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 64504; AVX512-NEXT:    [[TMP2:%.*]] = uitofp <2 x i64> [[TMP1]] to <2 x float>505; AVX512-NEXT:    store <2 x float> [[TMP2]], ptr @dst32, align 64506; AVX512-NEXT:    ret void507;508; AVX256DQ-LABEL: @uitofp_2i64_2f32(509; AVX256DQ-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 64510; AVX256DQ-NEXT:    [[TMP2:%.*]] = uitofp <2 x i64> [[TMP1]] to <2 x float>511; AVX256DQ-NEXT:    store <2 x float> [[TMP2]], ptr @dst32, align 64512; AVX256DQ-NEXT:    ret void513;514  %ld0 = load i64, ptr @src64, align 64515  %ld1 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 1), align 8516  %cvt0 = uitofp i64 %ld0 to float517  %cvt1 = uitofp i64 %ld1 to float518  store float %cvt0, ptr @dst32, align 64519  store float %cvt1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4520  ret void521}522 523define void @uitofp_4i64_4f32() #0 {524; CHECK-LABEL: @uitofp_4i64_4f32(525; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 64526; CHECK-NEXT:    [[TMP2:%.*]] = uitofp <4 x i64> [[TMP1]] to <4 x float>527; CHECK-NEXT:    store <4 x float> [[TMP2]], ptr @dst32, align 64528; CHECK-NEXT:    ret void529;530  %ld0 = load i64, ptr @src64, align 64531  %ld1 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 1), align 8532  %ld2 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 2), align 16533  %ld3 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 3), align 8534  %cvt0 = uitofp i64 %ld0 to float535  %cvt1 = uitofp i64 %ld1 to float536  %cvt2 = uitofp i64 %ld2 to float537  %cvt3 = uitofp i64 %ld3 to float538  store float %cvt0, ptr @dst32, align 64539  store float %cvt1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4540  store float %cvt2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 8541  store float %cvt3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 4542  ret void543}544 545define void @uitofp_8i64_8f32() #0 {546; SSE-LABEL: @uitofp_8i64_8f32(547; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 64548; SSE-NEXT:    [[TMP2:%.*]] = uitofp <4 x i64> [[TMP1]] to <4 x float>549; SSE-NEXT:    store <4 x float> [[TMP2]], ptr @dst32, align 64550; SSE-NEXT:    [[TMP3:%.*]] = load <4 x i64>, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 4), align 32551; SSE-NEXT:    [[TMP4:%.*]] = uitofp <4 x i64> [[TMP3]] to <4 x float>552; SSE-NEXT:    store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 16553; SSE-NEXT:    ret void554;555; AVX-LABEL: @uitofp_8i64_8f32(556; AVX-NEXT:    [[TMP1:%.*]] = load <8 x i64>, ptr @src64, align 64557; AVX-NEXT:    [[TMP2:%.*]] = uitofp <8 x i64> [[TMP1]] to <8 x float>558; AVX-NEXT:    store <8 x float> [[TMP2]], ptr @dst32, align 64559; AVX-NEXT:    ret void560;561  %ld0 = load i64, ptr @src64, align 64562  %ld1 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 1), align 8563  %ld2 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 2), align 16564  %ld3 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 3), align 8565  %ld4 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 4), align 32566  %ld5 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 5), align 8567  %ld6 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 6), align 16568  %ld7 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @src64, i32 0, i64 7), align 8569  %cvt0 = uitofp i64 %ld0 to float570  %cvt1 = uitofp i64 %ld1 to float571  %cvt2 = uitofp i64 %ld2 to float572  %cvt3 = uitofp i64 %ld3 to float573  %cvt4 = uitofp i64 %ld4 to float574  %cvt5 = uitofp i64 %ld5 to float575  %cvt6 = uitofp i64 %ld6 to float576  %cvt7 = uitofp i64 %ld7 to float577  store float %cvt0, ptr @dst32, align 64578  store float %cvt1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4579  store float %cvt2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 8580  store float %cvt3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 4581  store float %cvt4, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 16582  store float %cvt5, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 4583  store float %cvt6, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 8584  store float %cvt7, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 4585  ret void586}587 588define void @uitofp_4i32_4f32() #0 {589; CHECK-LABEL: @uitofp_4i32_4f32(590; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 64591; CHECK-NEXT:    [[TMP2:%.*]] = uitofp <4 x i32> [[TMP1]] to <4 x float>592; CHECK-NEXT:    store <4 x float> [[TMP2]], ptr @dst32, align 64593; CHECK-NEXT:    ret void594;595  %ld0 = load i32, ptr @src32, align 64596  %ld1 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 1), align 4597  %ld2 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 2), align 8598  %ld3 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 3), align 4599  %cvt0 = uitofp i32 %ld0 to float600  %cvt1 = uitofp i32 %ld1 to float601  %cvt2 = uitofp i32 %ld2 to float602  %cvt3 = uitofp i32 %ld3 to float603  store float %cvt0, ptr @dst32, align 64604  store float %cvt1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4605  store float %cvt2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 8606  store float %cvt3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 4607  ret void608}609 610define void @uitofp_8i32_8f32() #0 {611; SSE-LABEL: @uitofp_8i32_8f32(612; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 64613; SSE-NEXT:    [[TMP2:%.*]] = uitofp <4 x i32> [[TMP1]] to <4 x float>614; SSE-NEXT:    store <4 x float> [[TMP2]], ptr @dst32, align 64615; SSE-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 4), align 16616; SSE-NEXT:    [[TMP4:%.*]] = uitofp <4 x i32> [[TMP3]] to <4 x float>617; SSE-NEXT:    store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 16618; SSE-NEXT:    ret void619;620; AVX-LABEL: @uitofp_8i32_8f32(621; AVX-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 64622; AVX-NEXT:    [[TMP2:%.*]] = uitofp <8 x i32> [[TMP1]] to <8 x float>623; AVX-NEXT:    store <8 x float> [[TMP2]], ptr @dst32, align 64624; AVX-NEXT:    ret void625;626  %ld0 = load i32, ptr @src32, align 64627  %ld1 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 1), align 4628  %ld2 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 2), align 8629  %ld3 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 3), align 4630  %ld4 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 4), align 16631  %ld5 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 5), align 4632  %ld6 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 6), align 8633  %ld7 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 7), align 4634  %cvt0 = uitofp i32 %ld0 to float635  %cvt1 = uitofp i32 %ld1 to float636  %cvt2 = uitofp i32 %ld2 to float637  %cvt3 = uitofp i32 %ld3 to float638  %cvt4 = uitofp i32 %ld4 to float639  %cvt5 = uitofp i32 %ld5 to float640  %cvt6 = uitofp i32 %ld6 to float641  %cvt7 = uitofp i32 %ld7 to float642  store float %cvt0, ptr @dst32, align 64643  store float %cvt1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4644  store float %cvt2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 8645  store float %cvt3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 4646  store float %cvt4, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 16647  store float %cvt5, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 4648  store float %cvt6, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 8649  store float %cvt7, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 4650  ret void651}652 653define void @uitofp_16i32_16f32() #0 {654; SSE-LABEL: @uitofp_16i32_16f32(655; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 64656; SSE-NEXT:    [[TMP2:%.*]] = uitofp <4 x i32> [[TMP1]] to <4 x float>657; SSE-NEXT:    store <4 x float> [[TMP2]], ptr @dst32, align 64658; SSE-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 4), align 16659; SSE-NEXT:    [[TMP4:%.*]] = uitofp <4 x i32> [[TMP3]] to <4 x float>660; SSE-NEXT:    store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 16661; SSE-NEXT:    [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 8), align 32662; SSE-NEXT:    [[TMP6:%.*]] = uitofp <4 x i32> [[TMP5]] to <4 x float>663; SSE-NEXT:    store <4 x float> [[TMP6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 32664; SSE-NEXT:    [[TMP7:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 12), align 16665; SSE-NEXT:    [[TMP8:%.*]] = uitofp <4 x i32> [[TMP7]] to <4 x float>666; SSE-NEXT:    store <4 x float> [[TMP8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 16667; SSE-NEXT:    ret void668;669; AVX256-LABEL: @uitofp_16i32_16f32(670; AVX256-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 64671; AVX256-NEXT:    [[TMP2:%.*]] = uitofp <8 x i32> [[TMP1]] to <8 x float>672; AVX256-NEXT:    store <8 x float> [[TMP2]], ptr @dst32, align 64673; AVX256-NEXT:    [[TMP3:%.*]] = load <8 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 8), align 32674; AVX256-NEXT:    [[TMP4:%.*]] = uitofp <8 x i32> [[TMP3]] to <8 x float>675; AVX256-NEXT:    store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 32676; AVX256-NEXT:    ret void677;678; AVX512-LABEL: @uitofp_16i32_16f32(679; AVX512-NEXT:    [[TMP1:%.*]] = load <16 x i32>, ptr @src32, align 64680; AVX512-NEXT:    [[TMP2:%.*]] = uitofp <16 x i32> [[TMP1]] to <16 x float>681; AVX512-NEXT:    store <16 x float> [[TMP2]], ptr @dst32, align 64682; AVX512-NEXT:    ret void683;684  %ld0  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 0 ), align 64685  %ld1  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 1 ), align 4686  %ld2  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 2 ), align 8687  %ld3  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 3 ), align 4688  %ld4  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 4 ), align 16689  %ld5  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 5 ), align 4690  %ld6  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 6 ), align 8691  %ld7  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 7 ), align 4692  %ld8  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 8 ), align 32693  %ld9  = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 9 ), align 4694  %ld10 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 10), align 8695  %ld11 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 11), align 4696  %ld12 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 12), align 16697  %ld13 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 13), align 4698  %ld14 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 14), align 8699  %ld15 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @src32, i32 0, i64 15), align 4700  %cvt0  = uitofp i32 %ld0  to float701  %cvt1  = uitofp i32 %ld1  to float702  %cvt2  = uitofp i32 %ld2  to float703  %cvt3  = uitofp i32 %ld3  to float704  %cvt4  = uitofp i32 %ld4  to float705  %cvt5  = uitofp i32 %ld5  to float706  %cvt6  = uitofp i32 %ld6  to float707  %cvt7  = uitofp i32 %ld7  to float708  %cvt8  = uitofp i32 %ld8  to float709  %cvt9  = uitofp i32 %ld9  to float710  %cvt10 = uitofp i32 %ld10 to float711  %cvt11 = uitofp i32 %ld11 to float712  %cvt12 = uitofp i32 %ld12 to float713  %cvt13 = uitofp i32 %ld13 to float714  %cvt14 = uitofp i32 %ld14 to float715  %cvt15 = uitofp i32 %ld15 to float716  store float %cvt0 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 0 ), align 64717  store float %cvt1 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1 ), align 4718  store float %cvt2 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2 ), align 8719  store float %cvt3 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3 ), align 4720  store float %cvt4 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4 ), align 16721  store float %cvt5 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5 ), align 4722  store float %cvt6 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6 ), align 8723  store float %cvt7 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7 ), align 4724  store float %cvt8 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8 ), align 32725  store float %cvt9 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9 ), align 4726  store float %cvt10, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 8727  store float %cvt11, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 4728  store float %cvt12, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 16729  store float %cvt13, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 4730  store float %cvt14, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 8731  store float %cvt15, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 4732  ret void733}734 735define void @uitofp_4i16_4f32() #0 {736; CHECK-LABEL: @uitofp_4i16_4f32(737; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr @src16, align 64738; CHECK-NEXT:    [[TMP2:%.*]] = uitofp <4 x i16> [[TMP1]] to <4 x float>739; CHECK-NEXT:    store <4 x float> [[TMP2]], ptr @dst32, align 64740; CHECK-NEXT:    ret void741;742  %ld0 = load i16, ptr @src16, align 64743  %ld1 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 1), align 2744  %ld2 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 2), align 4745  %ld3 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 3), align 2746  %cvt0 = uitofp i16 %ld0 to float747  %cvt1 = uitofp i16 %ld1 to float748  %cvt2 = uitofp i16 %ld2 to float749  %cvt3 = uitofp i16 %ld3 to float750  store float %cvt0, ptr @dst32, align 64751  store float %cvt1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4752  store float %cvt2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 8753  store float %cvt3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 4754  ret void755}756 757define void @uitofp_8i16_8f32() #0 {758; SSE-LABEL: @uitofp_8i16_8f32(759; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr @src16, align 64760; SSE-NEXT:    [[TMP2:%.*]] = uitofp <4 x i16> [[TMP1]] to <4 x float>761; SSE-NEXT:    store <4 x float> [[TMP2]], ptr @dst32, align 64762; SSE-NEXT:    [[TMP3:%.*]] = load <4 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 4), align 8763; SSE-NEXT:    [[TMP4:%.*]] = uitofp <4 x i16> [[TMP3]] to <4 x float>764; SSE-NEXT:    store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 16765; SSE-NEXT:    ret void766;767; AVX-LABEL: @uitofp_8i16_8f32(768; AVX-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 64769; AVX-NEXT:    [[TMP2:%.*]] = uitofp <8 x i16> [[TMP1]] to <8 x float>770; AVX-NEXT:    store <8 x float> [[TMP2]], ptr @dst32, align 64771; AVX-NEXT:    ret void772;773  %ld0 = load i16, ptr @src16, align 64774  %ld1 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 1), align 2775  %ld2 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 2), align 4776  %ld3 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 3), align 2777  %ld4 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 4), align 8778  %ld5 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 5), align 2779  %ld6 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 6), align 4780  %ld7 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 7), align 2781  %cvt0 = uitofp i16 %ld0 to float782  %cvt1 = uitofp i16 %ld1 to float783  %cvt2 = uitofp i16 %ld2 to float784  %cvt3 = uitofp i16 %ld3 to float785  %cvt4 = uitofp i16 %ld4 to float786  %cvt5 = uitofp i16 %ld5 to float787  %cvt6 = uitofp i16 %ld6 to float788  %cvt7 = uitofp i16 %ld7 to float789  store float %cvt0, ptr @dst32, align 64790  store float %cvt1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4791  store float %cvt2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 8792  store float %cvt3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 4793  store float %cvt4, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 16794  store float %cvt5, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 4795  store float %cvt6, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 8796  store float %cvt7, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 4797  ret void798}799 800define void @uitofp_16i16_16f32() #0 {801; SSE-LABEL: @uitofp_16i16_16f32(802; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr @src16, align 64803; SSE-NEXT:    [[TMP2:%.*]] = uitofp <4 x i16> [[TMP1]] to <4 x float>804; SSE-NEXT:    store <4 x float> [[TMP2]], ptr @dst32, align 64805; SSE-NEXT:    [[TMP3:%.*]] = load <4 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 4), align 8806; SSE-NEXT:    [[TMP4:%.*]] = uitofp <4 x i16> [[TMP3]] to <4 x float>807; SSE-NEXT:    store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 16808; SSE-NEXT:    [[TMP5:%.*]] = load <4 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 8), align 16809; SSE-NEXT:    [[TMP6:%.*]] = uitofp <4 x i16> [[TMP5]] to <4 x float>810; SSE-NEXT:    store <4 x float> [[TMP6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 32811; SSE-NEXT:    [[TMP7:%.*]] = load <4 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 12), align 8812; SSE-NEXT:    [[TMP8:%.*]] = uitofp <4 x i16> [[TMP7]] to <4 x float>813; SSE-NEXT:    store <4 x float> [[TMP8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 16814; SSE-NEXT:    ret void815;816; AVX256-LABEL: @uitofp_16i16_16f32(817; AVX256-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 64818; AVX256-NEXT:    [[TMP2:%.*]] = uitofp <8 x i16> [[TMP1]] to <8 x float>819; AVX256-NEXT:    store <8 x float> [[TMP2]], ptr @dst32, align 64820; AVX256-NEXT:    [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 8), align 16821; AVX256-NEXT:    [[TMP4:%.*]] = uitofp <8 x i16> [[TMP3]] to <8 x float>822; AVX256-NEXT:    store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 32823; AVX256-NEXT:    ret void824;825; AVX512-LABEL: @uitofp_16i16_16f32(826; AVX512-NEXT:    [[TMP1:%.*]] = load <16 x i16>, ptr @src16, align 64827; AVX512-NEXT:    [[TMP2:%.*]] = uitofp <16 x i16> [[TMP1]] to <16 x float>828; AVX512-NEXT:    store <16 x float> [[TMP2]], ptr @dst32, align 64829; AVX512-NEXT:    ret void830;831  %ld0  = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 0 ), align 64832  %ld1  = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 1 ), align 2833  %ld2  = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 2 ), align 4834  %ld3  = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 3 ), align 2835  %ld4  = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 4 ), align 8836  %ld5  = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 5 ), align 2837  %ld6  = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 6 ), align 4838  %ld7  = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 7 ), align 2839  %ld8  = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 8 ), align 16840  %ld9  = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 9 ), align 2841  %ld10 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 10), align 4842  %ld11 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 11), align 2843  %ld12 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 12), align 8844  %ld13 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 13), align 2845  %ld14 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 14), align 4846  %ld15 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @src16, i32 0, i64 15), align 2847  %cvt0  = uitofp i16 %ld0  to float848  %cvt1  = uitofp i16 %ld1  to float849  %cvt2  = uitofp i16 %ld2  to float850  %cvt3  = uitofp i16 %ld3  to float851  %cvt4  = uitofp i16 %ld4  to float852  %cvt5  = uitofp i16 %ld5  to float853  %cvt6  = uitofp i16 %ld6  to float854  %cvt7  = uitofp i16 %ld7  to float855  %cvt8  = uitofp i16 %ld8  to float856  %cvt9  = uitofp i16 %ld9  to float857  %cvt10 = uitofp i16 %ld10 to float858  %cvt11 = uitofp i16 %ld11 to float859  %cvt12 = uitofp i16 %ld12 to float860  %cvt13 = uitofp i16 %ld13 to float861  %cvt14 = uitofp i16 %ld14 to float862  %cvt15 = uitofp i16 %ld15 to float863  store float %cvt0 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 0 ), align 64864  store float %cvt1 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1 ), align 4865  store float %cvt2 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2 ), align 8866  store float %cvt3 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3 ), align 4867  store float %cvt4 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4 ), align 16868  store float %cvt5 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5 ), align 4869  store float %cvt6 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6 ), align 8870  store float %cvt7 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7 ), align 4871  store float %cvt8 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8 ), align 32872  store float %cvt9 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9 ), align 4873  store float %cvt10, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 8874  store float %cvt11, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 4875  store float %cvt12, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 16876  store float %cvt13, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 4877  store float %cvt14, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 8878  store float %cvt15, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 4879  ret void880}881 882define void @uitofp_4i8_4f32() #0 {883; CHECK-LABEL: @uitofp_4i8_4f32(884; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i8>, ptr @src8, align 64885; CHECK-NEXT:    [[TMP2:%.*]] = uitofp <4 x i8> [[TMP1]] to <4 x float>886; CHECK-NEXT:    store <4 x float> [[TMP2]], ptr @dst32, align 64887; CHECK-NEXT:    ret void888;889  %ld0 = load i8, ptr @src8, align 64890  %ld1 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 1), align 1891  %ld2 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 2), align 2892  %ld3 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 3), align 1893  %cvt0 = uitofp i8 %ld0 to float894  %cvt1 = uitofp i8 %ld1 to float895  %cvt2 = uitofp i8 %ld2 to float896  %cvt3 = uitofp i8 %ld3 to float897  store float %cvt0, ptr @dst32, align 64898  store float %cvt1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4899  store float %cvt2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 8900  store float %cvt3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 4901  ret void902}903 904define void @uitofp_8i8_8f32() #0 {905; SSE-LABEL: @uitofp_8i8_8f32(906; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i8>, ptr @src8, align 64907; SSE-NEXT:    [[TMP2:%.*]] = uitofp <4 x i8> [[TMP1]] to <4 x float>908; SSE-NEXT:    store <4 x float> [[TMP2]], ptr @dst32, align 64909; SSE-NEXT:    [[TMP3:%.*]] = load <4 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 4), align 4910; SSE-NEXT:    [[TMP4:%.*]] = uitofp <4 x i8> [[TMP3]] to <4 x float>911; SSE-NEXT:    store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 16912; SSE-NEXT:    ret void913;914; AVX-LABEL: @uitofp_8i8_8f32(915; AVX-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr @src8, align 64916; AVX-NEXT:    [[TMP2:%.*]] = uitofp <8 x i8> [[TMP1]] to <8 x float>917; AVX-NEXT:    store <8 x float> [[TMP2]], ptr @dst32, align 64918; AVX-NEXT:    ret void919;920  %ld0 = load i8, ptr @src8, align 64921  %ld1 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 1), align 1922  %ld2 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 2), align 2923  %ld3 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 3), align 1924  %ld4 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 4), align 4925  %ld5 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 5), align 1926  %ld6 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 6), align 2927  %ld7 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 7), align 1928  %cvt0 = uitofp i8 %ld0 to float929  %cvt1 = uitofp i8 %ld1 to float930  %cvt2 = uitofp i8 %ld2 to float931  %cvt3 = uitofp i8 %ld3 to float932  %cvt4 = uitofp i8 %ld4 to float933  %cvt5 = uitofp i8 %ld5 to float934  %cvt6 = uitofp i8 %ld6 to float935  %cvt7 = uitofp i8 %ld7 to float936  store float %cvt0, ptr @dst32, align 64937  store float %cvt1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4938  store float %cvt2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 8939  store float %cvt3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 4940  store float %cvt4, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 16941  store float %cvt5, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 4942  store float %cvt6, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 8943  store float %cvt7, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 4944  ret void945}946 947define void @uitofp_16i8_16f32() #0 {948; SSE-LABEL: @uitofp_16i8_16f32(949; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i8>, ptr @src8, align 64950; SSE-NEXT:    [[TMP2:%.*]] = uitofp <4 x i8> [[TMP1]] to <4 x float>951; SSE-NEXT:    store <4 x float> [[TMP2]], ptr @dst32, align 64952; SSE-NEXT:    [[TMP3:%.*]] = load <4 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 4), align 4953; SSE-NEXT:    [[TMP4:%.*]] = uitofp <4 x i8> [[TMP3]] to <4 x float>954; SSE-NEXT:    store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 16955; SSE-NEXT:    [[TMP5:%.*]] = load <4 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 8), align 8956; SSE-NEXT:    [[TMP6:%.*]] = uitofp <4 x i8> [[TMP5]] to <4 x float>957; SSE-NEXT:    store <4 x float> [[TMP6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 32958; SSE-NEXT:    [[TMP7:%.*]] = load <4 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 12), align 4959; SSE-NEXT:    [[TMP8:%.*]] = uitofp <4 x i8> [[TMP7]] to <4 x float>960; SSE-NEXT:    store <4 x float> [[TMP8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 16961; SSE-NEXT:    ret void962;963; AVX256-LABEL: @uitofp_16i8_16f32(964; AVX256-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr @src8, align 64965; AVX256-NEXT:    [[TMP2:%.*]] = uitofp <8 x i8> [[TMP1]] to <8 x float>966; AVX256-NEXT:    store <8 x float> [[TMP2]], ptr @dst32, align 64967; AVX256-NEXT:    [[TMP3:%.*]] = load <8 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 8), align 8968; AVX256-NEXT:    [[TMP4:%.*]] = uitofp <8 x i8> [[TMP3]] to <8 x float>969; AVX256-NEXT:    store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 32970; AVX256-NEXT:    ret void971;972; AVX512-LABEL: @uitofp_16i8_16f32(973; AVX512-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 64974; AVX512-NEXT:    [[TMP2:%.*]] = uitofp <16 x i8> [[TMP1]] to <16 x float>975; AVX512-NEXT:    store <16 x float> [[TMP2]], ptr @dst32, align 64976; AVX512-NEXT:    ret void977;978  %ld0  = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 0 ), align 64979  %ld1  = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 1 ), align 1980  %ld2  = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 2 ), align 2981  %ld3  = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 3 ), align 1982  %ld4  = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 4 ), align 4983  %ld5  = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 5 ), align 1984  %ld6  = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 6 ), align 2985  %ld7  = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 7 ), align 1986  %ld8  = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 8 ), align 8987  %ld9  = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 9 ), align 1988  %ld10 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 10), align 2989  %ld11 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 11), align 1990  %ld12 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 12), align 4991  %ld13 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 13), align 1992  %ld14 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 14), align 2993  %ld15 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @src8, i32 0, i64 15), align 1994  %cvt0  = uitofp i8 %ld0  to float995  %cvt1  = uitofp i8 %ld1  to float996  %cvt2  = uitofp i8 %ld2  to float997  %cvt3  = uitofp i8 %ld3  to float998  %cvt4  = uitofp i8 %ld4  to float999  %cvt5  = uitofp i8 %ld5  to float1000  %cvt6  = uitofp i8 %ld6  to float1001  %cvt7  = uitofp i8 %ld7  to float1002  %cvt8  = uitofp i8 %ld8  to float1003  %cvt9  = uitofp i8 %ld9  to float1004  %cvt10 = uitofp i8 %ld10 to float1005  %cvt11 = uitofp i8 %ld11 to float1006  %cvt12 = uitofp i8 %ld12 to float1007  %cvt13 = uitofp i8 %ld13 to float1008  %cvt14 = uitofp i8 %ld14 to float1009  %cvt15 = uitofp i8 %ld15 to float1010  store float %cvt0 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 0 ), align 641011  store float %cvt1 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1 ), align 41012  store float %cvt2 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2 ), align 81013  store float %cvt3 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3 ), align 41014  store float %cvt4 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4 ), align 161015  store float %cvt5 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5 ), align 41016  store float %cvt6 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6 ), align 81017  store float %cvt7 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7 ), align 41018  store float %cvt8 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8 ), align 321019  store float %cvt9 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9 ), align 41020  store float %cvt10, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 81021  store float %cvt11, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 41022  store float %cvt12, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 161023  store float %cvt13, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 41024  store float %cvt14, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 81025  store float %cvt15, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 41026  ret void1027}1028 1029attributes #0 = { nounwind }1030