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