RTSA-lab01-CacheAnalysis/test/fft1.ll

384 lines
14 KiB
LLVM
Raw Permalink Normal View History

2022-04-19 10:56:42 +02:00
; ModuleID = 'fft1.c'
source_filename = "fft1.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"
@ai = dso_local local_unnamed_addr global [8 x double] zeroinitializer, align 16
@ar = dso_local local_unnamed_addr global [8 x double] zeroinitializer, align 16
; Function Attrs: nofree norecurse nosync nounwind sspstrong uwtable
define dso_local void @main() local_unnamed_addr #0 {
br label %1
1: ; preds = %0, %47
%2 = phi i64 [ 0, %0 ], [ %50, %47 ]
%3 = trunc i64 %2 to i32
%4 = sitofp i32 %3 to double
%5 = fmul double %4, 6.283180e+00
%6 = fmul double %5, 1.250000e-01
%7 = fsub double 0x3FF921F9F01B866E, %6
%8 = fcmp ogt double %7, 6.283180e+00
br i1 %8, label %12, label %9
9: ; preds = %12, %1
%10 = phi double [ %7, %1 ], [ %14, %12 ]
%11 = fcmp olt double %10, -6.283180e+00
br i1 %11, label %16, label %20
12: ; preds = %1, %12
%13 = phi double [ %14, %12 ], [ %7, %1 ]
%14 = fadd double %13, -6.283180e+00
%15 = fcmp ogt double %14, 6.283180e+00
br i1 %15, label %12, label %9, !llvm.loop !5
16: ; preds = %9, %16
%17 = phi double [ %18, %16 ], [ %10, %9 ]
%18 = fadd double %17, 6.283180e+00
%19 = fcmp olt double %18, -6.283180e+00
br i1 %19, label %16, label %20, !llvm.loop !8
20: ; preds = %16, %9
%21 = phi double [ %10, %9 ], [ %18, %16 ]
%22 = fneg double %21
%23 = fmul double %21, %22
%24 = fmul double %21, %23
%25 = fdiv double %24, 6.000000e+00
%26 = fadd double %21, %25
%27 = fcmp ult double %25, 0.000000e+00
%28 = fneg double %25
%29 = select i1 %27, double %28, double %25
%30 = fcmp ult double %29, 1.000000e-05
br i1 %30, label %47, label %31
31: ; preds = %20, %31
%32 = phi i32 [ %42, %31 ], [ 2, %20 ]
%33 = phi double [ %40, %31 ], [ %25, %20 ]
%34 = phi double [ %41, %31 ], [ %26, %20 ]
%35 = fmul double %23, %33
%36 = sitofp i32 %32 to double
%37 = fmul double %36, 2.000000e+00
%38 = fadd double %37, 1.000000e+00
%39 = fmul double %37, %38
%40 = fdiv double %35, %39
%41 = fadd double %34, %40
%42 = add nuw nsw i32 %32, 1
%43 = fcmp ult double %40, 0.000000e+00
%44 = fneg double %40
%45 = select i1 %43, double %44, double %40
%46 = fcmp ult double %45, 1.000000e-05
br i1 %46, label %47, label %31, !llvm.loop !9
47: ; preds = %31, %20
%48 = phi double [ %26, %20 ], [ %41, %31 ]
%49 = getelementptr inbounds [8 x double], [8 x double]* @ar, i64 0, i64 %2
store double %48, double* %49, align 8, !tbaa !10
%50 = add nuw nsw i64 %2, 1
%51 = icmp eq i64 %50, 8
br i1 %51, label %52, label %1, !llvm.loop !14
52: ; preds = %47
%53 = call i32 @fft1(i32 8, i32 0)
%54 = call i32 @fft1(i32 8, i32 1)
ret void
}
; Function Attrs: nofree norecurse nosync nounwind sspstrong uwtable
define dso_local i32 @fft1(i32 %0, i32 %1) local_unnamed_addr #0 {
%3 = icmp slt i32 %0, 2
br i1 %3, label %197, label %4
4: ; preds = %2
%5 = sitofp i32 %0 to double
%6 = add nsw i32 %0, -64
%7 = sitofp i32 %6 to double
%8 = icmp slt i32 %0, 64
%9 = fneg double %7
%10 = select i1 %8, double %9, double %7
%11 = fcmp ogt double %10, 0x3EB0C6F7A0B5ED8D
br i1 %11, label %197, label %12
12: ; preds = %4
%13 = icmp eq i32 %1, 1
%14 = sext i32 %0 to i64
br label %19
15: ; preds = %150
%16 = icmp sgt i32 %0, 1
br i1 %16, label %17, label %181
17: ; preds = %15
%18 = zext i32 %0 to i64
br label %153
19: ; preds = %12, %150
%20 = phi i32 [ 0, %12 ], [ %151, %150 ]
%21 = phi i32 [ %0, %12 ], [ %22, %150 ]
%22 = sdiv i32 %21, 2
%23 = sitofp i32 %22 to double
%24 = fdiv double 3.141590e+00, %23
%25 = icmp sgt i32 %21, %0
%26 = icmp sgt i32 %21, 1
br i1 %26, label %27, label %150
27: ; preds = %19
%28 = sext i32 %21 to i64
br label %29
29: ; preds = %27, %147
%30 = phi i32 [ %148, %147 ], [ 0, %27 ]
%31 = sitofp i32 %30 to double
%32 = fmul double %24, %31
%33 = fsub double 0x3FF921F9F01B866E, %32
%34 = fcmp ogt double %33, 6.283180e+00
br i1 %34, label %38, label %35
35: ; preds = %38, %29
%36 = phi double [ %33, %29 ], [ %40, %38 ]
%37 = fcmp olt double %36, -6.283180e+00
br i1 %37, label %42, label %46
38: ; preds = %29, %38
%39 = phi double [ %40, %38 ], [ %33, %29 ]
%40 = fadd double %39, -6.283180e+00
%41 = fcmp ogt double %40, 6.283180e+00
br i1 %41, label %38, label %35, !llvm.loop !5
42: ; preds = %35, %42
%43 = phi double [ %44, %42 ], [ %36, %35 ]
%44 = fadd double %43, 6.283180e+00
%45 = fcmp olt double %44, -6.283180e+00
br i1 %45, label %42, label %46, !llvm.loop !8
46: ; preds = %42, %35
%47 = phi double [ %36, %35 ], [ %44, %42 ]
%48 = fneg double %47
%49 = fmul double %47, %48
%50 = fmul double %47, %49
%51 = fdiv double %50, 6.000000e+00
%52 = fadd double %47, %51
%53 = fcmp ult double %51, 0.000000e+00
%54 = fneg double %51
%55 = select i1 %53, double %54, double %51
%56 = fcmp ult double %55, 1.000000e-05
br i1 %56, label %73, label %57
57: ; preds = %46, %57
%58 = phi i32 [ %68, %57 ], [ 2, %46 ]
%59 = phi double [ %66, %57 ], [ %51, %46 ]
%60 = phi double [ %67, %57 ], [ %52, %46 ]
%61 = fmul double %49, %59
%62 = sitofp i32 %58 to double
%63 = fmul double %62, 2.000000e+00
%64 = fadd double %63, 1.000000e+00
%65 = fmul double %63, %64
%66 = fdiv double %61, %65
%67 = fadd double %60, %66
%68 = add nuw nsw i32 %58, 1
%69 = fcmp ult double %66, 0.000000e+00
%70 = fneg double %66
%71 = select i1 %69, double %70, double %66
%72 = fcmp ult double %71, 1.000000e-05
br i1 %72, label %73, label %57, !llvm.loop !9
73: ; preds = %57, %46
%74 = phi double [ %52, %46 ], [ %67, %57 ]
%75 = fcmp ogt double %32, 6.283180e+00
br i1 %75, label %79, label %76
76: ; preds = %79, %73
%77 = phi double [ %32, %73 ], [ %81, %79 ]
%78 = fcmp olt double %77, -6.283180e+00
br i1 %78, label %83, label %87
79: ; preds = %73, %79
%80 = phi double [ %81, %79 ], [ %32, %73 ]
%81 = fadd double %80, -6.283180e+00
%82 = fcmp ogt double %81, 6.283180e+00
br i1 %82, label %79, label %76, !llvm.loop !5
83: ; preds = %76, %83
%84 = phi double [ %85, %83 ], [ %77, %76 ]
%85 = fadd double %84, 6.283180e+00
%86 = fcmp olt double %85, -6.283180e+00
br i1 %86, label %83, label %87, !llvm.loop !8
87: ; preds = %83, %76
%88 = phi double [ %77, %76 ], [ %85, %83 ]
%89 = fneg double %88
%90 = fmul double %88, %89
%91 = fmul double %88, %90
%92 = fdiv double %91, 6.000000e+00
%93 = fadd double %88, %92
%94 = fcmp ult double %92, 0.000000e+00
%95 = fneg double %92
%96 = select i1 %94, double %95, double %92
%97 = fcmp ult double %96, 1.000000e-05
br i1 %97, label %114, label %98
98: ; preds = %87, %98
%99 = phi i32 [ %109, %98 ], [ 2, %87 ]
%100 = phi double [ %107, %98 ], [ %92, %87 ]
%101 = phi double [ %108, %98 ], [ %93, %87 ]
%102 = fmul double %90, %100
%103 = sitofp i32 %99 to double
%104 = fmul double %103, 2.000000e+00
%105 = fadd double %104, 1.000000e+00
%106 = fmul double %104, %105
%107 = fdiv double %102, %106
%108 = fadd double %101, %107
%109 = add nuw nsw i32 %99, 1
%110 = fcmp ult double %107, 0.000000e+00
%111 = fneg double %107
%112 = select i1 %110, double %111, double %107
%113 = fcmp ult double %112, 1.000000e-05
br i1 %113, label %114, label %98, !llvm.loop !9
114: ; preds = %98, %87
%115 = phi double [ %93, %87 ], [ %108, %98 ]
%116 = fneg double %115
%117 = select i1 %13, double %115, double %116
%118 = sub nsw i32 %30, %21
br i1 %25, label %147, label %119
119: ; preds = %114, %119
%120 = phi i64 [ %144, %119 ], [ %28, %114 ]
%121 = phi i32 [ %145, %119 ], [ %21, %114 ]
%122 = add nsw i32 %121, %118
%123 = add nsw i32 %122, %22
%124 = sext i32 %122 to i64
%125 = getelementptr inbounds [8 x double], [8 x double]* @ar, i64 0, i64 %124
%126 = load double, double* %125, align 8, !tbaa !10
%127 = sext i32 %123 to i64
%128 = getelementptr inbounds [8 x double], [8 x double]* @ar, i64 0, i64 %127
%129 = load double, double* %128, align 8, !tbaa !10
%130 = getelementptr inbounds [8 x double], [8 x double]* @ai, i64 0, i64 %124
%131 = load double, double* %130, align 8, !tbaa !10
%132 = getelementptr inbounds [8 x double], [8 x double]* @ai, i64 0, i64 %127
%133 = load double, double* %132, align 8, !tbaa !10
%134 = fsub double %126, %129
%135 = fsub double %131, %133
%136 = fadd double %126, %129
store double %136, double* %125, align 8, !tbaa !10
%137 = fadd double %131, %133
store double %137, double* %130, align 8, !tbaa !10
%138 = fmul double %74, %134
%139 = fmul double %117, %135
%140 = fsub double %138, %139
store double %140, double* %128, align 8, !tbaa !10
%141 = fmul double %74, %135
%142 = fmul double %117, %134
%143 = fadd double %142, %141
store double %143, double* %132, align 8, !tbaa !10
%144 = add i64 %120, %28
%145 = add nsw i32 %121, %21
%146 = icmp sgt i64 %144, %14
br i1 %146, label %147, label %119, !llvm.loop !15
147: ; preds = %119, %114
%148 = add nuw nsw i32 %30, 1
%149 = icmp eq i32 %148, %22
br i1 %149, label %150, label %29, !llvm.loop !16
150: ; preds = %147, %19
%151 = add nuw nsw i32 %20, 1
%152 = icmp eq i32 %151, 6
br i1 %152, label %15, label %19, !llvm.loop !17
153: ; preds = %17, %177
%154 = phi i64 [ 1, %17 ], [ %179, %177 ]
%155 = phi i32 [ 1, %17 ], [ %178, %177 ]
%156 = sext i32 %155 to i64
%157 = icmp slt i64 %154, %156
br i1 %157, label %158, label %170
158: ; preds = %153
%159 = add nsw i32 %155, -1
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds [8 x double], [8 x double]* @ar, i64 0, i64 %160
%162 = load double, double* %161, align 8, !tbaa !10
%163 = getelementptr inbounds [8 x double], [8 x double]* @ai, i64 0, i64 %160
%164 = load double, double* %163, align 8, !tbaa !10
%165 = add nsw i64 %154, -1
%166 = getelementptr inbounds [8 x double], [8 x double]* @ar, i64 0, i64 %165
%167 = load double, double* %166, align 8, !tbaa !10
store double %167, double* %161, align 8, !tbaa !10
%168 = getelementptr inbounds [8 x double], [8 x double]* @ai, i64 0, i64 %165
%169 = load double, double* %168, align 8, !tbaa !10
store double %169, double* %163, align 8, !tbaa !10
store double %162, double* %166, align 8, !tbaa !10
store double %164, double* %168, align 8, !tbaa !10
br label %170
170: ; preds = %158, %153
br label %171
171: ; preds = %170, %171
%172 = phi i32 [ %174, %171 ], [ %0, %170 ]
%173 = phi i32 [ %176, %171 ], [ %155, %170 ]
%174 = sdiv i32 %172, 2
%175 = icmp sgt i32 %173, %174
%176 = sub nsw i32 %173, %174
br i1 %175, label %171, label %177, !llvm.loop !18
177: ; preds = %171
%178 = add nsw i32 %173, %174
%179 = add nuw nsw i64 %154, 1
%180 = icmp eq i64 %179, %18
br i1 %180, label %181, label %153, !llvm.loop !19
181: ; preds = %177, %15
%182 = icmp ne i32 %1, 0
%183 = icmp sgt i32 %0, 0
%184 = select i1 %182, i1 %183, i1 false
br i1 %184, label %185, label %197
185: ; preds = %181
%186 = zext i32 %0 to i64
br label %187
187: ; preds = %185, %187
%188 = phi i64 [ 0, %185 ], [ %195, %187 ]
%189 = getelementptr inbounds [8 x double], [8 x double]* @ar, i64 0, i64 %188
%190 = load double, double* %189, align 8, !tbaa !10
%191 = fdiv double %190, %5
store double %191, double* %189, align 8, !tbaa !10
%192 = getelementptr inbounds [8 x double], [8 x double]* @ai, i64 0, i64 %188
%193 = load double, double* %192, align 8, !tbaa !10
%194 = fdiv double %193, %5
store double %194, double* %192, align 8, !tbaa !10
%195 = add nuw nsw i64 %188, 1
%196 = icmp eq i64 %195, %186
br i1 %196, label %197, label %187, !llvm.loop !20
197: ; preds = %187, %181, %4, %2
%198 = phi i32 [ 999, %2 ], [ 1, %4 ], [ 0, %181 ], [ 0, %187 ]
ret i32 %198
}
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" }
!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 = distinct !{!5, !6, !7}
!6 = !{!"llvm.loop.mustprogress"}
!7 = !{!"llvm.loop.unroll.disable"}
!8 = distinct !{!8, !6, !7}
!9 = distinct !{!9, !6, !7}
!10 = !{!11, !11, i64 0}
!11 = !{!"double", !12, i64 0}
!12 = !{!"omnipotent char", !13, i64 0}
!13 = !{!"Simple C/C++ TBAA"}
!14 = distinct !{!14, !6, !7}
!15 = distinct !{!15, !6, !7}
!16 = distinct !{!16, !6, !7}
!17 = distinct !{!17, !6, !7}
!18 = distinct !{!18, !6, !7}
!19 = distinct !{!19, !6, !7}
!20 = distinct !{!20, !6, !7}