207 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S --passes=slp-vectorizer -slp-vectorize-hor=false < %s | FileCheck %s3 4define void @func(i32 %0) {5; CHECK-LABEL: define void @func(6; CHECK-SAME: i32 [[TMP0:%.*]]) {7; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x i32> <i32 0, i32 poison, i32 0, i32 0>, i32 [[TMP0]], i32 18; CHECK-NEXT: [[TMP3:%.*]] = shl <4 x i32> [[TMP2]], zeroinitializer9; CHECK-NEXT: [[TMP6:%.*]] = shl i32 [[TMP0]], 010; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i32 [[TMP6]], 011; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> poison, <32 x i32> <i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 2, i32 3>12; CHECK-NEXT: [[TMP9:%.*]] = sext i32 [[TMP6]] to i6413; CHECK-NEXT: [[TMP10:%.*]] = or i64 [[TMP9]], 014; CHECK-NEXT: [[TMP11:%.*]] = trunc i64 [[TMP9]] to i3215; CHECK-NEXT: [[TMP12:%.*]] = insertelement <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, 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 [[TMP11]], i32 3016; CHECK-NEXT: [[TMP13:%.*]] = shufflevector <32 x i32> [[TMP12]], <32 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 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 30, i32 30>17; CHECK-NEXT: [[TMP15:%.*]] = shufflevector <32 x i32> [[TMP13]], <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>, <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 poison, i32 poison, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 30, i32 31>18; CHECK-NEXT: [[TMP16:%.*]] = shufflevector <32 x i32> [[TMP15]], <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>, <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 poison, i32 poison, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 32, i32 33, i32 34, i32 35, i32 poison, i32 poison, i32 30, i32 31>19; CHECK-NEXT: [[TMP14:%.*]] = shufflevector <32 x i32> [[TMP16]], <32 x i32> <i32 0, i32 0, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>, <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 32, i32 33, 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 poison, i32 poison, i32 30, i32 31>20; CHECK-NEXT: [[TMP17:%.*]] = shufflevector <32 x i32> [[TMP14]], <32 x i32> <i32 0, i32 0, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>, <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 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 32, i32 33, i32 30, i32 31>21; CHECK-NEXT: [[TMP18:%.*]] = or <32 x i32> [[TMP8]], [[TMP17]]22; CHECK-NEXT: [[TMP19:%.*]] = sext <32 x i32> [[TMP18]] to <32 x i64>23; CHECK-NEXT: [[TMP20:%.*]] = icmp slt <32 x i64> [[TMP19]], zeroinitializer24; CHECK-NEXT: [[TMP21:%.*]] = extractelement <32 x i1> [[TMP20]], i32 3125; CHECK-NEXT: [[TMP22:%.*]] = and i1 false, [[TMP21]]26; CHECK-NEXT: [[TMP23:%.*]] = extractelement <32 x i1> [[TMP20]], i32 3027; CHECK-NEXT: [[TMP24:%.*]] = and i1 false, [[TMP23]]28; CHECK-NEXT: [[TMP25:%.*]] = extractelement <32 x i1> [[TMP20]], i32 2929; CHECK-NEXT: [[TMP26:%.*]] = and i1 false, [[TMP25]]30; CHECK-NEXT: [[TMP27:%.*]] = extractelement <32 x i1> [[TMP20]], i32 2831; CHECK-NEXT: [[TMP28:%.*]] = and i1 false, [[TMP27]]32; CHECK-NEXT: [[TMP29:%.*]] = extractelement <32 x i1> [[TMP20]], i32 2733; CHECK-NEXT: [[TMP30:%.*]] = and i1 false, [[TMP29]]34; CHECK-NEXT: [[TMP31:%.*]] = extractelement <32 x i1> [[TMP20]], i32 2635; CHECK-NEXT: [[TMP32:%.*]] = and i1 false, [[TMP31]]36; CHECK-NEXT: [[TMP33:%.*]] = extractelement <32 x i1> [[TMP20]], i32 2537; CHECK-NEXT: [[TMP34:%.*]] = and i1 false, [[TMP33]]38; CHECK-NEXT: [[TMP35:%.*]] = extractelement <32 x i1> [[TMP20]], i32 2439; CHECK-NEXT: [[TMP36:%.*]] = and i1 false, [[TMP35]]40; CHECK-NEXT: [[TMP37:%.*]] = extractelement <32 x i1> [[TMP20]], i32 2341; CHECK-NEXT: [[TMP38:%.*]] = and i1 false, [[TMP37]]42; CHECK-NEXT: [[TMP39:%.*]] = extractelement <32 x i1> [[TMP20]], i32 2243; CHECK-NEXT: [[TMP40:%.*]] = and i1 false, [[TMP39]]44; CHECK-NEXT: [[TMP41:%.*]] = extractelement <32 x i1> [[TMP20]], i32 2145; CHECK-NEXT: [[TMP42:%.*]] = and i1 false, [[TMP41]]46; CHECK-NEXT: [[TMP43:%.*]] = extractelement <32 x i1> [[TMP20]], i32 2047; CHECK-NEXT: [[TMP44:%.*]] = and i1 false, [[TMP43]]48; CHECK-NEXT: [[TMP45:%.*]] = extractelement <32 x i1> [[TMP20]], i32 1949; CHECK-NEXT: [[TMP46:%.*]] = and i1 false, [[TMP45]]50; CHECK-NEXT: [[TMP47:%.*]] = extractelement <32 x i1> [[TMP20]], i32 1851; CHECK-NEXT: [[TMP48:%.*]] = and i1 false, [[TMP47]]52; CHECK-NEXT: [[TMP49:%.*]] = extractelement <32 x i1> [[TMP20]], i32 1753; CHECK-NEXT: [[TMP50:%.*]] = and i1 false, [[TMP49]]54; CHECK-NEXT: [[TMP51:%.*]] = extractelement <32 x i1> [[TMP20]], i32 1655; CHECK-NEXT: [[TMP52:%.*]] = and i1 false, [[TMP51]]56; CHECK-NEXT: [[TMP53:%.*]] = extractelement <32 x i1> [[TMP20]], i32 1557; CHECK-NEXT: [[TMP54:%.*]] = and i1 false, [[TMP53]]58; CHECK-NEXT: [[TMP55:%.*]] = extractelement <32 x i1> [[TMP20]], i32 1459; CHECK-NEXT: [[TMP56:%.*]] = and i1 false, [[TMP55]]60; CHECK-NEXT: [[TMP57:%.*]] = extractelement <32 x i1> [[TMP20]], i32 1361; CHECK-NEXT: [[TMP58:%.*]] = and i1 false, [[TMP57]]62; CHECK-NEXT: [[TMP59:%.*]] = extractelement <32 x i1> [[TMP20]], i32 1263; CHECK-NEXT: [[TMP60:%.*]] = and i1 false, [[TMP59]]64; CHECK-NEXT: [[TMP61:%.*]] = extractelement <32 x i1> [[TMP20]], i32 1165; CHECK-NEXT: [[TMP62:%.*]] = and i1 false, [[TMP61]]66; CHECK-NEXT: [[TMP63:%.*]] = extractelement <32 x i1> [[TMP20]], i32 1067; CHECK-NEXT: [[TMP64:%.*]] = and i1 false, [[TMP63]]68; CHECK-NEXT: [[TMP65:%.*]] = extractelement <32 x i1> [[TMP20]], i32 969; CHECK-NEXT: [[TMP66:%.*]] = and i1 false, [[TMP65]]70; CHECK-NEXT: [[TMP67:%.*]] = extractelement <32 x i1> [[TMP20]], i32 871; CHECK-NEXT: [[TMP68:%.*]] = and i1 false, [[TMP67]]72; CHECK-NEXT: [[TMP69:%.*]] = extractelement <32 x i1> [[TMP20]], i32 773; CHECK-NEXT: [[TMP70:%.*]] = and i1 false, [[TMP69]]74; CHECK-NEXT: [[TMP71:%.*]] = extractelement <32 x i1> [[TMP20]], i32 675; CHECK-NEXT: [[TMP72:%.*]] = and i1 false, [[TMP71]]76; CHECK-NEXT: [[TMP73:%.*]] = extractelement <32 x i1> [[TMP20]], i32 577; CHECK-NEXT: [[TMP74:%.*]] = and i1 false, [[TMP73]]78; CHECK-NEXT: [[TMP75:%.*]] = extractelement <32 x i1> [[TMP20]], i32 479; CHECK-NEXT: [[TMP76:%.*]] = and i1 false, [[TMP75]]80; CHECK-NEXT: [[TMP77:%.*]] = extractelement <32 x i32> [[TMP18]], i32 081; CHECK-NEXT: [[TMP78:%.*]] = zext i32 [[TMP77]] to i6482; CHECK-NEXT: [[TMP79:%.*]] = getelementptr float, ptr addrspace(1) null, i64 [[TMP78]]83; CHECK-NEXT: ret void84;85 %2 = shl i32 %0, 086 %3 = sext i32 %2 to i6487 %4 = shl i32 0, 088 %5 = sext i32 %4 to i6489 %6 = or i32 0, 090 %7 = or i32 0, 091 %8 = zext i32 %6 to i6492 %9 = zext i32 %7 to i6493 %10 = zext i32 0 to i6494 %11 = zext i32 0 to i6495 %12 = zext i32 0 to i6496 %13 = zext i32 0 to i6497 %14 = zext i32 0 to i6498 %15 = zext i32 0 to i6499 %16 = zext i32 0 to i64100 %17 = zext i32 0 to i64101 %18 = zext i32 0 to i64102 %19 = zext i32 0 to i64103 %20 = zext i32 0 to i64104 %21 = zext i32 0 to i64105 %22 = zext i32 0 to i64106 %23 = zext i32 0 to i64107 %24 = zext i32 0 to i64108 %25 = zext i32 0 to i64109 %26 = zext i32 0 to i64110 %27 = or i64 %3, 0111 %28 = or i64 %3, %8112 %29 = or i64 %3, %9113 %30 = or i64 %3, %10114 %31 = or i64 %3, %11115 %32 = or i64 %3, %12116 %33 = or i64 %3, %13117 %34 = or i64 %3, %14118 %35 = or i64 %3, %15119 %36 = or i64 %3, %16120 %37 = or i64 %3, %17121 %38 = or i64 %3, %18122 %39 = or i64 %3, %19123 %40 = or i64 %3, %20124 %41 = or i64 %3, %21125 %42 = or i64 %3, %22126 %43 = or i64 %3, %23127 %44 = or i64 %3, %24128 %45 = or i64 %3, %25129 %46 = or i64 %3, 0130 %47 = or i64 %3, 0131 %48 = or i64 %3, 0132 %49 = or i64 %3, 0133 %50 = or i64 %3, 0134 %51 = or i64 %3, 0135 %52 = or i64 %3, 0136 %53 = or i64 %3, 0137 %54 = or i64 %3, 0138 %55 = or i64 %3, 0139 %56 = or i64 %3, 0140 %57 = or i64 %3, 0141 %58 = or i64 %3, 0142 %59 = icmp slt i64 %28, 0143 %60 = icmp slt i64 %29, 0144 %61 = icmp slt i64 %30, 0145 %62 = icmp slt i64 %31, 0146 %63 = icmp slt i64 %32, 0147 %64 = icmp slt i64 %33, 0148 %65 = icmp slt i64 %34, 0149 %66 = icmp slt i64 %35, 0150 %67 = icmp slt i64 %36, 0151 %68 = icmp slt i64 %37, 0152 %69 = icmp slt i64 %38, 0153 %70 = icmp slt i64 %39, 0154 %71 = icmp slt i64 %40, 0155 %72 = icmp slt i64 %41, 0156 %73 = icmp slt i64 %42, 0157 %74 = icmp slt i64 %43, 0158 %75 = icmp slt i64 %44, 0159 %76 = icmp slt i64 %45, 0160 %77 = icmp slt i64 %46, 0161 %78 = icmp slt i64 %47, 0162 %79 = icmp slt i64 %48, 0163 %80 = icmp slt i64 %49, 0164 %81 = icmp slt i64 %50, 0165 %82 = icmp slt i64 %51, 0166 %83 = icmp slt i64 %52, 0167 %84 = icmp slt i64 %53, 0168 %85 = icmp slt i64 %54, 0169 %86 = icmp slt i64 %55, 0170 %87 = icmp slt i64 %56, 0171 %88 = icmp slt i64 %57, 0172 %89 = icmp slt i64 %58, 0173 %90 = and i1 false, %59174 %91 = and i1 false, %60175 %92 = and i1 false, %61176 %93 = and i1 false, %62177 %94 = and i1 false, %63178 %95 = and i1 false, %64179 %96 = and i1 false, %65180 %97 = and i1 false, %66181 %98 = and i1 false, %67182 %99 = and i1 false, %68183 %100 = and i1 false, %69184 %101 = and i1 false, %70185 %102 = and i1 false, %71186 %103 = and i1 false, %72187 %104 = and i1 false, %73188 %105 = and i1 false, %74189 %106 = and i1 false, %75190 %107 = and i1 false, %76191 %108 = icmp eq i32 %2, 0192 %109 = and i1 false, %77193 %110 = and i1 false, %78194 %111 = and i1 false, %79195 %112 = and i1 false, %80196 %113 = and i1 false, %81197 %114 = and i1 false, %82198 %115 = and i1 false, %83199 %116 = and i1 false, %84200 %117 = and i1 false, %85201 %118 = and i1 false, %86202 %119 = or i64 %5, %26203 %120 = getelementptr float, ptr addrspace(1) null, i64 %119204 %121 = icmp slt i64 %119, 0205 ret void206}207