384 lines
14 KiB
LLVM
384 lines
14 KiB
LLVM
|
; 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}
|