Advertisement
Guest User

Untitled

a guest
Jun 21st, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
LLVM 4.39 KB | None | 0 0
  1. ; ModuleID = 'loop_base.cpp'
  2. target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
  3. target triple = "x86_64-unknown-linux-gnu"
  4.  
  5. %"class.std::__1::vector" = type { %"class.std::__1::__vector_base" }
  6. %"class.std::__1::__vector_base" = type { i32*, i32*, %"class.std::__1::__compressed_pair" }
  7. %"class.std::__1::__compressed_pair" = type { %"class.std::__1::__libcpp_compressed_pair_imp" }
  8. %"class.std::__1::__libcpp_compressed_pair_imp" = type { i32* }
  9.  
  10. ; Function Attrs: norecurse nounwind readonly uwtable
  11. define i32 @_Z3sumRNSt3__16vectorIiNS_9allocatorIiEEEE(%"class.std::__1::vector"* nocapture readonly dereferenceable(24) %v) #0 {
  12.   %1 = getelementptr inbounds %"class.std::__1::vector", %"class.std::__1::vector"* %v, i64 0, i32 0, i32 0
  13.   %2 = load i32*, i32** %1, align 8, !tbaa !1
  14.   %3 = getelementptr inbounds %"class.std::__1::vector", %"class.std::__1::vector"* %v, i64 0, i32 0, i32 1
  15.   %4 = load i32*, i32** %3, align 8, !tbaa !7
  16.   %5 = icmp eq i32* %2, %4
  17.   br i1 %5, label %._crit_edge, label %.lr.ph.preheader
  18.  
  19. .lr.ph.preheader:                                 ; preds = %0
  20.   %6 = ptrtoint i32* %2 to i64
  21.   %scevgep = getelementptr i32, i32* %4, i64 -1
  22.   %7 = ptrtoint i32* %scevgep to i64
  23.   %8 = sub i64 %7, %6
  24.   %9 = lshr i64 %8, 2
  25.   %10 = add nuw nsw i64 %9, 1
  26.   %min.iters.check = icmp ult i64 %10, 16
  27.   br i1 %min.iters.check, label %.lr.ph.preheader46, label %min.iters.checked
  28.  
  29. .lr.ph.preheader46:                               ; preds = %middle.block, %min.iters.checked, %.lr.ph.preheader
  30.   %x.02.ph = phi i32 [ 0, %min.iters.checked ], [ 0, %.lr.ph.preheader ], [ %49, %middle.block ]
  31.   %__begin.sroa.0.01.ph = phi i32* [ %2, %min.iters.checked ], [ %2, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  32.   br label %.lr.ph
  33.  
  34. min.iters.checked:                                ; preds = %.lr.ph.preheader
  35.   %n.vec = and i64 %10, 9223372036854775792
  36.   %cmp.zero = icmp eq i64 %n.vec, 0
  37.   %ind.end = getelementptr i32, i32* %2, i64 %n.vec
  38.   br i1 %cmp.zero, label %.lr.ph.preheader46, label %vector.body.preheader
  39.  
  40. vector.body.preheader:                            ; preds = %min.iters.checked
  41.   %11 = sub i64 %7, %6
  42.   %12 = lshr i64 %11, 2
  43.   %13 = add nuw nsw i64 %12, 1
  44.   %14 = and i64 %13, 9223372036854775792
  45.   %15 = add nsw i64 %14, -16
  46.   %16 = lshr exact i64 %15, 4
  47.   %17 = and i64 %16, 1
  48.   %lcmp.mod = icmp eq i64 %17, 0
  49.   br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split
  50.  
  51. vector.body.prol:                                 ; preds = %vector.body.preheader
  52.   %18 = bitcast i32* %2 to <4 x i32>*
  53.   %wide.load.prol = load <4 x i32>, <4 x i32>* %18, align 4, !tbaa !8
  54.   %19 = getelementptr i32, i32* %2, i64 4
  55.   %20 = bitcast i32* %19 to <4 x i32>*
  56.   %wide.load38.prol = load <4 x i32>, <4 x i32>* %20, align 4, !tbaa !8
  57.   %21 = getelementptr i32, i32* %2, i64 8
  58.   %22 = bitcast i32* %21 to <4 x i32>*
  59.   %wide.load39.prol = load <4 x i32>, <4 x i32>* %22, align 4, !tbaa !8
  60.   %23 = getelementptr i32, i32* %2, i64 12
  61.   %24 = bitcast i32* %23 to <4 x i32>*
  62.   %wide.load40.prol = load <4 x i32>, <4 x i32>* %24, align 4, !tbaa !8
  63.   br label %vector.body.preheader.split
  64.  
  65. vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  66.   %.lcssa50.unr = phi <4 x i32> [ undef, %vector.body.preheader ], [ %wide.load40.prol, %vector.body.prol ]
  67.   %.lcssa49.unr = phi <4 x i32> [ undef, %vector.body.preheader ], [ %wide.load39.prol, %vector.body.prol ]
  68.   %.lcssa48.unr = phi <4 x i32> [ undef, %vector.body.preheader ], [ %wide.load38.prol, %vector.body.prol ]
  69.   %.lcssa47.unr = phi <4 x i32> [ undef, %vector.body.preheader ], [ %wide.load.prol, %vector.body.prol ]
  70.   %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 16, %vector.body.prol ]
  71.   %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.body.preheader ], [ %wide.load.prol, %vector.body.prol ]
  72.   %vec.phi5.unr = phi <4 x i32> [ zeroinitializer, %vector.body.preheader ], [ %wide.load38.prol, %vector.body.prol ]
  73.   %vec.phi6.unr = phi <4 x i32> [ zeroinitializer, %vector.body.preheader ], [ %wide.load39.prol, %vector.body.prol ]
  74.   %vec.phi7.unr = phi <4 x i32> [ zeroinitializer, %vector.body.preheader ], [ %wide.load40.prol, %vector.body.prol ]
  75.   %25 = icmp eq i64 %16, 0
  76.   br i1 %25, label %middle.block, label %vector.body.preheader.split.split
  77.  
  78. vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  79.   br label %vector.body
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement