RTSA-lab01-CacheAnalysis/test/edn.ll

790 lines
34 KiB
LLVM

; ModuleID = 'edn.c'
source_filename = "edn.c"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"
@__const.main.a = private unnamed_addr constant [200 x i16] [i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024, i16 0, i16 2047, i16 3072, i16 2048, i16 512, i16 -2048, i16 -3328, i16 1024], align 16
@__const.main.b = private unnamed_addr constant [200 x i16] [i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096, i16 3168, i16 3136, i16 3104, i16 3072, i16 -2560, i16 -3072, i16 -3584, i16 -4096], align 16
; Function Attrs: nofree norecurse nosync nounwind sspstrong uwtable
define dso_local void @vec_mpy1(i16* nocapture %0, i16* nocapture readonly %1, i16 signext %2) local_unnamed_addr #0 {
%4 = sext i16 %2 to i32
br label %5
5: ; preds = %3, %5
%6 = phi i64 [ 0, %3 ], [ %16, %5 ]
%7 = getelementptr inbounds i16, i16* %1, i64 %6
%8 = load i16, i16* %7, align 2, !tbaa !5
%9 = sext i16 %8 to i32
%10 = mul nsw i32 %9, %4
%11 = lshr i32 %10, 15
%12 = getelementptr inbounds i16, i16* %0, i64 %6
%13 = load i16, i16* %12, align 2, !tbaa !5
%14 = trunc i32 %11 to i16
%15 = add i16 %13, %14
store i16 %15, i16* %12, align 2, !tbaa !5
%16 = add nuw nsw i64 %6, 1
%17 = icmp eq i64 %16, 150
br i1 %17, label %18, label %5, !llvm.loop !9
18: ; preds = %5
ret void
}
; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #1
; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #1
; Function Attrs: nofree norecurse nosync nounwind sspstrong uwtable
define dso_local i64 @mac(i16* nocapture readonly %0, i16* nocapture readonly %1, i64 %2, i64* nocapture %3) local_unnamed_addr #0 {
%5 = load i64, i64* %3, align 8, !tbaa !12
br label %6
6: ; preds = %4, %6
%7 = phi i64 [ %5, %4 ], [ %18, %6 ]
%8 = phi i64 [ 0, %4 ], [ %22, %6 ]
%9 = phi i64 [ %2, %4 ], [ %21, %6 ]
%10 = getelementptr inbounds i16, i16* %1, i64 %8
%11 = load i16, i16* %10, align 2, !tbaa !5
%12 = sext i16 %11 to i32
%13 = getelementptr inbounds i16, i16* %0, i64 %8
%14 = load i16, i16* %13, align 2, !tbaa !5
%15 = sext i16 %14 to i32
%16 = mul nsw i32 %15, %12
%17 = sext i32 %16 to i64
%18 = add nsw i64 %7, %17
%19 = mul nsw i32 %12, %12
%20 = zext i32 %19 to i64
%21 = add nsw i64 %9, %20
%22 = add nuw nsw i64 %8, 1
%23 = icmp eq i64 %22, 150
br i1 %23, label %24, label %6, !llvm.loop !14
24: ; preds = %6
store i64 %18, i64* %3, align 8, !tbaa !12
ret i64 %21
}
; Function Attrs: nofree norecurse nosync nounwind sspstrong uwtable
define dso_local void @fir(i16* nocapture readonly %0, i16* nocapture readonly %1, i64* nocapture %2) local_unnamed_addr #0 {
br label %4
4: ; preds = %3, %20
%5 = phi i64 [ 0, %3 ], [ %23, %20 ]
br label %6
6: ; preds = %4, %6
%7 = phi i64 [ 0, %4 ], [ %17, %6 ]
%8 = phi i64 [ 0, %4 ], [ %18, %6 ]
%9 = add nuw nsw i64 %8, %5
%10 = getelementptr inbounds i16, i16* %0, i64 %9
%11 = load i16, i16* %10, align 2, !tbaa !5
%12 = sext i16 %11 to i64
%13 = getelementptr inbounds i16, i16* %1, i64 %8
%14 = load i16, i16* %13, align 2, !tbaa !5
%15 = sext i16 %14 to i64
%16 = mul nsw i64 %15, %12
%17 = add nsw i64 %16, %7
%18 = add nuw nsw i64 %8, 1
%19 = icmp eq i64 %18, 50
br i1 %19, label %20, label %6, !llvm.loop !15
20: ; preds = %6
%21 = ashr i64 %17, 15
%22 = getelementptr inbounds i64, i64* %2, i64 %5
store i64 %21, i64* %22, align 8, !tbaa !12
%23 = add nuw nsw i64 %5, 1
%24 = icmp eq i64 %23, 50
br i1 %24, label %25, label %4, !llvm.loop !16
25: ; preds = %20
ret void
}
; Function Attrs: nofree norecurse nosync nounwind sspstrong uwtable
define dso_local void @fir_no_red_ld(i16* nocapture readonly %0, i16* nocapture readonly %1, i64* nocapture %2) local_unnamed_addr #0 {
br label %4
4: ; preds = %3, %44
%5 = phi i64 [ 0, %3 ], [ %50, %44 ]
%6 = getelementptr inbounds i16, i16* %0, i64 %5
%7 = load i16, i16* %6, align 2, !tbaa !5
br label %8
8: ; preds = %4, %8
%9 = phi i64 [ 0, %4 ], [ %42, %8 ]
%10 = phi i64 [ 0, %4 ], [ %37, %8 ]
%11 = phi i16 [ %7, %4 ], [ %30, %8 ]
%12 = phi i64 [ 0, %4 ], [ %41, %8 ]
%13 = add nuw nsw i64 %9, %5
%14 = or i64 %13, 1
%15 = getelementptr inbounds i16, i16* %0, i64 %14
%16 = load i16, i16* %15, align 2, !tbaa !5
%17 = getelementptr inbounds i16, i16* %1, i64 %9
%18 = load i16, i16* %17, align 2, !tbaa !5
%19 = sext i16 %11 to i32
%20 = sext i16 %18 to i32
%21 = mul nsw i32 %20, %19
%22 = sext i32 %21 to i64
%23 = add nsw i64 %10, %22
%24 = sext i16 %16 to i32
%25 = mul nsw i32 %20, %24
%26 = sext i32 %25 to i64
%27 = add nsw i64 %12, %26
%28 = add nuw nsw i64 %13, 2
%29 = getelementptr inbounds i16, i16* %0, i64 %28
%30 = load i16, i16* %29, align 2, !tbaa !5
%31 = or i64 %9, 1
%32 = getelementptr inbounds i16, i16* %1, i64 %31
%33 = load i16, i16* %32, align 2, !tbaa !5
%34 = sext i16 %33 to i32
%35 = mul nsw i32 %34, %24
%36 = sext i32 %35 to i64
%37 = add nsw i64 %23, %36
%38 = sext i16 %30 to i32
%39 = mul nsw i32 %34, %38
%40 = sext i32 %39 to i64
%41 = add nsw i64 %27, %40
%42 = add nuw nsw i64 %9, 2
%43 = icmp ult i64 %9, 30
br i1 %43, label %8, label %44, !llvm.loop !17
44: ; preds = %8
%45 = ashr i64 %37, 15
%46 = getelementptr inbounds i64, i64* %2, i64 %5
store i64 %45, i64* %46, align 8, !tbaa !12
%47 = ashr i64 %41, 15
%48 = or i64 %5, 1
%49 = getelementptr inbounds i64, i64* %2, i64 %48
store i64 %47, i64* %49, align 8, !tbaa !12
%50 = add nuw nsw i64 %5, 2
%51 = icmp ult i64 %5, 98
br i1 %51, label %4, label %52, !llvm.loop !18
52: ; preds = %44
ret void
}
; Function Attrs: nofree norecurse nosync nounwind sspstrong uwtable
define dso_local i64 @latsynth(i16* nocapture %0, i16* nocapture readonly %1, i64 %2, i64 %3) local_unnamed_addr #0 {
%5 = add nsw i64 %2, -1
%6 = getelementptr inbounds i16, i16* %0, i64 %5
%7 = load i16, i16* %6, align 2, !tbaa !5
%8 = sext i16 %7 to i64
%9 = getelementptr inbounds i16, i16* %1, i64 %5
%10 = load i16, i16* %9, align 2, !tbaa !5
%11 = sext i16 %10 to i64
%12 = mul nsw i64 %11, %8
%13 = sub nsw i64 %3, %12
%14 = icmp sgt i64 %2, 1
br i1 %14, label %15, label %37
15: ; preds = %4
%16 = add nsw i64 %2, -2
br label %17
17: ; preds = %15, %17
%18 = phi i64 [ %35, %17 ], [ %16, %15 ]
%19 = phi i64 [ %27, %17 ], [ %13, %15 ]
%20 = getelementptr inbounds i16, i16* %0, i64 %18
%21 = load i16, i16* %20, align 2, !tbaa !5
%22 = sext i16 %21 to i64
%23 = getelementptr inbounds i16, i16* %1, i64 %18
%24 = load i16, i16* %23, align 2, !tbaa !5
%25 = sext i16 %24 to i64
%26 = mul nsw i64 %25, %22
%27 = sub nsw i64 %19, %26
%28 = ashr i64 %27, 16
%29 = mul nsw i64 %28, %25
%30 = lshr i64 %29, 16
%31 = trunc i64 %30 to i16
%32 = add i16 %21, %31
%33 = add nsw i64 %18, 1
%34 = getelementptr inbounds i16, i16* %0, i64 %33
store i16 %32, i16* %34, align 2, !tbaa !5
%35 = add nsw i64 %18, -1
%36 = icmp sgt i64 %18, 0
br i1 %36, label %17, label %37, !llvm.loop !19
37: ; preds = %17, %4
%38 = phi i64 [ %13, %4 ], [ %27, %17 ]
%39 = lshr i64 %38, 16
%40 = trunc i64 %39 to i16
store i16 %40, i16* %0, align 2, !tbaa !5
ret i64 %38
}
; Function Attrs: nofree norecurse nosync nounwind sspstrong uwtable
define dso_local void @iir1(i16* nocapture readonly %0, i16* nocapture readonly %1, i64* nocapture %2, i64* nocapture %3) local_unnamed_addr #0 {
%5 = load i16, i16* %1, align 2, !tbaa !5
%6 = sext i16 %5 to i64
br label %7
7: ; preds = %4, %7
%8 = phi i64 [ 0, %4 ], [ %38, %7 ]
%9 = phi i16* [ %0, %4 ], [ %36, %7 ]
%10 = phi i64 [ %6, %4 ], [ %35, %7 ]
%11 = phi i64* [ %3, %4 ], [ %37, %7 ]
%12 = getelementptr inbounds i16, i16* %9, i64 2
%13 = load i16, i16* %12, align 2, !tbaa !5
%14 = sext i16 %13 to i64
%15 = load i64, i64* %11, align 8, !tbaa !12
%16 = mul nsw i64 %15, %14
%17 = getelementptr inbounds i16, i16* %9, i64 3
%18 = load i16, i16* %17, align 2, !tbaa !5
%19 = sext i16 %18 to i64
%20 = getelementptr inbounds i64, i64* %11, i64 1
%21 = load i64, i64* %20, align 8, !tbaa !12
%22 = mul nsw i64 %21, %19
%23 = add nsw i64 %22, %16
%24 = ashr i64 %23, 15
%25 = add nsw i64 %24, %10
%26 = load i16, i16* %9, align 2, !tbaa !5
%27 = sext i16 %26 to i64
%28 = mul nsw i64 %15, %27
%29 = getelementptr inbounds i16, i16* %9, i64 1
%30 = load i16, i16* %29, align 2, !tbaa !5
%31 = sext i16 %30 to i64
%32 = mul nsw i64 %21, %31
%33 = add nsw i64 %32, %28
%34 = ashr i64 %33, 15
%35 = add nsw i64 %34, %25
store i64 %15, i64* %20, align 8, !tbaa !12
store i64 %25, i64* %11, align 8, !tbaa !12
%36 = getelementptr inbounds i16, i16* %9, i64 4
%37 = getelementptr inbounds i64, i64* %11, i64 2
%38 = add nuw nsw i64 %8, 1
%39 = icmp eq i64 %38, 50
br i1 %39, label %40, label %7, !llvm.loop !20
40: ; preds = %7
store i64 %35, i64* %2, align 8, !tbaa !12
ret void
}
; Function Attrs: nofree norecurse nosync nounwind readnone sspstrong uwtable
define dso_local i64 @codebook(i64 %0, i64 %1, i64 %2, i64 %3, i64 returned %4, i16* nocapture readnone %5, i16 signext %6, i16 signext %7) local_unnamed_addr #2 {
ret i64 %4
}
; Function Attrs: nofree nosync nounwind sspstrong uwtable
define dso_local void @jpegdct(i16* nocapture %0, i16* nocapture readonly %1) local_unnamed_addr #3 {
%3 = alloca [12 x i64], align 16
%4 = bitcast [12 x i64]* %3 to i8*
call void @llvm.lifetime.start.p0i8(i64 96, i8* nonnull %4) #5
%5 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 0
%6 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 3
%7 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 8
%8 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 9
%9 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 1
%10 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 2
%11 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 10
%12 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 11
%13 = getelementptr inbounds i16, i16* %1, i64 10
%14 = getelementptr inbounds i16, i16* %1, i64 9
%15 = getelementptr inbounds i16, i16* %1, i64 11
%16 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 4
%17 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 7
%18 = getelementptr inbounds i16, i16* %1, i64 2
%19 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 5
%20 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 6
%21 = getelementptr inbounds i16, i16* %1, i64 8
%22 = getelementptr inbounds i16, i16* %1, i64 1
%23 = getelementptr inbounds i16, i16* %1, i64 3
%24 = getelementptr inbounds i16, i16* %1, i64 4
%25 = getelementptr inbounds i16, i16* %1, i64 6
%26 = getelementptr inbounds i16, i16* %1, i64 5
%27 = getelementptr inbounds i16, i16* %1, i64 7
br label %28
28: ; preds = %2, %204
%29 = phi i64 [ 13, %2 ], [ %207, %204 ]
%30 = phi i64 [ 0, %2 ], [ %206, %204 ]
%31 = phi i64 [ 8, %2 ], [ %208, %204 ]
%32 = phi i32 [ 1, %2 ], [ %210, %204 ]
%33 = phi i16* [ %0, %2 ], [ %209, %204 ]
%34 = shl nuw nsw i32 %32, 2
%35 = zext i32 %34 to i64
%36 = shl nuw nsw i32 %32, 1
%37 = zext i32 %36 to i64
%38 = mul nuw nsw i32 %32, 6
%39 = zext i32 %38 to i64
%40 = mul nuw nsw i32 %32, 7
%41 = zext i32 %40 to i64
%42 = mul nuw nsw i32 %32, 5
%43 = zext i32 %42 to i64
%44 = mul nuw nsw i32 %32, 3
%45 = zext i32 %44 to i64
%46 = zext i32 %32 to i64
%47 = zext i32 %32 to i64
%48 = zext i32 %32 to i64
%49 = trunc i64 %29 to i32
%50 = trunc i64 %29 to i32
%51 = trunc i64 %29 to i32
%52 = trunc i64 %29 to i32
br label %53
53: ; preds = %28, %73
%54 = phi i16 [ 0, %28 ], [ %201, %73 ]
%55 = phi i16* [ %33, %28 ], [ %202, %73 ]
br label %56
56: ; preds = %53, %56
%57 = phi i64 [ 0, %53 ], [ %71, %56 ]
%58 = mul nuw nsw i64 %57, %47
%59 = getelementptr inbounds i16, i16* %55, i64 %58
%60 = load i16, i16* %59, align 2, !tbaa !5
%61 = sext i16 %60 to i64
%62 = sub nuw nsw i64 7, %57
%63 = mul nsw i64 %62, %48
%64 = getelementptr inbounds i16, i16* %55, i64 %63
%65 = load i16, i16* %64, align 2, !tbaa !5
%66 = sext i16 %65 to i64
%67 = add nsw i64 %66, %61
%68 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 %57
store i64 %67, i64* %68, align 8, !tbaa !12
%69 = sub nsw i64 %61, %66
%70 = getelementptr inbounds [12 x i64], [12 x i64]* %3, i64 0, i64 %62
store i64 %69, i64* %70, align 8, !tbaa !12
%71 = add nuw nsw i64 %57, 1
%72 = icmp eq i64 %71, 4
br i1 %72, label %73, label %56, !llvm.loop !21
73: ; preds = %56
%74 = load i64, i64* %5, align 16, !tbaa !12
%75 = load i64, i64* %6, align 8, !tbaa !12
%76 = add nsw i64 %75, %74
store i64 %76, i64* %7, align 16, !tbaa !12
%77 = sub nsw i64 %74, %75
store i64 %77, i64* %8, align 8, !tbaa !12
%78 = load i64, i64* %9, align 8, !tbaa !12
%79 = load i64, i64* %10, align 16, !tbaa !12
%80 = add nsw i64 %79, %78
store i64 %80, i64* %11, align 16, !tbaa !12
%81 = sub nsw i64 %78, %79
store i64 %81, i64* %12, align 8, !tbaa !12
%82 = add nsw i64 %80, %76
%83 = ashr i64 %82, %30
%84 = trunc i64 %83 to i16
store i16 %84, i16* %55, align 2, !tbaa !5
%85 = sub nsw i64 %76, %80
%86 = ashr i64 %85, %30
%87 = trunc i64 %86 to i16
%88 = getelementptr inbounds i16, i16* %55, i64 %35
store i16 %87, i16* %88, align 2, !tbaa !5
%89 = add nsw i64 %81, %77
%90 = trunc i64 %89 to i32
%91 = shl i32 %90, 16
%92 = ashr exact i32 %91, 16
%93 = load i16, i16* %13, align 2, !tbaa !5
%94 = sext i16 %93 to i32
%95 = mul nsw i32 %92, %94
%96 = sext i32 %95 to i64
store i64 %96, i64* %7, align 16, !tbaa !12
%97 = load i16, i16* %14, align 2, !tbaa !5
%98 = sext i16 %97 to i64
%99 = mul nsw i64 %77, %98
%100 = ashr i64 %99, %29
%101 = add i64 %100, %96
%102 = trunc i64 %101 to i16
%103 = getelementptr inbounds i16, i16* %55, i64 %37
store i16 %102, i16* %103, align 2, !tbaa !5
%104 = load i16, i16* %15, align 2, !tbaa !5
%105 = sext i16 %104 to i64
%106 = mul nsw i64 %81, %105
%107 = ashr i64 %106, %29
%108 = add i64 %107, %96
%109 = trunc i64 %108 to i16
%110 = getelementptr inbounds i16, i16* %55, i64 %39
store i16 %109, i16* %110, align 2, !tbaa !5
%111 = load i64, i64* %16, align 16, !tbaa !12
%112 = load i64, i64* %17, align 8, !tbaa !12
%113 = add nsw i64 %112, %111
%114 = trunc i64 %113 to i32
%115 = shl i32 %114, 16
%116 = ashr exact i32 %115, 16
%117 = load i16, i16* %18, align 2, !tbaa !5
%118 = sext i16 %117 to i32
%119 = mul nsw i32 %116, %118
%120 = sext i32 %119 to i64
store i64 %120, i64* %5, align 16, !tbaa !12
%121 = load i64, i64* %19, align 8, !tbaa !12
%122 = load i64, i64* %20, align 16, !tbaa !12
%123 = add nsw i64 %122, %121
%124 = trunc i64 %123 to i32
%125 = shl i32 %124, 16
%126 = ashr exact i32 %125, 16
%127 = load i16, i16* %1, align 2, !tbaa !5
%128 = sext i16 %127 to i32
%129 = mul nsw i32 %126, %128
%130 = sext i32 %129 to i64
store i64 %130, i64* %9, align 8, !tbaa !12
%131 = add nsw i64 %122, %111
store i64 %131, i64* %10, align 16, !tbaa !12
%132 = add nsw i64 %121, %112
store i64 %132, i64* %6, align 8, !tbaa !12
%133 = add nsw i64 %131, %132
%134 = trunc i64 %133 to i32
%135 = shl i32 %134, 16
%136 = ashr exact i32 %135, 16
%137 = load i16, i16* %21, align 2, !tbaa !5
%138 = sext i16 %137 to i32
%139 = mul nsw i32 %136, %138
%140 = sext i32 %139 to i64
store i64 %140, i64* %7, align 16, !tbaa !12
%141 = trunc i64 %131 to i32
%142 = shl i32 %141, 16
%143 = ashr exact i32 %142, 16
%144 = load i16, i16* %22, align 2, !tbaa !5
%145 = sext i16 %144 to i32
%146 = mul nsw i32 %143, %145
%147 = sext i32 %146 to i64
%148 = add nsw i64 %147, %140
store i64 %148, i64* %10, align 16, !tbaa !12
%149 = trunc i64 %132 to i32
%150 = shl i32 %149, 16
%151 = ashr exact i32 %150, 16
%152 = load i16, i16* %23, align 2, !tbaa !5
%153 = sext i16 %152 to i32
%154 = mul nsw i32 %151, %153
%155 = sext i32 %154 to i64
%156 = add nsw i64 %155, %140
store i64 %156, i64* %6, align 8, !tbaa !12
%157 = load i16, i16* %24, align 2, !tbaa !5
%158 = zext i16 %157 to i64
%159 = mul i64 %111, %158
%160 = add nsw i64 %148, %120
%161 = add i64 %160, %159
%162 = trunc i64 %161 to i32
%163 = shl i32 %162, 16
%164 = ashr exact i32 %163, 16
%165 = ashr i32 %164, %49
%166 = trunc i32 %165 to i16
%167 = getelementptr inbounds i16, i16* %55, i64 %41
store i16 %166, i16* %167, align 2, !tbaa !5
%168 = load i16, i16* %25, align 2, !tbaa !5
%169 = zext i16 %168 to i64
%170 = mul i64 %121, %169
%171 = add nsw i64 %156, %130
%172 = add i64 %171, %170
%173 = trunc i64 %172 to i32
%174 = shl i32 %173, 16
%175 = ashr exact i32 %174, 16
%176 = ashr i32 %175, %50
%177 = trunc i32 %176 to i16
%178 = getelementptr inbounds i16, i16* %55, i64 %43
store i16 %177, i16* %178, align 2, !tbaa !5
%179 = load i16, i16* %26, align 2, !tbaa !5
%180 = zext i16 %179 to i64
%181 = mul i64 %122, %180
%182 = add nsw i64 %148, %130
%183 = add i64 %182, %181
%184 = trunc i64 %183 to i32
%185 = shl i32 %184, 16
%186 = ashr exact i32 %185, 16
%187 = ashr i32 %186, %51
%188 = trunc i32 %187 to i16
%189 = getelementptr inbounds i16, i16* %55, i64 %45
store i16 %188, i16* %189, align 2, !tbaa !5
%190 = load i16, i16* %27, align 2, !tbaa !5
%191 = zext i16 %190 to i64
%192 = mul i64 %112, %191
%193 = add nsw i64 %156, %120
%194 = add i64 %193, %192
%195 = trunc i64 %194 to i32
%196 = shl i32 %195, 16
%197 = ashr exact i32 %196, 16
%198 = ashr i32 %197, %52
%199 = trunc i32 %198 to i16
%200 = getelementptr inbounds i16, i16* %55, i64 %46
store i16 %199, i16* %200, align 2, !tbaa !5
%201 = add nuw nsw i16 %54, 1
%202 = getelementptr inbounds i16, i16* %55, i64 %31
%203 = icmp eq i16 %201, 8
br i1 %203, label %204, label %53, !llvm.loop !22
204: ; preds = %73
%205 = add nuw nsw i32 %32, 7
%206 = add nuw nsw i64 %30, 3
%207 = add nuw nsw i64 %29, 3
%208 = add nsw i64 %31, -7
%209 = getelementptr inbounds i16, i16* %202, i64 -64
%210 = and i32 %205, 65535
%211 = icmp ult i32 %210, 9
br i1 %211, label %28, label %212, !llvm.loop !23
212: ; preds = %204
call void @llvm.lifetime.end.p0i8(i64 96, i8* nonnull %4) #5
ret void
}
; Function Attrs: nofree nosync nounwind sspstrong uwtable
define dso_local i32 @main() local_unnamed_addr #3 {
%1 = alloca [200 x i16], align 16
%2 = alloca [200 x i16], align 16
%3 = alloca [200 x i64], align 16
%4 = bitcast [200 x i16]* %1 to i8*
call void @llvm.lifetime.start.p0i8(i64 400, i8* nonnull %4) #5
call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 16 dereferenceable(400) %4, i8* noundef nonnull align 16 dereferenceable(400) bitcast ([200 x i16]* @__const.main.a to i8*), i64 400, i1 false)
%5 = bitcast [200 x i16]* %2 to i8*
call void @llvm.lifetime.start.p0i8(i64 400, i8* nonnull %5) #5
call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 16 dereferenceable(400) %5, i8* noundef nonnull align 16 dereferenceable(400) bitcast ([200 x i16]* @__const.main.b to i8*), i64 400, i1 false)
%6 = bitcast [200 x i64]* %3 to i8*
call void @llvm.lifetime.start.p0i8(i64 1600, i8* nonnull %6) #5
%7 = getelementptr inbounds [200 x i16], [200 x i16]* %1, i64 0, i64 0
br label %8
8: ; preds = %8, %0
%9 = phi i64 [ 0, %0 ], [ %19, %8 ]
%10 = getelementptr inbounds [200 x i16], [200 x i16]* %2, i64 0, i64 %9
%11 = load i16, i16* %10, align 2, !tbaa !5
%12 = sext i16 %11 to i32
%13 = mul nsw i32 %12, 3
%14 = lshr i32 %13, 15
%15 = getelementptr inbounds [200 x i16], [200 x i16]* %1, i64 0, i64 %9
%16 = load i16, i16* %15, align 2, !tbaa !5
%17 = trunc i32 %14 to i16
%18 = add i16 %16, %17
store i16 %18, i16* %15, align 2, !tbaa !5
%19 = add nuw nsw i64 %9, 1
%20 = icmp eq i64 %19, 150
br i1 %20, label %21, label %8, !llvm.loop !9
21: ; preds = %8
%22 = getelementptr inbounds [200 x i64], [200 x i64]* %3, i64 0, i64 0
%23 = load i64, i64* %22, align 16, !tbaa !12
br label %24
24: ; preds = %24, %21
%25 = phi i64 [ %23, %21 ], [ %34, %24 ]
%26 = phi i64 [ 0, %21 ], [ %35, %24 ]
%27 = getelementptr inbounds [200 x i16], [200 x i16]* %2, i64 0, i64 %26
%28 = load i16, i16* %27, align 2, !tbaa !5
%29 = sext i16 %28 to i64
%30 = getelementptr inbounds [200 x i16], [200 x i16]* %1, i64 0, i64 %26
%31 = load i16, i16* %30, align 2, !tbaa !5
%32 = sext i16 %31 to i64
%33 = mul nsw i64 %32, %29
%34 = add nsw i64 %33, %25
%35 = add nuw nsw i64 %26, 1
%36 = icmp eq i64 %35, 150
br i1 %36, label %37, label %24, !llvm.loop !14
37: ; preds = %24
store i64 %34, i64* %22, align 16, !tbaa !12
br label %38
38: ; preds = %54, %37
%39 = phi i64 [ 0, %37 ], [ %57, %54 ]
br label %40
40: ; preds = %40, %38
%41 = phi i64 [ 0, %38 ], [ %51, %40 ]
%42 = phi i64 [ 0, %38 ], [ %52, %40 ]
%43 = add nuw nsw i64 %42, %39
%44 = getelementptr inbounds [200 x i16], [200 x i16]* %1, i64 0, i64 %43
%45 = load i16, i16* %44, align 2, !tbaa !5
%46 = sext i16 %45 to i64
%47 = getelementptr inbounds [200 x i16], [200 x i16]* %2, i64 0, i64 %42
%48 = load i16, i16* %47, align 2, !tbaa !5
%49 = sext i16 %48 to i64
%50 = mul nsw i64 %49, %46
%51 = add nsw i64 %50, %41
%52 = add nuw nsw i64 %42, 1
%53 = icmp eq i64 %52, 50
br i1 %53, label %54, label %40, !llvm.loop !15
54: ; preds = %40
%55 = ashr i64 %51, 15
%56 = getelementptr inbounds [200 x i64], [200 x i64]* %3, i64 0, i64 %39
store i64 %55, i64* %56, align 8, !tbaa !12
%57 = add nuw nsw i64 %39, 1
%58 = icmp eq i64 %57, 50
br i1 %58, label %59, label %38, !llvm.loop !16
59: ; preds = %54, %99
%60 = phi i64 [ %105, %99 ], [ 0, %54 ]
%61 = getelementptr inbounds [200 x i16], [200 x i16]* %1, i64 0, i64 %60
%62 = load i16, i16* %61, align 4, !tbaa !5
br label %63
63: ; preds = %63, %59
%64 = phi i64 [ 0, %59 ], [ %97, %63 ]
%65 = phi i64 [ 0, %59 ], [ %92, %63 ]
%66 = phi i16 [ %62, %59 ], [ %85, %63 ]
%67 = phi i64 [ 0, %59 ], [ %96, %63 ]
%68 = add nuw nsw i64 %64, %60
%69 = or i64 %68, 1
%70 = getelementptr inbounds [200 x i16], [200 x i16]* %1, i64 0, i64 %69
%71 = load i16, i16* %70, align 2, !tbaa !5
%72 = getelementptr inbounds [200 x i16], [200 x i16]* %2, i64 0, i64 %64
%73 = load i16, i16* %72, align 4, !tbaa !5
%74 = sext i16 %66 to i32
%75 = sext i16 %73 to i32
%76 = mul nsw i32 %75, %74
%77 = sext i32 %76 to i64
%78 = add nsw i64 %65, %77
%79 = sext i16 %71 to i32
%80 = mul nsw i32 %75, %79
%81 = sext i32 %80 to i64
%82 = add nsw i64 %67, %81
%83 = add nuw nsw i64 %68, 2
%84 = getelementptr inbounds [200 x i16], [200 x i16]* %1, i64 0, i64 %83
%85 = load i16, i16* %84, align 4, !tbaa !5
%86 = or i64 %64, 1
%87 = getelementptr inbounds [200 x i16], [200 x i16]* %2, i64 0, i64 %86
%88 = load i16, i16* %87, align 2, !tbaa !5
%89 = sext i16 %88 to i32
%90 = mul nsw i32 %89, %79
%91 = sext i32 %90 to i64
%92 = add nsw i64 %78, %91
%93 = sext i16 %85 to i32
%94 = mul nsw i32 %89, %93
%95 = sext i32 %94 to i64
%96 = add nsw i64 %82, %95
%97 = add nuw nsw i64 %64, 2
%98 = icmp ult i64 %64, 30
br i1 %98, label %63, label %99, !llvm.loop !17
99: ; preds = %63
%100 = ashr i64 %92, 15
%101 = getelementptr inbounds [200 x i64], [200 x i64]* %3, i64 0, i64 %60
store i64 %100, i64* %101, align 16, !tbaa !12
%102 = ashr i64 %96, 15
%103 = or i64 %60, 1
%104 = getelementptr inbounds [200 x i64], [200 x i64]* %3, i64 0, i64 %103
store i64 %102, i64* %104, align 8, !tbaa !12
%105 = add nuw nsw i64 %60, 2
%106 = icmp ult i64 %60, 98
br i1 %106, label %59, label %107, !llvm.loop !18
107: ; preds = %99
%108 = getelementptr inbounds [200 x i16], [200 x i16]* %1, i64 0, i64 99
%109 = load i16, i16* %108, align 2, !tbaa !5
%110 = sext i16 %109 to i64
%111 = getelementptr inbounds [200 x i16], [200 x i16]* %2, i64 0, i64 99
%112 = load i16, i16* %111, align 2, !tbaa !5
%113 = sext i16 %112 to i64
%114 = mul nsw i64 %113, %110
%115 = sub nsw i64 43690, %114
br label %116
116: ; preds = %116, %107
%117 = phi i64 [ %134, %116 ], [ 98, %107 ]
%118 = phi i64 [ %126, %116 ], [ %115, %107 ]
%119 = getelementptr inbounds [200 x i16], [200 x i16]* %1, i64 0, i64 %117
%120 = load i16, i16* %119, align 2, !tbaa !5
%121 = sext i16 %120 to i64
%122 = getelementptr inbounds [200 x i16], [200 x i16]* %2, i64 0, i64 %117
%123 = load i16, i16* %122, align 2, !tbaa !5
%124 = sext i16 %123 to i64
%125 = mul nsw i64 %124, %121
%126 = sub nsw i64 %118, %125
%127 = ashr i64 %126, 16
%128 = mul nsw i64 %127, %124
%129 = lshr i64 %128, 16
%130 = trunc i64 %129 to i16
%131 = add i16 %120, %130
%132 = add nuw nsw i64 %117, 1
%133 = getelementptr inbounds [200 x i16], [200 x i16]* %1, i64 0, i64 %132
store i16 %131, i16* %133, align 2, !tbaa !5
%134 = add nsw i64 %117, -1
%135 = icmp eq i64 %117, 0
br i1 %135, label %136, label %116, !llvm.loop !19
136: ; preds = %116
%137 = getelementptr inbounds [200 x i16], [200 x i16]* %2, i64 0, i64 0
%138 = lshr i64 %126, 16
%139 = trunc i64 %138 to i16
store i16 %139, i16* %7, align 16, !tbaa !5
%140 = load i16, i16* %137, align 16, !tbaa !5
%141 = sext i16 %140 to i64
br label %142
142: ; preds = %142, %136
%143 = phi i64 [ 0, %136 ], [ %173, %142 ]
%144 = phi i16* [ %7, %136 ], [ %171, %142 ]
%145 = phi i64 [ %141, %136 ], [ %170, %142 ]
%146 = phi i64* [ %22, %136 ], [ %172, %142 ]
%147 = getelementptr inbounds i16, i16* %144, i64 2
%148 = load i16, i16* %147, align 2, !tbaa !5
%149 = sext i16 %148 to i64
%150 = load i64, i64* %146, align 8, !tbaa !12
%151 = mul nsw i64 %150, %149
%152 = getelementptr inbounds i16, i16* %144, i64 3
%153 = load i16, i16* %152, align 2, !tbaa !5
%154 = sext i16 %153 to i64
%155 = getelementptr inbounds i64, i64* %146, i64 1
%156 = load i64, i64* %155, align 8, !tbaa !12
%157 = mul nsw i64 %156, %154
%158 = add nsw i64 %157, %151
%159 = ashr i64 %158, 15
%160 = add nsw i64 %159, %145
%161 = load i16, i16* %144, align 2, !tbaa !5
%162 = sext i16 %161 to i64
%163 = mul nsw i64 %150, %162
%164 = getelementptr inbounds i16, i16* %144, i64 1
%165 = load i16, i16* %164, align 2, !tbaa !5
%166 = sext i16 %165 to i64
%167 = mul nsw i64 %156, %166
%168 = add nsw i64 %167, %163
%169 = ashr i64 %168, 15
%170 = add nsw i64 %169, %160
store i64 %150, i64* %155, align 8, !tbaa !12
store i64 %160, i64* %146, align 8, !tbaa !12
%171 = getelementptr inbounds i16, i16* %144, i64 4
%172 = getelementptr inbounds i64, i64* %146, i64 2
%173 = add nuw nsw i64 %143, 1
%174 = icmp eq i64 %173, 50
br i1 %174, label %175, label %142, !llvm.loop !20
175: ; preds = %142
%176 = getelementptr inbounds [200 x i64], [200 x i64]* %3, i64 0, i64 100
store i64 %170, i64* %176, align 16, !tbaa !12
call void @jpegdct(i16* nonnull %7, i16* nonnull %137)
call void @llvm.lifetime.end.p0i8(i64 1600, i8* nonnull %6) #5
call void @llvm.lifetime.end.p0i8(i64 400, i8* nonnull %5) #5
call void @llvm.lifetime.end.p0i8(i64 400, i8* nonnull %4) #5
ret i32 0
}
; Function Attrs: argmemonly mustprogress nofree nounwind willreturn
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #4
attributes #0 = { nofree norecurse nosync nounwind sspstrong uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { argmemonly mustprogress nofree nosync nounwind willreturn }
attributes #2 = { nofree norecurse nosync nounwind readnone sspstrong uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nofree nosync nounwind sspstrong uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { argmemonly mustprogress nofree nounwind willreturn }
attributes #5 = { nounwind }
!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}
!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 7, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 1}
!4 = !{!"clang version 13.0.1"}
!5 = !{!6, !6, i64 0}
!6 = !{!"short", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10, !11}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!"llvm.loop.unroll.disable"}
!12 = !{!13, !13, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = distinct !{!14, !10, !11}
!15 = distinct !{!15, !10, !11}
!16 = distinct !{!16, !10, !11}
!17 = distinct !{!17, !10, !11}
!18 = distinct !{!18, !10, !11}
!19 = distinct !{!19, !10, !11}
!20 = distinct !{!20, !10, !11}
!21 = distinct !{!21, !10, !11}
!22 = distinct !{!22, !10, !11}
!23 = distinct !{!23, !10, !11}