brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · f18a72b Raw
66 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-- -mattr=+sse2 | FileCheck %s --check-prefixes=SSE3; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-- -mattr=+avx  | FileCheck %s --check-prefixes=AVX4; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s --check-prefixes=AVX5 6; PR388217 8define <2 x i64> @load_00123456(ptr nocapture noundef readonly %data) {9; SSE-LABEL: @load_00123456(10; SSE-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds i16, ptr [[DATA:%.*]], i64 111; SSE-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds i16, ptr [[DATA]], i64 212; SSE-NEXT:    [[ARRAYIDX3:%.*]] = getelementptr inbounds i16, ptr [[DATA]], i64 313; SSE-NEXT:    [[T0:%.*]] = load i16, ptr [[DATA]], align 214; SSE-NEXT:    [[T1:%.*]] = load i16, ptr [[ARRAYIDX1]], align 215; SSE-NEXT:    [[T2:%.*]] = load i16, ptr [[ARRAYIDX2]], align 216; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[ARRAYIDX3]], align 217; SSE-NEXT:    [[VECINIT0_I_I:%.*]] = insertelement <8 x i16> undef, i16 [[T0]], i64 018; SSE-NEXT:    [[VECINIT1_I_I:%.*]] = insertelement <8 x i16> [[VECINIT0_I_I]], i16 [[T0]], i64 119; SSE-NEXT:    [[VECINIT2_I_I:%.*]] = insertelement <8 x i16> [[VECINIT1_I_I]], i16 [[T1]], i64 220; SSE-NEXT:    [[VECINIT3_I_I:%.*]] = insertelement <8 x i16> [[VECINIT2_I_I]], i16 [[T2]], i64 321; SSE-NEXT:    [[TMP2:%.*]] = shufflevector <4 x i16> [[TMP1]], <4 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>22; SSE-NEXT:    [[VECINIT7_I_I:%.*]] = shufflevector <8 x i16> [[VECINIT3_I_I]], <8 x i16> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>23; SSE-NEXT:    [[T7:%.*]] = bitcast <8 x i16> [[VECINIT7_I_I]] to <2 x i64>24; SSE-NEXT:    ret <2 x i64> [[T7]]25;26; AVX-LABEL: @load_00123456(27; AVX-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds i16, ptr [[DATA:%.*]], i64 228; AVX-NEXT:    [[ARRAYIDX3:%.*]] = getelementptr inbounds i16, ptr [[DATA]], i64 329; AVX-NEXT:    [[TMP1:%.*]] = load <2 x i16>, ptr [[DATA]], align 230; AVX-NEXT:    [[T2:%.*]] = load i16, ptr [[ARRAYIDX2]], align 231; AVX-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[ARRAYIDX3]], align 232; AVX-NEXT:    [[TMP3:%.*]] = shufflevector <2 x i16> [[TMP1]], <2 x i16> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>33; AVX-NEXT:    [[VECINIT2_I_I2:%.*]] = shufflevector <8 x i16> [[TMP3]], <8 x i16> [[TMP3]], <8 x i32> <i32 0, i32 8, i32 9, i32 3, i32 4, i32 5, i32 6, i32 7>34; AVX-NEXT:    [[VECINIT3_I_I:%.*]] = insertelement <8 x i16> [[VECINIT2_I_I2]], i16 [[T2]], i64 335; AVX-NEXT:    [[TMP4:%.*]] = shufflevector <4 x i16> [[TMP2]], <4 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>36; AVX-NEXT:    [[VECINIT7_I_I1:%.*]] = shufflevector <8 x i16> [[VECINIT3_I_I]], <8 x i16> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>37; AVX-NEXT:    [[T7:%.*]] = bitcast <8 x i16> [[VECINIT7_I_I1]] to <2 x i64>38; AVX-NEXT:    ret <2 x i64> [[T7]]39;40  %arrayidx1 = getelementptr inbounds i16, ptr %data, i64 141  %arrayidx2 = getelementptr inbounds i16, ptr %data, i64 242  %arrayidx3 = getelementptr inbounds i16, ptr %data, i64 343  %arrayidx4 = getelementptr inbounds i16, ptr %data, i64 444  %arrayidx5 = getelementptr inbounds i16, ptr %data, i64 545  %arrayidx6 = getelementptr inbounds i16, ptr %data, i64 646 47  %t0 = load i16, ptr %data, align 248  %t1 = load i16, ptr %arrayidx1, align 249  %t2 = load i16, ptr %arrayidx2, align 250  %t3 = load i16, ptr %arrayidx3, align 251  %t4 = load i16, ptr %arrayidx4, align 252  %t5 = load i16, ptr %arrayidx5, align 253  %t6 = load i16, ptr %arrayidx6, align 254 55  %vecinit0.i.i = insertelement <8 x i16> undef, i16 %t0, i64 056  %vecinit1.i.i = insertelement <8 x i16> %vecinit0.i.i, i16 %t0, i64 157  %vecinit2.i.i = insertelement <8 x i16> %vecinit1.i.i, i16 %t1, i64 258  %vecinit3.i.i = insertelement <8 x i16> %vecinit2.i.i, i16 %t2, i64 359  %vecinit4.i.i = insertelement <8 x i16> %vecinit3.i.i, i16 %t3, i64 460  %vecinit5.i.i = insertelement <8 x i16> %vecinit4.i.i, i16 %t4, i64 561  %vecinit6.i.i = insertelement <8 x i16> %vecinit5.i.i, i16 %t5, i64 662  %vecinit7.i.i = insertelement <8 x i16> %vecinit6.i.i, i16 %t6, i64 763  %t7 = bitcast <8 x i16> %vecinit7.i.i to <2 x i64>64  ret <2 x i64> %t765}66