2160 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-prefix=SSE23; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7 -passes=slp-vectorizer -S | FileCheck %s --check-prefix=SSE414; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -passes=slp-vectorizer -S | FileCheck %s --check-prefix=AVX --check-prefix=AVX15; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -passes=slp-vectorizer -S | FileCheck %s --check-prefix=AVX --check-prefix=AVX26; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skylake-avx512 -mattr=-prefer-256-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefix=AVX --check-prefix=AVX5127; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skylake-avx512 -mattr=+prefer-256-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefix=AVX --check-prefix=AVX28 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@dst64 = common global [8 x double] zeroinitializer, align 6413@src32 = common global [16 x float] zeroinitializer, align 6414@dst32 = common global [16 x float] zeroinitializer, align 6415 16declare double @llvm.ceil.f64(double %p)17declare double @llvm.floor.f64(double %p)18declare double @llvm.nearbyint.f64(double %p)19declare double @llvm.rint.f64(double %p)20declare double @llvm.trunc.f64(double %p)21 22declare float @llvm.ceil.f32(float %p)23declare float @llvm.floor.f32(float %p)24declare float @llvm.nearbyint.f32(float %p)25declare float @llvm.rint.f32(float %p)26declare float @llvm.trunc.f32(float %p)27 28define void @ceil_2f64() #0 {29; SSE2-LABEL: @ceil_2f64(30; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 831; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 832; SSE2-NEXT: [[CEIL0:%.*]] = call double @llvm.ceil.f64(double [[LD0]])33; SSE2-NEXT: [[CEIL1:%.*]] = call double @llvm.ceil.f64(double [[LD1]])34; SSE2-NEXT: store double [[CEIL0]], ptr @dst64, align 835; SSE2-NEXT: store double [[CEIL1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 836; SSE2-NEXT: ret void37;38; SSE41-LABEL: @ceil_2f64(39; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 840; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.ceil.v2f64(<2 x double> [[TMP1]])41; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 842; SSE41-NEXT: ret void43;44; AVX-LABEL: @ceil_2f64(45; AVX-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 846; AVX-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.ceil.v2f64(<2 x double> [[TMP1]])47; AVX-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 848; AVX-NEXT: ret void49;50 %ld0 = load double, ptr @src64, align 851 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 852 %ceil0 = call double @llvm.ceil.f64(double %ld0)53 %ceil1 = call double @llvm.ceil.f64(double %ld1)54 store double %ceil0, ptr @dst64, align 855 store double %ceil1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 856 ret void57}58 59define void @ceil_4f64() #0 {60; SSE2-LABEL: @ceil_4f64(61; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 862; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 863; SSE2-NEXT: [[LD2:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 864; SSE2-NEXT: [[LD3:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 865; SSE2-NEXT: [[CEIL0:%.*]] = call double @llvm.ceil.f64(double [[LD0]])66; SSE2-NEXT: [[CEIL1:%.*]] = call double @llvm.ceil.f64(double [[LD1]])67; SSE2-NEXT: [[CEIL2:%.*]] = call double @llvm.ceil.f64(double [[LD2]])68; SSE2-NEXT: [[CEIL3:%.*]] = call double @llvm.ceil.f64(double [[LD3]])69; SSE2-NEXT: store double [[CEIL0]], ptr @dst64, align 870; SSE2-NEXT: store double [[CEIL1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 871; SSE2-NEXT: store double [[CEIL2]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 872; SSE2-NEXT: store double [[CEIL3]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 873; SSE2-NEXT: ret void74;75; SSE41-LABEL: @ceil_4f64(76; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 877; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.ceil.v2f64(<2 x double> [[TMP1]])78; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 879; SSE41-NEXT: [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 880; SSE41-NEXT: [[TMP4:%.*]] = call <2 x double> @llvm.ceil.v2f64(<2 x double> [[TMP3]])81; SSE41-NEXT: store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 882; SSE41-NEXT: ret void83;84; AVX-LABEL: @ceil_4f64(85; AVX-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 886; AVX-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.ceil.v4f64(<4 x double> [[TMP1]])87; AVX-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 888; AVX-NEXT: ret void89;90 %ld0 = load double, ptr @src64, align 891 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 892 %ld2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 893 %ld3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 894 %ceil0 = call double @llvm.ceil.f64(double %ld0)95 %ceil1 = call double @llvm.ceil.f64(double %ld1)96 %ceil2 = call double @llvm.ceil.f64(double %ld2)97 %ceil3 = call double @llvm.ceil.f64(double %ld3)98 store double %ceil0, ptr @dst64, align 899 store double %ceil1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8100 store double %ceil2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8101 store double %ceil3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8102 ret void103}104 105define void @ceil_8f64() #0 {106; SSE2-LABEL: @ceil_8f64(107; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8108; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8109; SSE2-NEXT: [[LD2:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8110; SSE2-NEXT: [[LD3:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8111; SSE2-NEXT: [[LD4:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8112; SSE2-NEXT: [[LD5:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8113; SSE2-NEXT: [[LD6:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8114; SSE2-NEXT: [[LD7:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8115; SSE2-NEXT: [[CEIL0:%.*]] = call double @llvm.ceil.f64(double [[LD0]])116; SSE2-NEXT: [[CEIL1:%.*]] = call double @llvm.ceil.f64(double [[LD1]])117; SSE2-NEXT: [[CEIL2:%.*]] = call double @llvm.ceil.f64(double [[LD2]])118; SSE2-NEXT: [[CEIL3:%.*]] = call double @llvm.ceil.f64(double [[LD3]])119; SSE2-NEXT: [[CEIL4:%.*]] = call double @llvm.ceil.f64(double [[LD4]])120; SSE2-NEXT: [[CEIL5:%.*]] = call double @llvm.ceil.f64(double [[LD5]])121; SSE2-NEXT: [[CEIL6:%.*]] = call double @llvm.ceil.f64(double [[LD6]])122; SSE2-NEXT: [[CEIL7:%.*]] = call double @llvm.ceil.f64(double [[LD7]])123; SSE2-NEXT: store double [[CEIL0]], ptr @dst64, align 8124; SSE2-NEXT: store double [[CEIL1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8125; SSE2-NEXT: store double [[CEIL2]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8126; SSE2-NEXT: store double [[CEIL3]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8127; SSE2-NEXT: store double [[CEIL4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8128; SSE2-NEXT: store double [[CEIL5]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8129; SSE2-NEXT: store double [[CEIL6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8130; SSE2-NEXT: store double [[CEIL7]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8131; SSE2-NEXT: ret void132;133; SSE41-LABEL: @ceil_8f64(134; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8135; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.ceil.v2f64(<2 x double> [[TMP1]])136; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8137; SSE41-NEXT: [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8138; SSE41-NEXT: [[TMP4:%.*]] = call <2 x double> @llvm.ceil.v2f64(<2 x double> [[TMP3]])139; SSE41-NEXT: store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8140; SSE41-NEXT: [[TMP5:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8141; SSE41-NEXT: [[TMP6:%.*]] = call <2 x double> @llvm.ceil.v2f64(<2 x double> [[TMP5]])142; SSE41-NEXT: store <2 x double> [[TMP6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8143; SSE41-NEXT: [[TMP7:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8144; SSE41-NEXT: [[TMP8:%.*]] = call <2 x double> @llvm.ceil.v2f64(<2 x double> [[TMP7]])145; SSE41-NEXT: store <2 x double> [[TMP8]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8146; SSE41-NEXT: ret void147;148; AVX1-LABEL: @ceil_8f64(149; AVX1-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8150; AVX1-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.ceil.v4f64(<4 x double> [[TMP1]])151; AVX1-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8152; AVX1-NEXT: [[TMP3:%.*]] = load <4 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8153; AVX1-NEXT: [[TMP4:%.*]] = call <4 x double> @llvm.ceil.v4f64(<4 x double> [[TMP3]])154; AVX1-NEXT: store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8155; AVX1-NEXT: ret void156;157; AVX2-LABEL: @ceil_8f64(158; AVX2-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8159; AVX2-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.ceil.v4f64(<4 x double> [[TMP1]])160; AVX2-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8161; AVX2-NEXT: [[TMP3:%.*]] = load <4 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8162; AVX2-NEXT: [[TMP4:%.*]] = call <4 x double> @llvm.ceil.v4f64(<4 x double> [[TMP3]])163; AVX2-NEXT: store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8164; AVX2-NEXT: ret void165;166; AVX512-LABEL: @ceil_8f64(167; AVX512-NEXT: [[TMP1:%.*]] = load <8 x double>, ptr @src64, align 8168; AVX512-NEXT: [[TMP2:%.*]] = call <8 x double> @llvm.ceil.v8f64(<8 x double> [[TMP1]])169; AVX512-NEXT: store <8 x double> [[TMP2]], ptr @dst64, align 8170; AVX512-NEXT: ret void171;172 %ld0 = load double, ptr @src64, align 8173 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8174 %ld2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8175 %ld3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8176 %ld4 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8177 %ld5 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8178 %ld6 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8179 %ld7 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8180 %ceil0 = call double @llvm.ceil.f64(double %ld0)181 %ceil1 = call double @llvm.ceil.f64(double %ld1)182 %ceil2 = call double @llvm.ceil.f64(double %ld2)183 %ceil3 = call double @llvm.ceil.f64(double %ld3)184 %ceil4 = call double @llvm.ceil.f64(double %ld4)185 %ceil5 = call double @llvm.ceil.f64(double %ld5)186 %ceil6 = call double @llvm.ceil.f64(double %ld6)187 %ceil7 = call double @llvm.ceil.f64(double %ld7)188 store double %ceil0, ptr @dst64, align 8189 store double %ceil1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8190 store double %ceil2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8191 store double %ceil3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8192 store double %ceil4, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8193 store double %ceil5, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8194 store double %ceil6, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8195 store double %ceil7, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8196 ret void197}198 199define void @floor_2f64() #0 {200; SSE2-LABEL: @floor_2f64(201; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8202; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8203; SSE2-NEXT: [[FLOOR0:%.*]] = call double @llvm.floor.f64(double [[LD0]])204; SSE2-NEXT: [[FLOOR1:%.*]] = call double @llvm.floor.f64(double [[LD1]])205; SSE2-NEXT: store double [[FLOOR0]], ptr @dst64, align 8206; SSE2-NEXT: store double [[FLOOR1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8207; SSE2-NEXT: ret void208;209; SSE41-LABEL: @floor_2f64(210; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8211; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.floor.v2f64(<2 x double> [[TMP1]])212; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8213; SSE41-NEXT: ret void214;215; AVX-LABEL: @floor_2f64(216; AVX-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8217; AVX-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.floor.v2f64(<2 x double> [[TMP1]])218; AVX-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8219; AVX-NEXT: ret void220;221 %ld0 = load double, ptr @src64, align 8222 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8223 %floor0 = call double @llvm.floor.f64(double %ld0)224 %floor1 = call double @llvm.floor.f64(double %ld1)225 store double %floor0, ptr @dst64, align 8226 store double %floor1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8227 ret void228}229 230define void @floor_4f64() #0 {231; SSE2-LABEL: @floor_4f64(232; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8233; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8234; SSE2-NEXT: [[LD2:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8235; SSE2-NEXT: [[LD3:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8236; SSE2-NEXT: [[FLOOR0:%.*]] = call double @llvm.floor.f64(double [[LD0]])237; SSE2-NEXT: [[FLOOR1:%.*]] = call double @llvm.floor.f64(double [[LD1]])238; SSE2-NEXT: [[FLOOR2:%.*]] = call double @llvm.floor.f64(double [[LD2]])239; SSE2-NEXT: [[FLOOR3:%.*]] = call double @llvm.floor.f64(double [[LD3]])240; SSE2-NEXT: store double [[FLOOR0]], ptr @dst64, align 8241; SSE2-NEXT: store double [[FLOOR1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8242; SSE2-NEXT: store double [[FLOOR2]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8243; SSE2-NEXT: store double [[FLOOR3]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8244; SSE2-NEXT: ret void245;246; SSE41-LABEL: @floor_4f64(247; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8248; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.floor.v2f64(<2 x double> [[TMP1]])249; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8250; SSE41-NEXT: [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8251; SSE41-NEXT: [[TMP4:%.*]] = call <2 x double> @llvm.floor.v2f64(<2 x double> [[TMP3]])252; SSE41-NEXT: store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8253; SSE41-NEXT: ret void254;255; AVX-LABEL: @floor_4f64(256; AVX-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8257; AVX-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.floor.v4f64(<4 x double> [[TMP1]])258; AVX-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8259; AVX-NEXT: ret void260;261 %ld0 = load double, ptr @src64, align 8262 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8263 %ld2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8264 %ld3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8265 %floor0 = call double @llvm.floor.f64(double %ld0)266 %floor1 = call double @llvm.floor.f64(double %ld1)267 %floor2 = call double @llvm.floor.f64(double %ld2)268 %floor3 = call double @llvm.floor.f64(double %ld3)269 store double %floor0, ptr @dst64, align 8270 store double %floor1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8271 store double %floor2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8272 store double %floor3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8273 ret void274}275 276define void @floor_8f64() #0 {277; SSE2-LABEL: @floor_8f64(278; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8279; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8280; SSE2-NEXT: [[LD2:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8281; SSE2-NEXT: [[LD3:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8282; SSE2-NEXT: [[LD4:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8283; SSE2-NEXT: [[LD5:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8284; SSE2-NEXT: [[LD6:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8285; SSE2-NEXT: [[LD7:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8286; SSE2-NEXT: [[FLOOR0:%.*]] = call double @llvm.floor.f64(double [[LD0]])287; SSE2-NEXT: [[FLOOR1:%.*]] = call double @llvm.floor.f64(double [[LD1]])288; SSE2-NEXT: [[FLOOR2:%.*]] = call double @llvm.floor.f64(double [[LD2]])289; SSE2-NEXT: [[FLOOR3:%.*]] = call double @llvm.floor.f64(double [[LD3]])290; SSE2-NEXT: [[FLOOR4:%.*]] = call double @llvm.floor.f64(double [[LD4]])291; SSE2-NEXT: [[FLOOR5:%.*]] = call double @llvm.floor.f64(double [[LD5]])292; SSE2-NEXT: [[FLOOR6:%.*]] = call double @llvm.floor.f64(double [[LD6]])293; SSE2-NEXT: [[FLOOR7:%.*]] = call double @llvm.floor.f64(double [[LD7]])294; SSE2-NEXT: store double [[FLOOR0]], ptr @dst64, align 8295; SSE2-NEXT: store double [[FLOOR1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8296; SSE2-NEXT: store double [[FLOOR2]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8297; SSE2-NEXT: store double [[FLOOR3]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8298; SSE2-NEXT: store double [[FLOOR4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8299; SSE2-NEXT: store double [[FLOOR5]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8300; SSE2-NEXT: store double [[FLOOR6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8301; SSE2-NEXT: store double [[FLOOR7]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8302; SSE2-NEXT: ret void303;304; SSE41-LABEL: @floor_8f64(305; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8306; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.floor.v2f64(<2 x double> [[TMP1]])307; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8308; SSE41-NEXT: [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8309; SSE41-NEXT: [[TMP4:%.*]] = call <2 x double> @llvm.floor.v2f64(<2 x double> [[TMP3]])310; SSE41-NEXT: store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8311; SSE41-NEXT: [[TMP5:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8312; SSE41-NEXT: [[TMP6:%.*]] = call <2 x double> @llvm.floor.v2f64(<2 x double> [[TMP5]])313; SSE41-NEXT: store <2 x double> [[TMP6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8314; SSE41-NEXT: [[TMP7:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8315; SSE41-NEXT: [[TMP8:%.*]] = call <2 x double> @llvm.floor.v2f64(<2 x double> [[TMP7]])316; SSE41-NEXT: store <2 x double> [[TMP8]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8317; SSE41-NEXT: ret void318;319; AVX1-LABEL: @floor_8f64(320; AVX1-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8321; AVX1-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.floor.v4f64(<4 x double> [[TMP1]])322; AVX1-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8323; AVX1-NEXT: [[TMP3:%.*]] = load <4 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8324; AVX1-NEXT: [[TMP4:%.*]] = call <4 x double> @llvm.floor.v4f64(<4 x double> [[TMP3]])325; AVX1-NEXT: store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8326; AVX1-NEXT: ret void327;328; AVX2-LABEL: @floor_8f64(329; AVX2-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8330; AVX2-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.floor.v4f64(<4 x double> [[TMP1]])331; AVX2-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8332; AVX2-NEXT: [[TMP3:%.*]] = load <4 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8333; AVX2-NEXT: [[TMP4:%.*]] = call <4 x double> @llvm.floor.v4f64(<4 x double> [[TMP3]])334; AVX2-NEXT: store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8335; AVX2-NEXT: ret void336;337; AVX512-LABEL: @floor_8f64(338; AVX512-NEXT: [[TMP1:%.*]] = load <8 x double>, ptr @src64, align 8339; AVX512-NEXT: [[TMP2:%.*]] = call <8 x double> @llvm.floor.v8f64(<8 x double> [[TMP1]])340; AVX512-NEXT: store <8 x double> [[TMP2]], ptr @dst64, align 8341; AVX512-NEXT: ret void342;343 %ld0 = load double, ptr @src64, align 8344 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8345 %ld2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8346 %ld3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8347 %ld4 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8348 %ld5 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8349 %ld6 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8350 %ld7 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8351 %floor0 = call double @llvm.floor.f64(double %ld0)352 %floor1 = call double @llvm.floor.f64(double %ld1)353 %floor2 = call double @llvm.floor.f64(double %ld2)354 %floor3 = call double @llvm.floor.f64(double %ld3)355 %floor4 = call double @llvm.floor.f64(double %ld4)356 %floor5 = call double @llvm.floor.f64(double %ld5)357 %floor6 = call double @llvm.floor.f64(double %ld6)358 %floor7 = call double @llvm.floor.f64(double %ld7)359 store double %floor0, ptr @dst64, align 8360 store double %floor1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8361 store double %floor2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8362 store double %floor3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8363 store double %floor4, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8364 store double %floor5, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8365 store double %floor6, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8366 store double %floor7, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8367 ret void368}369 370define void @nearbyint_2f64() #0 {371; SSE2-LABEL: @nearbyint_2f64(372; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8373; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8374; SSE2-NEXT: [[NEARBYINT0:%.*]] = call double @llvm.nearbyint.f64(double [[LD0]])375; SSE2-NEXT: [[NEARBYINT1:%.*]] = call double @llvm.nearbyint.f64(double [[LD1]])376; SSE2-NEXT: store double [[NEARBYINT0]], ptr @dst64, align 8377; SSE2-NEXT: store double [[NEARBYINT1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8378; SSE2-NEXT: ret void379;380; SSE41-LABEL: @nearbyint_2f64(381; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8382; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> [[TMP1]])383; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8384; SSE41-NEXT: ret void385;386; AVX-LABEL: @nearbyint_2f64(387; AVX-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8388; AVX-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> [[TMP1]])389; AVX-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8390; AVX-NEXT: ret void391;392 %ld0 = load double, ptr @src64, align 8393 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8394 %nearbyint0 = call double @llvm.nearbyint.f64(double %ld0)395 %nearbyint1 = call double @llvm.nearbyint.f64(double %ld1)396 store double %nearbyint0, ptr @dst64, align 8397 store double %nearbyint1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8398 ret void399}400 401define void @nearbyint_4f64() #0 {402; SSE2-LABEL: @nearbyint_4f64(403; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8404; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8405; SSE2-NEXT: [[LD2:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8406; SSE2-NEXT: [[LD3:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8407; SSE2-NEXT: [[NEARBYINT0:%.*]] = call double @llvm.nearbyint.f64(double [[LD0]])408; SSE2-NEXT: [[NEARBYINT1:%.*]] = call double @llvm.nearbyint.f64(double [[LD1]])409; SSE2-NEXT: [[NEARBYINT2:%.*]] = call double @llvm.nearbyint.f64(double [[LD2]])410; SSE2-NEXT: [[NEARBYINT3:%.*]] = call double @llvm.nearbyint.f64(double [[LD3]])411; SSE2-NEXT: store double [[NEARBYINT0]], ptr @dst64, align 8412; SSE2-NEXT: store double [[NEARBYINT1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8413; SSE2-NEXT: store double [[NEARBYINT2]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8414; SSE2-NEXT: store double [[NEARBYINT3]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8415; SSE2-NEXT: ret void416;417; SSE41-LABEL: @nearbyint_4f64(418; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8419; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> [[TMP1]])420; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8421; SSE41-NEXT: [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8422; SSE41-NEXT: [[TMP4:%.*]] = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> [[TMP3]])423; SSE41-NEXT: store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8424; SSE41-NEXT: ret void425;426; AVX-LABEL: @nearbyint_4f64(427; AVX-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8428; AVX-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> [[TMP1]])429; AVX-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8430; AVX-NEXT: ret void431;432 %ld0 = load double, ptr @src64, align 8433 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8434 %ld2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8435 %ld3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8436 %nearbyint0 = call double @llvm.nearbyint.f64(double %ld0)437 %nearbyint1 = call double @llvm.nearbyint.f64(double %ld1)438 %nearbyint2 = call double @llvm.nearbyint.f64(double %ld2)439 %nearbyint3 = call double @llvm.nearbyint.f64(double %ld3)440 store double %nearbyint0, ptr @dst64, align 8441 store double %nearbyint1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8442 store double %nearbyint2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8443 store double %nearbyint3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8444 ret void445}446 447define void @nearbyint_8f64() #0 {448; SSE2-LABEL: @nearbyint_8f64(449; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8450; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8451; SSE2-NEXT: [[LD2:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8452; SSE2-NEXT: [[LD3:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8453; SSE2-NEXT: [[LD4:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8454; SSE2-NEXT: [[LD5:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8455; SSE2-NEXT: [[LD6:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8456; SSE2-NEXT: [[LD7:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8457; SSE2-NEXT: [[NEARBYINT0:%.*]] = call double @llvm.nearbyint.f64(double [[LD0]])458; SSE2-NEXT: [[NEARBYINT1:%.*]] = call double @llvm.nearbyint.f64(double [[LD1]])459; SSE2-NEXT: [[NEARBYINT2:%.*]] = call double @llvm.nearbyint.f64(double [[LD2]])460; SSE2-NEXT: [[NEARBYINT3:%.*]] = call double @llvm.nearbyint.f64(double [[LD3]])461; SSE2-NEXT: [[NEARBYINT4:%.*]] = call double @llvm.nearbyint.f64(double [[LD4]])462; SSE2-NEXT: [[NEARBYINT5:%.*]] = call double @llvm.nearbyint.f64(double [[LD5]])463; SSE2-NEXT: [[NEARBYINT6:%.*]] = call double @llvm.nearbyint.f64(double [[LD6]])464; SSE2-NEXT: [[NEARBYINT7:%.*]] = call double @llvm.nearbyint.f64(double [[LD7]])465; SSE2-NEXT: store double [[NEARBYINT0]], ptr @dst64, align 8466; SSE2-NEXT: store double [[NEARBYINT1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8467; SSE2-NEXT: store double [[NEARBYINT2]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8468; SSE2-NEXT: store double [[NEARBYINT3]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8469; SSE2-NEXT: store double [[NEARBYINT4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8470; SSE2-NEXT: store double [[NEARBYINT5]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8471; SSE2-NEXT: store double [[NEARBYINT6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8472; SSE2-NEXT: store double [[NEARBYINT7]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8473; SSE2-NEXT: ret void474;475; SSE41-LABEL: @nearbyint_8f64(476; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8477; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> [[TMP1]])478; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8479; SSE41-NEXT: [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8480; SSE41-NEXT: [[TMP4:%.*]] = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> [[TMP3]])481; SSE41-NEXT: store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8482; SSE41-NEXT: [[TMP5:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8483; SSE41-NEXT: [[TMP6:%.*]] = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> [[TMP5]])484; SSE41-NEXT: store <2 x double> [[TMP6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8485; SSE41-NEXT: [[TMP7:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8486; SSE41-NEXT: [[TMP8:%.*]] = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> [[TMP7]])487; SSE41-NEXT: store <2 x double> [[TMP8]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8488; SSE41-NEXT: ret void489;490; AVX1-LABEL: @nearbyint_8f64(491; AVX1-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8492; AVX1-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> [[TMP1]])493; AVX1-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8494; AVX1-NEXT: [[TMP3:%.*]] = load <4 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8495; AVX1-NEXT: [[TMP4:%.*]] = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> [[TMP3]])496; AVX1-NEXT: store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8497; AVX1-NEXT: ret void498;499; AVX2-LABEL: @nearbyint_8f64(500; AVX2-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8501; AVX2-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> [[TMP1]])502; AVX2-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8503; AVX2-NEXT: [[TMP3:%.*]] = load <4 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8504; AVX2-NEXT: [[TMP4:%.*]] = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> [[TMP3]])505; AVX2-NEXT: store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8506; AVX2-NEXT: ret void507;508; AVX512-LABEL: @nearbyint_8f64(509; AVX512-NEXT: [[TMP1:%.*]] = load <8 x double>, ptr @src64, align 8510; AVX512-NEXT: [[TMP2:%.*]] = call <8 x double> @llvm.nearbyint.v8f64(<8 x double> [[TMP1]])511; AVX512-NEXT: store <8 x double> [[TMP2]], ptr @dst64, align 8512; AVX512-NEXT: ret void513;514 %ld0 = load double, ptr @src64, align 8515 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8516 %ld2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8517 %ld3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8518 %ld4 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8519 %ld5 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8520 %ld6 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8521 %ld7 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8522 %nearbyint0 = call double @llvm.nearbyint.f64(double %ld0)523 %nearbyint1 = call double @llvm.nearbyint.f64(double %ld1)524 %nearbyint2 = call double @llvm.nearbyint.f64(double %ld2)525 %nearbyint3 = call double @llvm.nearbyint.f64(double %ld3)526 %nearbyint4 = call double @llvm.nearbyint.f64(double %ld4)527 %nearbyint5 = call double @llvm.nearbyint.f64(double %ld5)528 %nearbyint6 = call double @llvm.nearbyint.f64(double %ld6)529 %nearbyint7 = call double @llvm.nearbyint.f64(double %ld7)530 store double %nearbyint0, ptr @dst64, align 8531 store double %nearbyint1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8532 store double %nearbyint2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8533 store double %nearbyint3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8534 store double %nearbyint4, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8535 store double %nearbyint5, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8536 store double %nearbyint6, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8537 store double %nearbyint7, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8538 ret void539}540 541define void @rint_2f64() #0 {542; SSE2-LABEL: @rint_2f64(543; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8544; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8545; SSE2-NEXT: [[RINT0:%.*]] = call double @llvm.rint.f64(double [[LD0]])546; SSE2-NEXT: [[RINT1:%.*]] = call double @llvm.rint.f64(double [[LD1]])547; SSE2-NEXT: store double [[RINT0]], ptr @dst64, align 8548; SSE2-NEXT: store double [[RINT1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8549; SSE2-NEXT: ret void550;551; SSE41-LABEL: @rint_2f64(552; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8553; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.rint.v2f64(<2 x double> [[TMP1]])554; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8555; SSE41-NEXT: ret void556;557; AVX-LABEL: @rint_2f64(558; AVX-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8559; AVX-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.rint.v2f64(<2 x double> [[TMP1]])560; AVX-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8561; AVX-NEXT: ret void562;563 %ld0 = load double, ptr @src64, align 8564 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8565 %rint0 = call double @llvm.rint.f64(double %ld0)566 %rint1 = call double @llvm.rint.f64(double %ld1)567 store double %rint0, ptr @dst64, align 8568 store double %rint1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8569 ret void570}571 572define void @rint_4f64() #0 {573; SSE2-LABEL: @rint_4f64(574; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8575; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8576; SSE2-NEXT: [[LD2:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8577; SSE2-NEXT: [[LD3:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8578; SSE2-NEXT: [[RINT0:%.*]] = call double @llvm.rint.f64(double [[LD0]])579; SSE2-NEXT: [[RINT1:%.*]] = call double @llvm.rint.f64(double [[LD1]])580; SSE2-NEXT: [[RINT2:%.*]] = call double @llvm.rint.f64(double [[LD2]])581; SSE2-NEXT: [[RINT3:%.*]] = call double @llvm.rint.f64(double [[LD3]])582; SSE2-NEXT: store double [[RINT0]], ptr @dst64, align 8583; SSE2-NEXT: store double [[RINT1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8584; SSE2-NEXT: store double [[RINT2]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8585; SSE2-NEXT: store double [[RINT3]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8586; SSE2-NEXT: ret void587;588; SSE41-LABEL: @rint_4f64(589; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8590; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.rint.v2f64(<2 x double> [[TMP1]])591; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8592; SSE41-NEXT: [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8593; SSE41-NEXT: [[TMP4:%.*]] = call <2 x double> @llvm.rint.v2f64(<2 x double> [[TMP3]])594; SSE41-NEXT: store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8595; SSE41-NEXT: ret void596;597; AVX-LABEL: @rint_4f64(598; AVX-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8599; AVX-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.rint.v4f64(<4 x double> [[TMP1]])600; AVX-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8601; AVX-NEXT: ret void602;603 %ld0 = load double, ptr @src64, align 8604 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8605 %ld2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8606 %ld3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8607 %rint0 = call double @llvm.rint.f64(double %ld0)608 %rint1 = call double @llvm.rint.f64(double %ld1)609 %rint2 = call double @llvm.rint.f64(double %ld2)610 %rint3 = call double @llvm.rint.f64(double %ld3)611 store double %rint0, ptr @dst64, align 8612 store double %rint1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8613 store double %rint2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8614 store double %rint3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8615 ret void616}617 618define void @rint_8f64() #0 {619; SSE2-LABEL: @rint_8f64(620; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8621; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8622; SSE2-NEXT: [[LD2:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8623; SSE2-NEXT: [[LD3:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8624; SSE2-NEXT: [[LD4:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8625; SSE2-NEXT: [[LD5:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8626; SSE2-NEXT: [[LD6:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8627; SSE2-NEXT: [[LD7:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8628; SSE2-NEXT: [[RINT0:%.*]] = call double @llvm.rint.f64(double [[LD0]])629; SSE2-NEXT: [[RINT1:%.*]] = call double @llvm.rint.f64(double [[LD1]])630; SSE2-NEXT: [[RINT2:%.*]] = call double @llvm.rint.f64(double [[LD2]])631; SSE2-NEXT: [[RINT3:%.*]] = call double @llvm.rint.f64(double [[LD3]])632; SSE2-NEXT: [[RINT4:%.*]] = call double @llvm.rint.f64(double [[LD4]])633; SSE2-NEXT: [[RINT5:%.*]] = call double @llvm.rint.f64(double [[LD5]])634; SSE2-NEXT: [[RINT6:%.*]] = call double @llvm.rint.f64(double [[LD6]])635; SSE2-NEXT: [[RINT7:%.*]] = call double @llvm.rint.f64(double [[LD7]])636; SSE2-NEXT: store double [[RINT0]], ptr @dst64, align 8637; SSE2-NEXT: store double [[RINT1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8638; SSE2-NEXT: store double [[RINT2]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8639; SSE2-NEXT: store double [[RINT3]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8640; SSE2-NEXT: store double [[RINT4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8641; SSE2-NEXT: store double [[RINT5]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8642; SSE2-NEXT: store double [[RINT6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8643; SSE2-NEXT: store double [[RINT7]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8644; SSE2-NEXT: ret void645;646; SSE41-LABEL: @rint_8f64(647; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8648; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.rint.v2f64(<2 x double> [[TMP1]])649; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8650; SSE41-NEXT: [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8651; SSE41-NEXT: [[TMP4:%.*]] = call <2 x double> @llvm.rint.v2f64(<2 x double> [[TMP3]])652; SSE41-NEXT: store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8653; SSE41-NEXT: [[TMP5:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8654; SSE41-NEXT: [[TMP6:%.*]] = call <2 x double> @llvm.rint.v2f64(<2 x double> [[TMP5]])655; SSE41-NEXT: store <2 x double> [[TMP6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8656; SSE41-NEXT: [[TMP7:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8657; SSE41-NEXT: [[TMP8:%.*]] = call <2 x double> @llvm.rint.v2f64(<2 x double> [[TMP7]])658; SSE41-NEXT: store <2 x double> [[TMP8]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8659; SSE41-NEXT: ret void660;661; AVX1-LABEL: @rint_8f64(662; AVX1-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8663; AVX1-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.rint.v4f64(<4 x double> [[TMP1]])664; AVX1-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8665; AVX1-NEXT: [[TMP3:%.*]] = load <4 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8666; AVX1-NEXT: [[TMP4:%.*]] = call <4 x double> @llvm.rint.v4f64(<4 x double> [[TMP3]])667; AVX1-NEXT: store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8668; AVX1-NEXT: ret void669;670; AVX2-LABEL: @rint_8f64(671; AVX2-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8672; AVX2-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.rint.v4f64(<4 x double> [[TMP1]])673; AVX2-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8674; AVX2-NEXT: [[TMP3:%.*]] = load <4 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8675; AVX2-NEXT: [[TMP4:%.*]] = call <4 x double> @llvm.rint.v4f64(<4 x double> [[TMP3]])676; AVX2-NEXT: store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8677; AVX2-NEXT: ret void678;679; AVX512-LABEL: @rint_8f64(680; AVX512-NEXT: [[TMP1:%.*]] = load <8 x double>, ptr @src64, align 8681; AVX512-NEXT: [[TMP2:%.*]] = call <8 x double> @llvm.rint.v8f64(<8 x double> [[TMP1]])682; AVX512-NEXT: store <8 x double> [[TMP2]], ptr @dst64, align 8683; AVX512-NEXT: ret void684;685 %ld0 = load double, ptr @src64, align 8686 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8687 %ld2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8688 %ld3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8689 %ld4 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8690 %ld5 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8691 %ld6 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8692 %ld7 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8693 %rint0 = call double @llvm.rint.f64(double %ld0)694 %rint1 = call double @llvm.rint.f64(double %ld1)695 %rint2 = call double @llvm.rint.f64(double %ld2)696 %rint3 = call double @llvm.rint.f64(double %ld3)697 %rint4 = call double @llvm.rint.f64(double %ld4)698 %rint5 = call double @llvm.rint.f64(double %ld5)699 %rint6 = call double @llvm.rint.f64(double %ld6)700 %rint7 = call double @llvm.rint.f64(double %ld7)701 store double %rint0, ptr @dst64, align 8702 store double %rint1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8703 store double %rint2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8704 store double %rint3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8705 store double %rint4, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8706 store double %rint5, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8707 store double %rint6, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8708 store double %rint7, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8709 ret void710}711 712define void @trunc_2f64() #0 {713; SSE2-LABEL: @trunc_2f64(714; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8715; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8716; SSE2-NEXT: [[TRUNC0:%.*]] = call double @llvm.trunc.f64(double [[LD0]])717; SSE2-NEXT: [[TRUNC1:%.*]] = call double @llvm.trunc.f64(double [[LD1]])718; SSE2-NEXT: store double [[TRUNC0]], ptr @dst64, align 8719; SSE2-NEXT: store double [[TRUNC1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8720; SSE2-NEXT: ret void721;722; SSE41-LABEL: @trunc_2f64(723; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8724; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.trunc.v2f64(<2 x double> [[TMP1]])725; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8726; SSE41-NEXT: ret void727;728; AVX-LABEL: @trunc_2f64(729; AVX-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8730; AVX-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.trunc.v2f64(<2 x double> [[TMP1]])731; AVX-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8732; AVX-NEXT: ret void733;734 %ld0 = load double, ptr @src64, align 8735 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8736 %trunc0 = call double @llvm.trunc.f64(double %ld0)737 %trunc1 = call double @llvm.trunc.f64(double %ld1)738 store double %trunc0, ptr @dst64, align 8739 store double %trunc1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8740 ret void741}742 743define void @trunc_4f64() #0 {744; SSE2-LABEL: @trunc_4f64(745; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8746; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8747; SSE2-NEXT: [[LD2:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8748; SSE2-NEXT: [[LD3:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8749; SSE2-NEXT: [[TRUNC0:%.*]] = call double @llvm.trunc.f64(double [[LD0]])750; SSE2-NEXT: [[TRUNC1:%.*]] = call double @llvm.trunc.f64(double [[LD1]])751; SSE2-NEXT: [[TRUNC2:%.*]] = call double @llvm.trunc.f64(double [[LD2]])752; SSE2-NEXT: [[TRUNC3:%.*]] = call double @llvm.trunc.f64(double [[LD3]])753; SSE2-NEXT: store double [[TRUNC0]], ptr @dst64, align 8754; SSE2-NEXT: store double [[TRUNC1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8755; SSE2-NEXT: store double [[TRUNC2]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8756; SSE2-NEXT: store double [[TRUNC3]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8757; SSE2-NEXT: ret void758;759; SSE41-LABEL: @trunc_4f64(760; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8761; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.trunc.v2f64(<2 x double> [[TMP1]])762; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8763; SSE41-NEXT: [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8764; SSE41-NEXT: [[TMP4:%.*]] = call <2 x double> @llvm.trunc.v2f64(<2 x double> [[TMP3]])765; SSE41-NEXT: store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8766; SSE41-NEXT: ret void767;768; AVX-LABEL: @trunc_4f64(769; AVX-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8770; AVX-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.trunc.v4f64(<4 x double> [[TMP1]])771; AVX-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8772; AVX-NEXT: ret void773;774 %ld0 = load double, ptr @src64, align 8775 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8776 %ld2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8777 %ld3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8778 %trunc0 = call double @llvm.trunc.f64(double %ld0)779 %trunc1 = call double @llvm.trunc.f64(double %ld1)780 %trunc2 = call double @llvm.trunc.f64(double %ld2)781 %trunc3 = call double @llvm.trunc.f64(double %ld3)782 store double %trunc0, ptr @dst64, align 8783 store double %trunc1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8784 store double %trunc2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8785 store double %trunc3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8786 ret void787}788 789define void @trunc_8f64() #0 {790; SSE2-LABEL: @trunc_8f64(791; SSE2-NEXT: [[LD0:%.*]] = load double, ptr @src64, align 8792; SSE2-NEXT: [[LD1:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8793; SSE2-NEXT: [[LD2:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8794; SSE2-NEXT: [[LD3:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8795; SSE2-NEXT: [[LD4:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8796; SSE2-NEXT: [[LD5:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8797; SSE2-NEXT: [[LD6:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8798; SSE2-NEXT: [[LD7:%.*]] = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8799; SSE2-NEXT: [[TRUNC0:%.*]] = call double @llvm.trunc.f64(double [[LD0]])800; SSE2-NEXT: [[TRUNC1:%.*]] = call double @llvm.trunc.f64(double [[LD1]])801; SSE2-NEXT: [[TRUNC2:%.*]] = call double @llvm.trunc.f64(double [[LD2]])802; SSE2-NEXT: [[TRUNC3:%.*]] = call double @llvm.trunc.f64(double [[LD3]])803; SSE2-NEXT: [[TRUNC4:%.*]] = call double @llvm.trunc.f64(double [[LD4]])804; SSE2-NEXT: [[TRUNC5:%.*]] = call double @llvm.trunc.f64(double [[LD5]])805; SSE2-NEXT: [[TRUNC6:%.*]] = call double @llvm.trunc.f64(double [[LD6]])806; SSE2-NEXT: [[TRUNC7:%.*]] = call double @llvm.trunc.f64(double [[LD7]])807; SSE2-NEXT: store double [[TRUNC0]], ptr @dst64, align 8808; SSE2-NEXT: store double [[TRUNC1]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8809; SSE2-NEXT: store double [[TRUNC2]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8810; SSE2-NEXT: store double [[TRUNC3]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8811; SSE2-NEXT: store double [[TRUNC4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8812; SSE2-NEXT: store double [[TRUNC5]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8813; SSE2-NEXT: store double [[TRUNC6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8814; SSE2-NEXT: store double [[TRUNC7]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8815; SSE2-NEXT: ret void816;817; SSE41-LABEL: @trunc_8f64(818; SSE41-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @src64, align 8819; SSE41-NEXT: [[TMP2:%.*]] = call <2 x double> @llvm.trunc.v2f64(<2 x double> [[TMP1]])820; SSE41-NEXT: store <2 x double> [[TMP2]], ptr @dst64, align 8821; SSE41-NEXT: [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8822; SSE41-NEXT: [[TMP4:%.*]] = call <2 x double> @llvm.trunc.v2f64(<2 x double> [[TMP3]])823; SSE41-NEXT: store <2 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8824; SSE41-NEXT: [[TMP5:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8825; SSE41-NEXT: [[TMP6:%.*]] = call <2 x double> @llvm.trunc.v2f64(<2 x double> [[TMP5]])826; SSE41-NEXT: store <2 x double> [[TMP6]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8827; SSE41-NEXT: [[TMP7:%.*]] = load <2 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8828; SSE41-NEXT: [[TMP8:%.*]] = call <2 x double> @llvm.trunc.v2f64(<2 x double> [[TMP7]])829; SSE41-NEXT: store <2 x double> [[TMP8]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8830; SSE41-NEXT: ret void831;832; AVX1-LABEL: @trunc_8f64(833; AVX1-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8834; AVX1-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.trunc.v4f64(<4 x double> [[TMP1]])835; AVX1-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8836; AVX1-NEXT: [[TMP3:%.*]] = load <4 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8837; AVX1-NEXT: [[TMP4:%.*]] = call <4 x double> @llvm.trunc.v4f64(<4 x double> [[TMP3]])838; AVX1-NEXT: store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8839; AVX1-NEXT: ret void840;841; AVX2-LABEL: @trunc_8f64(842; AVX2-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr @src64, align 8843; AVX2-NEXT: [[TMP2:%.*]] = call <4 x double> @llvm.trunc.v4f64(<4 x double> [[TMP1]])844; AVX2-NEXT: store <4 x double> [[TMP2]], ptr @dst64, align 8845; AVX2-NEXT: [[TMP3:%.*]] = load <4 x double>, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8846; AVX2-NEXT: [[TMP4:%.*]] = call <4 x double> @llvm.trunc.v4f64(<4 x double> [[TMP3]])847; AVX2-NEXT: store <4 x double> [[TMP4]], ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8848; AVX2-NEXT: ret void849;850; AVX512-LABEL: @trunc_8f64(851; AVX512-NEXT: [[TMP1:%.*]] = load <8 x double>, ptr @src64, align 8852; AVX512-NEXT: [[TMP2:%.*]] = call <8 x double> @llvm.trunc.v8f64(<8 x double> [[TMP1]])853; AVX512-NEXT: store <8 x double> [[TMP2]], ptr @dst64, align 8854; AVX512-NEXT: ret void855;856 %ld0 = load double, ptr @src64, align 8857 %ld1 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 1), align 8858 %ld2 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 2), align 8859 %ld3 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 3), align 8860 %ld4 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 4), align 8861 %ld5 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 5), align 8862 %ld6 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 6), align 8863 %ld7 = load double, ptr getelementptr inbounds ([8 x double], ptr @src64, i32 0, i64 7), align 8864 %trunc0 = call double @llvm.trunc.f64(double %ld0)865 %trunc1 = call double @llvm.trunc.f64(double %ld1)866 %trunc2 = call double @llvm.trunc.f64(double %ld2)867 %trunc3 = call double @llvm.trunc.f64(double %ld3)868 %trunc4 = call double @llvm.trunc.f64(double %ld4)869 %trunc5 = call double @llvm.trunc.f64(double %ld5)870 %trunc6 = call double @llvm.trunc.f64(double %ld6)871 %trunc7 = call double @llvm.trunc.f64(double %ld7)872 store double %trunc0, ptr @dst64, align 8873 store double %trunc1, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 1), align 8874 store double %trunc2, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 2), align 8875 store double %trunc3, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 3), align 8876 store double %trunc4, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 4), align 8877 store double %trunc5, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 5), align 8878 store double %trunc6, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 6), align 8879 store double %trunc7, ptr getelementptr inbounds ([8 x double], ptr @dst64, i32 0, i64 7), align 8880 ret void881}882 883define void @ceil_4f32() #0 {884; SSE2-LABEL: @ceil_4f32(885; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 4886; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 4887; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 4888; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 4889; SSE2-NEXT: [[CEIL0:%.*]] = call float @llvm.ceil.f32(float [[LD0]])890; SSE2-NEXT: [[CEIL1:%.*]] = call float @llvm.ceil.f32(float [[LD1]])891; SSE2-NEXT: [[CEIL2:%.*]] = call float @llvm.ceil.f32(float [[LD2]])892; SSE2-NEXT: [[CEIL3:%.*]] = call float @llvm.ceil.f32(float [[LD3]])893; SSE2-NEXT: store float [[CEIL0]], ptr @dst32, align 4894; SSE2-NEXT: store float [[CEIL1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4895; SSE2-NEXT: store float [[CEIL2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 4896; SSE2-NEXT: store float [[CEIL3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 4897; SSE2-NEXT: ret void898;899; SSE41-LABEL: @ceil_4f32(900; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 4901; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.ceil.v4f32(<4 x float> [[TMP1]])902; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 4903; SSE41-NEXT: ret void904;905; AVX-LABEL: @ceil_4f32(906; AVX-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 4907; AVX-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.ceil.v4f32(<4 x float> [[TMP1]])908; AVX-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 4909; AVX-NEXT: ret void910;911 %ld0 = load float, ptr @src32, align 4912 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 4913 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 4914 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 4915 %ceil0 = call float @llvm.ceil.f32(float %ld0)916 %ceil1 = call float @llvm.ceil.f32(float %ld1)917 %ceil2 = call float @llvm.ceil.f32(float %ld2)918 %ceil3 = call float @llvm.ceil.f32(float %ld3)919 store float %ceil0, ptr @dst32, align 4920 store float %ceil1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4921 store float %ceil2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 4922 store float %ceil3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 4923 ret void924}925 926define void @ceil_8f32() #0 {927; SSE2-LABEL: @ceil_8f32(928; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 4929; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 4930; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 4931; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 4932; SSE2-NEXT: [[LD4:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 4933; SSE2-NEXT: [[LD5:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 4934; SSE2-NEXT: [[LD6:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 4935; SSE2-NEXT: [[LD7:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 4936; SSE2-NEXT: [[CEIL0:%.*]] = call float @llvm.ceil.f32(float [[LD0]])937; SSE2-NEXT: [[CEIL1:%.*]] = call float @llvm.ceil.f32(float [[LD1]])938; SSE2-NEXT: [[CEIL2:%.*]] = call float @llvm.ceil.f32(float [[LD2]])939; SSE2-NEXT: [[CEIL3:%.*]] = call float @llvm.ceil.f32(float [[LD3]])940; SSE2-NEXT: [[CEIL4:%.*]] = call float @llvm.ceil.f32(float [[LD4]])941; SSE2-NEXT: [[CEIL5:%.*]] = call float @llvm.ceil.f32(float [[LD5]])942; SSE2-NEXT: [[CEIL6:%.*]] = call float @llvm.ceil.f32(float [[LD6]])943; SSE2-NEXT: [[CEIL7:%.*]] = call float @llvm.ceil.f32(float [[LD7]])944; SSE2-NEXT: store float [[CEIL0]], ptr @dst32, align 4945; SSE2-NEXT: store float [[CEIL1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4946; SSE2-NEXT: store float [[CEIL2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 4947; SSE2-NEXT: store float [[CEIL3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 4948; SSE2-NEXT: store float [[CEIL4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 4949; SSE2-NEXT: store float [[CEIL5]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 4950; SSE2-NEXT: store float [[CEIL6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 4951; SSE2-NEXT: store float [[CEIL7]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 4952; SSE2-NEXT: ret void953;954; SSE41-LABEL: @ceil_8f32(955; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 4956; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.ceil.v4f32(<4 x float> [[TMP1]])957; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 4958; SSE41-NEXT: [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 4959; SSE41-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.ceil.v4f32(<4 x float> [[TMP3]])960; SSE41-NEXT: store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 4961; SSE41-NEXT: ret void962;963; AVX-LABEL: @ceil_8f32(964; AVX-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 4965; AVX-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.ceil.v8f32(<8 x float> [[TMP1]])966; AVX-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 4967; AVX-NEXT: ret void968;969 %ld0 = load float, ptr @src32, align 4970 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 4971 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 4972 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 4973 %ld4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 4974 %ld5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 4975 %ld6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 4976 %ld7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 4977 %ceil0 = call float @llvm.ceil.f32(float %ld0)978 %ceil1 = call float @llvm.ceil.f32(float %ld1)979 %ceil2 = call float @llvm.ceil.f32(float %ld2)980 %ceil3 = call float @llvm.ceil.f32(float %ld3)981 %ceil4 = call float @llvm.ceil.f32(float %ld4)982 %ceil5 = call float @llvm.ceil.f32(float %ld5)983 %ceil6 = call float @llvm.ceil.f32(float %ld6)984 %ceil7 = call float @llvm.ceil.f32(float %ld7)985 store float %ceil0, ptr @dst32, align 4986 store float %ceil1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 4987 store float %ceil2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 4988 store float %ceil3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 4989 store float %ceil4, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 4990 store float %ceil5, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 4991 store float %ceil6, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 4992 store float %ceil7, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 4993 ret void994}995 996define void @ceil_16f32() #0 {997; SSE2-LABEL: @ceil_16f32(998; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 4999; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41000; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41001; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41002; SSE2-NEXT: [[LD4:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41003; SSE2-NEXT: [[LD5:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 41004; SSE2-NEXT: [[LD6:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 41005; SSE2-NEXT: [[LD7:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 41006; SSE2-NEXT: [[LD8:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41007; SSE2-NEXT: [[LD9:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 9), align 41008; SSE2-NEXT: [[LD10:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 10), align 41009; SSE2-NEXT: [[LD11:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 11), align 41010; SSE2-NEXT: [[LD12:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 41011; SSE2-NEXT: [[LD13:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 13), align 41012; SSE2-NEXT: [[LD14:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 14), align 41013; SSE2-NEXT: [[LD15:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 15), align 41014; SSE2-NEXT: [[CEIL0:%.*]] = call float @llvm.ceil.f32(float [[LD0]])1015; SSE2-NEXT: [[CEIL1:%.*]] = call float @llvm.ceil.f32(float [[LD1]])1016; SSE2-NEXT: [[CEIL2:%.*]] = call float @llvm.ceil.f32(float [[LD2]])1017; SSE2-NEXT: [[CEIL3:%.*]] = call float @llvm.ceil.f32(float [[LD3]])1018; SSE2-NEXT: [[CEIL4:%.*]] = call float @llvm.ceil.f32(float [[LD4]])1019; SSE2-NEXT: [[CEIL5:%.*]] = call float @llvm.ceil.f32(float [[LD5]])1020; SSE2-NEXT: [[CEIL6:%.*]] = call float @llvm.ceil.f32(float [[LD6]])1021; SSE2-NEXT: [[CEIL7:%.*]] = call float @llvm.ceil.f32(float [[LD7]])1022; SSE2-NEXT: [[CEIL8:%.*]] = call float @llvm.ceil.f32(float [[LD8]])1023; SSE2-NEXT: [[CEIL9:%.*]] = call float @llvm.ceil.f32(float [[LD9]])1024; SSE2-NEXT: [[CEIL10:%.*]] = call float @llvm.ceil.f32(float [[LD10]])1025; SSE2-NEXT: [[CEIL11:%.*]] = call float @llvm.ceil.f32(float [[LD11]])1026; SSE2-NEXT: [[CEIL12:%.*]] = call float @llvm.ceil.f32(float [[LD12]])1027; SSE2-NEXT: [[CEIL13:%.*]] = call float @llvm.ceil.f32(float [[LD13]])1028; SSE2-NEXT: [[CEIL14:%.*]] = call float @llvm.ceil.f32(float [[LD14]])1029; SSE2-NEXT: [[CEIL15:%.*]] = call float @llvm.ceil.f32(float [[LD15]])1030; SSE2-NEXT: store float [[CEIL0]], ptr @dst32, align 41031; SSE2-NEXT: store float [[CEIL1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41032; SSE2-NEXT: store float [[CEIL2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41033; SSE2-NEXT: store float [[CEIL3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41034; SSE2-NEXT: store float [[CEIL4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41035; SSE2-NEXT: store float [[CEIL5]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 41036; SSE2-NEXT: store float [[CEIL6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 41037; SSE2-NEXT: store float [[CEIL7]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 41038; SSE2-NEXT: store float [[CEIL8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41039; SSE2-NEXT: store float [[CEIL9]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9), align 41040; SSE2-NEXT: store float [[CEIL10]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 41041; SSE2-NEXT: store float [[CEIL11]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 41042; SSE2-NEXT: store float [[CEIL12]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 41043; SSE2-NEXT: store float [[CEIL13]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 41044; SSE2-NEXT: store float [[CEIL14]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 41045; SSE2-NEXT: store float [[CEIL15]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 41046; SSE2-NEXT: ret void1047;1048; SSE41-LABEL: @ceil_16f32(1049; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41050; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.ceil.v4f32(<4 x float> [[TMP1]])1051; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41052; SSE41-NEXT: [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41053; SSE41-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.ceil.v4f32(<4 x float> [[TMP3]])1054; SSE41-NEXT: store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41055; SSE41-NEXT: [[TMP5:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41056; SSE41-NEXT: [[TMP6:%.*]] = call <4 x float> @llvm.ceil.v4f32(<4 x float> [[TMP5]])1057; SSE41-NEXT: store <4 x float> [[TMP6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41058; SSE41-NEXT: [[TMP7:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 41059; SSE41-NEXT: [[TMP8:%.*]] = call <4 x float> @llvm.ceil.v4f32(<4 x float> [[TMP7]])1060; SSE41-NEXT: store <4 x float> [[TMP8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 41061; SSE41-NEXT: ret void1062;1063; AVX1-LABEL: @ceil_16f32(1064; AVX1-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 41065; AVX1-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.ceil.v8f32(<8 x float> [[TMP1]])1066; AVX1-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 41067; AVX1-NEXT: [[TMP3:%.*]] = load <8 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41068; AVX1-NEXT: [[TMP4:%.*]] = call <8 x float> @llvm.ceil.v8f32(<8 x float> [[TMP3]])1069; AVX1-NEXT: store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41070; AVX1-NEXT: ret void1071;1072; AVX2-LABEL: @ceil_16f32(1073; AVX2-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 41074; AVX2-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.ceil.v8f32(<8 x float> [[TMP1]])1075; AVX2-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 41076; AVX2-NEXT: [[TMP3:%.*]] = load <8 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41077; AVX2-NEXT: [[TMP4:%.*]] = call <8 x float> @llvm.ceil.v8f32(<8 x float> [[TMP3]])1078; AVX2-NEXT: store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41079; AVX2-NEXT: ret void1080;1081; AVX512-LABEL: @ceil_16f32(1082; AVX512-NEXT: [[TMP1:%.*]] = load <16 x float>, ptr @src32, align 41083; AVX512-NEXT: [[TMP2:%.*]] = call <16 x float> @llvm.ceil.v16f32(<16 x float> [[TMP1]])1084; AVX512-NEXT: store <16 x float> [[TMP2]], ptr @dst32, align 41085; AVX512-NEXT: ret void1086;1087 %ld0 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 0 ), align 41088 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1 ), align 41089 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2 ), align 41090 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3 ), align 41091 %ld4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4 ), align 41092 %ld5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5 ), align 41093 %ld6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6 ), align 41094 %ld7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7 ), align 41095 %ld8 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8 ), align 41096 %ld9 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 9 ), align 41097 %ld10 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 10), align 41098 %ld11 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 11), align 41099 %ld12 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 41100 %ld13 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 13), align 41101 %ld14 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 14), align 41102 %ld15 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 15), align 41103 %ceil0 = call float @llvm.ceil.f32(float %ld0 )1104 %ceil1 = call float @llvm.ceil.f32(float %ld1 )1105 %ceil2 = call float @llvm.ceil.f32(float %ld2 )1106 %ceil3 = call float @llvm.ceil.f32(float %ld3 )1107 %ceil4 = call float @llvm.ceil.f32(float %ld4 )1108 %ceil5 = call float @llvm.ceil.f32(float %ld5 )1109 %ceil6 = call float @llvm.ceil.f32(float %ld6 )1110 %ceil7 = call float @llvm.ceil.f32(float %ld7 )1111 %ceil8 = call float @llvm.ceil.f32(float %ld8 )1112 %ceil9 = call float @llvm.ceil.f32(float %ld9 )1113 %ceil10 = call float @llvm.ceil.f32(float %ld10)1114 %ceil11 = call float @llvm.ceil.f32(float %ld11)1115 %ceil12 = call float @llvm.ceil.f32(float %ld12)1116 %ceil13 = call float @llvm.ceil.f32(float %ld13)1117 %ceil14 = call float @llvm.ceil.f32(float %ld14)1118 %ceil15 = call float @llvm.ceil.f32(float %ld15)1119 store float %ceil0 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 0 ), align 41120 store float %ceil1 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1 ), align 41121 store float %ceil2 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2 ), align 41122 store float %ceil3 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3 ), align 41123 store float %ceil4 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4 ), align 41124 store float %ceil5 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5 ), align 41125 store float %ceil6 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6 ), align 41126 store float %ceil7 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7 ), align 41127 store float %ceil8 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8 ), align 41128 store float %ceil9 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9 ), align 41129 store float %ceil10, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 41130 store float %ceil11, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 41131 store float %ceil12, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 41132 store float %ceil13, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 41133 store float %ceil14, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 41134 store float %ceil15, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 41135 ret void1136}1137 1138define void @floor_4f32() #0 {1139; SSE2-LABEL: @floor_4f32(1140; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 41141; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41142; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41143; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41144; SSE2-NEXT: [[FLOOR0:%.*]] = call float @llvm.floor.f32(float [[LD0]])1145; SSE2-NEXT: [[FLOOR1:%.*]] = call float @llvm.floor.f32(float [[LD1]])1146; SSE2-NEXT: [[FLOOR2:%.*]] = call float @llvm.floor.f32(float [[LD2]])1147; SSE2-NEXT: [[FLOOR3:%.*]] = call float @llvm.floor.f32(float [[LD3]])1148; SSE2-NEXT: store float [[FLOOR0]], ptr @dst32, align 41149; SSE2-NEXT: store float [[FLOOR1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41150; SSE2-NEXT: store float [[FLOOR2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41151; SSE2-NEXT: store float [[FLOOR3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41152; SSE2-NEXT: ret void1153;1154; SSE41-LABEL: @floor_4f32(1155; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41156; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.floor.v4f32(<4 x float> [[TMP1]])1157; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41158; SSE41-NEXT: ret void1159;1160; AVX-LABEL: @floor_4f32(1161; AVX-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41162; AVX-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.floor.v4f32(<4 x float> [[TMP1]])1163; AVX-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41164; AVX-NEXT: ret void1165;1166 %ld0 = load float, ptr @src32, align 41167 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41168 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41169 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41170 %floor0 = call float @llvm.floor.f32(float %ld0)1171 %floor1 = call float @llvm.floor.f32(float %ld1)1172 %floor2 = call float @llvm.floor.f32(float %ld2)1173 %floor3 = call float @llvm.floor.f32(float %ld3)1174 store float %floor0, ptr @dst32, align 41175 store float %floor1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41176 store float %floor2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41177 store float %floor3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41178 ret void1179}1180 1181define void @floor_8f32() #0 {1182; SSE2-LABEL: @floor_8f32(1183; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 41184; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41185; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41186; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41187; SSE2-NEXT: [[LD4:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41188; SSE2-NEXT: [[LD5:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 41189; SSE2-NEXT: [[LD6:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 41190; SSE2-NEXT: [[LD7:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 41191; SSE2-NEXT: [[FLOOR0:%.*]] = call float @llvm.floor.f32(float [[LD0]])1192; SSE2-NEXT: [[FLOOR1:%.*]] = call float @llvm.floor.f32(float [[LD1]])1193; SSE2-NEXT: [[FLOOR2:%.*]] = call float @llvm.floor.f32(float [[LD2]])1194; SSE2-NEXT: [[FLOOR3:%.*]] = call float @llvm.floor.f32(float [[LD3]])1195; SSE2-NEXT: [[FLOOR4:%.*]] = call float @llvm.floor.f32(float [[LD4]])1196; SSE2-NEXT: [[FLOOR5:%.*]] = call float @llvm.floor.f32(float [[LD5]])1197; SSE2-NEXT: [[FLOOR6:%.*]] = call float @llvm.floor.f32(float [[LD6]])1198; SSE2-NEXT: [[FLOOR7:%.*]] = call float @llvm.floor.f32(float [[LD7]])1199; SSE2-NEXT: store float [[FLOOR0]], ptr @dst32, align 41200; SSE2-NEXT: store float [[FLOOR1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41201; SSE2-NEXT: store float [[FLOOR2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41202; SSE2-NEXT: store float [[FLOOR3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41203; SSE2-NEXT: store float [[FLOOR4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41204; SSE2-NEXT: store float [[FLOOR5]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 41205; SSE2-NEXT: store float [[FLOOR6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 41206; SSE2-NEXT: store float [[FLOOR7]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 41207; SSE2-NEXT: ret void1208;1209; SSE41-LABEL: @floor_8f32(1210; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41211; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.floor.v4f32(<4 x float> [[TMP1]])1212; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41213; SSE41-NEXT: [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41214; SSE41-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.floor.v4f32(<4 x float> [[TMP3]])1215; SSE41-NEXT: store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41216; SSE41-NEXT: ret void1217;1218; AVX-LABEL: @floor_8f32(1219; AVX-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 41220; AVX-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.floor.v8f32(<8 x float> [[TMP1]])1221; AVX-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 41222; AVX-NEXT: ret void1223;1224 %ld0 = load float, ptr @src32, align 41225 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41226 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41227 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41228 %ld4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41229 %ld5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 41230 %ld6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 41231 %ld7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 41232 %floor0 = call float @llvm.floor.f32(float %ld0)1233 %floor1 = call float @llvm.floor.f32(float %ld1)1234 %floor2 = call float @llvm.floor.f32(float %ld2)1235 %floor3 = call float @llvm.floor.f32(float %ld3)1236 %floor4 = call float @llvm.floor.f32(float %ld4)1237 %floor5 = call float @llvm.floor.f32(float %ld5)1238 %floor6 = call float @llvm.floor.f32(float %ld6)1239 %floor7 = call float @llvm.floor.f32(float %ld7)1240 store float %floor0, ptr @dst32, align 41241 store float %floor1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41242 store float %floor2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41243 store float %floor3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41244 store float %floor4, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41245 store float %floor5, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 41246 store float %floor6, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 41247 store float %floor7, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 41248 ret void1249}1250 1251define void @floor_16f32() #0 {1252; SSE2-LABEL: @floor_16f32(1253; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 41254; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41255; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41256; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41257; SSE2-NEXT: [[LD4:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41258; SSE2-NEXT: [[LD5:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 41259; SSE2-NEXT: [[LD6:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 41260; SSE2-NEXT: [[LD7:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 41261; SSE2-NEXT: [[LD8:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41262; SSE2-NEXT: [[LD9:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 9), align 41263; SSE2-NEXT: [[LD10:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 10), align 41264; SSE2-NEXT: [[LD11:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 11), align 41265; SSE2-NEXT: [[LD12:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 41266; SSE2-NEXT: [[LD13:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 13), align 41267; SSE2-NEXT: [[LD14:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 14), align 41268; SSE2-NEXT: [[LD15:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 15), align 41269; SSE2-NEXT: [[FLOOR0:%.*]] = call float @llvm.floor.f32(float [[LD0]])1270; SSE2-NEXT: [[FLOOR1:%.*]] = call float @llvm.floor.f32(float [[LD1]])1271; SSE2-NEXT: [[FLOOR2:%.*]] = call float @llvm.floor.f32(float [[LD2]])1272; SSE2-NEXT: [[FLOOR3:%.*]] = call float @llvm.floor.f32(float [[LD3]])1273; SSE2-NEXT: [[FLOOR4:%.*]] = call float @llvm.floor.f32(float [[LD4]])1274; SSE2-NEXT: [[FLOOR5:%.*]] = call float @llvm.floor.f32(float [[LD5]])1275; SSE2-NEXT: [[FLOOR6:%.*]] = call float @llvm.floor.f32(float [[LD6]])1276; SSE2-NEXT: [[FLOOR7:%.*]] = call float @llvm.floor.f32(float [[LD7]])1277; SSE2-NEXT: [[FLOOR8:%.*]] = call float @llvm.floor.f32(float [[LD8]])1278; SSE2-NEXT: [[FLOOR9:%.*]] = call float @llvm.floor.f32(float [[LD9]])1279; SSE2-NEXT: [[FLOOR10:%.*]] = call float @llvm.floor.f32(float [[LD10]])1280; SSE2-NEXT: [[FLOOR11:%.*]] = call float @llvm.floor.f32(float [[LD11]])1281; SSE2-NEXT: [[FLOOR12:%.*]] = call float @llvm.floor.f32(float [[LD12]])1282; SSE2-NEXT: [[FLOOR13:%.*]] = call float @llvm.floor.f32(float [[LD13]])1283; SSE2-NEXT: [[FLOOR14:%.*]] = call float @llvm.floor.f32(float [[LD14]])1284; SSE2-NEXT: [[FLOOR15:%.*]] = call float @llvm.floor.f32(float [[LD15]])1285; SSE2-NEXT: store float [[FLOOR0]], ptr @dst32, align 41286; SSE2-NEXT: store float [[FLOOR1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41287; SSE2-NEXT: store float [[FLOOR2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41288; SSE2-NEXT: store float [[FLOOR3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41289; SSE2-NEXT: store float [[FLOOR4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41290; SSE2-NEXT: store float [[FLOOR5]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 41291; SSE2-NEXT: store float [[FLOOR6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 41292; SSE2-NEXT: store float [[FLOOR7]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 41293; SSE2-NEXT: store float [[FLOOR8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41294; SSE2-NEXT: store float [[FLOOR9]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9), align 41295; SSE2-NEXT: store float [[FLOOR10]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 41296; SSE2-NEXT: store float [[FLOOR11]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 41297; SSE2-NEXT: store float [[FLOOR12]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 41298; SSE2-NEXT: store float [[FLOOR13]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 41299; SSE2-NEXT: store float [[FLOOR14]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 41300; SSE2-NEXT: store float [[FLOOR15]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 41301; SSE2-NEXT: ret void1302;1303; SSE41-LABEL: @floor_16f32(1304; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41305; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.floor.v4f32(<4 x float> [[TMP1]])1306; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41307; SSE41-NEXT: [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41308; SSE41-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.floor.v4f32(<4 x float> [[TMP3]])1309; SSE41-NEXT: store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41310; SSE41-NEXT: [[TMP5:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41311; SSE41-NEXT: [[TMP6:%.*]] = call <4 x float> @llvm.floor.v4f32(<4 x float> [[TMP5]])1312; SSE41-NEXT: store <4 x float> [[TMP6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41313; SSE41-NEXT: [[TMP7:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 41314; SSE41-NEXT: [[TMP8:%.*]] = call <4 x float> @llvm.floor.v4f32(<4 x float> [[TMP7]])1315; SSE41-NEXT: store <4 x float> [[TMP8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 41316; SSE41-NEXT: ret void1317;1318; AVX1-LABEL: @floor_16f32(1319; AVX1-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 41320; AVX1-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.floor.v8f32(<8 x float> [[TMP1]])1321; AVX1-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 41322; AVX1-NEXT: [[TMP3:%.*]] = load <8 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41323; AVX1-NEXT: [[TMP4:%.*]] = call <8 x float> @llvm.floor.v8f32(<8 x float> [[TMP3]])1324; AVX1-NEXT: store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41325; AVX1-NEXT: ret void1326;1327; AVX2-LABEL: @floor_16f32(1328; AVX2-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 41329; AVX2-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.floor.v8f32(<8 x float> [[TMP1]])1330; AVX2-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 41331; AVX2-NEXT: [[TMP3:%.*]] = load <8 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41332; AVX2-NEXT: [[TMP4:%.*]] = call <8 x float> @llvm.floor.v8f32(<8 x float> [[TMP3]])1333; AVX2-NEXT: store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41334; AVX2-NEXT: ret void1335;1336; AVX512-LABEL: @floor_16f32(1337; AVX512-NEXT: [[TMP1:%.*]] = load <16 x float>, ptr @src32, align 41338; AVX512-NEXT: [[TMP2:%.*]] = call <16 x float> @llvm.floor.v16f32(<16 x float> [[TMP1]])1339; AVX512-NEXT: store <16 x float> [[TMP2]], ptr @dst32, align 41340; AVX512-NEXT: ret void1341;1342 %ld0 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 0 ), align 41343 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1 ), align 41344 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2 ), align 41345 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3 ), align 41346 %ld4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4 ), align 41347 %ld5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5 ), align 41348 %ld6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6 ), align 41349 %ld7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7 ), align 41350 %ld8 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8 ), align 41351 %ld9 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 9 ), align 41352 %ld10 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 10), align 41353 %ld11 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 11), align 41354 %ld12 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 41355 %ld13 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 13), align 41356 %ld14 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 14), align 41357 %ld15 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 15), align 41358 %floor0 = call float @llvm.floor.f32(float %ld0 )1359 %floor1 = call float @llvm.floor.f32(float %ld1 )1360 %floor2 = call float @llvm.floor.f32(float %ld2 )1361 %floor3 = call float @llvm.floor.f32(float %ld3 )1362 %floor4 = call float @llvm.floor.f32(float %ld4 )1363 %floor5 = call float @llvm.floor.f32(float %ld5 )1364 %floor6 = call float @llvm.floor.f32(float %ld6 )1365 %floor7 = call float @llvm.floor.f32(float %ld7 )1366 %floor8 = call float @llvm.floor.f32(float %ld8 )1367 %floor9 = call float @llvm.floor.f32(float %ld9 )1368 %floor10 = call float @llvm.floor.f32(float %ld10)1369 %floor11 = call float @llvm.floor.f32(float %ld11)1370 %floor12 = call float @llvm.floor.f32(float %ld12)1371 %floor13 = call float @llvm.floor.f32(float %ld13)1372 %floor14 = call float @llvm.floor.f32(float %ld14)1373 %floor15 = call float @llvm.floor.f32(float %ld15)1374 store float %floor0 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 0 ), align 41375 store float %floor1 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1 ), align 41376 store float %floor2 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2 ), align 41377 store float %floor3 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3 ), align 41378 store float %floor4 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4 ), align 41379 store float %floor5 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5 ), align 41380 store float %floor6 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6 ), align 41381 store float %floor7 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7 ), align 41382 store float %floor8 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8 ), align 41383 store float %floor9 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9 ), align 41384 store float %floor10, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 41385 store float %floor11, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 41386 store float %floor12, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 41387 store float %floor13, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 41388 store float %floor14, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 41389 store float %floor15, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 41390 ret void1391}1392 1393define void @nearbyint_4f32() #0 {1394; SSE2-LABEL: @nearbyint_4f32(1395; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 41396; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41397; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41398; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41399; SSE2-NEXT: [[NEARBYINT0:%.*]] = call float @llvm.nearbyint.f32(float [[LD0]])1400; SSE2-NEXT: [[NEARBYINT1:%.*]] = call float @llvm.nearbyint.f32(float [[LD1]])1401; SSE2-NEXT: [[NEARBYINT2:%.*]] = call float @llvm.nearbyint.f32(float [[LD2]])1402; SSE2-NEXT: [[NEARBYINT3:%.*]] = call float @llvm.nearbyint.f32(float [[LD3]])1403; SSE2-NEXT: store float [[NEARBYINT0]], ptr @dst32, align 41404; SSE2-NEXT: store float [[NEARBYINT1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41405; SSE2-NEXT: store float [[NEARBYINT2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41406; SSE2-NEXT: store float [[NEARBYINT3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41407; SSE2-NEXT: ret void1408;1409; SSE41-LABEL: @nearbyint_4f32(1410; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41411; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> [[TMP1]])1412; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41413; SSE41-NEXT: ret void1414;1415; AVX-LABEL: @nearbyint_4f32(1416; AVX-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41417; AVX-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> [[TMP1]])1418; AVX-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41419; AVX-NEXT: ret void1420;1421 %ld0 = load float, ptr @src32, align 41422 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41423 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41424 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41425 %nearbyint0 = call float @llvm.nearbyint.f32(float %ld0)1426 %nearbyint1 = call float @llvm.nearbyint.f32(float %ld1)1427 %nearbyint2 = call float @llvm.nearbyint.f32(float %ld2)1428 %nearbyint3 = call float @llvm.nearbyint.f32(float %ld3)1429 store float %nearbyint0, ptr @dst32, align 41430 store float %nearbyint1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41431 store float %nearbyint2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41432 store float %nearbyint3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41433 ret void1434}1435 1436define void @nearbyint_8f32() #0 {1437; SSE2-LABEL: @nearbyint_8f32(1438; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 41439; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41440; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41441; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41442; SSE2-NEXT: [[LD4:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41443; SSE2-NEXT: [[LD5:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 41444; SSE2-NEXT: [[LD6:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 41445; SSE2-NEXT: [[LD7:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 41446; SSE2-NEXT: [[NEARBYINT0:%.*]] = call float @llvm.nearbyint.f32(float [[LD0]])1447; SSE2-NEXT: [[NEARBYINT1:%.*]] = call float @llvm.nearbyint.f32(float [[LD1]])1448; SSE2-NEXT: [[NEARBYINT2:%.*]] = call float @llvm.nearbyint.f32(float [[LD2]])1449; SSE2-NEXT: [[NEARBYINT3:%.*]] = call float @llvm.nearbyint.f32(float [[LD3]])1450; SSE2-NEXT: [[NEARBYINT4:%.*]] = call float @llvm.nearbyint.f32(float [[LD4]])1451; SSE2-NEXT: [[NEARBYINT5:%.*]] = call float @llvm.nearbyint.f32(float [[LD5]])1452; SSE2-NEXT: [[NEARBYINT6:%.*]] = call float @llvm.nearbyint.f32(float [[LD6]])1453; SSE2-NEXT: [[NEARBYINT7:%.*]] = call float @llvm.nearbyint.f32(float [[LD7]])1454; SSE2-NEXT: store float [[NEARBYINT0]], ptr @dst32, align 41455; SSE2-NEXT: store float [[NEARBYINT1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41456; SSE2-NEXT: store float [[NEARBYINT2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41457; SSE2-NEXT: store float [[NEARBYINT3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41458; SSE2-NEXT: store float [[NEARBYINT4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41459; SSE2-NEXT: store float [[NEARBYINT5]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 41460; SSE2-NEXT: store float [[NEARBYINT6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 41461; SSE2-NEXT: store float [[NEARBYINT7]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 41462; SSE2-NEXT: ret void1463;1464; SSE41-LABEL: @nearbyint_8f32(1465; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41466; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> [[TMP1]])1467; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41468; SSE41-NEXT: [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41469; SSE41-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> [[TMP3]])1470; SSE41-NEXT: store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41471; SSE41-NEXT: ret void1472;1473; AVX-LABEL: @nearbyint_8f32(1474; AVX-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 41475; AVX-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> [[TMP1]])1476; AVX-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 41477; AVX-NEXT: ret void1478;1479 %ld0 = load float, ptr @src32, align 41480 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41481 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41482 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41483 %ld4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41484 %ld5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 41485 %ld6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 41486 %ld7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 41487 %nearbyint0 = call float @llvm.nearbyint.f32(float %ld0)1488 %nearbyint1 = call float @llvm.nearbyint.f32(float %ld1)1489 %nearbyint2 = call float @llvm.nearbyint.f32(float %ld2)1490 %nearbyint3 = call float @llvm.nearbyint.f32(float %ld3)1491 %nearbyint4 = call float @llvm.nearbyint.f32(float %ld4)1492 %nearbyint5 = call float @llvm.nearbyint.f32(float %ld5)1493 %nearbyint6 = call float @llvm.nearbyint.f32(float %ld6)1494 %nearbyint7 = call float @llvm.nearbyint.f32(float %ld7)1495 store float %nearbyint0, ptr @dst32, align 41496 store float %nearbyint1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41497 store float %nearbyint2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41498 store float %nearbyint3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41499 store float %nearbyint4, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41500 store float %nearbyint5, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 41501 store float %nearbyint6, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 41502 store float %nearbyint7, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 41503 ret void1504}1505 1506define void @nearbyint_16f32() #0 {1507; SSE2-LABEL: @nearbyint_16f32(1508; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 41509; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41510; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41511; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41512; SSE2-NEXT: [[LD4:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41513; SSE2-NEXT: [[LD5:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 41514; SSE2-NEXT: [[LD6:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 41515; SSE2-NEXT: [[LD7:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 41516; SSE2-NEXT: [[LD8:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41517; SSE2-NEXT: [[LD9:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 9), align 41518; SSE2-NEXT: [[LD10:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 10), align 41519; SSE2-NEXT: [[LD11:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 11), align 41520; SSE2-NEXT: [[LD12:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 41521; SSE2-NEXT: [[LD13:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 13), align 41522; SSE2-NEXT: [[LD14:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 14), align 41523; SSE2-NEXT: [[LD15:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 15), align 41524; SSE2-NEXT: [[NEARBYINT0:%.*]] = call float @llvm.nearbyint.f32(float [[LD0]])1525; SSE2-NEXT: [[NEARBYINT1:%.*]] = call float @llvm.nearbyint.f32(float [[LD1]])1526; SSE2-NEXT: [[NEARBYINT2:%.*]] = call float @llvm.nearbyint.f32(float [[LD2]])1527; SSE2-NEXT: [[NEARBYINT3:%.*]] = call float @llvm.nearbyint.f32(float [[LD3]])1528; SSE2-NEXT: [[NEARBYINT4:%.*]] = call float @llvm.nearbyint.f32(float [[LD4]])1529; SSE2-NEXT: [[NEARBYINT5:%.*]] = call float @llvm.nearbyint.f32(float [[LD5]])1530; SSE2-NEXT: [[NEARBYINT6:%.*]] = call float @llvm.nearbyint.f32(float [[LD6]])1531; SSE2-NEXT: [[NEARBYINT7:%.*]] = call float @llvm.nearbyint.f32(float [[LD7]])1532; SSE2-NEXT: [[NEARBYINT8:%.*]] = call float @llvm.nearbyint.f32(float [[LD8]])1533; SSE2-NEXT: [[NEARBYINT9:%.*]] = call float @llvm.nearbyint.f32(float [[LD9]])1534; SSE2-NEXT: [[NEARBYINT10:%.*]] = call float @llvm.nearbyint.f32(float [[LD10]])1535; SSE2-NEXT: [[NEARBYINT11:%.*]] = call float @llvm.nearbyint.f32(float [[LD11]])1536; SSE2-NEXT: [[NEARBYINT12:%.*]] = call float @llvm.nearbyint.f32(float [[LD12]])1537; SSE2-NEXT: [[NEARBYINT13:%.*]] = call float @llvm.nearbyint.f32(float [[LD13]])1538; SSE2-NEXT: [[NEARBYINT14:%.*]] = call float @llvm.nearbyint.f32(float [[LD14]])1539; SSE2-NEXT: [[NEARBYINT15:%.*]] = call float @llvm.nearbyint.f32(float [[LD15]])1540; SSE2-NEXT: store float [[NEARBYINT0]], ptr @dst32, align 41541; SSE2-NEXT: store float [[NEARBYINT1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41542; SSE2-NEXT: store float [[NEARBYINT2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41543; SSE2-NEXT: store float [[NEARBYINT3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41544; SSE2-NEXT: store float [[NEARBYINT4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41545; SSE2-NEXT: store float [[NEARBYINT5]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 41546; SSE2-NEXT: store float [[NEARBYINT6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 41547; SSE2-NEXT: store float [[NEARBYINT7]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 41548; SSE2-NEXT: store float [[NEARBYINT8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41549; SSE2-NEXT: store float [[NEARBYINT9]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9), align 41550; SSE2-NEXT: store float [[NEARBYINT10]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 41551; SSE2-NEXT: store float [[NEARBYINT11]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 41552; SSE2-NEXT: store float [[NEARBYINT12]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 41553; SSE2-NEXT: store float [[NEARBYINT13]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 41554; SSE2-NEXT: store float [[NEARBYINT14]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 41555; SSE2-NEXT: store float [[NEARBYINT15]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 41556; SSE2-NEXT: ret void1557;1558; SSE41-LABEL: @nearbyint_16f32(1559; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41560; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> [[TMP1]])1561; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41562; SSE41-NEXT: [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41563; SSE41-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> [[TMP3]])1564; SSE41-NEXT: store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41565; SSE41-NEXT: [[TMP5:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41566; SSE41-NEXT: [[TMP6:%.*]] = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> [[TMP5]])1567; SSE41-NEXT: store <4 x float> [[TMP6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41568; SSE41-NEXT: [[TMP7:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 41569; SSE41-NEXT: [[TMP8:%.*]] = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> [[TMP7]])1570; SSE41-NEXT: store <4 x float> [[TMP8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 41571; SSE41-NEXT: ret void1572;1573; AVX1-LABEL: @nearbyint_16f32(1574; AVX1-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 41575; AVX1-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> [[TMP1]])1576; AVX1-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 41577; AVX1-NEXT: [[TMP3:%.*]] = load <8 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41578; AVX1-NEXT: [[TMP4:%.*]] = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> [[TMP3]])1579; AVX1-NEXT: store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41580; AVX1-NEXT: ret void1581;1582; AVX2-LABEL: @nearbyint_16f32(1583; AVX2-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 41584; AVX2-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> [[TMP1]])1585; AVX2-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 41586; AVX2-NEXT: [[TMP3:%.*]] = load <8 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41587; AVX2-NEXT: [[TMP4:%.*]] = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> [[TMP3]])1588; AVX2-NEXT: store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41589; AVX2-NEXT: ret void1590;1591; AVX512-LABEL: @nearbyint_16f32(1592; AVX512-NEXT: [[TMP1:%.*]] = load <16 x float>, ptr @src32, align 41593; AVX512-NEXT: [[TMP2:%.*]] = call <16 x float> @llvm.nearbyint.v16f32(<16 x float> [[TMP1]])1594; AVX512-NEXT: store <16 x float> [[TMP2]], ptr @dst32, align 41595; AVX512-NEXT: ret void1596;1597 %ld0 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 0 ), align 41598 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1 ), align 41599 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2 ), align 41600 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3 ), align 41601 %ld4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4 ), align 41602 %ld5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5 ), align 41603 %ld6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6 ), align 41604 %ld7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7 ), align 41605 %ld8 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8 ), align 41606 %ld9 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 9 ), align 41607 %ld10 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 10), align 41608 %ld11 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 11), align 41609 %ld12 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 41610 %ld13 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 13), align 41611 %ld14 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 14), align 41612 %ld15 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 15), align 41613 %nearbyint0 = call float @llvm.nearbyint.f32(float %ld0 )1614 %nearbyint1 = call float @llvm.nearbyint.f32(float %ld1 )1615 %nearbyint2 = call float @llvm.nearbyint.f32(float %ld2 )1616 %nearbyint3 = call float @llvm.nearbyint.f32(float %ld3 )1617 %nearbyint4 = call float @llvm.nearbyint.f32(float %ld4 )1618 %nearbyint5 = call float @llvm.nearbyint.f32(float %ld5 )1619 %nearbyint6 = call float @llvm.nearbyint.f32(float %ld6 )1620 %nearbyint7 = call float @llvm.nearbyint.f32(float %ld7 )1621 %nearbyint8 = call float @llvm.nearbyint.f32(float %ld8 )1622 %nearbyint9 = call float @llvm.nearbyint.f32(float %ld9 )1623 %nearbyint10 = call float @llvm.nearbyint.f32(float %ld10)1624 %nearbyint11 = call float @llvm.nearbyint.f32(float %ld11)1625 %nearbyint12 = call float @llvm.nearbyint.f32(float %ld12)1626 %nearbyint13 = call float @llvm.nearbyint.f32(float %ld13)1627 %nearbyint14 = call float @llvm.nearbyint.f32(float %ld14)1628 %nearbyint15 = call float @llvm.nearbyint.f32(float %ld15)1629 store float %nearbyint0 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 0 ), align 41630 store float %nearbyint1 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1 ), align 41631 store float %nearbyint2 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2 ), align 41632 store float %nearbyint3 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3 ), align 41633 store float %nearbyint4 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4 ), align 41634 store float %nearbyint5 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5 ), align 41635 store float %nearbyint6 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6 ), align 41636 store float %nearbyint7 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7 ), align 41637 store float %nearbyint8 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8 ), align 41638 store float %nearbyint9 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9 ), align 41639 store float %nearbyint10, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 41640 store float %nearbyint11, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 41641 store float %nearbyint12, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 41642 store float %nearbyint13, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 41643 store float %nearbyint14, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 41644 store float %nearbyint15, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 41645 ret void1646}1647 1648define void @rint_4f32() #0 {1649; SSE2-LABEL: @rint_4f32(1650; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 41651; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41652; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41653; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41654; SSE2-NEXT: [[RINT0:%.*]] = call float @llvm.rint.f32(float [[LD0]])1655; SSE2-NEXT: [[RINT1:%.*]] = call float @llvm.rint.f32(float [[LD1]])1656; SSE2-NEXT: [[RINT2:%.*]] = call float @llvm.rint.f32(float [[LD2]])1657; SSE2-NEXT: [[RINT3:%.*]] = call float @llvm.rint.f32(float [[LD3]])1658; SSE2-NEXT: store float [[RINT0]], ptr @dst32, align 41659; SSE2-NEXT: store float [[RINT1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41660; SSE2-NEXT: store float [[RINT2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41661; SSE2-NEXT: store float [[RINT3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41662; SSE2-NEXT: ret void1663;1664; SSE41-LABEL: @rint_4f32(1665; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41666; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.rint.v4f32(<4 x float> [[TMP1]])1667; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41668; SSE41-NEXT: ret void1669;1670; AVX-LABEL: @rint_4f32(1671; AVX-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41672; AVX-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.rint.v4f32(<4 x float> [[TMP1]])1673; AVX-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41674; AVX-NEXT: ret void1675;1676 %ld0 = load float, ptr @src32, align 41677 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41678 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41679 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41680 %rint0 = call float @llvm.rint.f32(float %ld0)1681 %rint1 = call float @llvm.rint.f32(float %ld1)1682 %rint2 = call float @llvm.rint.f32(float %ld2)1683 %rint3 = call float @llvm.rint.f32(float %ld3)1684 store float %rint0, ptr @dst32, align 41685 store float %rint1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41686 store float %rint2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41687 store float %rint3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41688 ret void1689}1690 1691define void @rint_8f32() #0 {1692; SSE2-LABEL: @rint_8f32(1693; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 41694; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41695; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41696; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41697; SSE2-NEXT: [[LD4:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41698; SSE2-NEXT: [[LD5:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 41699; SSE2-NEXT: [[LD6:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 41700; SSE2-NEXT: [[LD7:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 41701; SSE2-NEXT: [[RINT0:%.*]] = call float @llvm.rint.f32(float [[LD0]])1702; SSE2-NEXT: [[RINT1:%.*]] = call float @llvm.rint.f32(float [[LD1]])1703; SSE2-NEXT: [[RINT2:%.*]] = call float @llvm.rint.f32(float [[LD2]])1704; SSE2-NEXT: [[RINT3:%.*]] = call float @llvm.rint.f32(float [[LD3]])1705; SSE2-NEXT: [[RINT4:%.*]] = call float @llvm.rint.f32(float [[LD4]])1706; SSE2-NEXT: [[RINT5:%.*]] = call float @llvm.rint.f32(float [[LD5]])1707; SSE2-NEXT: [[RINT6:%.*]] = call float @llvm.rint.f32(float [[LD6]])1708; SSE2-NEXT: [[RINT7:%.*]] = call float @llvm.rint.f32(float [[LD7]])1709; SSE2-NEXT: store float [[RINT0]], ptr @dst32, align 41710; SSE2-NEXT: store float [[RINT1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41711; SSE2-NEXT: store float [[RINT2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41712; SSE2-NEXT: store float [[RINT3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41713; SSE2-NEXT: store float [[RINT4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41714; SSE2-NEXT: store float [[RINT5]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 41715; SSE2-NEXT: store float [[RINT6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 41716; SSE2-NEXT: store float [[RINT7]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 41717; SSE2-NEXT: ret void1718;1719; SSE41-LABEL: @rint_8f32(1720; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41721; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.rint.v4f32(<4 x float> [[TMP1]])1722; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41723; SSE41-NEXT: [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41724; SSE41-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.rint.v4f32(<4 x float> [[TMP3]])1725; SSE41-NEXT: store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41726; SSE41-NEXT: ret void1727;1728; AVX-LABEL: @rint_8f32(1729; AVX-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 41730; AVX-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.rint.v8f32(<8 x float> [[TMP1]])1731; AVX-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 41732; AVX-NEXT: ret void1733;1734 %ld0 = load float, ptr @src32, align 41735 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41736 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41737 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41738 %ld4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41739 %ld5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 41740 %ld6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 41741 %ld7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 41742 %rint0 = call float @llvm.rint.f32(float %ld0)1743 %rint1 = call float @llvm.rint.f32(float %ld1)1744 %rint2 = call float @llvm.rint.f32(float %ld2)1745 %rint3 = call float @llvm.rint.f32(float %ld3)1746 %rint4 = call float @llvm.rint.f32(float %ld4)1747 %rint5 = call float @llvm.rint.f32(float %ld5)1748 %rint6 = call float @llvm.rint.f32(float %ld6)1749 %rint7 = call float @llvm.rint.f32(float %ld7)1750 store float %rint0, ptr @dst32, align 41751 store float %rint1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41752 store float %rint2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41753 store float %rint3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41754 store float %rint4, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41755 store float %rint5, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 41756 store float %rint6, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 41757 store float %rint7, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 41758 ret void1759}1760 1761define void @rint_16f32() #0 {1762; SSE2-LABEL: @rint_16f32(1763; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 41764; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41765; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41766; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41767; SSE2-NEXT: [[LD4:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41768; SSE2-NEXT: [[LD5:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 41769; SSE2-NEXT: [[LD6:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 41770; SSE2-NEXT: [[LD7:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 41771; SSE2-NEXT: [[LD8:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41772; SSE2-NEXT: [[LD9:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 9), align 41773; SSE2-NEXT: [[LD10:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 10), align 41774; SSE2-NEXT: [[LD11:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 11), align 41775; SSE2-NEXT: [[LD12:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 41776; SSE2-NEXT: [[LD13:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 13), align 41777; SSE2-NEXT: [[LD14:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 14), align 41778; SSE2-NEXT: [[LD15:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 15), align 41779; SSE2-NEXT: [[RINT0:%.*]] = call float @llvm.rint.f32(float [[LD0]])1780; SSE2-NEXT: [[RINT1:%.*]] = call float @llvm.rint.f32(float [[LD1]])1781; SSE2-NEXT: [[RINT2:%.*]] = call float @llvm.rint.f32(float [[LD2]])1782; SSE2-NEXT: [[RINT3:%.*]] = call float @llvm.rint.f32(float [[LD3]])1783; SSE2-NEXT: [[RINT4:%.*]] = call float @llvm.rint.f32(float [[LD4]])1784; SSE2-NEXT: [[RINT5:%.*]] = call float @llvm.rint.f32(float [[LD5]])1785; SSE2-NEXT: [[RINT6:%.*]] = call float @llvm.rint.f32(float [[LD6]])1786; SSE2-NEXT: [[RINT7:%.*]] = call float @llvm.rint.f32(float [[LD7]])1787; SSE2-NEXT: [[RINT8:%.*]] = call float @llvm.rint.f32(float [[LD8]])1788; SSE2-NEXT: [[RINT9:%.*]] = call float @llvm.rint.f32(float [[LD9]])1789; SSE2-NEXT: [[RINT10:%.*]] = call float @llvm.rint.f32(float [[LD10]])1790; SSE2-NEXT: [[RINT11:%.*]] = call float @llvm.rint.f32(float [[LD11]])1791; SSE2-NEXT: [[RINT12:%.*]] = call float @llvm.rint.f32(float [[LD12]])1792; SSE2-NEXT: [[RINT13:%.*]] = call float @llvm.rint.f32(float [[LD13]])1793; SSE2-NEXT: [[RINT14:%.*]] = call float @llvm.rint.f32(float [[LD14]])1794; SSE2-NEXT: [[RINT15:%.*]] = call float @llvm.rint.f32(float [[LD15]])1795; SSE2-NEXT: store float [[RINT0]], ptr @dst32, align 41796; SSE2-NEXT: store float [[RINT1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41797; SSE2-NEXT: store float [[RINT2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41798; SSE2-NEXT: store float [[RINT3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41799; SSE2-NEXT: store float [[RINT4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41800; SSE2-NEXT: store float [[RINT5]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 41801; SSE2-NEXT: store float [[RINT6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 41802; SSE2-NEXT: store float [[RINT7]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 41803; SSE2-NEXT: store float [[RINT8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41804; SSE2-NEXT: store float [[RINT9]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9), align 41805; SSE2-NEXT: store float [[RINT10]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 41806; SSE2-NEXT: store float [[RINT11]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 41807; SSE2-NEXT: store float [[RINT12]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 41808; SSE2-NEXT: store float [[RINT13]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 41809; SSE2-NEXT: store float [[RINT14]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 41810; SSE2-NEXT: store float [[RINT15]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 41811; SSE2-NEXT: ret void1812;1813; SSE41-LABEL: @rint_16f32(1814; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41815; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.rint.v4f32(<4 x float> [[TMP1]])1816; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41817; SSE41-NEXT: [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41818; SSE41-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.rint.v4f32(<4 x float> [[TMP3]])1819; SSE41-NEXT: store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41820; SSE41-NEXT: [[TMP5:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41821; SSE41-NEXT: [[TMP6:%.*]] = call <4 x float> @llvm.rint.v4f32(<4 x float> [[TMP5]])1822; SSE41-NEXT: store <4 x float> [[TMP6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41823; SSE41-NEXT: [[TMP7:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 41824; SSE41-NEXT: [[TMP8:%.*]] = call <4 x float> @llvm.rint.v4f32(<4 x float> [[TMP7]])1825; SSE41-NEXT: store <4 x float> [[TMP8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 41826; SSE41-NEXT: ret void1827;1828; AVX1-LABEL: @rint_16f32(1829; AVX1-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 41830; AVX1-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.rint.v8f32(<8 x float> [[TMP1]])1831; AVX1-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 41832; AVX1-NEXT: [[TMP3:%.*]] = load <8 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41833; AVX1-NEXT: [[TMP4:%.*]] = call <8 x float> @llvm.rint.v8f32(<8 x float> [[TMP3]])1834; AVX1-NEXT: store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41835; AVX1-NEXT: ret void1836;1837; AVX2-LABEL: @rint_16f32(1838; AVX2-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 41839; AVX2-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.rint.v8f32(<8 x float> [[TMP1]])1840; AVX2-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 41841; AVX2-NEXT: [[TMP3:%.*]] = load <8 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 41842; AVX2-NEXT: [[TMP4:%.*]] = call <8 x float> @llvm.rint.v8f32(<8 x float> [[TMP3]])1843; AVX2-NEXT: store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 41844; AVX2-NEXT: ret void1845;1846; AVX512-LABEL: @rint_16f32(1847; AVX512-NEXT: [[TMP1:%.*]] = load <16 x float>, ptr @src32, align 41848; AVX512-NEXT: [[TMP2:%.*]] = call <16 x float> @llvm.rint.v16f32(<16 x float> [[TMP1]])1849; AVX512-NEXT: store <16 x float> [[TMP2]], ptr @dst32, align 41850; AVX512-NEXT: ret void1851;1852 %ld0 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 0 ), align 41853 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1 ), align 41854 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2 ), align 41855 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3 ), align 41856 %ld4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4 ), align 41857 %ld5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5 ), align 41858 %ld6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6 ), align 41859 %ld7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7 ), align 41860 %ld8 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8 ), align 41861 %ld9 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 9 ), align 41862 %ld10 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 10), align 41863 %ld11 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 11), align 41864 %ld12 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 41865 %ld13 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 13), align 41866 %ld14 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 14), align 41867 %ld15 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 15), align 41868 %rint0 = call float @llvm.rint.f32(float %ld0 )1869 %rint1 = call float @llvm.rint.f32(float %ld1 )1870 %rint2 = call float @llvm.rint.f32(float %ld2 )1871 %rint3 = call float @llvm.rint.f32(float %ld3 )1872 %rint4 = call float @llvm.rint.f32(float %ld4 )1873 %rint5 = call float @llvm.rint.f32(float %ld5 )1874 %rint6 = call float @llvm.rint.f32(float %ld6 )1875 %rint7 = call float @llvm.rint.f32(float %ld7 )1876 %rint8 = call float @llvm.rint.f32(float %ld8 )1877 %rint9 = call float @llvm.rint.f32(float %ld9 )1878 %rint10 = call float @llvm.rint.f32(float %ld10)1879 %rint11 = call float @llvm.rint.f32(float %ld11)1880 %rint12 = call float @llvm.rint.f32(float %ld12)1881 %rint13 = call float @llvm.rint.f32(float %ld13)1882 %rint14 = call float @llvm.rint.f32(float %ld14)1883 %rint15 = call float @llvm.rint.f32(float %ld15)1884 store float %rint0 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 0 ), align 41885 store float %rint1 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1 ), align 41886 store float %rint2 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2 ), align 41887 store float %rint3 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3 ), align 41888 store float %rint4 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4 ), align 41889 store float %rint5 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5 ), align 41890 store float %rint6 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6 ), align 41891 store float %rint7 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7 ), align 41892 store float %rint8 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8 ), align 41893 store float %rint9 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9 ), align 41894 store float %rint10, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 41895 store float %rint11, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 41896 store float %rint12, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 41897 store float %rint13, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 41898 store float %rint14, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 41899 store float %rint15, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 41900 ret void1901}1902 1903define void @trunc_4f32() #0 {1904; SSE2-LABEL: @trunc_4f32(1905; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 41906; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41907; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41908; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41909; SSE2-NEXT: [[TRUNC0:%.*]] = call float @llvm.trunc.f32(float [[LD0]])1910; SSE2-NEXT: [[TRUNC1:%.*]] = call float @llvm.trunc.f32(float [[LD1]])1911; SSE2-NEXT: [[TRUNC2:%.*]] = call float @llvm.trunc.f32(float [[LD2]])1912; SSE2-NEXT: [[TRUNC3:%.*]] = call float @llvm.trunc.f32(float [[LD3]])1913; SSE2-NEXT: store float [[TRUNC0]], ptr @dst32, align 41914; SSE2-NEXT: store float [[TRUNC1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41915; SSE2-NEXT: store float [[TRUNC2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41916; SSE2-NEXT: store float [[TRUNC3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41917; SSE2-NEXT: ret void1918;1919; SSE41-LABEL: @trunc_4f32(1920; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41921; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.trunc.v4f32(<4 x float> [[TMP1]])1922; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41923; SSE41-NEXT: ret void1924;1925; AVX-LABEL: @trunc_4f32(1926; AVX-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41927; AVX-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.trunc.v4f32(<4 x float> [[TMP1]])1928; AVX-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41929; AVX-NEXT: ret void1930;1931 %ld0 = load float, ptr @src32, align 41932 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41933 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41934 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41935 %trunc0 = call float @llvm.trunc.f32(float %ld0)1936 %trunc1 = call float @llvm.trunc.f32(float %ld1)1937 %trunc2 = call float @llvm.trunc.f32(float %ld2)1938 %trunc3 = call float @llvm.trunc.f32(float %ld3)1939 store float %trunc0, ptr @dst32, align 41940 store float %trunc1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41941 store float %trunc2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41942 store float %trunc3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41943 ret void1944}1945 1946define void @trunc_8f32() #0 {1947; SSE2-LABEL: @trunc_8f32(1948; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 41949; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41950; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41951; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41952; SSE2-NEXT: [[LD4:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41953; SSE2-NEXT: [[LD5:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 41954; SSE2-NEXT: [[LD6:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 41955; SSE2-NEXT: [[LD7:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 41956; SSE2-NEXT: [[TRUNC0:%.*]] = call float @llvm.trunc.f32(float [[LD0]])1957; SSE2-NEXT: [[TRUNC1:%.*]] = call float @llvm.trunc.f32(float [[LD1]])1958; SSE2-NEXT: [[TRUNC2:%.*]] = call float @llvm.trunc.f32(float [[LD2]])1959; SSE2-NEXT: [[TRUNC3:%.*]] = call float @llvm.trunc.f32(float [[LD3]])1960; SSE2-NEXT: [[TRUNC4:%.*]] = call float @llvm.trunc.f32(float [[LD4]])1961; SSE2-NEXT: [[TRUNC5:%.*]] = call float @llvm.trunc.f32(float [[LD5]])1962; SSE2-NEXT: [[TRUNC6:%.*]] = call float @llvm.trunc.f32(float [[LD6]])1963; SSE2-NEXT: [[TRUNC7:%.*]] = call float @llvm.trunc.f32(float [[LD7]])1964; SSE2-NEXT: store float [[TRUNC0]], ptr @dst32, align 41965; SSE2-NEXT: store float [[TRUNC1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 41966; SSE2-NEXT: store float [[TRUNC2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 41967; SSE2-NEXT: store float [[TRUNC3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 41968; SSE2-NEXT: store float [[TRUNC4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41969; SSE2-NEXT: store float [[TRUNC5]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 41970; SSE2-NEXT: store float [[TRUNC6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 41971; SSE2-NEXT: store float [[TRUNC7]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 41972; SSE2-NEXT: ret void1973;1974; SSE41-LABEL: @trunc_8f32(1975; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 41976; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.trunc.v4f32(<4 x float> [[TMP1]])1977; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 41978; SSE41-NEXT: [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41979; SSE41-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.trunc.v4f32(<4 x float> [[TMP3]])1980; SSE41-NEXT: store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 41981; SSE41-NEXT: ret void1982;1983; AVX-LABEL: @trunc_8f32(1984; AVX-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 41985; AVX-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.trunc.v8f32(<8 x float> [[TMP1]])1986; AVX-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 41987; AVX-NEXT: ret void1988;1989 %ld0 = load float, ptr @src32, align 41990 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 41991 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 41992 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 41993 %ld4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 41994 %ld5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 41995 %ld6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 41996 %ld7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 41997 %trunc0 = call float @llvm.trunc.f32(float %ld0)1998 %trunc1 = call float @llvm.trunc.f32(float %ld1)1999 %trunc2 = call float @llvm.trunc.f32(float %ld2)2000 %trunc3 = call float @llvm.trunc.f32(float %ld3)2001 %trunc4 = call float @llvm.trunc.f32(float %ld4)2002 %trunc5 = call float @llvm.trunc.f32(float %ld5)2003 %trunc6 = call float @llvm.trunc.f32(float %ld6)2004 %trunc7 = call float @llvm.trunc.f32(float %ld7)2005 store float %trunc0, ptr @dst32, align 42006 store float %trunc1, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 42007 store float %trunc2, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 42008 store float %trunc3, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 42009 store float %trunc4, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 42010 store float %trunc5, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 42011 store float %trunc6, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 42012 store float %trunc7, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 42013 ret void2014}2015 2016define void @trunc_16f32() #0 {2017; SSE2-LABEL: @trunc_16f32(2018; SSE2-NEXT: [[LD0:%.*]] = load float, ptr @src32, align 42019; SSE2-NEXT: [[LD1:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1), align 42020; SSE2-NEXT: [[LD2:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2), align 42021; SSE2-NEXT: [[LD3:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3), align 42022; SSE2-NEXT: [[LD4:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 42023; SSE2-NEXT: [[LD5:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5), align 42024; SSE2-NEXT: [[LD6:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6), align 42025; SSE2-NEXT: [[LD7:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7), align 42026; SSE2-NEXT: [[LD8:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 42027; SSE2-NEXT: [[LD9:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 9), align 42028; SSE2-NEXT: [[LD10:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 10), align 42029; SSE2-NEXT: [[LD11:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 11), align 42030; SSE2-NEXT: [[LD12:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 42031; SSE2-NEXT: [[LD13:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 13), align 42032; SSE2-NEXT: [[LD14:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 14), align 42033; SSE2-NEXT: [[LD15:%.*]] = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 15), align 42034; SSE2-NEXT: [[TRUNC0:%.*]] = call float @llvm.trunc.f32(float [[LD0]])2035; SSE2-NEXT: [[TRUNC1:%.*]] = call float @llvm.trunc.f32(float [[LD1]])2036; SSE2-NEXT: [[TRUNC2:%.*]] = call float @llvm.trunc.f32(float [[LD2]])2037; SSE2-NEXT: [[TRUNC3:%.*]] = call float @llvm.trunc.f32(float [[LD3]])2038; SSE2-NEXT: [[TRUNC4:%.*]] = call float @llvm.trunc.f32(float [[LD4]])2039; SSE2-NEXT: [[TRUNC5:%.*]] = call float @llvm.trunc.f32(float [[LD5]])2040; SSE2-NEXT: [[TRUNC6:%.*]] = call float @llvm.trunc.f32(float [[LD6]])2041; SSE2-NEXT: [[TRUNC7:%.*]] = call float @llvm.trunc.f32(float [[LD7]])2042; SSE2-NEXT: [[TRUNC8:%.*]] = call float @llvm.trunc.f32(float [[LD8]])2043; SSE2-NEXT: [[TRUNC9:%.*]] = call float @llvm.trunc.f32(float [[LD9]])2044; SSE2-NEXT: [[TRUNC10:%.*]] = call float @llvm.trunc.f32(float [[LD10]])2045; SSE2-NEXT: [[TRUNC11:%.*]] = call float @llvm.trunc.f32(float [[LD11]])2046; SSE2-NEXT: [[TRUNC12:%.*]] = call float @llvm.trunc.f32(float [[LD12]])2047; SSE2-NEXT: [[TRUNC13:%.*]] = call float @llvm.trunc.f32(float [[LD13]])2048; SSE2-NEXT: [[TRUNC14:%.*]] = call float @llvm.trunc.f32(float [[LD14]])2049; SSE2-NEXT: [[TRUNC15:%.*]] = call float @llvm.trunc.f32(float [[LD15]])2050; SSE2-NEXT: store float [[TRUNC0]], ptr @dst32, align 42051; SSE2-NEXT: store float [[TRUNC1]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1), align 42052; SSE2-NEXT: store float [[TRUNC2]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2), align 42053; SSE2-NEXT: store float [[TRUNC3]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3), align 42054; SSE2-NEXT: store float [[TRUNC4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 42055; SSE2-NEXT: store float [[TRUNC5]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5), align 42056; SSE2-NEXT: store float [[TRUNC6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6), align 42057; SSE2-NEXT: store float [[TRUNC7]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7), align 42058; SSE2-NEXT: store float [[TRUNC8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 42059; SSE2-NEXT: store float [[TRUNC9]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9), align 42060; SSE2-NEXT: store float [[TRUNC10]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 42061; SSE2-NEXT: store float [[TRUNC11]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 42062; SSE2-NEXT: store float [[TRUNC12]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 42063; SSE2-NEXT: store float [[TRUNC13]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 42064; SSE2-NEXT: store float [[TRUNC14]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 42065; SSE2-NEXT: store float [[TRUNC15]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 42066; SSE2-NEXT: ret void2067;2068; SSE41-LABEL: @trunc_16f32(2069; SSE41-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @src32, align 42070; SSE41-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.trunc.v4f32(<4 x float> [[TMP1]])2071; SSE41-NEXT: store <4 x float> [[TMP2]], ptr @dst32, align 42072; SSE41-NEXT: [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4), align 42073; SSE41-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.trunc.v4f32(<4 x float> [[TMP3]])2074; SSE41-NEXT: store <4 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4), align 42075; SSE41-NEXT: [[TMP5:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 42076; SSE41-NEXT: [[TMP6:%.*]] = call <4 x float> @llvm.trunc.v4f32(<4 x float> [[TMP5]])2077; SSE41-NEXT: store <4 x float> [[TMP6]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 42078; SSE41-NEXT: [[TMP7:%.*]] = load <4 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 42079; SSE41-NEXT: [[TMP8:%.*]] = call <4 x float> @llvm.trunc.v4f32(<4 x float> [[TMP7]])2080; SSE41-NEXT: store <4 x float> [[TMP8]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 42081; SSE41-NEXT: ret void2082;2083; AVX1-LABEL: @trunc_16f32(2084; AVX1-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 42085; AVX1-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.trunc.v8f32(<8 x float> [[TMP1]])2086; AVX1-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 42087; AVX1-NEXT: [[TMP3:%.*]] = load <8 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 42088; AVX1-NEXT: [[TMP4:%.*]] = call <8 x float> @llvm.trunc.v8f32(<8 x float> [[TMP3]])2089; AVX1-NEXT: store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 42090; AVX1-NEXT: ret void2091;2092; AVX2-LABEL: @trunc_16f32(2093; AVX2-NEXT: [[TMP1:%.*]] = load <8 x float>, ptr @src32, align 42094; AVX2-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.trunc.v8f32(<8 x float> [[TMP1]])2095; AVX2-NEXT: store <8 x float> [[TMP2]], ptr @dst32, align 42096; AVX2-NEXT: [[TMP3:%.*]] = load <8 x float>, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8), align 42097; AVX2-NEXT: [[TMP4:%.*]] = call <8 x float> @llvm.trunc.v8f32(<8 x float> [[TMP3]])2098; AVX2-NEXT: store <8 x float> [[TMP4]], ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8), align 42099; AVX2-NEXT: ret void2100;2101; AVX512-LABEL: @trunc_16f32(2102; AVX512-NEXT: [[TMP1:%.*]] = load <16 x float>, ptr @src32, align 42103; AVX512-NEXT: [[TMP2:%.*]] = call <16 x float> @llvm.trunc.v16f32(<16 x float> [[TMP1]])2104; AVX512-NEXT: store <16 x float> [[TMP2]], ptr @dst32, align 42105; AVX512-NEXT: ret void2106;2107 %ld0 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 0 ), align 42108 %ld1 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 1 ), align 42109 %ld2 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 2 ), align 42110 %ld3 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 3 ), align 42111 %ld4 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 4 ), align 42112 %ld5 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 5 ), align 42113 %ld6 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 6 ), align 42114 %ld7 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 7 ), align 42115 %ld8 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 8 ), align 42116 %ld9 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 9 ), align 42117 %ld10 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 10), align 42118 %ld11 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 11), align 42119 %ld12 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 12), align 42120 %ld13 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 13), align 42121 %ld14 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 14), align 42122 %ld15 = load float, ptr getelementptr inbounds ([16 x float], ptr @src32, i32 0, i64 15), align 42123 %trunc0 = call float @llvm.trunc.f32(float %ld0 )2124 %trunc1 = call float @llvm.trunc.f32(float %ld1 )2125 %trunc2 = call float @llvm.trunc.f32(float %ld2 )2126 %trunc3 = call float @llvm.trunc.f32(float %ld3 )2127 %trunc4 = call float @llvm.trunc.f32(float %ld4 )2128 %trunc5 = call float @llvm.trunc.f32(float %ld5 )2129 %trunc6 = call float @llvm.trunc.f32(float %ld6 )2130 %trunc7 = call float @llvm.trunc.f32(float %ld7 )2131 %trunc8 = call float @llvm.trunc.f32(float %ld8 )2132 %trunc9 = call float @llvm.trunc.f32(float %ld9 )2133 %trunc10 = call float @llvm.trunc.f32(float %ld10)2134 %trunc11 = call float @llvm.trunc.f32(float %ld11)2135 %trunc12 = call float @llvm.trunc.f32(float %ld12)2136 %trunc13 = call float @llvm.trunc.f32(float %ld13)2137 %trunc14 = call float @llvm.trunc.f32(float %ld14)2138 %trunc15 = call float @llvm.trunc.f32(float %ld15)2139 store float %trunc0 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 0 ), align 42140 store float %trunc1 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 1 ), align 42141 store float %trunc2 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 2 ), align 42142 store float %trunc3 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 3 ), align 42143 store float %trunc4 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 4 ), align 42144 store float %trunc5 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 5 ), align 42145 store float %trunc6 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 6 ), align 42146 store float %trunc7 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 7 ), align 42147 store float %trunc8 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 8 ), align 42148 store float %trunc9 , ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 9 ), align 42149 store float %trunc10, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 10), align 42150 store float %trunc11, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 11), align 42151 store float %trunc12, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 12), align 42152 store float %trunc13, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 13), align 42153 store float %trunc14, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 14), align 42154 store float %trunc15, ptr getelementptr inbounds ([16 x float], ptr @dst32, i32 0, i64 15), align 42155 ret void2156}2157 2158attributes #0 = { nounwind }2159 2160