brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.1 KiB · df42cba Raw
480 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=slp-vectorizer -S -slp-revec -slp-max-reg-size=1024 -slp-threshold=-100 %s | FileCheck %s3 4define void @test1(ptr %a, ptr %b, ptr %c) {5; CHECK-LABEL: @test1(6; CHECK-NEXT:  entry:7; CHECK-NEXT:    [[TMP0:%.*]] = load <16 x i32>, ptr [[A:%.*]], align 48; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i32>, ptr [[B:%.*]], align 49; CHECK-NEXT:    [[TMP2:%.*]] = add <16 x i32> [[TMP1]], [[TMP0]]10; CHECK-NEXT:    store <16 x i32> [[TMP2]], ptr [[C:%.*]], align 411; CHECK-NEXT:    ret void12;13entry:14  %arrayidx3 = getelementptr inbounds i32, ptr %a, i64 415  %arrayidx7 = getelementptr inbounds i32, ptr %a, i64 816  %arrayidx11 = getelementptr inbounds i32, ptr %a, i64 1217  %0 = load <4 x i32>, ptr %a, align 418  %1 = load <4 x i32>, ptr %arrayidx3, align 419  %2 = load <4 x i32>, ptr %arrayidx7, align 420  %3 = load <4 x i32>, ptr %arrayidx11, align 421  %arrayidx19 = getelementptr inbounds i32, ptr %b, i64 422  %arrayidx23 = getelementptr inbounds i32, ptr %b, i64 823  %arrayidx27 = getelementptr inbounds i32, ptr %b, i64 1224  %4 = load <4 x i32>, ptr %b, align 425  %5 = load <4 x i32>, ptr %arrayidx19, align 426  %6 = load <4 x i32>, ptr %arrayidx23, align 427  %7 = load <4 x i32>, ptr %arrayidx27, align 428  %add.i = add <4 x i32> %4, %029  %add.i63 = add <4 x i32> %5, %130  %add.i64 = add <4 x i32> %6, %231  %add.i65 = add <4 x i32> %7, %332  %arrayidx36 = getelementptr inbounds i32, ptr %c, i64 433  %arrayidx39 = getelementptr inbounds i32, ptr %c, i64 834  %arrayidx42 = getelementptr inbounds i32, ptr %c, i64 1235  store <4 x i32> %add.i, ptr %c, align 436  store <4 x i32> %add.i63, ptr %arrayidx36, align 437  store <4 x i32> %add.i64, ptr %arrayidx39, align 438  store <4 x i32> %add.i65, ptr %arrayidx42, align 439  ret void40}41 42define void @test2(ptr %in, ptr %out) {43; CHECK-LABEL: @test2(44; CHECK-NEXT:  entry:45; CHECK-NEXT:    [[TMP0:%.*]] = load <16 x i16>, ptr [[IN:%.*]], align 246; CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i16> @llvm.sadd.sat.v16i16(<16 x i16> [[TMP0]], <16 x i16> [[TMP0]])47; CHECK-NEXT:    store <16 x i16> [[TMP1]], ptr [[OUT:%.*]], align 248; CHECK-NEXT:    ret void49;50entry:51  %0 = getelementptr i16, ptr %in, i64 852  %1 = load <8 x i16>, ptr %in, align 253  %2 = load <8 x i16>, ptr %0, align 254  %3 = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %1, <8 x i16> %1)55  %4 = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %2, <8 x i16> %2)56  %5 = getelementptr i16, ptr %out, i64 857  store <8 x i16> %3, ptr %out, align 258  store <8 x i16> %4, ptr %5, align 259  ret void60}61 62define void @test3(ptr %x, ptr %y, ptr %z) {63; CHECK-LABEL: @test3(64; CHECK-NEXT:  entry:65; CHECK-NEXT:    [[TMP0:%.*]] = insertelement <2 x ptr> poison, ptr [[X:%.*]], i32 066; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x ptr> [[TMP0]], ptr [[Y:%.*]], i32 167; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <2 x ptr> [[TMP1]], zeroinitializer68; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x i32>, ptr [[X]], align 469; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i32>, ptr [[Y]], align 470; CHECK-NEXT:    [[TMP5:%.*]] = shufflevector <2 x i1> [[TMP2]], <2 x i1> poison, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>71; CHECK-NEXT:    [[TMP6:%.*]] = select <8 x i1> [[TMP5]], <8 x i32> [[TMP3]], <8 x i32> [[TMP4]]72; CHECK-NEXT:    store <8 x i32> [[TMP6]], ptr [[Z:%.*]], align 473; CHECK-NEXT:    ret void74;75entry:76  %0 = getelementptr inbounds i32, ptr %x, i64 477  %1 = getelementptr inbounds i32, ptr %y, i64 478  %2 = load <4 x i32>, ptr %x, align 479  %3 = load <4 x i32>, ptr %0, align 480  %4 = load <4 x i32>, ptr %y, align 481  %5 = load <4 x i32>, ptr %1, align 482  %6 = icmp eq ptr %x, null83  %7 = icmp eq ptr %y, null84  %8 = select i1 %6, <4 x i32> %2, <4 x i32> %485  %9 = select i1 %7, <4 x i32> %3, <4 x i32> %586  %10 = getelementptr inbounds i32, ptr %z, i64 487  store <4 x i32> %8, ptr %z, align 488  store <4 x i32> %9, ptr %10, align 489  ret void90}91 92define void @test4(ptr %in, ptr %out) {93; CHECK-LABEL: @test4(94; CHECK-NEXT:  entry:95; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x float>, ptr [[IN:%.*]], align 496; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <8 x float> [[TMP0]], <8 x float> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>97; CHECK-NEXT:    [[TMP6:%.*]] = fmul <16 x float> [[TMP1]], zeroinitializer98; CHECK-NEXT:    [[TMP9:%.*]] = shufflevector <16 x float> [[TMP1]], <16 x float> <float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>99; CHECK-NEXT:    [[TMP10:%.*]] = fadd <16 x float> [[TMP9]], [[TMP6]]100; CHECK-NEXT:    [[TMP5:%.*]] = fcmp ogt <16 x float> [[TMP10]], zeroinitializer101; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr i1, ptr [[OUT:%.*]], i64 8102; CHECK-NEXT:    [[TMP13:%.*]] = shufflevector <16 x i1> [[TMP5]], <16 x i1> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>103; CHECK-NEXT:    store <8 x i1> [[TMP13]], ptr [[OUT]], align 1104; CHECK-NEXT:    [[TMP14:%.*]] = shufflevector <16 x i1> [[TMP5]], <16 x i1> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>105; CHECK-NEXT:    store <8 x i1> [[TMP14]], ptr [[TMP12]], align 1106; CHECK-NEXT:    ret void107;108entry:109  %0 = load <8 x float>, ptr %in, align 4110  %1 = fmul <8 x float> %0, zeroinitializer111  %2 = fmul <8 x float> %0, zeroinitializer112  %3 = fadd <8 x float> zeroinitializer, %1113  %4 = fadd <8 x float> %0, %2114  %5 = fcmp ogt <8 x float> %3, zeroinitializer115  %6 = fcmp ogt <8 x float> %4, zeroinitializer116  %7 = getelementptr i1, ptr %out, i64 8117  store <8 x i1> %5, ptr %out, align 1118  store <8 x i1> %6, ptr %7, align 1119  ret void120}121 122define void @test5(ptr %ptr0, ptr %ptr1) {123; CHECK-LABEL: @test5(124; CHECK-NEXT:  entry:125; CHECK-NEXT:    [[GETELEMENTPTR0:%.*]] = getelementptr i8, ptr null, i64 0126; CHECK-NEXT:    [[TMP0:%.*]] = insertelement <4 x ptr> <ptr null, ptr null, ptr undef, ptr undef>, ptr [[GETELEMENTPTR0]], i32 2127; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <4 x ptr> [[TMP0]], ptr null, i32 3128; CHECK-NEXT:    [[TMP2:%.*]] = icmp ult <4 x ptr> zeroinitializer, [[TMP1]]129; CHECK-NEXT:    [[TMP3:%.*]] = insertelement <4 x ptr> <ptr poison, ptr null, ptr null, ptr null>, ptr [[PTR0:%.*]], i32 0130; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x ptr> [[TMP1]], ptr [[PTR1:%.*]], i32 3131; CHECK-NEXT:    [[TMP5:%.*]] = icmp ult <4 x ptr> [[TMP3]], [[TMP4]]132; CHECK-NEXT:    ret void133;134entry:135  %getelementptr0 = getelementptr i8, ptr null, i64 0136  %0 = insertelement <4 x ptr> <ptr null, ptr null, ptr undef, ptr undef>, ptr %getelementptr0, i32 2137  %1 = insertelement <4 x ptr> %0, ptr null, i32 3138  %2 = icmp ult <4 x ptr> zeroinitializer, %1139  %3 = insertelement <4 x ptr> <ptr poison, ptr null, ptr null, ptr null>, ptr %ptr0, i32 0140  %4 = insertelement <4 x ptr> %1, ptr %ptr1, i32 3141  %5 = icmp ult <4 x ptr> %3, %4142  ret void143}144 145define <4 x i1> @test6(ptr %in1, ptr %in2) {146; CHECK-LABEL: @test6(147; CHECK-NEXT:  entry:148; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i32>, ptr [[IN1:%.*]], align 4149; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[IN2:%.*]], align 2150; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>151; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i16> [[TMP1]], <4 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>152; CHECK-NEXT:    [[TMP21:%.*]] = icmp eq <16 x i16> [[TMP3]], zeroinitializer153; CHECK-NEXT:    [[TMP5:%.*]] = shufflevector <16 x i32> [[TMP2]], <16 x i32> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>154; CHECK-NEXT:    [[TMP6:%.*]] = icmp ugt <32 x i32> [[TMP5]], zeroinitializer155; CHECK-NEXT:    [[TMP11:%.*]] = shufflevector <32 x i1> [[TMP6]], <32 x i1> poison, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>156; CHECK-NEXT:    [[TMP22:%.*]] = and <16 x i1> [[TMP11]], [[TMP21]]157; CHECK-NEXT:    [[TMP23:%.*]] = shufflevector <32 x i1> [[TMP6]], <32 x i1> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>158; CHECK-NEXT:    [[TMP24:%.*]] = and <16 x i1> [[TMP22]], [[TMP23]]159; CHECK-NEXT:    [[TMP25:%.*]] = shufflevector <16 x i1> [[TMP24]], <16 x i1> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>160; CHECK-NEXT:    [[TMP26:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP25]])161; CHECK-NEXT:    [[TMP27:%.*]] = insertelement <4 x i1> poison, i1 [[TMP26]], i64 0162; CHECK-NEXT:    [[TMP28:%.*]] = shufflevector <16 x i1> [[TMP24]], <16 x i1> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>163; CHECK-NEXT:    [[TMP29:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP28]])164; CHECK-NEXT:    [[TMP30:%.*]] = insertelement <4 x i1> [[TMP27]], i1 [[TMP29]], i64 1165; CHECK-NEXT:    [[TMP31:%.*]] = shufflevector <16 x i1> [[TMP24]], <16 x i1> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>166; CHECK-NEXT:    [[TMP32:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP31]])167; CHECK-NEXT:    [[TMP33:%.*]] = insertelement <4 x i1> [[TMP30]], i1 [[TMP32]], i64 2168; CHECK-NEXT:    [[TMP34:%.*]] = shufflevector <16 x i1> [[TMP24]], <16 x i1> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>169; CHECK-NEXT:    [[TMP35:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP34]])170; CHECK-NEXT:    [[TMP36:%.*]] = insertelement <4 x i1> [[TMP33]], i1 [[TMP35]], i64 3171; CHECK-NEXT:    [[VBSL:%.*]] = select <4 x i1> [[TMP36]], <4 x i32> <i32 1, i32 2, i32 3, i32 4>, <4 x i32> <i32 5, i32 6, i32 7, i32 8>172; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt <4 x i32> [[VBSL]], <i32 2, i32 3, i32 4, i32 5>173; CHECK-NEXT:    ret <4 x i1> [[CMP]]174;175entry:176  %0 = load <4 x i32>, ptr %in1, align 4177  %1 = load <4 x i16>, ptr %in2, align 2178  %cmp000 = icmp ugt <4 x i32> %0, zeroinitializer179  %cmp001 = icmp ugt <4 x i32> %0, zeroinitializer180  %cmp002 = icmp ugt <4 x i32> %0, zeroinitializer181  %cmp003 = icmp ugt <4 x i32> %0, zeroinitializer182  %cmp100 = icmp eq <4 x i16> %1, zeroinitializer183  %cmp101 = icmp eq <4 x i16> %1, zeroinitializer184  %cmp102 = icmp eq <4 x i16> %1, zeroinitializer185  %cmp103 = icmp eq <4 x i16> %1, zeroinitializer186  %and.cmp0 = and <4 x i1> %cmp000, %cmp100187  %and.cmp1 = and <4 x i1> %cmp001, %cmp101188  %and.cmp2 = and <4 x i1> %cmp002, %cmp102189  %and.cmp3 = and <4 x i1> %cmp003, %cmp103190  %cmp004 = icmp ugt <4 x i32> %0, zeroinitializer191  %cmp005 = icmp ugt <4 x i32> %0, zeroinitializer192  %cmp006 = icmp ugt <4 x i32> %0, zeroinitializer193  %cmp007 = icmp ugt <4 x i32> %0, zeroinitializer194  %and.cmp4 = and <4 x i1> %and.cmp0, %cmp004195  %and.cmp5 = and <4 x i1> %and.cmp1, %cmp005196  %and.cmp6 = and <4 x i1> %and.cmp2, %cmp006197  %and.cmp7 = and <4 x i1> %and.cmp3, %cmp007198  %or0 = or <4 x i1> %and.cmp5, %and.cmp4199  %or1 = or <4 x i1> %or0, %and.cmp6200  %or2 = or <4 x i1> %or1, %and.cmp7201  %vbsl = select <4 x i1> %or2, <4 x i32> <i32 1, i32 2, i32 3, i32 4>, <4 x i32> <i32 5, i32 6, i32 7, i32 8>202  %cmp = icmp ugt <4 x i32> %vbsl, <i32 2, i32 3, i32 4, i32 5>203  ret <4 x i1> %cmp204}205 206define void @test7() {207; CHECK-LABEL: @test7(208; CHECK-NEXT:    store <16 x i16> zeroinitializer, ptr null, align 2209; CHECK-NEXT:    ret void210;211  %1 = getelementptr i8, ptr null, i64 16212  %2 = trunc <8 x i64> zeroinitializer to <8 x i16>213  store <8 x i16> %2, ptr %1, align 2214  %3 = trunc <8 x i64> zeroinitializer to <8 x i16>215  store <8 x i16> %3, ptr null, align 2216  ret void217}218 219define void @test8() {220; CHECK-LABEL: @test8(221; CHECK-NEXT:  entry:222; CHECK-NEXT:    br i1 false, label [[FOR0:%.*]], label [[FOR_BODY:%.*]]223; CHECK:       for0:224; CHECK-NEXT:    [[TMP0:%.*]] = phi <8 x float> [ zeroinitializer, [[ENTRY:%.*]] ], [ [[TMP8:%.*]], [[FOR_BODY]] ]225; CHECK-NEXT:    ret void226; CHECK:       for.body:227; CHECK-NEXT:    [[TMP7:%.*]] = phi <4 x float> [ [[TMP7]], [[FOR_BODY]] ], [ zeroinitializer, [[ENTRY]] ]228; CHECK-NEXT:    [[TMP8]] = shufflevector <4 x float> [[TMP7]], <4 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>229; CHECK-NEXT:    br i1 false, label [[FOR0]], label [[FOR_BODY]]230;231entry:232  br i1 false, label %for0, label %for.body233 234for0:235  %0 = phi <2 x float> [ zeroinitializer, %entry ], [ %4, %for.body ]236  %1 = phi <2 x float> [ zeroinitializer, %entry ], [ %5, %for.body ]237  %2 = phi <2 x float> [ zeroinitializer, %entry ], [ %4, %for.body ]238  %3 = phi <2 x float> [ zeroinitializer, %entry ], [ %5, %for.body ]239  ret void240 241for.body:242  %4 = phi <2 x float> [ %4, %for.body ], [ zeroinitializer, %entry ]243  %5 = phi <2 x float> [ %5, %for.body ], [ zeroinitializer, %entry ]244  br i1 false, label %for0, label %for.body245}246 247define void @test9() {248; CHECK-LABEL: @test9(249; CHECK-NEXT:  entry:250; CHECK-NEXT:    br label [[FOR_BODY13:%.*]]251; CHECK:       for.body13:252; CHECK-NEXT:    store <8 x i32> zeroinitializer, ptr null, align 4253; CHECK-NEXT:    br label [[FOR_BODY13]]254;255entry:256  br label %for.body13257 258for.body13:                                       ; preds = %for.body13, %entry259  %vmovl.i111 = sext <4 x i16> zeroinitializer to <4 x i32>260  %vmovl.i110 = sext <4 x i16> zeroinitializer to <4 x i32>261  store <4 x i32> %vmovl.i111, ptr null, align 4262  %add.ptr29 = getelementptr i8, ptr null, i64 16263  store <4 x i32> %vmovl.i110, ptr %add.ptr29, align 4264  br label %for.body13265}266 267define void @test10() {268; CHECK-LABEL: @test10(269; CHECK-NEXT:  entry:270; CHECK-NEXT:    [[TMP0:%.*]] = load <16 x i8>, ptr null, align 1271; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <16 x i8> [[TMP0]], <16 x i8> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>272; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <16 x i8> [[TMP0]], <16 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>273; CHECK-NEXT:    [[TMP5:%.*]] = sext <16 x i8> [[TMP4]] to <16 x i16>274; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <16 x i16> [[TMP5]], <16 x i16> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>275; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <16 x i16> [[TMP5]], <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>276; CHECK-NEXT:    [[TMP8:%.*]] = trunc <16 x i16> [[TMP7]] to <16 x i8>277; CHECK-NEXT:    [[TMP9:%.*]] = sext <16 x i8> [[TMP8]] to <16 x i32>278; CHECK-NEXT:    store <16 x i32> [[TMP9]], ptr null, align 4279; CHECK-NEXT:    ret void280;281entry:282  %0 = load <16 x i8>, ptr null, align 1283  %shuffle.i = shufflevector <16 x i8> %0, <16 x i8> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>284  %shuffle.i107 = shufflevector <16 x i8> %0, <16 x i8> zeroinitializer, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>285  %vmovl.i106 = sext <8 x i8> %shuffle.i to <8 x i16>286  %vmovl.i = sext <8 x i8> %shuffle.i107 to <8 x i16>287  %shuffle.i113 = shufflevector <8 x i16> %vmovl.i106, <8 x i16> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>288  %shuffle.i115 = shufflevector <8 x i16> %vmovl.i106, <8 x i16> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>289  %shuffle.i112 = shufflevector <8 x i16> %vmovl.i, <8 x i16> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>290  %shuffle.i114 = shufflevector <8 x i16> %vmovl.i, <8 x i16> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>291  %vmovl.i111 = sext <4 x i16> %shuffle.i113 to <4 x i32>292  %vmovl.i110 = sext <4 x i16> %shuffle.i115 to <4 x i32>293  %vmovl.i109 = sext <4 x i16> %shuffle.i112 to <4 x i32>294  %vmovl.i108 = sext <4 x i16> %shuffle.i114 to <4 x i32>295  %add.ptr29 = getelementptr i8, ptr null, i64 16296  %add.ptr32 = getelementptr i8, ptr null, i64 32297  %add.ptr35 = getelementptr i8, ptr null, i64 48298  store <4 x i32> %vmovl.i111, ptr null, align 4299  store <4 x i32> %vmovl.i110, ptr %add.ptr29, align 4300  store <4 x i32> %vmovl.i109, ptr %add.ptr32, align 4301  store <4 x i32> %vmovl.i108, ptr %add.ptr35, align 4302  ret void303}304 305define void @test11(<2 x i64> %0, i64 %1, <2 x i64> %2) {306; CHECK-LABEL: @test11(307; CHECK-NEXT:  entry:308; CHECK-NEXT:    [[TMP3:%.*]] = insertelement <2 x i64> [[TMP0:%.*]], i64 [[TMP1:%.*]], i32 1309; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <2 x i64> [[TMP2:%.*]], <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>310; CHECK-NEXT:    [[TMP5:%.*]] = shufflevector <2 x i64> [[TMP3]], <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>311; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <4 x i64> [[TMP4]], <4 x i64> [[TMP5]], <4 x i32> <i32 0, i32 1, i32 4, i32 5>312; CHECK-NEXT:    [[TMP7:%.*]] = add <4 x i64> <i64 5, i64 0, i64 0, i64 0>, [[TMP6]]313; CHECK-NEXT:    [[TMP9:%.*]] = trunc <4 x i64> [[TMP7]] to <4 x i8>314; CHECK-NEXT:    [[TMP11:%.*]] = urem <4 x i8> [[TMP9]], zeroinitializer315; CHECK-NEXT:    [[TMP12:%.*]] = icmp ne <4 x i8> [[TMP11]], zeroinitializer316; CHECK-NEXT:    ret void317;318entry:319  %3 = insertelement <2 x i64> %0, i64 %1, i32 1320  %4 = add <2 x i64> <i64 5, i64 0>, %2321  %5 = trunc <2 x i64> %3 to <2 x i8>322  %6 = trunc <2 x i64> %4 to <2 x i8>323  %7 = urem <2 x i8> %5, zeroinitializer324  %8 = urem <2 x i8> %6, zeroinitializer325  %9 = icmp ne <2 x i8> %7, zeroinitializer326  %10 = icmp ne <2 x i8> %8, zeroinitializer327  ret void328}329 330define void @test12() {331; CHECK-LABEL: @test12(332; CHECK-NEXT:  entry:333; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr float, ptr null, i64 33334; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr float, ptr null, i64 50335; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr float, ptr null, i64 75336; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x float>, ptr [[TMP1]], align 4337; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x float>, ptr [[TMP2]], align 4338; CHECK-NEXT:    [[TMP5:%.*]] = load <16 x float>, ptr [[TMP0]], align 4339; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <8 x float> [[TMP4]], <8 x float> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>340; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <8 x float> [[TMP3]], <8 x float> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>341; CHECK-NEXT:    [[TMP10:%.*]] = shufflevector <32 x float> [[TMP6]], <32 x float> [[TMP7]], <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>342; CHECK-NEXT:    [[TMP11:%.*]] = shufflevector <16 x float> [[TMP5]], <16 x float> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>343; CHECK-NEXT:    [[TMP8:%.*]] = shufflevector <32 x float> [[TMP10]], <32 x float> [[TMP11]], <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47>344; CHECK-NEXT:    [[TMP9:%.*]] = fpext <32 x float> [[TMP8]] to <32 x double>345; CHECK-NEXT:    [[TMP14:%.*]] = fadd <32 x double> zeroinitializer, [[TMP9]]346; CHECK-NEXT:    [[TMP15:%.*]] = fptrunc <32 x double> [[TMP14]] to <32 x float>347; CHECK-NEXT:    [[TMP16:%.*]] = fcmp ogt <32 x float> zeroinitializer, [[TMP15]]348; CHECK-NEXT:    ret void349;350entry:351  %0 = getelementptr float, ptr null, i64 33352  %1 = getelementptr float, ptr null, i64 41353  %2 = getelementptr float, ptr null, i64 50354  %3 = getelementptr float, ptr null, i64 75355  %4 = load <8 x float>, ptr %0, align 4356  %5 = load <8 x float>, ptr %1, align 4357  %6 = load <8 x float>, ptr %2, align 4358  %7 = load <8 x float>, ptr %3, align 4359  %8 = fpext <8 x float> %4 to <8 x double>360  %9 = fpext <8 x float> %5 to <8 x double>361  %10 = fpext <8 x float> %6 to <8 x double>362  %11 = fpext <8 x float> %7 to <8 x double>363  %12 = fadd <8 x double> zeroinitializer, %8364  %13 = fadd <8 x double> zeroinitializer, %9365  %14 = fadd <8 x double> zeroinitializer, %10366  %15 = fadd <8 x double> zeroinitializer, %11367  %16 = fptrunc <8 x double> %12 to <8 x float>368  %17 = fptrunc <8 x double> %13 to <8 x float>369  %18 = fptrunc <8 x double> %14 to <8 x float>370  %19 = fptrunc <8 x double> %15 to <8 x float>371  %20 = fcmp ogt <8 x float> zeroinitializer, %16372  %21 = fcmp ogt <8 x float> zeroinitializer, %17373  %22 = fcmp ogt <8 x float> zeroinitializer, %18374  %23 = fcmp ogt <8 x float> zeroinitializer, %19375  ret void376}377 378define void @test13(<8 x i32> %0, ptr %out0, ptr %out1, ptr %out2) {379; CHECK-LABEL: @test13(380; CHECK-NEXT:  entry:381; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[TMP0:%.*]], <8 x i32> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>382; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP0]], <8 x i32> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>383; CHECK-NEXT:    br label [[FOR_END_LOOPEXIT:%.*]]384; CHECK:       for.end.loopexit:385; CHECK-NEXT:    [[TMP4:%.*]] = phi <16 x i32> [ [[TMP3]], [[ENTRY:%.*]] ]386; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <16 x i32> [[TMP4]], <16 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>387; CHECK-NEXT:    [[OR0:%.*]] = or <4 x i32> [[TMP6]], zeroinitializer388; CHECK-NEXT:    store <4 x i32> [[OR0]], ptr [[OUT0:%.*]], align 4389; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <16 x i32> [[TMP3]], <16 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>390; CHECK-NEXT:    store <4 x i32> [[TMP7]], ptr [[OUT1:%.*]], align 4391; CHECK-NEXT:    [[TMP8:%.*]] = shufflevector <16 x i32> [[TMP3]], <16 x i32> poison, <4 x i32> <i32 12, i32 13, i32 14, i32 15>392; CHECK-NEXT:    store <4 x i32> [[TMP8]], ptr [[OUT2:%.*]], align 4393; CHECK-NEXT:    ret void394;395entry:396  %1 = shufflevector <8 x i32> %0, <8 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>397  %2 = shufflevector <8 x i32> %0, <8 x i32> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>398  %3 = shufflevector <8 x i32> %0, <8 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>399  %4 = shufflevector <8 x i32> %0, <8 x i32> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>400  br label %for.end.loopexit401 402for.end.loopexit:403  %phi0 = phi <4 x i32> [ %1, %entry ]404  %phi1 = phi <4 x i32> [ %2, %entry ]405  %phi2 = phi <4 x i32> [ %3, %entry ]406  %phi3 = phi <4 x i32> [ %4, %entry ]407  %or0 = or <4 x i32> %phi1, zeroinitializer408  store <4 x i32> %or0, ptr %out0, align 4409  store <4 x i32> %1, ptr %out1, align 4410  store <4 x i32> %4, ptr %out2, align 4411  ret void412}413 414define void @test14(<8 x i1> %0) {415; CHECK-LABEL: @test14(416; CHECK-NEXT:  entry:417; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i1> [[TMP0:%.*]], <8 x i1> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>418; CHECK-NEXT:    [[TMP3:%.*]] = sext <16 x i1> [[TMP2]] to <16 x i16>419; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <16 x i16> [[TMP3]], <16 x i16> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>420; CHECK-NEXT:    [[TMP5:%.*]] = shufflevector <16 x i16> [[TMP3]], <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>421; CHECK-NEXT:    br label [[FOR_END_LOOPEXIT:%.*]]422; CHECK:       for.end.loopexit:423; CHECK-NEXT:    [[TMP6:%.*]] = phi <16 x i16> [ [[TMP5]], [[ENTRY:%.*]] ]424; CHECK-NEXT:    [[TMP8:%.*]] = shufflevector <16 x i16> [[TMP6]], <16 x i16> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>425; CHECK-NEXT:    [[OR0:%.*]] = or <4 x i16> [[TMP8]], zeroinitializer426; CHECK-NEXT:    ret void427;428entry:429  %sext0 = sext <8 x i1> %0 to <8 x i16>430  %sext1 = sext <8 x i1> %0 to <8 x i16>431  %1 = shufflevector <8 x i16> %sext0, <8 x i16> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>432  %2 = shufflevector <8 x i16> %sext0, <8 x i16> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>433  %3 = shufflevector <8 x i16> %sext1, <8 x i16> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>434  %4 = shufflevector <8 x i16> %sext1, <8 x i16> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>435  br label %for.end.loopexit436 437for.end.loopexit:438  %phi0 = phi <4 x i16> [ %1, %entry ]439  %phi1 = phi <4 x i16> [ %2, %entry ]440  %phi2 = phi <4 x i16> [ %3, %entry ]441  %phi3 = phi <4 x i16> [ %4, %entry ]442  %or0 = or <4 x i16> %phi1, zeroinitializer443  ret void444}445 446define i32 @test15() {447; CHECK-LABEL: @test15(448; CHECK-NEXT:  entry:449; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr null, i64 480450; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr null, i64 160451; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x float>, ptr [[TMP1]], align 16452; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x float>, ptr [[TMP1]], align 16453; CHECK-NEXT:    store <4 x float> [[TMP3]], ptr null, align 16454; CHECK-NEXT:    [[TMP10:%.*]] = shufflevector <8 x float> [[TMP2]], <8 x float> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>455; CHECK-NEXT:    [[TMP5:%.*]] = shufflevector <16 x float> [[TMP10]], <16 x float> <float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>456; CHECK-NEXT:    [[TMP12:%.*]] = fadd <16 x float> zeroinitializer, [[TMP5]]457; CHECK-NEXT:    store <16 x float> [[TMP12]], ptr [[TMP0]], align 16458; CHECK-NEXT:    ret i32 0459;460entry:461  %0 = getelementptr i8, ptr null, i64 512462  %1 = getelementptr i8, ptr null, i64 528463  %2 = getelementptr i8, ptr null, i64 480464  %3 = getelementptr i8, ptr null, i64 496465  %4 = getelementptr i8, ptr null, i64 160466  %5 = load <4 x float>, ptr %4, align 16467  %6 = getelementptr i8, ptr null, i64 176468  %7 = load <4 x float>, ptr %6, align 16469  store <4 x float> %5, ptr null, align 16470  %8 = fadd <4 x float> zeroinitializer, %5471  %9 = fadd <4 x float> zeroinitializer, %7472  store <4 x float> %8, ptr %2, align 16473  store <4 x float> %9, ptr %3, align 16474  %10 = fadd <4 x float> zeroinitializer, zeroinitializer475  %11 = fadd <4 x float> zeroinitializer, zeroinitializer476  store <4 x float> %10, ptr %0, align 16477  store <4 x float> %11, ptr %1, align 16478  ret i32 0479}480