Skip to content

Instantly share code, notes, and snippets.

@tmcdonell
Created February 12, 2017 01:25
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 tmcdonell/3efb7345b227e4b980b36fe4ca315ba5 to your computer and use it in GitHub Desktop.
Save tmcdonell/3efb7345b227e4b980b36fe4ca315ba5 to your computer and use it in GitHub Desktop.
; ModuleID = 'map'
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-darwin15.6.0"
; Function Attrs: norecurse nounwind
define void @map(i64 %ix.start, i64 %ix.end, double* noalias nocapture %out.ad0, i64 %out.sh0, double* noalias nocapture readonly %fv0.ad0, i64 %fv0.sh0) local_unnamed_addr #0 {
entry:
%0 = icmp sgt i64 %ix.end, %ix.start
br i1 %0, label %while1.top.preheader, label %while1.exit
while1.top.preheader: ; preds = %entry
%1 = sub i64 %ix.end, %ix.start
%min.iters.check = icmp ult i64 %1, 16
br i1 %min.iters.check, label %while1.top.preheader9, label %min.iters.checked
min.iters.checked: ; preds = %while1.top.preheader
%n.vec = and i64 %1, -16
%cmp.zero = icmp eq i64 %n.vec, 0
%ind.end = add i64 %n.vec, %ix.start
br i1 %cmp.zero, label %while1.top.preheader9, label %vector.body.preheader
vector.body.preheader: ; preds = %min.iters.checked
br label %vector.body
vector.body: ; preds = %vector.body.preheader, %vector.body
%index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.body.preheader ]
%2 = add i64 %index, %ix.start
%3 = getelementptr double, double* %fv0.ad0, i64 %2
%4 = bitcast double* %3 to <4 x double>*
%wide.load = load <4 x double>, <4 x double>* %4, align 8
%5 = getelementptr double, double* %3, i64 4
%6 = bitcast double* %5 to <4 x double>*
%wide.load4 = load <4 x double>, <4 x double>* %6, align 8
%7 = getelementptr double, double* %3, i64 8
%8 = bitcast double* %7 to <4 x double>*
%wide.load5 = load <4 x double>, <4 x double>* %8, align 8
%9 = getelementptr double, double* %3, i64 12
%10 = bitcast double* %9 to <4 x double>*
%wide.load6 = load <4 x double>, <4 x double>* %10, align 8
%11 = fadd fast <4 x double> %wide.load, <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
%12 = fadd fast <4 x double> %wide.load4, <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
%13 = fadd fast <4 x double> %wide.load5, <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
%14 = fadd fast <4 x double> %wide.load6, <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
%15 = getelementptr double, double* %out.ad0, i64 %2
%16 = bitcast double* %15 to <4 x double>*
store <4 x double> %11, <4 x double>* %16, align 8
%17 = getelementptr double, double* %15, i64 4
%18 = bitcast double* %17 to <4 x double>*
store <4 x double> %12, <4 x double>* %18, align 8
%19 = getelementptr double, double* %15, i64 8
%20 = bitcast double* %19 to <4 x double>*
store <4 x double> %13, <4 x double>* %20, align 8
%21 = getelementptr double, double* %15, i64 12
%22 = bitcast double* %21 to <4 x double>*
store <4 x double> %14, <4 x double>* %22, align 8
%index.next = add i64 %index, 16
%23 = icmp eq i64 %index.next, %n.vec
br i1 %23, label %middle.block, label %vector.body, !llvm.loop !0
middle.block: ; preds = %vector.body
%cmp.n = icmp eq i64 %1, %n.vec
br i1 %cmp.n, label %while1.exit, label %while1.top.preheader9
while1.top.preheader9: ; preds = %middle.block, %min.iters.checked, %while1.top.preheader
%.ph = phi i64 [ %ix.start, %min.iters.checked ], [ %ix.start, %while1.top.preheader ], [ %ind.end, %middle.block ]
br label %while1.top
while1.top: ; preds = %while1.top.preheader9, %while1.top
%24 = phi i64 [ %29, %while1.top ], [ %.ph, %while1.top.preheader9 ]
%25 = getelementptr double, double* %fv0.ad0, i64 %24
%26 = load double, double* %25, align 8
%27 = fadd fast double %26, 1.000000e+00
%28 = getelementptr double, double* %out.ad0, i64 %24
store double %27, double* %28, align 8
%29 = add nsw i64 %24, 1
%exitcond = icmp eq i64 %29, %ix.end
br i1 %exitcond, label %while1.exit.loopexit, label %while1.top, !llvm.loop !3
while1.exit.loopexit: ; preds = %while1.top
br label %while1.exit
while1.exit: ; preds = %while1.exit.loopexit, %middle.block, %entry
ret void
}
attributes #0 = { norecurse nounwind }
!0 = distinct !{!0, !1, !2}
!1 = !{!"llvm.loop.vectorize.width", i32 1}
!2 = !{!"llvm.loop.interleave.count", i32 1}
!3 = distinct !{!3, !4, !1, !2}
!4 = !{!"llvm.loop.unroll.runtime.disable"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment