77 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=slp-vectorizer -slp-vectorize-hor -slp-vectorize-hor-store -S < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=bdver2 | FileCheck %s3 4define void @i64_simplified(ptr noalias %st, ptr noalias %ld) {5; CHECK-LABEL: @i64_simplified(6; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr [[LD:%.*]], align 87; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <2 x i64> [[TMP1]], <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>8; CHECK-NEXT: store <4 x i64> [[TMP2]], ptr [[ST:%.*]], align 89; CHECK-NEXT: ret void10;11 %arrayidx1 = getelementptr inbounds i64, ptr %ld, i64 112 13 %t0 = load i64, ptr %ld, align 814 %t1 = load i64, ptr %arrayidx1, align 815 16 %arrayidx3 = getelementptr inbounds i64, ptr %st, i64 117 %arrayidx4 = getelementptr inbounds i64, ptr %st, i64 218 %arrayidx5 = getelementptr inbounds i64, ptr %st, i64 319 20 store i64 %t0, ptr %st, align 821 store i64 %t1, ptr %arrayidx3, align 822 store i64 %t0, ptr %arrayidx4, align 823 store i64 %t1, ptr %arrayidx5, align 824 ret void25}26 27define void @i64_simplifiedi_reversed(ptr noalias %st, ptr noalias %ld) {28; CHECK-LABEL: @i64_simplifiedi_reversed(29; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr [[LD:%.*]], align 830; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <2 x i64> [[TMP1]], <2 x i64> poison, <4 x i32> <i32 1, i32 0, i32 1, i32 0>31; CHECK-NEXT: store <4 x i64> [[TMP2]], ptr [[ST:%.*]], align 832; CHECK-NEXT: ret void33;34 %arrayidx1 = getelementptr inbounds i64, ptr %ld, i64 135 36 %t0 = load i64, ptr %ld, align 837 %t1 = load i64, ptr %arrayidx1, align 838 39 %arrayidx3 = getelementptr inbounds i64, ptr %st, i64 140 %arrayidx4 = getelementptr inbounds i64, ptr %st, i64 241 %arrayidx5 = getelementptr inbounds i64, ptr %st, i64 342 43 store i64 %t1, ptr %st, align 844 store i64 %t0, ptr %arrayidx3, align 845 store i64 %t1, ptr %arrayidx4, align 846 store i64 %t0, ptr %arrayidx5, align 847 ret void48}49 50define void @i64_simplifiedi_extract(ptr noalias %st, ptr noalias %ld) {51; CHECK-LABEL: @i64_simplifiedi_extract(52; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i64, ptr [[LD:%.*]], i64 153; CHECK-NEXT: [[T1:%.*]] = load i64, ptr [[ARRAYIDX1]], align 854; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr [[LD]], align 855; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <2 x i64> [[TMP1]], <2 x i64> poison, <4 x i32> <i32 0, i32 0, i32 0, i32 1>56; CHECK-NEXT: store <4 x i64> [[TMP2]], ptr [[ST:%.*]], align 857; CHECK-NEXT: store i64 [[T1]], ptr [[LD]], align 858; CHECK-NEXT: ret void59;60 %arrayidx1 = getelementptr inbounds i64, ptr %ld, i64 161 62 %t0 = load i64, ptr %ld, align 863 %t1 = load i64, ptr %arrayidx1, align 864 65 %arrayidx3 = getelementptr inbounds i64, ptr %st, i64 166 %arrayidx4 = getelementptr inbounds i64, ptr %st, i64 267 %arrayidx5 = getelementptr inbounds i64, ptr %st, i64 368 69 store i64 %t0, ptr %st, align 870 store i64 %t0, ptr %arrayidx3, align 871 store i64 %t0, ptr %arrayidx4, align 872 store i64 %t1, ptr %arrayidx5, align 873 store i64 %t1, ptr %ld, align 874 ret void75}76 77