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