Skip to content

Instantly share code, notes, and snippets.

@nikic

nikic/slp.ll Secret

Created August 8, 2023 15:17
Show Gist options
  • Save nikic/6ccde4b5320f7f4a6c5e7bd3ff8db1f6 to your computer and use it in GitHub Desktop.
Save nikic/6ccde4b5320f7f4a6c5e7bd3ff8db1f6 to your computer and use it in GitHub Desktop.
; ModuleID = 'test722.ll'
source_filename = "test.c"
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64"
; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable
define dso_local i32 @quant_4x4(ptr nocapture noundef %dct, ptr nocapture noundef readonly %mf, ptr nocapture noundef readonly %bias) local_unnamed_addr #0 {
entry:
%0 = load i16, ptr %dct, align 2
%conv = sext i16 %0 to i32
%cmp1 = icmp sgt i16 %0, 0
%1 = load i16, ptr %bias, align 2
%conv5 = zext i16 %1 to i32
%2 = load i16, ptr %mf, align 2
%conv11 = zext i16 %2 to i32
br i1 %cmp1, label %if.then, label %if.else
if.then: ; preds = %entry
%add = add nuw nsw i32 %conv5, %conv
%mul = mul i32 %add, %conv11
%shr = lshr i32 %mul, 16
%conv12 = trunc i32 %shr to i16
br label %if.end
if.else: ; preds = %entry
%add21 = sub nsw i32 %conv5, %conv
%mul25 = mul i32 %add21, %conv11
%shr26 = lshr i32 %mul25, 16
%3 = trunc i32 %shr26 to i16
%conv28 = sub i16 0, %3
br label %if.end
if.end: ; preds = %if.else, %if.then
%storemerge = phi i16 [ %conv28, %if.else ], [ %conv12, %if.then ]
store i16 %storemerge, ptr %dct, align 2
%arrayidx.1 = getelementptr inbounds i16, ptr %dct, i64 1
%4 = load i16, ptr %arrayidx.1, align 2
%conv.1 = sext i16 %4 to i32
%cmp1.1 = icmp sgt i16 %4, 0
%arrayidx4.1 = getelementptr inbounds i16, ptr %bias, i64 1
%5 = load i16, ptr %arrayidx4.1, align 2
%conv5.1 = zext i16 %5 to i32
%arrayidx10.1 = getelementptr inbounds i16, ptr %mf, i64 1
%6 = load i16, ptr %arrayidx10.1, align 2
%conv11.1 = zext i16 %6 to i32
br i1 %cmp1.1, label %if.then.1, label %if.else.1
if.else.1: ; preds = %if.end
%add21.1 = sub nsw i32 %conv5.1, %conv.1
%mul25.1 = mul i32 %add21.1, %conv11.1
%shr26.1 = lshr i32 %mul25.1, 16
%7 = trunc i32 %shr26.1 to i16
%conv28.1 = sub i16 0, %7
br label %if.end.1
if.then.1: ; preds = %if.end
%add.1 = add nuw nsw i32 %conv5.1, %conv.1
%mul.1 = mul i32 %add.1, %conv11.1
%shr.1 = lshr i32 %mul.1, 16
%conv12.1 = trunc i32 %shr.1 to i16
br label %if.end.1
if.end.1: ; preds = %if.then.1, %if.else.1
%storemerge.1 = phi i16 [ %conv28.1, %if.else.1 ], [ %conv12.1, %if.then.1 ]
store i16 %storemerge.1, ptr %arrayidx.1, align 2
%arrayidx.2 = getelementptr inbounds i16, ptr %dct, i64 2
%8 = load i16, ptr %arrayidx.2, align 2
%conv.2 = sext i16 %8 to i32
%cmp1.2 = icmp sgt i16 %8, 0
%arrayidx4.2 = getelementptr inbounds i16, ptr %bias, i64 2
%9 = load i16, ptr %arrayidx4.2, align 2
%conv5.2 = zext i16 %9 to i32
%arrayidx10.2 = getelementptr inbounds i16, ptr %mf, i64 2
%10 = load i16, ptr %arrayidx10.2, align 2
%conv11.2 = zext i16 %10 to i32
br i1 %cmp1.2, label %if.then.2, label %if.else.2
if.else.2: ; preds = %if.end.1
%add21.2 = sub nsw i32 %conv5.2, %conv.2
%mul25.2 = mul i32 %add21.2, %conv11.2
%shr26.2 = lshr i32 %mul25.2, 16
%11 = trunc i32 %shr26.2 to i16
%conv28.2 = sub i16 0, %11
br label %if.end.2
if.then.2: ; preds = %if.end.1
%add.2 = add nuw nsw i32 %conv5.2, %conv.2
%mul.2 = mul i32 %add.2, %conv11.2
%shr.2 = lshr i32 %mul.2, 16
%conv12.2 = trunc i32 %shr.2 to i16
br label %if.end.2
if.end.2: ; preds = %if.then.2, %if.else.2
%storemerge.2 = phi i16 [ %conv28.2, %if.else.2 ], [ %conv12.2, %if.then.2 ]
store i16 %storemerge.2, ptr %arrayidx.2, align 2
%arrayidx.3 = getelementptr inbounds i16, ptr %dct, i64 3
%12 = load i16, ptr %arrayidx.3, align 2
%conv.3 = sext i16 %12 to i32
%cmp1.3 = icmp sgt i16 %12, 0
%arrayidx4.3 = getelementptr inbounds i16, ptr %bias, i64 3
%13 = load i16, ptr %arrayidx4.3, align 2
%conv5.3 = zext i16 %13 to i32
%arrayidx10.3 = getelementptr inbounds i16, ptr %mf, i64 3
%14 = load i16, ptr %arrayidx10.3, align 2
%conv11.3 = zext i16 %14 to i32
br i1 %cmp1.3, label %if.then.3, label %if.else.3
if.else.3: ; preds = %if.end.2
%add21.3 = sub nsw i32 %conv5.3, %conv.3
%mul25.3 = mul i32 %add21.3, %conv11.3
%shr26.3 = lshr i32 %mul25.3, 16
%15 = trunc i32 %shr26.3 to i16
%conv28.3 = sub i16 0, %15
br label %if.end.3
if.then.3: ; preds = %if.end.2
%add.3 = add nuw nsw i32 %conv5.3, %conv.3
%mul.3 = mul i32 %add.3, %conv11.3
%shr.3 = lshr i32 %mul.3, 16
%conv12.3 = trunc i32 %shr.3 to i16
br label %if.end.3
if.end.3: ; preds = %if.then.3, %if.else.3
%storemerge.3 = phi i16 [ %conv28.3, %if.else.3 ], [ %conv12.3, %if.then.3 ]
store i16 %storemerge.3, ptr %arrayidx.3, align 2
%arrayidx.4 = getelementptr inbounds i16, ptr %dct, i64 4
%16 = load i16, ptr %arrayidx.4, align 2
%conv.4 = sext i16 %16 to i32
%cmp1.4 = icmp sgt i16 %16, 0
%arrayidx4.4 = getelementptr inbounds i16, ptr %bias, i64 4
%17 = load i16, ptr %arrayidx4.4, align 2
%conv5.4 = zext i16 %17 to i32
%arrayidx10.4 = getelementptr inbounds i16, ptr %mf, i64 4
%18 = load i16, ptr %arrayidx10.4, align 2
%conv11.4 = zext i16 %18 to i32
br i1 %cmp1.4, label %if.then.4, label %if.else.4
if.else.4: ; preds = %if.end.3
%add21.4 = sub nsw i32 %conv5.4, %conv.4
%mul25.4 = mul i32 %add21.4, %conv11.4
%shr26.4 = lshr i32 %mul25.4, 16
%19 = trunc i32 %shr26.4 to i16
%conv28.4 = sub i16 0, %19
br label %if.end.4
if.then.4: ; preds = %if.end.3
%add.4 = add nuw nsw i32 %conv5.4, %conv.4
%mul.4 = mul i32 %add.4, %conv11.4
%shr.4 = lshr i32 %mul.4, 16
%conv12.4 = trunc i32 %shr.4 to i16
br label %if.end.4
if.end.4: ; preds = %if.then.4, %if.else.4
%storemerge.4 = phi i16 [ %conv28.4, %if.else.4 ], [ %conv12.4, %if.then.4 ]
store i16 %storemerge.4, ptr %arrayidx.4, align 2
%arrayidx.5 = getelementptr inbounds i16, ptr %dct, i64 5
%20 = load i16, ptr %arrayidx.5, align 2
%conv.5 = sext i16 %20 to i32
%cmp1.5 = icmp sgt i16 %20, 0
%arrayidx4.5 = getelementptr inbounds i16, ptr %bias, i64 5
%21 = load i16, ptr %arrayidx4.5, align 2
%conv5.5 = zext i16 %21 to i32
%arrayidx10.5 = getelementptr inbounds i16, ptr %mf, i64 5
%22 = load i16, ptr %arrayidx10.5, align 2
%conv11.5 = zext i16 %22 to i32
br i1 %cmp1.5, label %if.then.5, label %if.else.5
if.else.5: ; preds = %if.end.4
%add21.5 = sub nsw i32 %conv5.5, %conv.5
%mul25.5 = mul i32 %add21.5, %conv11.5
%shr26.5 = lshr i32 %mul25.5, 16
%23 = trunc i32 %shr26.5 to i16
%conv28.5 = sub i16 0, %23
br label %if.end.5
if.then.5: ; preds = %if.end.4
%add.5 = add nuw nsw i32 %conv5.5, %conv.5
%mul.5 = mul i32 %add.5, %conv11.5
%shr.5 = lshr i32 %mul.5, 16
%conv12.5 = trunc i32 %shr.5 to i16
br label %if.end.5
if.end.5: ; preds = %if.then.5, %if.else.5
%storemerge.5 = phi i16 [ %conv28.5, %if.else.5 ], [ %conv12.5, %if.then.5 ]
store i16 %storemerge.5, ptr %arrayidx.5, align 2
%arrayidx.6 = getelementptr inbounds i16, ptr %dct, i64 6
%24 = load i16, ptr %arrayidx.6, align 2
%conv.6 = sext i16 %24 to i32
%cmp1.6 = icmp sgt i16 %24, 0
%arrayidx4.6 = getelementptr inbounds i16, ptr %bias, i64 6
%25 = load i16, ptr %arrayidx4.6, align 2
%conv5.6 = zext i16 %25 to i32
%arrayidx10.6 = getelementptr inbounds i16, ptr %mf, i64 6
%26 = load i16, ptr %arrayidx10.6, align 2
%conv11.6 = zext i16 %26 to i32
br i1 %cmp1.6, label %if.then.6, label %if.else.6
if.else.6: ; preds = %if.end.5
%add21.6 = sub nsw i32 %conv5.6, %conv.6
%mul25.6 = mul i32 %add21.6, %conv11.6
%shr26.6 = lshr i32 %mul25.6, 16
%27 = trunc i32 %shr26.6 to i16
%conv28.6 = sub i16 0, %27
br label %if.end.6
if.then.6: ; preds = %if.end.5
%add.6 = add nuw nsw i32 %conv5.6, %conv.6
%mul.6 = mul i32 %add.6, %conv11.6
%shr.6 = lshr i32 %mul.6, 16
%conv12.6 = trunc i32 %shr.6 to i16
br label %if.end.6
if.end.6: ; preds = %if.then.6, %if.else.6
%storemerge.6 = phi i16 [ %conv28.6, %if.else.6 ], [ %conv12.6, %if.then.6 ]
store i16 %storemerge.6, ptr %arrayidx.6, align 2
%arrayidx.7 = getelementptr inbounds i16, ptr %dct, i64 7
%28 = load i16, ptr %arrayidx.7, align 2
%conv.7 = sext i16 %28 to i32
%cmp1.7 = icmp sgt i16 %28, 0
%arrayidx4.7 = getelementptr inbounds i16, ptr %bias, i64 7
%29 = load i16, ptr %arrayidx4.7, align 2
%conv5.7 = zext i16 %29 to i32
%arrayidx10.7 = getelementptr inbounds i16, ptr %mf, i64 7
%30 = load i16, ptr %arrayidx10.7, align 2
%conv11.7 = zext i16 %30 to i32
br i1 %cmp1.7, label %if.then.7, label %if.else.7
if.else.7: ; preds = %if.end.6
%add21.7 = sub nsw i32 %conv5.7, %conv.7
%mul25.7 = mul i32 %add21.7, %conv11.7
%shr26.7 = lshr i32 %mul25.7, 16
%31 = trunc i32 %shr26.7 to i16
%conv28.7 = sub i16 0, %31
br label %if.end.7
if.then.7: ; preds = %if.end.6
%add.7 = add nuw nsw i32 %conv5.7, %conv.7
%mul.7 = mul i32 %add.7, %conv11.7
%shr.7 = lshr i32 %mul.7, 16
%conv12.7 = trunc i32 %shr.7 to i16
br label %if.end.7
if.end.7: ; preds = %if.then.7, %if.else.7
%storemerge.7 = phi i16 [ %conv28.7, %if.else.7 ], [ %conv12.7, %if.then.7 ]
store i16 %storemerge.7, ptr %arrayidx.7, align 2
%arrayidx.8 = getelementptr inbounds i16, ptr %dct, i64 8
%32 = load i16, ptr %arrayidx.8, align 2
%conv.8 = sext i16 %32 to i32
%cmp1.8 = icmp sgt i16 %32, 0
%arrayidx4.8 = getelementptr inbounds i16, ptr %bias, i64 8
%33 = load i16, ptr %arrayidx4.8, align 2
%conv5.8 = zext i16 %33 to i32
%arrayidx10.8 = getelementptr inbounds i16, ptr %mf, i64 8
%34 = load i16, ptr %arrayidx10.8, align 2
%conv11.8 = zext i16 %34 to i32
br i1 %cmp1.8, label %if.then.8, label %if.else.8
if.else.8: ; preds = %if.end.7
%add21.8 = sub nsw i32 %conv5.8, %conv.8
%mul25.8 = mul i32 %add21.8, %conv11.8
%shr26.8 = lshr i32 %mul25.8, 16
%35 = trunc i32 %shr26.8 to i16
%conv28.8 = sub i16 0, %35
br label %if.end.8
if.then.8: ; preds = %if.end.7
%add.8 = add nuw nsw i32 %conv5.8, %conv.8
%mul.8 = mul i32 %add.8, %conv11.8
%shr.8 = lshr i32 %mul.8, 16
%conv12.8 = trunc i32 %shr.8 to i16
br label %if.end.8
if.end.8: ; preds = %if.then.8, %if.else.8
%storemerge.8 = phi i16 [ %conv28.8, %if.else.8 ], [ %conv12.8, %if.then.8 ]
store i16 %storemerge.8, ptr %arrayidx.8, align 2
%arrayidx.9 = getelementptr inbounds i16, ptr %dct, i64 9
%36 = load i16, ptr %arrayidx.9, align 2
%conv.9 = sext i16 %36 to i32
%cmp1.9 = icmp sgt i16 %36, 0
%arrayidx4.9 = getelementptr inbounds i16, ptr %bias, i64 9
%37 = load i16, ptr %arrayidx4.9, align 2
%conv5.9 = zext i16 %37 to i32
%arrayidx10.9 = getelementptr inbounds i16, ptr %mf, i64 9
%38 = load i16, ptr %arrayidx10.9, align 2
%conv11.9 = zext i16 %38 to i32
br i1 %cmp1.9, label %if.then.9, label %if.else.9
if.else.9: ; preds = %if.end.8
%add21.9 = sub nsw i32 %conv5.9, %conv.9
%mul25.9 = mul i32 %add21.9, %conv11.9
%shr26.9 = lshr i32 %mul25.9, 16
%39 = trunc i32 %shr26.9 to i16
%conv28.9 = sub i16 0, %39
br label %if.end.9
if.then.9: ; preds = %if.end.8
%add.9 = add nuw nsw i32 %conv5.9, %conv.9
%mul.9 = mul i32 %add.9, %conv11.9
%shr.9 = lshr i32 %mul.9, 16
%conv12.9 = trunc i32 %shr.9 to i16
br label %if.end.9
if.end.9: ; preds = %if.then.9, %if.else.9
%storemerge.9 = phi i16 [ %conv28.9, %if.else.9 ], [ %conv12.9, %if.then.9 ]
store i16 %storemerge.9, ptr %arrayidx.9, align 2
%arrayidx.10 = getelementptr inbounds i16, ptr %dct, i64 10
%40 = load i16, ptr %arrayidx.10, align 2
%conv.10 = sext i16 %40 to i32
%cmp1.10 = icmp sgt i16 %40, 0
%arrayidx4.10 = getelementptr inbounds i16, ptr %bias, i64 10
%41 = load i16, ptr %arrayidx4.10, align 2
%conv5.10 = zext i16 %41 to i32
%arrayidx10.10 = getelementptr inbounds i16, ptr %mf, i64 10
%42 = load i16, ptr %arrayidx10.10, align 2
%conv11.10 = zext i16 %42 to i32
br i1 %cmp1.10, label %if.then.10, label %if.else.10
if.else.10: ; preds = %if.end.9
%add21.10 = sub nsw i32 %conv5.10, %conv.10
%mul25.10 = mul i32 %add21.10, %conv11.10
%shr26.10 = lshr i32 %mul25.10, 16
%43 = trunc i32 %shr26.10 to i16
%conv28.10 = sub i16 0, %43
br label %if.end.10
if.then.10: ; preds = %if.end.9
%add.10 = add nuw nsw i32 %conv5.10, %conv.10
%mul.10 = mul i32 %add.10, %conv11.10
%shr.10 = lshr i32 %mul.10, 16
%conv12.10 = trunc i32 %shr.10 to i16
br label %if.end.10
if.end.10: ; preds = %if.then.10, %if.else.10
%storemerge.10 = phi i16 [ %conv28.10, %if.else.10 ], [ %conv12.10, %if.then.10 ]
store i16 %storemerge.10, ptr %arrayidx.10, align 2
%arrayidx.11 = getelementptr inbounds i16, ptr %dct, i64 11
%44 = load i16, ptr %arrayidx.11, align 2
%conv.11 = sext i16 %44 to i32
%cmp1.11 = icmp sgt i16 %44, 0
%arrayidx4.11 = getelementptr inbounds i16, ptr %bias, i64 11
%45 = load i16, ptr %arrayidx4.11, align 2
%conv5.11 = zext i16 %45 to i32
%arrayidx10.11 = getelementptr inbounds i16, ptr %mf, i64 11
%46 = load i16, ptr %arrayidx10.11, align 2
%conv11.11 = zext i16 %46 to i32
br i1 %cmp1.11, label %if.then.11, label %if.else.11
if.else.11: ; preds = %if.end.10
%add21.11 = sub nsw i32 %conv5.11, %conv.11
%mul25.11 = mul i32 %add21.11, %conv11.11
%shr26.11 = lshr i32 %mul25.11, 16
%47 = trunc i32 %shr26.11 to i16
%conv28.11 = sub i16 0, %47
br label %if.end.11
if.then.11: ; preds = %if.end.10
%add.11 = add nuw nsw i32 %conv5.11, %conv.11
%mul.11 = mul i32 %add.11, %conv11.11
%shr.11 = lshr i32 %mul.11, 16
%conv12.11 = trunc i32 %shr.11 to i16
br label %if.end.11
if.end.11: ; preds = %if.then.11, %if.else.11
%storemerge.11 = phi i16 [ %conv28.11, %if.else.11 ], [ %conv12.11, %if.then.11 ]
store i16 %storemerge.11, ptr %arrayidx.11, align 2
%arrayidx.12 = getelementptr inbounds i16, ptr %dct, i64 12
%48 = load i16, ptr %arrayidx.12, align 2
%conv.12 = sext i16 %48 to i32
%cmp1.12 = icmp sgt i16 %48, 0
%arrayidx4.12 = getelementptr inbounds i16, ptr %bias, i64 12
%49 = load i16, ptr %arrayidx4.12, align 2
%conv5.12 = zext i16 %49 to i32
%arrayidx10.12 = getelementptr inbounds i16, ptr %mf, i64 12
%50 = load i16, ptr %arrayidx10.12, align 2
%conv11.12 = zext i16 %50 to i32
br i1 %cmp1.12, label %if.then.12, label %if.else.12
if.else.12: ; preds = %if.end.11
%add21.12 = sub nsw i32 %conv5.12, %conv.12
%mul25.12 = mul i32 %add21.12, %conv11.12
%shr26.12 = lshr i32 %mul25.12, 16
%51 = trunc i32 %shr26.12 to i16
%conv28.12 = sub i16 0, %51
br label %if.end.12
if.then.12: ; preds = %if.end.11
%add.12 = add nuw nsw i32 %conv5.12, %conv.12
%mul.12 = mul i32 %add.12, %conv11.12
%shr.12 = lshr i32 %mul.12, 16
%conv12.12 = trunc i32 %shr.12 to i16
br label %if.end.12
if.end.12: ; preds = %if.then.12, %if.else.12
%storemerge.12 = phi i16 [ %conv28.12, %if.else.12 ], [ %conv12.12, %if.then.12 ]
store i16 %storemerge.12, ptr %arrayidx.12, align 2
%arrayidx.13 = getelementptr inbounds i16, ptr %dct, i64 13
%52 = load i16, ptr %arrayidx.13, align 2
%conv.13 = sext i16 %52 to i32
%cmp1.13 = icmp sgt i16 %52, 0
%arrayidx4.13 = getelementptr inbounds i16, ptr %bias, i64 13
%53 = load i16, ptr %arrayidx4.13, align 2
%conv5.13 = zext i16 %53 to i32
%arrayidx10.13 = getelementptr inbounds i16, ptr %mf, i64 13
%54 = load i16, ptr %arrayidx10.13, align 2
%conv11.13 = zext i16 %54 to i32
br i1 %cmp1.13, label %if.then.13, label %if.else.13
if.else.13: ; preds = %if.end.12
%add21.13 = sub nsw i32 %conv5.13, %conv.13
%mul25.13 = mul i32 %add21.13, %conv11.13
%shr26.13 = lshr i32 %mul25.13, 16
%55 = trunc i32 %shr26.13 to i16
%conv28.13 = sub i16 0, %55
br label %if.end.13
if.then.13: ; preds = %if.end.12
%add.13 = add nuw nsw i32 %conv5.13, %conv.13
%mul.13 = mul i32 %add.13, %conv11.13
%shr.13 = lshr i32 %mul.13, 16
%conv12.13 = trunc i32 %shr.13 to i16
br label %if.end.13
if.end.13: ; preds = %if.then.13, %if.else.13
%storemerge.13 = phi i16 [ %conv28.13, %if.else.13 ], [ %conv12.13, %if.then.13 ]
store i16 %storemerge.13, ptr %arrayidx.13, align 2
%arrayidx.14 = getelementptr inbounds i16, ptr %dct, i64 14
%56 = load i16, ptr %arrayidx.14, align 2
%conv.14 = sext i16 %56 to i32
%cmp1.14 = icmp sgt i16 %56, 0
%arrayidx4.14 = getelementptr inbounds i16, ptr %bias, i64 14
%57 = load i16, ptr %arrayidx4.14, align 2
%conv5.14 = zext i16 %57 to i32
%arrayidx10.14 = getelementptr inbounds i16, ptr %mf, i64 14
%58 = load i16, ptr %arrayidx10.14, align 2
%conv11.14 = zext i16 %58 to i32
br i1 %cmp1.14, label %if.then.14, label %if.else.14
if.else.14: ; preds = %if.end.13
%add21.14 = sub nsw i32 %conv5.14, %conv.14
%mul25.14 = mul i32 %add21.14, %conv11.14
%shr26.14 = lshr i32 %mul25.14, 16
%59 = trunc i32 %shr26.14 to i16
%conv28.14 = sub i16 0, %59
br label %if.end.14
if.then.14: ; preds = %if.end.13
%add.14 = add nuw nsw i32 %conv5.14, %conv.14
%mul.14 = mul i32 %add.14, %conv11.14
%shr.14 = lshr i32 %mul.14, 16
%conv12.14 = trunc i32 %shr.14 to i16
br label %if.end.14
if.end.14: ; preds = %if.then.14, %if.else.14
%storemerge.14 = phi i16 [ %conv28.14, %if.else.14 ], [ %conv12.14, %if.then.14 ]
store i16 %storemerge.14, ptr %arrayidx.14, align 2
%arrayidx.15 = getelementptr inbounds i16, ptr %dct, i64 15
%60 = load i16, ptr %arrayidx.15, align 2
%conv.15 = sext i16 %60 to i32
%cmp1.15 = icmp sgt i16 %60, 0
%arrayidx4.15 = getelementptr inbounds i16, ptr %bias, i64 15
%61 = load i16, ptr %arrayidx4.15, align 2
%conv5.15 = zext i16 %61 to i32
%arrayidx10.15 = getelementptr inbounds i16, ptr %mf, i64 15
%62 = load i16, ptr %arrayidx10.15, align 2
%conv11.15 = zext i16 %62 to i32
br i1 %cmp1.15, label %if.then.15, label %if.else.15
if.else.15: ; preds = %if.end.14
%add21.15 = sub nsw i32 %conv5.15, %conv.15
%mul25.15 = mul i32 %add21.15, %conv11.15
%shr26.15 = lshr i32 %mul25.15, 16
%63 = trunc i32 %shr26.15 to i16
%conv28.15 = sub i16 0, %63
br label %if.end.15
if.then.15: ; preds = %if.end.14
%add.15 = add nuw nsw i32 %conv5.15, %conv.15
%mul.15 = mul i32 %add.15, %conv11.15
%shr.15 = lshr i32 %mul.15, 16
%conv12.15 = trunc i32 %shr.15 to i16
br label %if.end.15
if.end.15: ; preds = %if.then.15, %if.else.15
%storemerge.15 = phi i16 [ %conv28.15, %if.else.15 ], [ %conv12.15, %if.then.15 ]
%or.123 = or i16 %storemerge, %storemerge.1
%or.224 = or i16 %or.123, %storemerge.2
%or.325 = or i16 %or.224, %storemerge.3
%or.426 = or i16 %or.325, %storemerge.4
%or.527 = or i16 %or.426, %storemerge.5
%or.628 = or i16 %or.527, %storemerge.6
%or.729 = or i16 %or.628, %storemerge.7
%or.830 = or i16 %or.729, %storemerge.8
%or.931 = or i16 %or.830, %storemerge.9
%or.1032 = or i16 %or.931, %storemerge.10
%or.1133 = or i16 %or.1032, %storemerge.11
%or.1234 = or i16 %or.1133, %storemerge.12
%or.1335 = or i16 %or.1234, %storemerge.13
%or.1436 = or i16 %or.1335, %storemerge.14
store i16 %storemerge.15, ptr %arrayidx.15, align 2
%or.1537 = or i16 %or.1436, %storemerge.15
%tobool = icmp ne i16 %or.1537, 0
%lnot.ext = zext i1 %tobool to i32
ret i32 %lnot.ext
}
attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+fp-armv8,+neon,+v8a,-fmv" }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment