Skip to content

Instantly share code, notes, and snippets.

@kwk
Last active September 1, 2023 09:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kwk/d7a50959dc7bbe65ca5bccd0567718fd to your computer and use it in GitHub Desktop.
Save kwk/d7a50959dc7bbe65ca5bccd0567718fd to your computer and use it in GitHub Desktop.
Is create_arrays_heap function ever used?
; ModuleID = '<stdin>'
source_filename = "<stdin>"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @create_arrays_heap(double %beta, ptr nocapture readonly %A, ptr nocapture %B) local_unnamed_addr #0 {
entry:
%beta.s2a = alloca double, align 8
%malloccall = tail call ptr @malloc(i64 2162688)
%malloccall1 = tail call ptr @malloc(i64 432537600000)
%malloccall2 = tail call ptr @malloc(i64 2162688)
br label %polly.split_new_and_old
polly.split_new_and_old: ; preds = %entry
%polly.access.mul.A = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 1055, i64 1024)
%polly.access.mul.A.obit = extractvalue { i64, i1 } %polly.access.mul.A, 1
%polly.overflow.state = or i1 false, %polly.access.mul.A.obit
%polly.access.mul.A.res = extractvalue { i64, i1 } %polly.access.mul.A, 0
%polly.access.add.A = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %polly.access.mul.A.res, i64 1024)
%polly.access.add.A.obit = extractvalue { i64, i1 } %polly.access.add.A, 1
%polly.overflow.state3 = or i1 %polly.overflow.state, %polly.access.add.A.obit
%polly.access.add.A.res = extractvalue { i64, i1 } %polly.access.add.A, 0
%polly.access.A = getelementptr double, ptr %A, i64 %polly.access.add.A.res
%polly.access.mul.B = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 0, i64 1056)
%polly.access.mul.B.obit = extractvalue { i64, i1 } %polly.access.mul.B, 1
%polly.overflow.state4 = or i1 %polly.overflow.state3, %polly.access.mul.B.obit
%polly.access.mul.B.res = extractvalue { i64, i1 } %polly.access.mul.B, 0
%polly.access.add.B = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %polly.access.mul.B.res, i64 0)
%polly.access.add.B.obit = extractvalue { i64, i1 } %polly.access.add.B, 1
%polly.overflow.state5 = or i1 %polly.overflow.state4, %polly.access.add.B.obit
%polly.access.add.B.res = extractvalue { i64, i1 } %polly.access.add.B, 0
%polly.access.B = getelementptr double, ptr %B, i64 %polly.access.add.B.res
%0 = ptrtoint ptr %polly.access.A to i64
%1 = ptrtoint ptr %polly.access.B to i64
%2 = icmp ule i64 %0, %1
%polly.access.mul.B6 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 1055, i64 1056)
%polly.access.mul.B.obit7 = extractvalue { i64, i1 } %polly.access.mul.B6, 1
%polly.overflow.state8 = or i1 %polly.overflow.state5, %polly.access.mul.B.obit7
%polly.access.mul.B.res9 = extractvalue { i64, i1 } %polly.access.mul.B6, 0
%polly.access.add.B10 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %polly.access.mul.B.res9, i64 1056)
%polly.access.add.B.obit11 = extractvalue { i64, i1 } %polly.access.add.B10, 1
%polly.overflow.state12 = or i1 %polly.overflow.state8, %polly.access.add.B.obit11
%polly.access.add.B.res13 = extractvalue { i64, i1 } %polly.access.add.B10, 0
%polly.access.B14 = getelementptr double, ptr %B, i64 %polly.access.add.B.res13
%polly.access.mul.A15 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 0, i64 1024)
%polly.access.mul.A.obit16 = extractvalue { i64, i1 } %polly.access.mul.A15, 1
%polly.overflow.state17 = or i1 %polly.overflow.state12, %polly.access.mul.A.obit16
%polly.access.mul.A.res18 = extractvalue { i64, i1 } %polly.access.mul.A15, 0
%polly.access.add.A19 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %polly.access.mul.A.res18, i64 0)
%polly.access.add.A.obit20 = extractvalue { i64, i1 } %polly.access.add.A19, 1
%polly.overflow.state21 = or i1 %polly.overflow.state17, %polly.access.add.A.obit20
%polly.access.add.A.res22 = extractvalue { i64, i1 } %polly.access.add.A19, 0
%polly.access.A23 = getelementptr double, ptr %A, i64 %polly.access.add.A.res22
%3 = ptrtoint ptr %polly.access.B14 to i64
%4 = ptrtoint ptr %polly.access.A23 to i64
%5 = icmp ule i64 %3, %4
%6 = or i1 %2, %5
%7 = and i1 true, %6
%polly.rtc.overflown = xor i1 %polly.overflow.state21, true
%polly.rtc.result = and i1 %7, %polly.rtc.overflown
br i1 %polly.rtc.result, label %polly.start, label %for.cond1.preheader.pre_entry_bb
for.cond1.preheader.pre_entry_bb: ; preds = %polly.split_new_and_old
br label %for.cond1.preheader
for.cond1.preheader: ; preds = %for.cond1.preheader.pre_entry_bb, %for.inc16
%indvars.iv35 = phi i64 [ %indvars.iv.next36, %for.inc16 ], [ 0, %for.cond1.preheader.pre_entry_bb ]
br label %for.cond4.preheader
for.cond4.preheader: ; preds = %for.inc13, %for.cond1.preheader
%indvars.iv32 = phi i64 [ 0, %for.cond1.preheader ], [ %indvars.iv.next33, %for.inc13 ]
%arrayidx12 = getelementptr inbounds [1056 x double], ptr %B, i64 %indvars.iv35, i64 %indvars.iv32
br label %for.body6
for.body6: ; preds = %for.body6, %for.cond4.preheader
%indvars.iv = phi i64 [ 0, %for.cond4.preheader ], [ %indvars.iv.next.3, %for.body6 ]
%arrayidx8 = getelementptr inbounds [1024 x double], ptr %A, i64 %indvars.iv35, i64 %indvars.iv
%8 = load double, ptr %arrayidx8, align 8
%mul = fmul double %8, %beta
store double %mul, ptr %arrayidx12, align 8
%indvars.iv.next = or i64 %indvars.iv, 1
%arrayidx8.1 = getelementptr inbounds [1024 x double], ptr %A, i64 %indvars.iv35, i64 %indvars.iv.next
%9 = load double, ptr %arrayidx8.1, align 8
%mul.1 = fmul double %9, %beta
store double %mul.1, ptr %arrayidx12, align 8
%indvars.iv.next.1 = or i64 %indvars.iv, 2
%arrayidx8.2 = getelementptr inbounds [1024 x double], ptr %A, i64 %indvars.iv35, i64 %indvars.iv.next.1
%10 = load double, ptr %arrayidx8.2, align 8
%mul.2 = fmul double %10, %beta
store double %mul.2, ptr %arrayidx12, align 8
%indvars.iv.next.2 = or i64 %indvars.iv, 3
%arrayidx8.3 = getelementptr inbounds [1024 x double], ptr %A, i64 %indvars.iv35, i64 %indvars.iv.next.2
%11 = load double, ptr %arrayidx8.3, align 8
%mul.3 = fmul double %11, %beta
store double %mul.3, ptr %arrayidx12, align 8
%indvars.iv.next.3 = add nsw i64 %indvars.iv, 4
%exitcond.3 = icmp eq i64 %indvars.iv.next.3, 1024
br i1 %exitcond.3, label %for.inc13, label %for.body6
for.inc13: ; preds = %for.body6
%indvars.iv.next33 = add nuw nsw i64 %indvars.iv32, 1
%exitcond34 = icmp eq i64 %indvars.iv.next33, 1056
br i1 %exitcond34, label %for.inc16, label %for.cond4.preheader
for.inc16: ; preds = %for.inc13
%indvars.iv.next36 = add nuw nsw i64 %indvars.iv35, 1
%exitcond37 = icmp eq i64 %indvars.iv.next36, 1056
br i1 %exitcond37, label %polly.merge_new_and_old, label %for.cond1.preheader
polly.merge_new_and_old: ; preds = %polly.exiting, %for.inc16
br label %for.end18
for.end18: ; preds = %polly.merge_new_and_old
ret void
polly.start: ; preds = %polly.split_new_and_old
store double %beta, ptr %beta.s2a, align 8
br label %polly.loop_preheader
polly.loop_exit: ; preds = %polly.loop_exit26
br label %polly.exiting
polly.exiting: ; preds = %polly.loop_exit
tail call void @free(ptr %malloccall)
tail call void @free(ptr %malloccall1)
tail call void @free(ptr %malloccall2)
br label %polly.merge_new_and_old
polly.loop_header: ; preds = %polly.loop_exit26, %polly.loop_preheader
%polly.indvar = phi i64 [ 0, %polly.loop_preheader ], [ %polly.indvar_next, %polly.loop_exit26 ]
br label %polly.loop_preheader25
polly.loop_exit26: ; preds = %polly.loop_exit32
%polly.indvar_next = add nsw i64 %polly.indvar, 1
%polly.loop_cond = icmp sle i64 %polly.indvar_next, 1055
br i1 %polly.loop_cond, label %polly.loop_header, label %polly.loop_exit
polly.loop_preheader: ; preds = %polly.start
br label %polly.loop_header
polly.loop_header24: ; preds = %polly.loop_exit32, %polly.loop_preheader25
%polly.indvar27 = phi i64 [ 0, %polly.loop_preheader25 ], [ %polly.indvar_next28, %polly.loop_exit32 ]
br label %polly.loop_preheader31
polly.loop_exit32: ; preds = %polly.stmt.for.body6
%polly.indvar_next28 = add nsw i64 %polly.indvar27, 1
%polly.loop_cond29 = icmp sle i64 %polly.indvar_next28, 1055
br i1 %polly.loop_cond29, label %polly.loop_header24, label %polly.loop_exit26
polly.loop_preheader25: ; preds = %polly.loop_header
%12 = mul nuw nsw i64 %polly.indvar, 8448
%scevgep = getelementptr i8, ptr %B, i64 %12
br label %polly.loop_header24
polly.loop_header30: ; preds = %polly.stmt.for.body6, %polly.loop_preheader31
%polly.indvar33 = phi i64 [ 0, %polly.loop_preheader31 ], [ %polly.indvar_next34, %polly.stmt.for.body6 ]
br label %polly.stmt.for.body6
polly.stmt.for.body6: ; preds = %polly.loop_header30
%beta.s2a.reload = load double, ptr %beta.s2a, align 8
%polly.access.mul.malloccall1 = mul nsw i64 %polly.indvar, 200000
%13 = mul nsw i64 4, %polly.indvar33
%polly.access.add.malloccall1 = add nsw i64 %polly.access.mul.malloccall1, %13
%polly.access.malloccall1 = getelementptr double, ptr %malloccall1, i64 %polly.access.add.malloccall1
%_p_scalar_ = load double, ptr %polly.access.malloccall1, align 8, !alias.scope !0, !noalias !3
%p_mul = fmul double %_p_scalar_, %beta.s2a.reload
store double %p_mul, ptr %scevgep36, align 8, !alias.scope !8, !noalias !9
%polly.access.mul.malloccall137 = mul nsw i64 %polly.indvar, 200000
%14 = mul nsw i64 4, %polly.indvar33
%15 = add nsw i64 %14, 1
%polly.access.add.malloccall138 = add nsw i64 %polly.access.mul.malloccall137, %15
%polly.access.malloccall139 = getelementptr double, ptr %malloccall1, i64 %polly.access.add.malloccall138
%_p_scalar_40 = load double, ptr %polly.access.malloccall139, align 8, !alias.scope !0, !noalias !3
%p_mul.1 = fmul double %_p_scalar_40, %beta.s2a.reload
store double %p_mul.1, ptr %scevgep36, align 8, !alias.scope !8, !noalias !9
%polly.access.mul.malloccall141 = mul nsw i64 %polly.indvar, 200000
%16 = mul nsw i64 4, %polly.indvar33
%17 = add nsw i64 %16, 2
%polly.access.add.malloccall142 = add nsw i64 %polly.access.mul.malloccall141, %17
%polly.access.malloccall143 = getelementptr double, ptr %malloccall1, i64 %polly.access.add.malloccall142
%_p_scalar_44 = load double, ptr %polly.access.malloccall143, align 8, !alias.scope !0, !noalias !3
%p_mul.2 = fmul double %_p_scalar_44, %beta.s2a.reload
store double %p_mul.2, ptr %scevgep36, align 8, !alias.scope !8, !noalias !9
%polly.access.mul.malloccall145 = mul nsw i64 %polly.indvar, 200000
%18 = mul nsw i64 4, %polly.indvar33
%19 = add nsw i64 %18, 3
%polly.access.add.malloccall146 = add nsw i64 %polly.access.mul.malloccall145, %19
%polly.access.malloccall147 = getelementptr double, ptr %malloccall1, i64 %polly.access.add.malloccall146
%_p_scalar_48 = load double, ptr %polly.access.malloccall147, align 8, !alias.scope !0, !noalias !3
%p_mul.3 = fmul double %_p_scalar_48, %beta.s2a.reload
store double %p_mul.3, ptr %scevgep36, align 8, !alias.scope !8, !noalias !9
%polly.indvar_next34 = add nsw i64 %polly.indvar33, 1
%polly.loop_cond35 = icmp sle i64 %polly.indvar_next34, 255
br i1 %polly.loop_cond35, label %polly.loop_header30, label %polly.loop_exit32
polly.loop_preheader31: ; preds = %polly.loop_header24
%20 = shl nuw nsw i64 %polly.indvar27, 3
%scevgep36 = getelementptr i8, ptr %scevgep, i64 %20
br label %polly.loop_header30
}
declare noalias ptr @malloc(i64)
declare void @free(ptr)
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.smul.with.overflow.i64(i64, i64) #1
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.sadd.with.overflow.i64(i64, i64) #1
attributes #0 = { "polly-optimized" }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
!0 = !{!1}
!1 = distinct !{!1, !2, !"polly.alias.scope.E"}
!2 = distinct !{!2, !"polly.alias.scope.domain"}
!3 = !{!4, !5, !6, !7}
!4 = distinct !{!4, !2, !"polly.alias.scope.MemRef_A"}
!5 = distinct !{!5, !2, !"polly.alias.scope.MemRef_B"}
!6 = distinct !{!6, !2, !"polly.alias.scope.D"}
!7 = distinct !{!7, !2, !"polly.alias.scope.F"}
!8 = !{!5}
!9 = !{!4, !6, !1, !7}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment