brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.4 KiB · 003a0f7 Raw
443 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,AVX256NODQ4; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=bdver1 -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX256NODQ5; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX256NODQ6; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skylake-avx512 -mattr=-prefer-256-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX512F7; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skylake-avx512 -mattr=+prefer-256-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX256DQ8 9target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"10 11@src64 = common global [8 x double] zeroinitializer, align 6412@src32 = common global [16 x float] zeroinitializer, align 6413@dst64 = common global [8 x i64] zeroinitializer, align 6414@dst32 = common global [16 x i32] zeroinitializer, align 6415@dst16 = common global [32 x i16] zeroinitializer, align 6416@dst8 = common global [64 x i8] zeroinitializer, align 6417 18;19; FPTOUI vXf6420;21 22define void @fptoui_8f64_8i64() #0 {23; SSE-LABEL: @fptoui_8f64_8i64(24; SSE-NEXT:    [[A0:%.*]] = load double, ptr @src64, align 825; SSE-NEXT:    [[A1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 826; SSE-NEXT:    [[A2:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 827; SSE-NEXT:    [[A3:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 828; SSE-NEXT:    [[A4:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 829; SSE-NEXT:    [[A5:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 830; SSE-NEXT:    [[A6:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 831; SSE-NEXT:    [[A7:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 832; SSE-NEXT:    [[CVT0:%.*]] = fptoui double [[A0]] to i6433; SSE-NEXT:    [[CVT1:%.*]] = fptoui double [[A1]] to i6434; SSE-NEXT:    [[CVT2:%.*]] = fptoui double [[A2]] to i6435; SSE-NEXT:    [[CVT3:%.*]] = fptoui double [[A3]] to i6436; SSE-NEXT:    [[CVT4:%.*]] = fptoui double [[A4]] to i6437; SSE-NEXT:    [[CVT5:%.*]] = fptoui double [[A5]] to i6438; SSE-NEXT:    [[CVT6:%.*]] = fptoui double [[A6]] to i6439; SSE-NEXT:    [[CVT7:%.*]] = fptoui double [[A7]] to i6440; SSE-NEXT:    store i64 [[CVT0]], ptr @dst64, align 841; SSE-NEXT:    store i64 [[CVT1]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 1), align 842; SSE-NEXT:    store i64 [[CVT2]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 2), align 843; SSE-NEXT:    store i64 [[CVT3]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 3), align 844; SSE-NEXT:    store i64 [[CVT4]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 4), align 845; SSE-NEXT:    store i64 [[CVT5]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 5), align 846; SSE-NEXT:    store i64 [[CVT6]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 6), align 847; SSE-NEXT:    store i64 [[CVT7]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 7), align 848; SSE-NEXT:    ret void49;50; AVX256NODQ-LABEL: @fptoui_8f64_8i64(51; AVX256NODQ-NEXT:    [[A0:%.*]] = load double, ptr @src64, align 852; AVX256NODQ-NEXT:    [[A1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 853; AVX256NODQ-NEXT:    [[A2:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 854; AVX256NODQ-NEXT:    [[A3:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 855; AVX256NODQ-NEXT:    [[A4:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 856; AVX256NODQ-NEXT:    [[A5:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 857; AVX256NODQ-NEXT:    [[A6:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 858; AVX256NODQ-NEXT:    [[A7:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 859; AVX256NODQ-NEXT:    [[CVT0:%.*]] = fptoui double [[A0]] to i6460; AVX256NODQ-NEXT:    [[CVT1:%.*]] = fptoui double [[A1]] to i6461; AVX256NODQ-NEXT:    [[CVT2:%.*]] = fptoui double [[A2]] to i6462; AVX256NODQ-NEXT:    [[CVT3:%.*]] = fptoui double [[A3]] to i6463; AVX256NODQ-NEXT:    [[CVT4:%.*]] = fptoui double [[A4]] to i6464; AVX256NODQ-NEXT:    [[CVT5:%.*]] = fptoui double [[A5]] to i6465; AVX256NODQ-NEXT:    [[CVT6:%.*]] = fptoui double [[A6]] to i6466; AVX256NODQ-NEXT:    [[CVT7:%.*]] = fptoui double [[A7]] to i6467; AVX256NODQ-NEXT:    store i64 [[CVT0]], ptr @dst64, align 868; AVX256NODQ-NEXT:    store i64 [[CVT1]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 1), align 869; AVX256NODQ-NEXT:    store i64 [[CVT2]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 2), align 870; AVX256NODQ-NEXT:    store i64 [[CVT3]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 3), align 871; AVX256NODQ-NEXT:    store i64 [[CVT4]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 4), align 872; AVX256NODQ-NEXT:    store i64 [[CVT5]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 5), align 873; AVX256NODQ-NEXT:    store i64 [[CVT6]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 6), align 874; AVX256NODQ-NEXT:    store i64 [[CVT7]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 7), align 875; AVX256NODQ-NEXT:    ret void76;77; AVX512F-LABEL: @fptoui_8f64_8i64(78; AVX512F-NEXT:    [[TMP1:%.*]] = load <8 x double>, ptr @src64, align 879; AVX512F-NEXT:    [[TMP2:%.*]] = fptoui <8 x double> [[TMP1]] to <8 x i64>80; AVX512F-NEXT:    store <8 x i64> [[TMP2]], ptr @dst64, align 881; AVX512F-NEXT:    ret void82;83; AVX256DQ-LABEL: @fptoui_8f64_8i64(84; AVX256DQ-NEXT:    [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 885; AVX256DQ-NEXT:    [[TMP2:%.*]] = fptoui <4 x double> [[TMP1]] to <4 x i64>86; AVX256DQ-NEXT:    store <4 x i64> [[TMP2]], ptr @dst64, align 887; AVX256DQ-NEXT:    [[TMP3:%.*]] = load <4 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 888; AVX256DQ-NEXT:    [[TMP4:%.*]] = fptoui <4 x double> [[TMP3]] to <4 x i64>89; AVX256DQ-NEXT:    store <4 x i64> [[TMP4]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 4), align 890; AVX256DQ-NEXT:    ret void91;92  %a0 = load double, ptr @src64, align 893  %a1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 894  %a2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 895  %a3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 896  %a4 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 897  %a5 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 898  %a6 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 899  %a7 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8100  %cvt0 = fptoui double %a0 to i64101  %cvt1 = fptoui double %a1 to i64102  %cvt2 = fptoui double %a2 to i64103  %cvt3 = fptoui double %a3 to i64104  %cvt4 = fptoui double %a4 to i64105  %cvt5 = fptoui double %a5 to i64106  %cvt6 = fptoui double %a6 to i64107  %cvt7 = fptoui double %a7 to i64108  store i64 %cvt0, ptr @dst64, align 8109  store i64 %cvt1, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 1), align 8110  store i64 %cvt2, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 2), align 8111  store i64 %cvt3, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 3), align 8112  store i64 %cvt4, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 4), align 8113  store i64 %cvt5, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 5), align 8114  store i64 %cvt6, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 6), align 8115  store i64 %cvt7, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 7), align 8116  ret void117}118 119define void @fptoui_8f64_8i32() #0 {120; SSE-LABEL: @fptoui_8f64_8i32(121; SSE-NEXT:    [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8122; SSE-NEXT:    [[TMP2:%.*]] = fptoui <4 x double> [[TMP1]] to <4 x i32>123; SSE-NEXT:    store <4 x i32> [[TMP2]], ptr @dst32, align 4124; SSE-NEXT:    [[TMP3:%.*]] = load <4 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8125; SSE-NEXT:    [[TMP4:%.*]] = fptoui <4 x double> [[TMP3]] to <4 x i32>126; SSE-NEXT:    store <4 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 4), align 4127; SSE-NEXT:    ret void128;129; AVX-LABEL: @fptoui_8f64_8i32(130; AVX-NEXT:    [[TMP1:%.*]] = load <8 x double>, ptr @src64, align 8131; AVX-NEXT:    [[TMP2:%.*]] = fptoui <8 x double> [[TMP1]] to <8 x i32>132; AVX-NEXT:    store <8 x i32> [[TMP2]], ptr @dst32, align 4133; AVX-NEXT:    ret void134;135  %a0 = load double, ptr @src64, align 8136  %a1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8137  %a2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8138  %a3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8139  %a4 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8140  %a5 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8141  %a6 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8142  %a7 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8143  %cvt0 = fptoui double %a0 to i32144  %cvt1 = fptoui double %a1 to i32145  %cvt2 = fptoui double %a2 to i32146  %cvt3 = fptoui double %a3 to i32147  %cvt4 = fptoui double %a4 to i32148  %cvt5 = fptoui double %a5 to i32149  %cvt6 = fptoui double %a6 to i32150  %cvt7 = fptoui double %a7 to i32151  store i32 %cvt0, ptr @dst32, align 4152  store i32 %cvt1, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 1), align 4153  store i32 %cvt2, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 2), align 4154  store i32 %cvt3, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 3), align 4155  store i32 %cvt4, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 4), align 4156  store i32 %cvt5, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 5), align 4157  store i32 %cvt6, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 6), align 4158  store i32 %cvt7, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 7), align 4159  ret void160}161 162define void @fptoui_8f64_8i16() #0 {163; CHECK-LABEL: @fptoui_8f64_8i16(164; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x double>, ptr @src64, align 8165; CHECK-NEXT:    [[TMP2:%.*]] = fptoui <8 x double> [[TMP1]] to <8 x i16>166; CHECK-NEXT:    store <8 x i16> [[TMP2]], ptr @dst16, align 2167; CHECK-NEXT:    ret void168;169  %a0 = load double, ptr @src64, align 8170  %a1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8171  %a2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8172  %a3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8173  %a4 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8174  %a5 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8175  %a6 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8176  %a7 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8177  %cvt0 = fptoui double %a0 to i16178  %cvt1 = fptoui double %a1 to i16179  %cvt2 = fptoui double %a2 to i16180  %cvt3 = fptoui double %a3 to i16181  %cvt4 = fptoui double %a4 to i16182  %cvt5 = fptoui double %a5 to i16183  %cvt6 = fptoui double %a6 to i16184  %cvt7 = fptoui double %a7 to i16185  store i16 %cvt0, ptr @dst16, align 2186  store i16 %cvt1, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 1), align 2187  store i16 %cvt2, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 2), align 2188  store i16 %cvt3, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 3), align 2189  store i16 %cvt4, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 4), align 2190  store i16 %cvt5, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 5), align 2191  store i16 %cvt6, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 6), align 2192  store i16 %cvt7, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 7), align 2193  ret void194}195 196define void @fptoui_8f64_8i8() #0 {197; CHECK-LABEL: @fptoui_8f64_8i8(198; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x double>, ptr @src64, align 8199; CHECK-NEXT:    [[TMP2:%.*]] = fptoui <8 x double> [[TMP1]] to <8 x i8>200; CHECK-NEXT:    store <8 x i8> [[TMP2]], ptr @dst8, align 1201; CHECK-NEXT:    ret void202;203  %a0 = load double, ptr @src64, align 8204  %a1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8205  %a2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8206  %a3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8207  %a4 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8208  %a5 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8209  %a6 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8210  %a7 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8211  %cvt0 = fptoui double %a0 to i8212  %cvt1 = fptoui double %a1 to i8213  %cvt2 = fptoui double %a2 to i8214  %cvt3 = fptoui double %a3 to i8215  %cvt4 = fptoui double %a4 to i8216  %cvt5 = fptoui double %a5 to i8217  %cvt6 = fptoui double %a6 to i8218  %cvt7 = fptoui double %a7 to i8219  store i8 %cvt0, ptr @dst8, align 1220  store i8 %cvt1, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 1), align 1221  store i8 %cvt2, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 2), align 1222  store i8 %cvt3, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 3), align 1223  store i8 %cvt4, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 4), align 1224  store i8 %cvt5, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 5), align 1225  store i8 %cvt6, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 6), align 1226  store i8 %cvt7, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 7), align 1227  ret void228}229 230;231; FPTOUI vXf32232;233 234define void @fptoui_8f32_8i64() #0 {235; SSE-LABEL: @fptoui_8f32_8i64(236; SSE-NEXT:    [[A0:%.*]] = load float, ptr @src32, align 4237; SSE-NEXT:    [[A1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 4238; SSE-NEXT:    [[A2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 4239; SSE-NEXT:    [[A3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 4240; SSE-NEXT:    [[A4:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 4241; SSE-NEXT:    [[A5:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 4242; SSE-NEXT:    [[A6:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 4243; SSE-NEXT:    [[A7:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 4244; SSE-NEXT:    [[CVT0:%.*]] = fptoui float [[A0]] to i64245; SSE-NEXT:    [[CVT1:%.*]] = fptoui float [[A1]] to i64246; SSE-NEXT:    [[CVT2:%.*]] = fptoui float [[A2]] to i64247; SSE-NEXT:    [[CVT3:%.*]] = fptoui float [[A3]] to i64248; SSE-NEXT:    [[CVT4:%.*]] = fptoui float [[A4]] to i64249; SSE-NEXT:    [[CVT5:%.*]] = fptoui float [[A5]] to i64250; SSE-NEXT:    [[CVT6:%.*]] = fptoui float [[A6]] to i64251; SSE-NEXT:    [[CVT7:%.*]] = fptoui float [[A7]] to i64252; SSE-NEXT:    store i64 [[CVT0]], ptr @dst64, align 8253; SSE-NEXT:    store i64 [[CVT1]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 1), align 8254; SSE-NEXT:    store i64 [[CVT2]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 2), align 8255; SSE-NEXT:    store i64 [[CVT3]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 3), align 8256; SSE-NEXT:    store i64 [[CVT4]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 4), align 8257; SSE-NEXT:    store i64 [[CVT5]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 5), align 8258; SSE-NEXT:    store i64 [[CVT6]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 6), align 8259; SSE-NEXT:    store i64 [[CVT7]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 7), align 8260; SSE-NEXT:    ret void261;262; AVX256NODQ-LABEL: @fptoui_8f32_8i64(263; AVX256NODQ-NEXT:    [[A0:%.*]] = load float, ptr @src32, align 4264; AVX256NODQ-NEXT:    [[A1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 4265; AVX256NODQ-NEXT:    [[A2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 4266; AVX256NODQ-NEXT:    [[A3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 4267; AVX256NODQ-NEXT:    [[A4:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 4268; AVX256NODQ-NEXT:    [[A5:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 4269; AVX256NODQ-NEXT:    [[A6:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 4270; AVX256NODQ-NEXT:    [[A7:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 4271; AVX256NODQ-NEXT:    [[CVT0:%.*]] = fptoui float [[A0]] to i64272; AVX256NODQ-NEXT:    [[CVT1:%.*]] = fptoui float [[A1]] to i64273; AVX256NODQ-NEXT:    [[CVT2:%.*]] = fptoui float [[A2]] to i64274; AVX256NODQ-NEXT:    [[CVT3:%.*]] = fptoui float [[A3]] to i64275; AVX256NODQ-NEXT:    [[CVT4:%.*]] = fptoui float [[A4]] to i64276; AVX256NODQ-NEXT:    [[CVT5:%.*]] = fptoui float [[A5]] to i64277; AVX256NODQ-NEXT:    [[CVT6:%.*]] = fptoui float [[A6]] to i64278; AVX256NODQ-NEXT:    [[CVT7:%.*]] = fptoui float [[A7]] to i64279; AVX256NODQ-NEXT:    store i64 [[CVT0]], ptr @dst64, align 8280; AVX256NODQ-NEXT:    store i64 [[CVT1]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 1), align 8281; AVX256NODQ-NEXT:    store i64 [[CVT2]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 2), align 8282; AVX256NODQ-NEXT:    store i64 [[CVT3]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 3), align 8283; AVX256NODQ-NEXT:    store i64 [[CVT4]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 4), align 8284; AVX256NODQ-NEXT:    store i64 [[CVT5]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 5), align 8285; AVX256NODQ-NEXT:    store i64 [[CVT6]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 6), align 8286; AVX256NODQ-NEXT:    store i64 [[CVT7]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 7), align 8287; AVX256NODQ-NEXT:    ret void288;289; AVX512F-LABEL: @fptoui_8f32_8i64(290; AVX512F-NEXT:    [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 4291; AVX512F-NEXT:    [[TMP2:%.*]] = fptoui <8 x float> [[TMP1]] to <8 x i64>292; AVX512F-NEXT:    store <8 x i64> [[TMP2]], ptr @dst64, align 8293; AVX512F-NEXT:    ret void294;295; AVX256DQ-LABEL: @fptoui_8f32_8i64(296; AVX256DQ-NEXT:    [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 4297; AVX256DQ-NEXT:    [[TMP2:%.*]] = fptoui <4 x float> [[TMP1]] to <4 x i64>298; AVX256DQ-NEXT:    store <4 x i64> [[TMP2]], ptr @dst64, align 8299; AVX256DQ-NEXT:    [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 4300; AVX256DQ-NEXT:    [[TMP4:%.*]] = fptoui <4 x float> [[TMP3]] to <4 x i64>301; AVX256DQ-NEXT:    store <4 x i64> [[TMP4]], ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 4), align 8302; AVX256DQ-NEXT:    ret void303;304  %a0 = load float, ptr @src32, align 4305  %a1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 4306  %a2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 4307  %a3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 4308  %a4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 4309  %a5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 4310  %a6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 4311  %a7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 4312  %cvt0 = fptoui float %a0 to i64313  %cvt1 = fptoui float %a1 to i64314  %cvt2 = fptoui float %a2 to i64315  %cvt3 = fptoui float %a3 to i64316  %cvt4 = fptoui float %a4 to i64317  %cvt5 = fptoui float %a5 to i64318  %cvt6 = fptoui float %a6 to i64319  %cvt7 = fptoui float %a7 to i64320  store i64 %cvt0, ptr @dst64, align 8321  store i64 %cvt1, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 1), align 8322  store i64 %cvt2, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 2), align 8323  store i64 %cvt3, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 3), align 8324  store i64 %cvt4, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 4), align 8325  store i64 %cvt5, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 5), align 8326  store i64 %cvt6, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 6), align 8327  store i64 %cvt7, ptr getelementptr inbounds ([8 x i64], ptr @dst64, i32 0, i64 7), align 8328  ret void329}330 331define void @fptoui_8f32_8i32() #0 {332; SSE-LABEL: @fptoui_8f32_8i32(333; SSE-NEXT:    [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 4334; SSE-NEXT:    [[TMP2:%.*]] = fptoui <4 x float> [[TMP1]] to <4 x i32>335; SSE-NEXT:    store <4 x i32> [[TMP2]], ptr @dst32, align 4336; SSE-NEXT:    [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 4337; SSE-NEXT:    [[TMP4:%.*]] = fptoui <4 x float> [[TMP3]] to <4 x i32>338; SSE-NEXT:    store <4 x i32> [[TMP4]], ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 4), align 4339; SSE-NEXT:    ret void340;341; AVX-LABEL: @fptoui_8f32_8i32(342; AVX-NEXT:    [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 4343; AVX-NEXT:    [[TMP2:%.*]] = fptoui <8 x float> [[TMP1]] to <8 x i32>344; AVX-NEXT:    store <8 x i32> [[TMP2]], ptr @dst32, align 4345; AVX-NEXT:    ret void346;347  %a0 = load float, ptr @src32, align 4348  %a1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 4349  %a2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 4350  %a3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 4351  %a4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 4352  %a5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 4353  %a6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 4354  %a7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 4355  %cvt0 = fptoui float %a0 to i32356  %cvt1 = fptoui float %a1 to i32357  %cvt2 = fptoui float %a2 to i32358  %cvt3 = fptoui float %a3 to i32359  %cvt4 = fptoui float %a4 to i32360  %cvt5 = fptoui float %a5 to i32361  %cvt6 = fptoui float %a6 to i32362  %cvt7 = fptoui float %a7 to i32363  store i32 %cvt0, ptr @dst32, align 4364  store i32 %cvt1, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 1), align 4365  store i32 %cvt2, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 2), align 4366  store i32 %cvt3, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 3), align 4367  store i32 %cvt4, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 4), align 4368  store i32 %cvt5, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 5), align 4369  store i32 %cvt6, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 6), align 4370  store i32 %cvt7, ptr getelementptr inbounds ([16 x i32], ptr @dst32, i32 0, i64 7), align 4371  ret void372}373 374define void @fptoui_8f32_8i16() #0 {375; CHECK-LABEL: @fptoui_8f32_8i16(376; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 4377; CHECK-NEXT:    [[TMP2:%.*]] = fptoui <8 x float> [[TMP1]] to <8 x i16>378; CHECK-NEXT:    store <8 x i16> [[TMP2]], ptr @dst16, align 2379; CHECK-NEXT:    ret void380;381  %a0 = load float, ptr @src32, align 4382  %a1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 4383  %a2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 4384  %a3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 4385  %a4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 4386  %a5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 4387  %a6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 4388  %a7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 4389  %cvt0 = fptoui float %a0 to i16390  %cvt1 = fptoui float %a1 to i16391  %cvt2 = fptoui float %a2 to i16392  %cvt3 = fptoui float %a3 to i16393  %cvt4 = fptoui float %a4 to i16394  %cvt5 = fptoui float %a5 to i16395  %cvt6 = fptoui float %a6 to i16396  %cvt7 = fptoui float %a7 to i16397  store i16 %cvt0, ptr @dst16, align 2398  store i16 %cvt1, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 1), align 2399  store i16 %cvt2, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 2), align 2400  store i16 %cvt3, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 3), align 2401  store i16 %cvt4, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 4), align 2402  store i16 %cvt5, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 5), align 2403  store i16 %cvt6, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 6), align 2404  store i16 %cvt7, ptr getelementptr inbounds ([32 x i16], ptr @dst16, i32 0, i64 7), align 2405  ret void406}407 408define void @fptoui_8f32_8i8() #0 {409; CHECK-LABEL: @fptoui_8f32_8i8(410; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 4411; CHECK-NEXT:    [[TMP2:%.*]] = fptoui <8 x float> [[TMP1]] to <8 x i8>412; CHECK-NEXT:    store <8 x i8> [[TMP2]], ptr @dst8, align 1413; CHECK-NEXT:    ret void414;415  %a0 = load float, ptr @src32, align 4416  %a1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 4417  %a2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 4418  %a3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 4419  %a4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 4420  %a5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 4421  %a6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 4422  %a7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 4423  %cvt0 = fptoui float %a0 to i8424  %cvt1 = fptoui float %a1 to i8425  %cvt2 = fptoui float %a2 to i8426  %cvt3 = fptoui float %a3 to i8427  %cvt4 = fptoui float %a4 to i8428  %cvt5 = fptoui float %a5 to i8429  %cvt6 = fptoui float %a6 to i8430  %cvt7 = fptoui float %a7 to i8431  store i8 %cvt0, ptr @dst8, align 1432  store i8 %cvt1, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 1), align 1433  store i8 %cvt2, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 2), align 1434  store i8 %cvt3, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 3), align 1435  store i8 %cvt4, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 4), align 1436  store i8 %cvt5, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 5), align 1437  store i8 %cvt6, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 6), align 1438  store i8 %cvt7, ptr getelementptr inbounds ([64 x i8], ptr @dst8, i32 0, i64 7), align 1439  ret void440}441 442attributes #0 = { nounwind }443