source_filename = "resampler_private_down_FIR-7ac2a7.c" target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" ; Function Attrs: inlinehint norecurse nounwind ssp uwtable define internal fastcc i16* @silk_resampler_private_down_FIR_INTERPOL(i16* %out, i32* readonly %buf, i16* readonly %FIR_Coefs, i32 %FIR_Order, i32 %FIR_Fracs, i32 %max_index_Q16, i32 %index_increment_Q16) unnamed_addr #4 { entry: switch i32 %FIR_Order, label %sw.epilog [ i32 18, label %for.cond.preheader i32 24, label %for.cond189.preheader i32 36, label %for.cond353.preheader ] for.cond353.preheader: ; preds = %entry %cmp354934 = icmp sgt i32 %max_index_Q16, 0 br i1 %cmp354934, label %for.body356.lr.ph, label %sw.epilog for.body356.lr.ph: ; preds = %for.cond353.preheader %arrayidx374 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 1 %arrayidx385 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 2 %arrayidx396 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 3 %arrayidx407 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 4 %arrayidx418 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 5 %arrayidx429 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 6 %arrayidx440 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 7 %arrayidx451 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 8 %arrayidx462 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 9 %arrayidx473 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 10 %arrayidx484 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 11 %arrayidx495 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 12 %arrayidx506 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 13 %arrayidx517 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 14 %arrayidx528 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 15 %arrayidx539 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 16 %arrayidx550 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 17 br label %for.body356 for.cond189.preheader: ; preds = %entry %cmp190930 = icmp sgt i32 %max_index_Q16, 0 br i1 %cmp190930, label %for.body192.lr.ph, label %sw.epilog for.body192.lr.ph: ; preds = %for.cond189.preheader %arrayidx210 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 1 %arrayidx221 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 2 %arrayidx232 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 3 %arrayidx243 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 4 %arrayidx254 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 5 %arrayidx265 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 6 %arrayidx276 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 7 %arrayidx287 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 8 %arrayidx298 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 9 %arrayidx309 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 10 %arrayidx320 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 11 br label %for.body192 for.cond.preheader: ; preds = %entry %cmp927 = icmp sgt i32 %max_index_Q16, 0 br i1 %cmp927, label %for.body.lr.ph, label %sw.epilog for.body.lr.ph: ; preds = %for.cond.preheader %conv1 = zext i32 %FIR_Fracs to i64 %sext870 = shl i64 %conv1, 48 %conv2 = ashr exact i64 %sext870, 48 %sub = add nsw i32 %FIR_Fracs, -1 br label %for.body for.body: ; preds = %for.body.lr.ph, %for.body %out.addr.0929 = phi i16* [ %out, %for.body.lr.ph ], [ %incdec.ptr, %for.body ] %index_Q16.0928 = phi i32 [ 0, %for.body.lr.ph ], [ %add187, %for.body ] %shr = ashr i32 %index_Q16.0928, 16 %idx.ext = sext i32 %shr to i64 %add.ptr = getelementptr inbounds i32, i32* %buf, i64 %idx.ext %and = and i32 %index_Q16.0928, 65535 %conv869 = zext i32 %and to i64 %mul = mul nsw i64 %conv869, %conv2 %shr3871 = lshr i64 %mul, 16 %conv4 = trunc i64 %shr3871 to i32 %sext872 = mul i64 %shr3871, 38654705664 %idxprom = ashr exact i64 %sext872, 32 %arrayidx = getelementptr inbounds i16, i16* %FIR_Coefs, i64 %idxprom %0 = load i32, i32* %add.ptr, align 4 %conv7 = sext i32 %0 to i64 %1 = load i16, i16* %arrayidx, align 2 %conv9 = sext i16 %1 to i64 %mul10 = mul nsw i64 %conv9, %conv7 %2 = lshr i64 %mul10, 16 %arrayidx14 = getelementptr inbounds i32, i32* %add.ptr, i64 1 %3 = load i32, i32* %arrayidx14, align 4 %conv15 = sext i32 %3 to i64 %arrayidx16 = getelementptr inbounds i16, i16* %arrayidx, i64 1 %4 = load i16, i16* %arrayidx16, align 2 %conv17 = sext i16 %4 to i64 %mul18 = mul nsw i64 %conv17, %conv15 %shr19876 = lshr i64 %mul18, 16 %add = add nuw nsw i64 %shr19876, %2 %arrayidx22 = getelementptr inbounds i32, i32* %add.ptr, i64 2 %5 = load i32, i32* %arrayidx22, align 4 %conv23 = sext i32 %5 to i64 %arrayidx24 = getelementptr inbounds i16, i16* %arrayidx, i64 2 %6 = load i16, i16* %arrayidx24, align 2 %conv25 = sext i16 %6 to i64 %mul26 = mul nsw i64 %conv25, %conv23 %shr27879 = lshr i64 %mul26, 16 %add28 = add nuw nsw i64 %add, %shr27879 %arrayidx31 = getelementptr inbounds i32, i32* %add.ptr, i64 3 %7 = load i32, i32* %arrayidx31, align 4 %conv32 = sext i32 %7 to i64 %arrayidx33 = getelementptr inbounds i16, i16* %arrayidx, i64 3 %8 = load i16, i16* %arrayidx33, align 2 %conv34 = sext i16 %8 to i64 %mul35 = mul nsw i64 %conv34, %conv32 %shr36882 = lshr i64 %mul35, 16 %add37 = add nuw nsw i64 %add28, %shr36882 %arrayidx40 = getelementptr inbounds i32, i32* %add.ptr, i64 4 %9 = load i32, i32* %arrayidx40, align 4 %conv41 = sext i32 %9 to i64 %arrayidx42 = getelementptr inbounds i16, i16* %arrayidx, i64 4 %10 = load i16, i16* %arrayidx42, align 2 %conv43 = sext i16 %10 to i64 %mul44 = mul nsw i64 %conv43, %conv41 %shr45885 = lshr i64 %mul44, 16 %add46 = add nuw nsw i64 %add37, %shr45885 %arrayidx49 = getelementptr inbounds i32, i32* %add.ptr, i64 5 %11 = load i32, i32* %arrayidx49, align 4 %conv50 = sext i32 %11 to i64 %arrayidx51 = getelementptr inbounds i16, i16* %arrayidx, i64 5 %12 = load i16, i16* %arrayidx51, align 2 %conv52 = sext i16 %12 to i64 %mul53 = mul nsw i64 %conv52, %conv50 %shr54888 = lshr i64 %mul53, 16 %add55 = add nuw nsw i64 %add46, %shr54888 %arrayidx58 = getelementptr inbounds i32, i32* %add.ptr, i64 6 %13 = load i32, i32* %arrayidx58, align 4 %conv59 = sext i32 %13 to i64 %arrayidx60 = getelementptr inbounds i16, i16* %arrayidx, i64 6 %14 = load i16, i16* %arrayidx60, align 2 %conv61 = sext i16 %14 to i64 %mul62 = mul nsw i64 %conv61, %conv59 %shr63891 = lshr i64 %mul62, 16 %add64 = add nuw nsw i64 %add55, %shr63891 %arrayidx67 = getelementptr inbounds i32, i32* %add.ptr, i64 7 %15 = load i32, i32* %arrayidx67, align 4 %conv68 = sext i32 %15 to i64 %arrayidx69 = getelementptr inbounds i16, i16* %arrayidx, i64 7 %16 = load i16, i16* %arrayidx69, align 2 %conv70 = sext i16 %16 to i64 %mul71 = mul nsw i64 %conv70, %conv68 %shr72894 = lshr i64 %mul71, 16 %add73 = add i64 %add64, %shr72894 %arrayidx76 = getelementptr inbounds i32, i32* %add.ptr, i64 8 %17 = load i32, i32* %arrayidx76, align 4 %conv77 = sext i32 %17 to i64 %arrayidx78 = getelementptr inbounds i16, i16* %arrayidx, i64 8 %18 = load i16, i16* %arrayidx78, align 2 %conv79 = sext i16 %18 to i64 %mul80 = mul nsw i64 %conv79, %conv77 %shr81897 = lshr i64 %mul80, 16 %add82 = add i64 %add73, %shr81897 %sub84 = sub i32 %sub, %conv4 %mul85 = mul nsw i32 %sub84, 9 %idxprom86 = sext i32 %mul85 to i64 %arrayidx87 = getelementptr inbounds i16, i16* %FIR_Coefs, i64 %idxprom86 %arrayidx89 = getelementptr inbounds i32, i32* %add.ptr, i64 17 %19 = load i32, i32* %arrayidx89, align 4 %conv90 = sext i32 %19 to i64 %20 = load i16, i16* %arrayidx87, align 2 %conv92 = sext i16 %20 to i64 %mul93 = mul nsw i64 %conv92, %conv90 %shr94900 = lshr i64 %mul93, 16 %add95 = add i64 %add82, %shr94900 %arrayidx98 = getelementptr inbounds i32, i32* %add.ptr, i64 16 %21 = load i32, i32* %arrayidx98, align 4 %conv99 = sext i32 %21 to i64 %arrayidx100 = getelementptr inbounds i16, i16* %arrayidx87, i64 1 %22 = load i16, i16* %arrayidx100, align 2 %conv101 = sext i16 %22 to i64 %mul102 = mul nsw i64 %conv101, %conv99 %shr103903 = lshr i64 %mul102, 16 %add104 = add i64 %add95, %shr103903 %arrayidx107 = getelementptr inbounds i32, i32* %add.ptr, i64 15 %23 = load i32, i32* %arrayidx107, align 4 %conv108 = sext i32 %23 to i64 %arrayidx109 = getelementptr inbounds i16, i16* %arrayidx87, i64 2 %24 = load i16, i16* %arrayidx109, align 2 %conv110 = sext i16 %24 to i64 %mul111 = mul nsw i64 %conv110, %conv108 %shr112906 = lshr i64 %mul111, 16 %add113 = add i64 %add104, %shr112906 %arrayidx116 = getelementptr inbounds i32, i32* %add.ptr, i64 14 %25 = load i32, i32* %arrayidx116, align 4 %conv117 = sext i32 %25 to i64 %arrayidx118 = getelementptr inbounds i16, i16* %arrayidx87, i64 3 %26 = load i16, i16* %arrayidx118, align 2 %conv119 = sext i16 %26 to i64 %mul120 = mul nsw i64 %conv119, %conv117 %shr121909 = lshr i64 %mul120, 16 %add122 = add i64 %add113, %shr121909 %arrayidx125 = getelementptr inbounds i32, i32* %add.ptr, i64 13 %27 = load i32, i32* %arrayidx125, align 4 %conv126 = sext i32 %27 to i64 %arrayidx127 = getelementptr inbounds i16, i16* %arrayidx87, i64 4 %28 = load i16, i16* %arrayidx127, align 2 %conv128 = sext i16 %28 to i64 %mul129 = mul nsw i64 %conv128, %conv126 %shr130912 = lshr i64 %mul129, 16 %add131 = add i64 %add122, %shr130912 %arrayidx134 = getelementptr inbounds i32, i32* %add.ptr, i64 12 %29 = load i32, i32* %arrayidx134, align 4 %conv135 = sext i32 %29 to i64 %arrayidx136 = getelementptr inbounds i16, i16* %arrayidx87, i64 5 %30 = load i16, i16* %arrayidx136, align 2 %conv137 = sext i16 %30 to i64 %mul138 = mul nsw i64 %conv137, %conv135 %shr139915 = lshr i64 %mul138, 16 %add140 = add i64 %add131, %shr139915 %arrayidx143 = getelementptr inbounds i32, i32* %add.ptr, i64 11 %31 = load i32, i32* %arrayidx143, align 4 %conv144 = sext i32 %31 to i64 %arrayidx145 = getelementptr inbounds i16, i16* %arrayidx87, i64 6 %32 = load i16, i16* %arrayidx145, align 2 %conv146 = sext i16 %32 to i64 %mul147 = mul nsw i64 %conv146, %conv144 %shr148918 = lshr i64 %mul147, 16 %add149 = add i64 %add140, %shr148918 %arrayidx152 = getelementptr inbounds i32, i32* %add.ptr, i64 10 %33 = load i32, i32* %arrayidx152, align 4 %conv153 = sext i32 %33 to i64 %arrayidx154 = getelementptr inbounds i16, i16* %arrayidx87, i64 7 %34 = load i16, i16* %arrayidx154, align 2 %conv155 = sext i16 %34 to i64 %mul156 = mul nsw i64 %conv155, %conv153 %shr157921 = lshr i64 %mul156, 16 %add158 = add i64 %add149, %shr157921 %arrayidx161 = getelementptr inbounds i32, i32* %add.ptr, i64 9 %35 = load i32, i32* %arrayidx161, align 4 %conv162 = sext i32 %35 to i64 %arrayidx163 = getelementptr inbounds i16, i16* %arrayidx87, i64 8 %36 = load i16, i16* %arrayidx163, align 2 %conv164 = sext i16 %36 to i64 %mul165 = mul nsw i64 %conv164, %conv162 %shr166924 = lshr i64 %mul165, 16 %add167 = add i64 %add158, %shr166924 %conv168 = trunc i64 %add167 to i32 %shr169 = ashr i32 %conv168, 5 %add170 = add nsw i32 %shr169, 1 %shr171 = ashr i32 %add170, 1 %cmp172 = icmp sgt i32 %shr171, 32767 %cmp177 = icmp slt i32 %shr171, -32768 %.shr171 = select i1 %cmp177, i32 -32768, i32 %shr171 %37 = trunc i32 %.shr171 to i16 %conv186 = select i1 %cmp172, i16 32767, i16 %37 %incdec.ptr = getelementptr inbounds i16, i16* %out.addr.0929, i64 1 store i16 %conv186, i16* %out.addr.0929, align 2 %add187 = add nsw i32 %index_Q16.0928, %index_increment_Q16 %cmp = icmp slt i32 %add187, %max_index_Q16 br i1 %cmp, label %for.body, label %sw.epilog.loopexit for.body192: ; preds = %for.body192.lr.ph, %for.body192 %out.addr.1932 = phi i16* [ %out, %for.body192.lr.ph ], [ %incdec.ptr348, %for.body192 ] %index_Q16.1931 = phi i32 [ 0, %for.body192.lr.ph ], [ %add350, %for.body192 ] %shr193 = ashr i32 %index_Q16.1931, 16 %idx.ext194 = sext i32 %shr193 to i64 %add.ptr195 = getelementptr inbounds i32, i32* %buf, i64 %idx.ext194 %38 = load i32, i32* %add.ptr195, align 4 %arrayidx197 = getelementptr inbounds i32, i32* %add.ptr195, i64 23 %39 = load i32, i32* %arrayidx197, align 4 %add198 = add nsw i32 %39, %38 %conv199 = sext i32 %add198 to i64 %40 = load i16, i16* %FIR_Coefs, align 2 %conv201 = sext i16 %40 to i64 %mul202 = mul nsw i64 %conv199, %conv201 %41 = lshr i64 %mul202, 16 %arrayidx206 = getelementptr inbounds i32, i32* %add.ptr195, i64 1 %42 = load i32, i32* %arrayidx206, align 4 %arrayidx207 = getelementptr inbounds i32, i32* %add.ptr195, i64 22 %43 = load i32, i32* %arrayidx207, align 4 %add208 = add nsw i32 %43, %42 %conv209 = sext i32 %add208 to i64 %44 = load i16, i16* %arrayidx210, align 2 %conv211 = sext i16 %44 to i64 %mul212 = mul nsw i64 %conv209, %conv211 %shr213838 = lshr i64 %mul212, 16 %add214 = add nuw nsw i64 %shr213838, %41 %arrayidx217 = getelementptr inbounds i32, i32* %add.ptr195, i64 2 %45 = load i32, i32* %arrayidx217, align 4 %arrayidx218 = getelementptr inbounds i32, i32* %add.ptr195, i64 21 %46 = load i32, i32* %arrayidx218, align 4 %add219 = add nsw i32 %46, %45 %conv220 = sext i32 %add219 to i64 %47 = load i16, i16* %arrayidx221, align 2 %conv222 = sext i16 %47 to i64 %mul223 = mul nsw i64 %conv220, %conv222 %shr224841 = lshr i64 %mul223, 16 %add225 = add nuw nsw i64 %add214, %shr224841 %arrayidx228 = getelementptr inbounds i32, i32* %add.ptr195, i64 3 %48 = load i32, i32* %arrayidx228, align 4 %arrayidx229 = getelementptr inbounds i32, i32* %add.ptr195, i64 20 %49 = load i32, i32* %arrayidx229, align 4 %add230 = add nsw i32 %49, %48 %conv231 = sext i32 %add230 to i64 %50 = load i16, i16* %arrayidx232, align 2 %conv233 = sext i16 %50 to i64 %mul234 = mul nsw i64 %conv231, %conv233 %shr235844 = lshr i64 %mul234, 16 %add236 = add nuw nsw i64 %add225, %shr235844 %arrayidx239 = getelementptr inbounds i32, i32* %add.ptr195, i64 4 %51 = load i32, i32* %arrayidx239, align 4 %arrayidx240 = getelementptr inbounds i32, i32* %add.ptr195, i64 19 %52 = load i32, i32* %arrayidx240, align 4 %add241 = add nsw i32 %52, %51 %conv242 = sext i32 %add241 to i64 %53 = load i16, i16* %arrayidx243, align 2 %conv244 = sext i16 %53 to i64 %mul245 = mul nsw i64 %conv242, %conv244 %shr246847 = lshr i64 %mul245, 16 %add247 = add nuw nsw i64 %add236, %shr246847 %arrayidx250 = getelementptr inbounds i32, i32* %add.ptr195, i64 5 %54 = load i32, i32* %arrayidx250, align 4 %arrayidx251 = getelementptr inbounds i32, i32* %add.ptr195, i64 18 %55 = load i32, i32* %arrayidx251, align 4 %add252 = add nsw i32 %55, %54 %conv253 = sext i32 %add252 to i64 %56 = load i16, i16* %arrayidx254, align 2 %conv255 = sext i16 %56 to i64 %mul256 = mul nsw i64 %conv253, %conv255 %shr257850 = lshr i64 %mul256, 16 %add258 = add nuw nsw i64 %add247, %shr257850 %arrayidx261 = getelementptr inbounds i32, i32* %add.ptr195, i64 6 %57 = load i32, i32* %arrayidx261, align 4 %arrayidx262 = getelementptr inbounds i32, i32* %add.ptr195, i64 17 %58 = load i32, i32* %arrayidx262, align 4 %add263 = add nsw i32 %58, %57 %conv264 = sext i32 %add263 to i64 %59 = load i16, i16* %arrayidx265, align 2 %conv266 = sext i16 %59 to i64 %mul267 = mul nsw i64 %conv264, %conv266 %shr268853 = lshr i64 %mul267, 16 %add269 = add nuw nsw i64 %add258, %shr268853 %arrayidx272 = getelementptr inbounds i32, i32* %add.ptr195, i64 7 %60 = load i32, i32* %arrayidx272, align 4 %arrayidx273 = getelementptr inbounds i32, i32* %add.ptr195, i64 16 %61 = load i32, i32* %arrayidx273, align 4 %add274 = add nsw i32 %61, %60 %conv275 = sext i32 %add274 to i64 %62 = load i16, i16* %arrayidx276, align 2 %conv277 = sext i16 %62 to i64 %mul278 = mul nsw i64 %conv275, %conv277 %shr279856 = lshr i64 %mul278, 16 %add280 = add i64 %add269, %shr279856 %arrayidx283 = getelementptr inbounds i32, i32* %add.ptr195, i64 8 %63 = load i32, i32* %arrayidx283, align 4 %arrayidx284 = getelementptr inbounds i32, i32* %add.ptr195, i64 15 %64 = load i32, i32* %arrayidx284, align 4 %add285 = add nsw i32 %64, %63 %conv286 = sext i32 %add285 to i64 %65 = load i16, i16* %arrayidx287, align 2 %conv288 = sext i16 %65 to i64 %mul289 = mul nsw i64 %conv286, %conv288 %shr290859 = lshr i64 %mul289, 16 %add291 = add i64 %add280, %shr290859 %arrayidx294 = getelementptr inbounds i32, i32* %add.ptr195, i64 9 %66 = load i32, i32* %arrayidx294, align 4 %arrayidx295 = getelementptr inbounds i32, i32* %add.ptr195, i64 14 %67 = load i32, i32* %arrayidx295, align 4 %add296 = add nsw i32 %67, %66 %conv297 = sext i32 %add296 to i64 %68 = load i16, i16* %arrayidx298, align 2 %conv299 = sext i16 %68 to i64 %mul300 = mul nsw i64 %conv297, %conv299 %shr301862 = lshr i64 %mul300, 16 %add302 = add i64 %add291, %shr301862 %arrayidx305 = getelementptr inbounds i32, i32* %add.ptr195, i64 10 %69 = load i32, i32* %arrayidx305, align 4 %arrayidx306 = getelementptr inbounds i32, i32* %add.ptr195, i64 13 %70 = load i32, i32* %arrayidx306, align 4 %add307 = add nsw i32 %70, %69 %conv308 = sext i32 %add307 to i64 %71 = load i16, i16* %arrayidx309, align 2 %conv310 = sext i16 %71 to i64 %mul311 = mul nsw i64 %conv308, %conv310 %shr312865 = lshr i64 %mul311, 16 %add313 = add i64 %add302, %shr312865 %arrayidx316 = getelementptr inbounds i32, i32* %add.ptr195, i64 11 %72 = load i32, i32* %arrayidx316, align 4 %arrayidx317 = getelementptr inbounds i32, i32* %add.ptr195, i64 12 %73 = load i32, i32* %arrayidx317, align 4 %add318 = add nsw i32 %73, %72 %conv319 = sext i32 %add318 to i64 %74 = load i16, i16* %arrayidx320, align 2 %conv321 = sext i16 %74 to i64 %mul322 = mul nsw i64 %conv319, %conv321 %shr323868 = lshr i64 %mul322, 16 %add324 = add i64 %add313, %shr323868 %conv325 = trunc i64 %add324 to i32 %shr326 = ashr i32 %conv325, 5 %add327 = add nsw i32 %shr326, 1 %shr328 = ashr i32 %add327, 1 %cmp329 = icmp sgt i32 %shr328, 32767 %cmp336 = icmp slt i32 %shr328, -32768 %.shr328 = select i1 %cmp336, i32 -32768, i32 %shr328 %75 = trunc i32 %.shr328 to i16 %conv347 = select i1 %cmp329, i16 32767, i16 %75 %incdec.ptr348 = getelementptr inbounds i16, i16* %out.addr.1932, i64 1 store i16 %conv347, i16* %out.addr.1932, align 2 %add350 = add nsw i32 %index_Q16.1931, %index_increment_Q16 %cmp190 = icmp slt i32 %add350, %max_index_Q16 br i1 %cmp190, label %for.body192, label %sw.epilog.loopexit938 for.body356: ; preds = %for.body356.lr.ph, %for.body356 %out.addr.2936 = phi i16* [ %out, %for.body356.lr.ph ], [ %incdec.ptr578, %for.body356 ] %index_Q16.2935 = phi i32 [ 0, %for.body356.lr.ph ], [ %add580, %for.body356 ] %shr357 = ashr i32 %index_Q16.2935, 16 %idx.ext358 = sext i32 %shr357 to i64 %add.ptr359 = getelementptr inbounds i32, i32* %buf, i64 %idx.ext358 %76 = load i32, i32* %add.ptr359, align 4 %arrayidx361 = getelementptr inbounds i32, i32* %add.ptr359, i64 35 %77 = load i32, i32* %arrayidx361, align 4 %add362 = add nsw i32 %77, %76 %conv363 = sext i32 %add362 to i64 %78 = load i16, i16* %FIR_Coefs, align 2 %conv365 = sext i16 %78 to i64 %mul366 = mul nsw i64 %conv363, %conv365 %79 = lshr i64 %mul366, 16 %arrayidx370 = getelementptr inbounds i32, i32* %add.ptr359, i64 1 %80 = load i32, i32* %arrayidx370, align 4 %arrayidx371 = getelementptr inbounds i32, i32* %add.ptr359, i64 34 %81 = load i32, i32* %arrayidx371, align 4 %add372 = add nsw i32 %81, %80 %conv373 = sext i32 %add372 to i64 %82 = load i16, i16* %arrayidx374, align 2 %conv375 = sext i16 %82 to i64 %mul376 = mul nsw i64 %conv373, %conv375 %shr377787 = lshr i64 %mul376, 16 %add378 = add nuw nsw i64 %shr377787, %79 %arrayidx381 = getelementptr inbounds i32, i32* %add.ptr359, i64 2 %83 = load i32, i32* %arrayidx381, align 4 %arrayidx382 = getelementptr inbounds i32, i32* %add.ptr359, i64 33 %84 = load i32, i32* %arrayidx382, align 4 %add383 = add nsw i32 %84, %83 %conv384 = sext i32 %add383 to i64 %85 = load i16, i16* %arrayidx385, align 2 %conv386 = sext i16 %85 to i64 %mul387 = mul nsw i64 %conv384, %conv386 %shr388789 = lshr i64 %mul387, 16 %add389 = add nuw nsw i64 %add378, %shr388789 %arrayidx392 = getelementptr inbounds i32, i32* %add.ptr359, i64 3 %86 = load i32, i32* %arrayidx392, align 4 %arrayidx393 = getelementptr inbounds i32, i32* %add.ptr359, i64 32 %87 = load i32, i32* %arrayidx393, align 4 %add394 = add nsw i32 %87, %86 %conv395 = sext i32 %add394 to i64 %88 = load i16, i16* %arrayidx396, align 2 %conv397 = sext i16 %88 to i64 %mul398 = mul nsw i64 %conv395, %conv397 %shr399792 = lshr i64 %mul398, 16 %add400 = add nuw nsw i64 %add389, %shr399792 %arrayidx403 = getelementptr inbounds i32, i32* %add.ptr359, i64 4 %89 = load i32, i32* %arrayidx403, align 4 %arrayidx404 = getelementptr inbounds i32, i32* %add.ptr359, i64 31 %90 = load i32, i32* %arrayidx404, align 4 %add405 = add nsw i32 %90, %89 %conv406 = sext i32 %add405 to i64 %91 = load i16, i16* %arrayidx407, align 2 %conv408 = sext i16 %91 to i64 %mul409 = mul nsw i64 %conv406, %conv408 %shr410795 = lshr i64 %mul409, 16 %add411 = add nuw nsw i64 %add400, %shr410795 %arrayidx414 = getelementptr inbounds i32, i32* %add.ptr359, i64 5 %92 = load i32, i32* %arrayidx414, align 4 %arrayidx415 = getelementptr inbounds i32, i32* %add.ptr359, i64 30 %93 = load i32, i32* %arrayidx415, align 4 %add416 = add nsw i32 %93, %92 %conv417 = sext i32 %add416 to i64 %94 = load i16, i16* %arrayidx418, align 2 %conv419 = sext i16 %94 to i64 %mul420 = mul nsw i64 %conv417, %conv419 %shr421798 = lshr i64 %mul420, 16 %add422 = add nuw nsw i64 %add411, %shr421798 %arrayidx425 = getelementptr inbounds i32, i32* %add.ptr359, i64 6 %95 = load i32, i32* %arrayidx425, align 4 %arrayidx426 = getelementptr inbounds i32, i32* %add.ptr359, i64 29 %96 = load i32, i32* %arrayidx426, align 4 %add427 = add nsw i32 %96, %95 %conv428 = sext i32 %add427 to i64 %97 = load i16, i16* %arrayidx429, align 2 %conv430 = sext i16 %97 to i64 %mul431 = mul nsw i64 %conv428, %conv430 %shr432801 = lshr i64 %mul431, 16 %add433 = add nuw nsw i64 %add422, %shr432801 %arrayidx436 = getelementptr inbounds i32, i32* %add.ptr359, i64 7 %98 = load i32, i32* %arrayidx436, align 4 %arrayidx437 = getelementptr inbounds i32, i32* %add.ptr359, i64 28 %99 = load i32, i32* %arrayidx437, align 4 %add438 = add nsw i32 %99, %98 %conv439 = sext i32 %add438 to i64 %100 = load i16, i16* %arrayidx440, align 2 %conv441 = sext i16 %100 to i64 %mul442 = mul nsw i64 %conv439, %conv441 %shr443804 = lshr i64 %mul442, 16 %add444 = add i64 %add433, %shr443804 %arrayidx447 = getelementptr inbounds i32, i32* %add.ptr359, i64 8 %101 = load i32, i32* %arrayidx447, align 4 %arrayidx448 = getelementptr inbounds i32, i32* %add.ptr359, i64 27 %102 = load i32, i32* %arrayidx448, align 4 %add449 = add nsw i32 %102, %101 %conv450 = sext i32 %add449 to i64 %103 = load i16, i16* %arrayidx451, align 2 %conv452 = sext i16 %103 to i64 %mul453 = mul nsw i64 %conv450, %conv452 %shr454807 = lshr i64 %mul453, 16 %add455 = add i64 %add444, %shr454807 %arrayidx458 = getelementptr inbounds i32, i32* %add.ptr359, i64 9 %104 = load i32, i32* %arrayidx458, align 4 %arrayidx459 = getelementptr inbounds i32, i32* %add.ptr359, i64 26 %105 = load i32, i32* %arrayidx459, align 4 %add460 = add nsw i32 %105, %104 %conv461 = sext i32 %add460 to i64 %106 = load i16, i16* %arrayidx462, align 2 %conv463 = sext i16 %106 to i64 %mul464 = mul nsw i64 %conv461, %conv463 %shr465810 = lshr i64 %mul464, 16 %add466 = add i64 %add455, %shr465810 %arrayidx469 = getelementptr inbounds i32, i32* %add.ptr359, i64 10 %107 = load i32, i32* %arrayidx469, align 4 %arrayidx470 = getelementptr inbounds i32, i32* %add.ptr359, i64 25 %108 = load i32, i32* %arrayidx470, align 4 %add471 = add nsw i32 %108, %107 %conv472 = sext i32 %add471 to i64 %109 = load i16, i16* %arrayidx473, align 2 %conv474 = sext i16 %109 to i64 %mul475 = mul nsw i64 %conv472, %conv474 %shr476813 = lshr i64 %mul475, 16 %add477 = add i64 %add466, %shr476813 %arrayidx480 = getelementptr inbounds i32, i32* %add.ptr359, i64 11 %110 = load i32, i32* %arrayidx480, align 4 %arrayidx481 = getelementptr inbounds i32, i32* %add.ptr359, i64 24 %111 = load i32, i32* %arrayidx481, align 4 %add482 = add nsw i32 %111, %110 %conv483 = sext i32 %add482 to i64 %112 = load i16, i16* %arrayidx484, align 2 %conv485 = sext i16 %112 to i64 %mul486 = mul nsw i64 %conv483, %conv485 %shr487816 = lshr i64 %mul486, 16 %add488 = add i64 %add477, %shr487816 %arrayidx491 = getelementptr inbounds i32, i32* %add.ptr359, i64 12 %113 = load i32, i32* %arrayidx491, align 4 %arrayidx492 = getelementptr inbounds i32, i32* %add.ptr359, i64 23 %114 = load i32, i32* %arrayidx492, align 4 %add493 = add nsw i32 %114, %113 %conv494 = sext i32 %add493 to i64 %115 = load i16, i16* %arrayidx495, align 2 %conv496 = sext i16 %115 to i64 %mul497 = mul nsw i64 %conv494, %conv496 %shr498819 = lshr i64 %mul497, 16 %add499 = add i64 %add488, %shr498819 %arrayidx502 = getelementptr inbounds i32, i32* %add.ptr359, i64 13 %116 = load i32, i32* %arrayidx502, align 4 %arrayidx503 = getelementptr inbounds i32, i32* %add.ptr359, i64 22 %117 = load i32, i32* %arrayidx503, align 4 %add504 = add nsw i32 %117, %116 %conv505 = sext i32 %add504 to i64 %118 = load i16, i16* %arrayidx506, align 2 %conv507 = sext i16 %118 to i64 %mul508 = mul nsw i64 %conv505, %conv507 %shr509822 = lshr i64 %mul508, 16 %add510 = add i64 %add499, %shr509822 %arrayidx513 = getelementptr inbounds i32, i32* %add.ptr359, i64 14 %119 = load i32, i32* %arrayidx513, align 4 %arrayidx514 = getelementptr inbounds i32, i32* %add.ptr359, i64 21 %120 = load i32, i32* %arrayidx514, align 4 %add515 = add nsw i32 %120, %119 %conv516 = sext i32 %add515 to i64 %121 = load i16, i16* %arrayidx517, align 2 %conv518 = sext i16 %121 to i64 %mul519 = mul nsw i64 %conv516, %conv518 %shr520825 = lshr i64 %mul519, 16 %add521 = add i64 %add510, %shr520825 %arrayidx524 = getelementptr inbounds i32, i32* %add.ptr359, i64 15 %122 = load i32, i32* %arrayidx524, align 4 %arrayidx525 = getelementptr inbounds i32, i32* %add.ptr359, i64 20 %123 = load i32, i32* %arrayidx525, align 4 %add526 = add nsw i32 %123, %122 %conv527 = sext i32 %add526 to i64 %124 = load i16, i16* %arrayidx528, align 2 %conv529 = sext i16 %124 to i64 %mul530 = mul nsw i64 %conv527, %conv529 %shr531828 = lshr i64 %mul530, 16 %add532 = add i64 %add521, %shr531828 %arrayidx535 = getelementptr inbounds i32, i32* %add.ptr359, i64 16 %125 = load i32, i32* %arrayidx535, align 4 %arrayidx536 = getelementptr inbounds i32, i32* %add.ptr359, i64 19 %126 = load i32, i32* %arrayidx536, align 4 %add537 = add nsw i32 %126, %125 %conv538 = sext i32 %add537 to i64 %127 = load i16, i16* %arrayidx539, align 2 %conv540 = sext i16 %127 to i64 %mul541 = mul nsw i64 %conv538, %conv540 %shr542831 = lshr i64 %mul541, 16 %add543 = add i64 %add532, %shr542831 %arrayidx546 = getelementptr inbounds i32, i32* %add.ptr359, i64 17 %128 = load i32, i32* %arrayidx546, align 4 %arrayidx547 = getelementptr inbounds i32, i32* %add.ptr359, i64 18 %129 = load i32, i32* %arrayidx547, align 4 %add548 = add nsw i32 %129, %128 %conv549 = sext i32 %add548 to i64 %130 = load i16, i16* %arrayidx550, align 2 %conv551 = sext i16 %130 to i64 %mul552 = mul nsw i64 %conv549, %conv551 %shr553834 = lshr i64 %mul552, 16 %add554 = add i64 %add543, %shr553834 %conv555 = trunc i64 %add554 to i32 %shr556 = ashr i32 %conv555, 5 %add557 = add nsw i32 %shr556, 1 %shr558 = ashr i32 %add557, 1 %cmp559 = icmp sgt i32 %shr558, 32767 %cmp566 = icmp slt i32 %shr558, -32768 %.shr558 = select i1 %cmp566, i32 -32768, i32 %shr558 %131 = trunc i32 %.shr558 to i16 %conv577 = select i1 %cmp559, i16 32767, i16 %131 %incdec.ptr578 = getelementptr inbounds i16, i16* %out.addr.2936, i64 1 store i16 %conv577, i16* %out.addr.2936, align 2 %add580 = add nsw i32 %index_Q16.2935, %index_increment_Q16 %cmp354 = icmp slt i32 %add580, %max_index_Q16 br i1 %cmp354, label %for.body356, label %sw.epilog.loopexit939 sw.epilog.loopexit: ; preds = %for.body %incdec.ptr.lcssa = phi i16* [ %incdec.ptr, %for.body ] br label %sw.epilog sw.epilog.loopexit938: ; preds = %for.body192 %incdec.ptr348.lcssa = phi i16* [ %incdec.ptr348, %for.body192 ] br label %sw.epilog sw.epilog.loopexit939: ; preds = %for.body356 %incdec.ptr578.lcssa = phi i16* [ %incdec.ptr578, %for.body356 ] br label %sw.epilog sw.epilog: ; preds = %sw.epilog.loopexit939, %sw.epilog.loopexit938, %sw.epilog.loopexit, %for.cond353.preheader, %for.cond189.preheader, %for.cond.preheader, %entry %out.addr.3 = phi i16* [ %out, %entry ], [ %out, %for.cond.preheader ], [ %out, %for.cond189.preheader ], [ %out, %for.cond353.preheader ], [ %incdec.ptr.lcssa, %sw.epilog.loopexit ], [ %incdec.ptr348.lcssa, %sw.epilog.loopexit938 ], [ %incdec.ptr578.lcssa, %sw.epilog.loopexit939 ] ret i16* %out.addr.3 }