SHARE
TWEET

Untitled

a guest Jun 24th, 2019 74 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ModuleID = '<stdin>'
  2. source_filename = "neweigen.cpp"
  3. target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
  4. target triple = "x86_64-unknown-linux-gnu"
  5.  
  6. %"class.Eigen::Matrix" = type { %"class.Eigen::PlainObjectBase" }
  7. %"class.Eigen::PlainObjectBase" = type { %"class.Eigen::DenseStorage" }
  8. %"class.Eigen::DenseStorage" = type { %"struct.Eigen::internal::plain_array" }
  9. %"struct.Eigen::internal::plain_array" = type { [4000 x double] }
  10. %"class.Eigen::Matrix.2" = type { %"class.Eigen::PlainObjectBase.3" }
  11. %"class.Eigen::PlainObjectBase.3" = type { %"class.Eigen::DenseStorage.10" }
  12. %"class.Eigen::DenseStorage.10" = type { %"struct.Eigen::internal::plain_array.11" }
  13. %"struct.Eigen::internal::plain_array.11" = type { [100 x double] }
  14. %"class.Eigen::Matrix.12" = type { %"class.Eigen::PlainObjectBase.13" }
  15. %"class.Eigen::PlainObjectBase.13" = type { %"class.Eigen::DenseStorage.20" }
  16. %"class.Eigen::DenseStorage.20" = type { %"struct.Eigen::internal::plain_array.21" }
  17. %"struct.Eigen::internal::plain_array.21" = type { [40 x double] }
  18. %"class.Eigen::Transpose" = type { %"class.Eigen::Matrix.12"* }
  19. %"class.Eigen::Transpose.82" = type { %"class.Eigen::Matrix"* }
  20. %"class.Eigen::Transpose.89" = type { %"class.Eigen::Matrix.2"* }
  21. %"class.Eigen::Matrix.26" = type { %"class.Eigen::PlainObjectBase.27" }
  22. %"class.Eigen::PlainObjectBase.27" = type { %"class.Eigen::DenseStorage.34" }
  23. %"class.Eigen::DenseStorage.34" = type { %"struct.Eigen::internal::plain_array.35" }
  24. %"struct.Eigen::internal::plain_array.35" = type { [100 x double] }
  25. %"class.Eigen::Matrix.36" = type { %"class.Eigen::PlainObjectBase.37" }
  26. %"class.Eigen::PlainObjectBase.37" = type { %"class.Eigen::DenseStorage.44" }
  27. %"class.Eigen::DenseStorage.44" = type { %"struct.Eigen::internal::plain_array.45" }
  28. %"struct.Eigen::internal::plain_array.45" = type { [40 x double] }
  29. %"class.Eigen::internal::const_blas_data_mapper" = type { %"class.Eigen::internal::blas_data_mapper" }
  30. %"class.Eigen::internal::blas_data_mapper" = type { double*, i64 }
  31. %"class.Eigen::internal::const_blas_data_mapper.96" = type { %"class.Eigen::internal::blas_data_mapper.97" }
  32. %"class.Eigen::internal::blas_data_mapper.97" = type { double*, i64 }
  33.  
  34. $_ZN5Eigen8internal19gemv_dense_selectorILi2ELi1ELb1EE3runINS_9TransposeIKNS_6MatrixIdLi100ELi40ELi0ELi100ELi40EEEEENS4_IKNS5_IdLi1ELi100ELi1ELi1ELi100EEEEENS4_INS5_IdLi1ELi40ELi1ELi1ELi40EEEEEEEvRKT_RKT0_RT1_RKNSK_6ScalarE = comdat any
  35.  
  36. $_ZN5Eigen8internal29general_matrix_vector_productIldNS0_22const_blas_data_mapperIdlLi1EEELi1ELb0EdNS2_IdlLi0EEELb0ELi0EE3runEllRKS3_RKS4_Pdld = comdat any
  37.  
  38. @.str.4 = private unnamed_addr constant [13 x i8] c"Bp(o=%d)=%f\0A\00", align 1
  39. @.str.5 = private unnamed_addr constant [19 x i8] c"Wp(o=%d, i=%d)=%f\0A\00", align 1
  40. @str = private unnamed_addr constant [13 x i8] c"starting mul\00"
  41. @str.23 = private unnamed_addr constant [11 x i8] c"ending mul\00"
  42. @str.24 = private unnamed_addr constant [18 x i8] c"starting autodiff\00"
  43. @str.25 = private unnamed_addr constant [16 x i8] c"ending autodiff\00"
  44.  
  45. ; Function Attrs: nounwind uwtable
  46. define dso_local void @_Z6matvecRKN5Eigen6MatrixIdLi100ELi40ELi0ELi100ELi40EEERKNS0_IdLi1ELi100ELi1ELi1ELi100EEERNS0_IdLi1ELi40ELi1ELi1ELi40EEE(%"class.Eigen::Matrix"* noalias dereferenceable(32000) %W, %"class.Eigen::Matrix.2"* noalias dereferenceable(800) %B, %"class.Eigen::Matrix.12"* noalias nocapture dereferenceable(320) %foo) #0 {
  47. entry:
  48.   %destT.i.i.i.i.i.i.i.i.i.i.i.i.i = alloca %"class.Eigen::Transpose", align 8
  49.   %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i = alloca %"class.Eigen::Transpose.82", align 8
  50.   %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i = alloca %"class.Eigen::Transpose.89", align 8
  51.   %ref.tmp.i.i.i.i.i.i.i.i.i.i = alloca double, align 8
  52.   %tmp.i.i.i.i = alloca %"class.Eigen::Matrix.12", align 8
  53.   %puts = tail call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @str, i64 0, i64 0))
  54.   %0 = ptrtoint %"class.Eigen::Matrix.2"* %B to i64
  55.   %1 = ptrtoint %"class.Eigen::Matrix"* %W to i64
  56.   %dst1.i.i.i.i = bitcast %"class.Eigen::Matrix.12"* %foo to i8*
  57.   %2 = bitcast %"class.Eigen::Matrix.12"* %tmp.i.i.i.i to i8*
  58.   call void @llvm.lifetime.start.p0i8(i64 320, i8* nonnull %2) #3
  59.   %3 = getelementptr inbounds %"class.Eigen::Matrix.12", %"class.Eigen::Matrix.12"* %tmp.i.i.i.i, i64 0, i32 0
  60.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %2, i8 0, i64 320, i1 false) #3
  61.   %4 = bitcast double* %ref.tmp.i.i.i.i.i.i.i.i.i.i to i8*
  62.   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %4) #3
  63.   store double 1.000000e+00, double* %ref.tmp.i.i.i.i.i.i.i.i.i.i, align 8, !tbaa !2
  64.   %5 = bitcast %"class.Eigen::Transpose"* %destT.i.i.i.i.i.i.i.i.i.i.i.i.i to i8*
  65.   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %5) #3
  66.   %6 = bitcast %"class.Eigen::Transpose"* %destT.i.i.i.i.i.i.i.i.i.i.i.i.i to %"class.Eigen::PlainObjectBase.13"**
  67.   store %"class.Eigen::PlainObjectBase.13"* %3, %"class.Eigen::PlainObjectBase.13"** %6, align 8, !tbaa !6
  68.   %7 = bitcast %"class.Eigen::Transpose.82"* %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i to i8*
  69.   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %7) #3
  70.   %8 = bitcast %"class.Eigen::Transpose.82"* %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i to i64*
  71.   store i64 %1, i64* %8, align 8
  72.   %9 = bitcast %"class.Eigen::Transpose.89"* %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i to i8*
  73.   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %9) #3
  74.   %10 = bitcast %"class.Eigen::Transpose.89"* %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i to i64*
  75.   store i64 %0, i64* %10, align 8
  76.   call void @_ZN5Eigen8internal19gemv_dense_selectorILi2ELi1ELb1EE3runINS_9TransposeIKNS_6MatrixIdLi100ELi40ELi0ELi100ELi40EEEEENS4_IKNS5_IdLi1ELi100ELi1ELi1ELi100EEEEENS4_INS5_IdLi1ELi40ELi1ELi1ELi40EEEEEEEvRKT_RKT0_RT1_RKNSK_6ScalarE(%"class.Eigen::Transpose.82"* nonnull dereferenceable(8) %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i, %"class.Eigen::Transpose.89"* nonnull dereferenceable(8) %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i, %"class.Eigen::Transpose"* nonnull dereferenceable(8) %destT.i.i.i.i.i.i.i.i.i.i.i.i.i, double* nonnull dereferenceable(8) %ref.tmp.i.i.i.i.i.i.i.i.i.i) #3
  77.   call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %9) #3
  78.   call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %7) #3
  79.   call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %5) #3
  80.   call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %4) #3
  81.   call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 8 %dst1.i.i.i.i, i8* nonnull align 8 %2, i64 320, i1 false) #3
  82.   call void @llvm.lifetime.end.p0i8(i64 320, i8* nonnull %2) #3
  83.   %puts4 = call i32 @puts(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @str.23, i64 0, i64 0))
  84.   ret void
  85. }
  86.  
  87. ; Function Attrs: nounwind
  88. declare dso_local i32 @printf(i8* nocapture readonly, ...) local_unnamed_addr #1
  89.  
  90. ; Function Attrs: argmemonly nounwind
  91. declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #2
  92.  
  93. ; Function Attrs: argmemonly nounwind
  94. declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #2
  95.  
  96. ; Function Attrs: nounwind uwtable
  97. define dso_local void @_Z12deriv_matvecRKN5Eigen6MatrixIdLi100ELi40ELi0ELi100ELi40EEERS1_RKNS0_IdLi1ELi100ELi1ELi1ELi100EEES7_RNS0_IdLi1ELi40ELi1ELi1ELi40EEES9_(%"class.Eigen::Matrix"* noalias dereferenceable(32000) %W, %"class.Eigen::Matrix"* noalias dereferenceable(32000) %Wp, %"class.Eigen::Matrix.2"* noalias dereferenceable(800) %B, %"class.Eigen::Matrix.2"* noalias dereferenceable(800) %Bp, %"class.Eigen::Matrix.12"* noalias dereferenceable(320) %foo, %"class.Eigen::Matrix.12"* noalias dereferenceable(320) %foop) local_unnamed_addr #0 {
  98. entry:
  99.   %destT.i.i.i.i.i.i.i.i.i.i.i.i.i.i = alloca %"class.Eigen::Transpose", align 8
  100.   %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i.i = alloca %"class.Eigen::Transpose.82", align 8
  101.   %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i.i = alloca %"class.Eigen::Transpose.89", align 8
  102.   %ref.tmp.i.i.i.i.i.i.i.i.i.i.i = alloca double, align 8
  103.   %tmp.i.i.i.i.i = alloca %"class.Eigen::Matrix.12", align 8
  104.   %"ref.tmp.i.i.i.i.i.i.i.i.i.i'ip.i" = alloca double, align 8
  105.   %"destT.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" = alloca %"class.Eigen::Transpose", align 8
  106.   %"ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" = alloca %"class.Eigen::Transpose.89", align 8
  107.   %"ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" = alloca %"class.Eigen::Transpose.82", align 8
  108.   %"tmp.i.i.i.i'ip.sroa.0.i" = alloca [40 x double]
  109.   %0 = bitcast double* %"ref.tmp.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  110.   call void @llvm.lifetime.start.p0i8(i64 8, i8* %0)
  111.   %1 = bitcast %"class.Eigen::Transpose"* %"destT.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  112.   call void @llvm.lifetime.start.p0i8(i64 8, i8* %1)
  113.   %2 = bitcast %"class.Eigen::Transpose.89"* %"ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  114.   call void @llvm.lifetime.start.p0i8(i64 8, i8* %2)
  115.   %3 = bitcast %"class.Eigen::Transpose.82"* %"ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  116.   call void @llvm.lifetime.start.p0i8(i64 8, i8* %3)
  117.   %4 = bitcast [40 x double]* %"tmp.i.i.i.i'ip.sroa.0.i" to i8*
  118.   call void @llvm.lifetime.start.p0i8(i64 320, i8* %4)
  119.   %"tmp.i.i.i.i'ip.sroa.0.0..sroa_cast14.i" = bitcast [40 x double]* %"tmp.i.i.i.i'ip.sroa.0.i" to i8*
  120.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %"tmp.i.i.i.i'ip.sroa.0.0..sroa_cast14.i", i8 0, i64 320, i1 false) #3, !noalias !8
  121.   %5 = bitcast %"class.Eigen::Transpose.82"* %"ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  122.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %5, i8 0, i64 8, i1 false) #3, !noalias !8
  123.   %6 = bitcast %"class.Eigen::Transpose.89"* %"ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  124.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %6, i8 0, i64 8, i1 false) #3, !noalias !8
  125.   %7 = bitcast %"class.Eigen::Transpose"* %"destT.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  126.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %7, i8 0, i64 8, i1 false) #3, !noalias !8
  127.   %8 = bitcast double* %"ref.tmp.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  128.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %8, i8 0, i64 8, i1 false) #3, !noalias !8
  129.   %puts.i = call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @str, i64 0, i64 0)) #3, !noalias !8
  130.   %9 = ptrtoint %"class.Eigen::Matrix.2"* %B to i64
  131.   %10 = ptrtoint %"class.Eigen::Matrix"* %W to i64
  132.   %dst1.i.i.i.i.i = bitcast %"class.Eigen::Matrix.12"* %foo to i8*
  133.   %11 = bitcast %"class.Eigen::Matrix.12"* %tmp.i.i.i.i.i to i8*
  134.   call void @llvm.lifetime.start.p0i8(i64 320, i8* nonnull %11) #3, !noalias !8
  135.   %12 = getelementptr inbounds %"class.Eigen::Matrix.12", %"class.Eigen::Matrix.12"* %tmp.i.i.i.i.i, i64 0, i32 0
  136.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %11, i8 0, i64 320, i1 false) #3, !noalias !8
  137.   %13 = bitcast double* %ref.tmp.i.i.i.i.i.i.i.i.i.i.i to i8*
  138.   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %13) #3, !noalias !8
  139.   store double 1.000000e+00, double* %ref.tmp.i.i.i.i.i.i.i.i.i.i.i, align 8, !tbaa !2, !noalias !8
  140.   %14 = bitcast %"class.Eigen::Transpose"* %destT.i.i.i.i.i.i.i.i.i.i.i.i.i.i to i8*
  141.   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %14) #3, !noalias !8
  142.   %15 = bitcast %"class.Eigen::Transpose"* %destT.i.i.i.i.i.i.i.i.i.i.i.i.i.i to %"class.Eigen::PlainObjectBase.13"**
  143.   store %"class.Eigen::PlainObjectBase.13"* %12, %"class.Eigen::PlainObjectBase.13"** %15, align 8, !tbaa !6, !noalias !8
  144.   %16 = bitcast %"class.Eigen::Transpose.82"* %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i.i to i8*
  145.   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %16) #3, !noalias !8
  146.   %17 = bitcast %"class.Eigen::Transpose.82"* %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i.i to i64*
  147.   store i64 %10, i64* %17, align 8, !noalias !8
  148.   %18 = bitcast %"class.Eigen::Transpose.89"* %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i.i to i8*
  149.   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %18) #3, !noalias !8
  150.   %19 = bitcast %"class.Eigen::Transpose.89"* %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i.i to i64*
  151.   store i64 %9, i64* %19, align 8, !noalias !8
  152.   call void @_ZN5Eigen8internal19gemv_dense_selectorILi2ELi1ELb1EE3runINS_9TransposeIKNS_6MatrixIdLi100ELi40ELi0ELi100ELi40EEEEENS4_IKNS5_IdLi1ELi100ELi1ELi1ELi100EEEEENS4_INS5_IdLi1ELi40ELi1ELi1ELi40EEEEEEEvRKT_RKT0_RT1_RKNSK_6ScalarE(%"class.Eigen::Transpose.82"* nonnull dereferenceable(8) %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i.i, %"class.Eigen::Transpose.89"* nonnull dereferenceable(8) %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i.i, %"class.Eigen::Transpose"* nonnull dereferenceable(8) %destT.i.i.i.i.i.i.i.i.i.i.i.i.i.i, double* nonnull dereferenceable(8) %ref.tmp.i.i.i.i.i.i.i.i.i.i.i) #3, !noalias !13
  153.   call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %18) #3, !noalias !8
  154.   call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %16) #3, !noalias !8
  155.   call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %14) #3, !noalias !8
  156.   call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %13) #3, !noalias !8
  157.   call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 8 %dst1.i.i.i.i.i, i8* nonnull align 8 %11, i64 320, i1 false) #3, !noalias !14
  158.   call void @llvm.lifetime.end.p0i8(i64 320, i8* nonnull %11) #3, !noalias !8
  159.   %puts4.i = call i32 @puts(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @str.23, i64 0, i64 0)) #3, !noalias !13
  160.   %20 = call i32 @puts(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @str.23, i64 0, i64 0)) #3, !noalias !13
  161.   %"tmp.i.i.i.i'ip.sroa.0.0.dst1.i.i.i.i'ip.sroa_cast.i" = bitcast %"class.Eigen::Matrix.12"* %foop to i8*
  162.   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %"tmp.i.i.i.i'ip.sroa.0.0.dst1.i.i.i.i'ip.sroa_cast.i", i8* nonnull align 8 %"tmp.i.i.i.i'ip.sroa.0.0..sroa_cast14.i", i64 320, i1 false) #3, !noalias !8
  163.   %21 = call {} @diffe_ZN5Eigen8internal19gemv_dense_selectorILi2ELi1ELb1EE3runINS_9TransposeIKNS_6MatrixIdLi100ELi40ELi0ELi100ELi40EEEEENS4_IKNS5_IdLi1ELi100ELi1ELi1ELi100EEEEENS4_INS5_IdLi1ELi40ELi1ELi1ELi40EEEEEEEvRKT_RKT0_RT1_RKNSK_6ScalarE(%"class.Eigen::Transpose.82"* nonnull %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i.i, %"class.Eigen::Transpose.82"* nonnull %"ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i", %"class.Eigen::Transpose.89"* nonnull %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i.i, %"class.Eigen::Transpose.89"* nonnull %"ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i", %"class.Eigen::Transpose"* nonnull %destT.i.i.i.i.i.i.i.i.i.i.i.i.i.i, %"class.Eigen::Transpose"* nonnull %"destT.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i", double* nonnull %ref.tmp.i.i.i.i.i.i.i.i.i.i.i, double* nonnull %"ref.tmp.i.i.i.i.i.i.i.i.i.i'ip.i") #3, !noalias !13
  164.   %"'ip2.i" = bitcast %"class.Eigen::Transpose.89"* %"ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i64*
  165.   store i64 0, i64* %"'ip2.i", !noalias !8
  166.   %"'ip6.i" = bitcast %"class.Eigen::Transpose.82"* %"ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i64*
  167.   store i64 0, i64* %"'ip6.i", !noalias !8
  168.   store double 0.000000e+00, double* %"ref.tmp.i.i.i.i.i.i.i.i.i.i'ip.i", !noalias !8
  169.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %"tmp.i.i.i.i'ip.sroa.0.0..sroa_cast14.i", i8 0, i64 320, i1 false) #3, !noalias !8
  170.   %22 = call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @str, i64 0, i64 0)) #3, !noalias !13
  171.   %23 = bitcast double* %"ref.tmp.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  172.   call void @llvm.lifetime.end.p0i8(i64 8, i8* %23)
  173.   %24 = bitcast %"class.Eigen::Transpose"* %"destT.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  174.   call void @llvm.lifetime.end.p0i8(i64 8, i8* %24)
  175.   %25 = bitcast %"class.Eigen::Transpose.89"* %"ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  176.   call void @llvm.lifetime.end.p0i8(i64 8, i8* %25)
  177.   %26 = bitcast %"class.Eigen::Transpose.82"* %"ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  178.   call void @llvm.lifetime.end.p0i8(i64 8, i8* %26)
  179.   %27 = bitcast [40 x double]* %"tmp.i.i.i.i'ip.sroa.0.i" to i8*
  180.   call void @llvm.lifetime.end.p0i8(i64 320, i8* %27)
  181.   ret void
  182. }
  183.  
  184. ; Function Attrs: nounwind
  185. declare double @"llvm.autodiff.p0f_isVoidp0s_class.Eigen::Matrixsp0s_class.Eigen::Matrix.2sp0s_class.Eigen::Matrix.12sf"(void (%"class.Eigen::Matrix"*, %"class.Eigen::Matrix.2"*, %"class.Eigen::Matrix.12"*)*, ...) #3
  186.  
  187. ; Function Attrs: norecurse nounwind uwtable
  188. define dso_local i32 @main(i32 %argc, i8** nocapture readnone %argv) local_unnamed_addr #4 {
  189. entry:
  190.   %destT.i.i.i.i.i.i.i.i.i.i.i.i.i.i = alloca %"class.Eigen::Transpose", align 8
  191.   %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i.i = alloca %"class.Eigen::Transpose.82", align 8
  192.   %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i.i = alloca %"class.Eigen::Transpose.89", align 8
  193.   %ref.tmp.i.i.i.i.i.i.i.i.i.i.i = alloca double, align 8
  194.   %tmp.i.i.i.i.i = alloca %"class.Eigen::Matrix.12", align 8
  195.   %"ref.tmp.i.i.i.i.i.i.i.i.i.i'ip.i" = alloca double, align 8
  196.   %"destT.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" = alloca %"class.Eigen::Transpose", align 8
  197.   %"ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" = alloca %"class.Eigen::Transpose.89", align 8
  198.   %"ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" = alloca %"class.Eigen::Transpose.82", align 8
  199.   %"tmp.i.i.i.i'ip.sroa.0.i" = alloca [40 x double]
  200.   %W = alloca %"class.Eigen::Matrix", align 8
  201.   %Wp = alloca %"class.Eigen::Matrix", align 8
  202.   %0 = bitcast %"class.Eigen::Matrix"* %Wp to i8*
  203.   %B = alloca %"class.Eigen::Matrix.26", align 8
  204.   %Bp = alloca %"class.Eigen::Matrix.26", align 8
  205.   %1 = bitcast %"class.Eigen::Matrix.26"* %Bp to i8*
  206.   %foo = alloca %"class.Eigen::Matrix.36", align 8
  207.   %foop = alloca %"class.Eigen::Matrix.36", align 8
  208.   %2 = bitcast %"class.Eigen::Matrix"* %W to i8*
  209.   call void @llvm.lifetime.start.p0i8(i64 32000, i8* nonnull %2) #3
  210.   call void @llvm.lifetime.start.p0i8(i64 32000, i8* nonnull %0) #3
  211.   %3 = bitcast %"class.Eigen::Matrix.26"* %B to i8*
  212.   call void @llvm.lifetime.start.p0i8(i64 800, i8* nonnull %3) #3
  213.   call void @llvm.lifetime.start.p0i8(i64 800, i8* nonnull %1) #3
  214.   %4 = bitcast %"class.Eigen::Matrix.36"* %foo to i8*
  215.   call void @llvm.lifetime.start.p0i8(i64 320, i8* nonnull %4) #3
  216.   %5 = bitcast %"class.Eigen::Matrix.36"* %foop to i8*
  217.   call void @llvm.lifetime.start.p0i8(i64 320, i8* nonnull %5) #3
  218.   br label %for.body.i.i.i.i.i.i.i.i94
  219.  
  220. for.body.i.i.i.i.i.i.i.i94:                       ; preds = %for.body.i.i.i.i.i.i.i.i94, %entry
  221.   %i.06.i.i.i.i.i.i.i.i90 = phi i64 [ 0, %entry ], [ %inc.i.i.i.i.i.i.i.i92, %for.body.i.i.i.i.i.i.i.i94 ]
  222.   %arrayidx.i.i.i.i.i.i.i.i.i.i91 = getelementptr inbounds %"class.Eigen::Matrix", %"class.Eigen::Matrix"* %W, i64 0, i32 0, i32 0, i32 0, i32 0, i64 %i.06.i.i.i.i.i.i.i.i90
  223.   %6 = bitcast double* %arrayidx.i.i.i.i.i.i.i.i.i.i91 to i64*
  224.   store i64 4607182418800017408, i64* %6, align 8, !tbaa !2
  225.   %inc.i.i.i.i.i.i.i.i92 = add nuw nsw i64 %i.06.i.i.i.i.i.i.i.i90, 1
  226.   %exitcond.i.i.i.i.i.i.i.i93 = icmp eq i64 %inc.i.i.i.i.i.i.i.i92, 4000
  227.   br i1 %exitcond.i.i.i.i.i.i.i.i93, label %for.body.i.i.i.i.i.i.i.i86, label %for.body.i.i.i.i.i.i.i.i94
  228.  
  229. for.body.i.i.i.i.i.i.i.i86:                       ; preds = %for.body.i.i.i.i.i.i.i.i94, %for.body.i.i.i.i.i.i.i.i86
  230.   %i.06.i.i.i.i.i.i.i.i82 = phi i64 [ %inc.i.i.i.i.i.i.i.i84, %for.body.i.i.i.i.i.i.i.i86 ], [ 0, %for.body.i.i.i.i.i.i.i.i94 ]
  231.   %arrayidx.i.i.i.i.i.i.i.i.i.i83 = getelementptr inbounds %"class.Eigen::Matrix.26", %"class.Eigen::Matrix.26"* %B, i64 0, i32 0, i32 0, i32 0, i32 0, i64 %i.06.i.i.i.i.i.i.i.i82
  232.   %7 = bitcast double* %arrayidx.i.i.i.i.i.i.i.i.i.i83 to i64*
  233.   store i64 4611686018427387904, i64* %7, align 8, !tbaa !2
  234.   %inc.i.i.i.i.i.i.i.i84 = add nuw nsw i64 %i.06.i.i.i.i.i.i.i.i82, 1
  235.   %exitcond.i.i.i.i.i.i.i.i85 = icmp eq i64 %inc.i.i.i.i.i.i.i.i84, 100
  236.   br i1 %exitcond.i.i.i.i.i.i.i.i85, label %for.body.i.i.i.i.i.i.i.i78, label %for.body.i.i.i.i.i.i.i.i86
  237.  
  238. for.body.i.i.i.i.i.i.i.i78:                       ; preds = %for.body.i.i.i.i.i.i.i.i86, %for.body.i.i.i.i.i.i.i.i78
  239.   %i.06.i.i.i.i.i.i.i.i74 = phi i64 [ %inc.i.i.i.i.i.i.i.i76, %for.body.i.i.i.i.i.i.i.i78 ], [ 0, %for.body.i.i.i.i.i.i.i.i86 ]
  240.   %arrayidx.i.i.i.i.i.i.i.i.i.i75 = getelementptr inbounds %"class.Eigen::Matrix.36", %"class.Eigen::Matrix.36"* %foo, i64 0, i32 0, i32 0, i32 0, i32 0, i64 %i.06.i.i.i.i.i.i.i.i74
  241.   %8 = bitcast double* %arrayidx.i.i.i.i.i.i.i.i.i.i75 to i64*
  242.   store i64 4607182418800017408, i64* %8, align 8, !tbaa !2
  243.   %inc.i.i.i.i.i.i.i.i76 = add nuw nsw i64 %i.06.i.i.i.i.i.i.i.i74, 1
  244.   %exitcond.i.i.i.i.i.i.i.i77 = icmp eq i64 %inc.i.i.i.i.i.i.i.i76, 40
  245.   br i1 %exitcond.i.i.i.i.i.i.i.i77, label %for.body.i.i.i.i.i.i.i.i71.preheader, label %for.body.i.i.i.i.i.i.i.i78
  246.  
  247. for.body.i.i.i.i.i.i.i.i71.preheader:             ; preds = %for.body.i.i.i.i.i.i.i.i78
  248.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %0, i8 0, i64 32000, i1 false)
  249.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %1, i8 0, i64 800, i1 false)
  250.   br label %for.body.i.i.i.i.i.i.i.i
  251.  
  252. for.body.i.i.i.i.i.i.i.i:                         ; preds = %for.body.i.i.i.i.i.i.i.i, %for.body.i.i.i.i.i.i.i.i71.preheader
  253.   %i.06.i.i.i.i.i.i.i.i = phi i64 [ %inc.i.i.i.i.i.i.i.i, %for.body.i.i.i.i.i.i.i.i ], [ 0, %for.body.i.i.i.i.i.i.i.i71.preheader ]
  254.   %arrayidx.i.i.i.i.i.i.i.i.i.i = getelementptr inbounds %"class.Eigen::Matrix.36", %"class.Eigen::Matrix.36"* %foop, i64 0, i32 0, i32 0, i32 0, i32 0, i64 %i.06.i.i.i.i.i.i.i.i
  255.   %9 = bitcast double* %arrayidx.i.i.i.i.i.i.i.i.i.i to i64*
  256.   store i64 4607182418800017408, i64* %9, align 8, !tbaa !2
  257.   %inc.i.i.i.i.i.i.i.i = add nuw nsw i64 %i.06.i.i.i.i.i.i.i.i, 1
  258.   %exitcond.i.i.i.i.i.i.i.i = icmp eq i64 %inc.i.i.i.i.i.i.i.i, 40
  259.   br i1 %exitcond.i.i.i.i.i.i.i.i, label %_ZN5Eigen6MatrixIdLi40ELi1ELi0ELi40ELi1EEaSINS_14CwiseNullaryOpINS_8internal18scalar_constant_opIdEES1_EEEERS1_RKNS_9DenseBaseIT_EE.exit, label %for.body.i.i.i.i.i.i.i.i
  260.  
  261. _ZN5Eigen6MatrixIdLi40ELi1ELi0ELi40ELi1EEaSINS_14CwiseNullaryOpINS_8internal18scalar_constant_opIdEES1_EEEERS1_RKNS_9DenseBaseIT_EE.exit: ; preds = %for.body.i.i.i.i.i.i.i.i
  262.   %puts = tail call i32 @puts(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @str.24, i64 0, i64 0))
  263.   %10 = bitcast %"class.Eigen::Matrix.26"* %B to %"class.Eigen::Matrix.2"*
  264.   %11 = bitcast %"class.Eigen::Matrix.26"* %Bp to %"class.Eigen::Matrix.2"*
  265.   %12 = bitcast %"class.Eigen::Matrix.36"* %foo to %"class.Eigen::Matrix.12"*
  266.   %13 = bitcast %"class.Eigen::Matrix.36"* %foop to %"class.Eigen::Matrix.12"*
  267.   %14 = bitcast double* %"ref.tmp.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  268.   call void @llvm.lifetime.start.p0i8(i64 8, i8* %14)
  269.   %15 = bitcast %"class.Eigen::Transpose"* %"destT.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  270.   call void @llvm.lifetime.start.p0i8(i64 8, i8* %15)
  271.   %16 = bitcast %"class.Eigen::Transpose.89"* %"ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  272.   call void @llvm.lifetime.start.p0i8(i64 8, i8* %16)
  273.   %17 = bitcast %"class.Eigen::Transpose.82"* %"ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  274.   call void @llvm.lifetime.start.p0i8(i64 8, i8* %17)
  275.   %18 = bitcast [40 x double]* %"tmp.i.i.i.i'ip.sroa.0.i" to i8*
  276.   call void @llvm.lifetime.start.p0i8(i64 320, i8* %18)
  277.   %"tmp.i.i.i.i'ip.sroa.0.0..sroa_cast14.i" = bitcast [40 x double]* %"tmp.i.i.i.i'ip.sroa.0.i" to i8*
  278.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %"tmp.i.i.i.i'ip.sroa.0.0..sroa_cast14.i", i8 0, i64 320, i1 false) #3, !noalias !15
  279.   %19 = bitcast %"class.Eigen::Transpose.82"* %"ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  280.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %19, i8 0, i64 8, i1 false) #3, !noalias !15
  281.   %20 = bitcast %"class.Eigen::Transpose.89"* %"ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  282.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %20, i8 0, i64 8, i1 false) #3, !noalias !15
  283.   %21 = bitcast %"class.Eigen::Transpose"* %"destT.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  284.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %21, i8 0, i64 8, i1 false) #3, !noalias !15
  285.   %22 = bitcast double* %"ref.tmp.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  286.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %22, i8 0, i64 8, i1 false) #3, !noalias !15
  287.   %puts.i = call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @str, i64 0, i64 0)) #3, !noalias !15
  288.   %23 = ptrtoint %"class.Eigen::Matrix.2"* %10 to i64
  289.   %24 = ptrtoint %"class.Eigen::Matrix"* %W to i64
  290.   %dst1.i.i.i.i.i = bitcast %"class.Eigen::Matrix.12"* %12 to i8*
  291.   %25 = bitcast %"class.Eigen::Matrix.12"* %tmp.i.i.i.i.i to i8*
  292.   call void @llvm.lifetime.start.p0i8(i64 320, i8* nonnull %25) #3, !noalias !15
  293.   %26 = getelementptr inbounds %"class.Eigen::Matrix.12", %"class.Eigen::Matrix.12"* %tmp.i.i.i.i.i, i64 0, i32 0
  294.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %25, i8 0, i64 320, i1 false) #3, !noalias !15
  295.   %27 = bitcast double* %ref.tmp.i.i.i.i.i.i.i.i.i.i.i to i8*
  296.   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %27) #3, !noalias !15
  297.   store double 1.000000e+00, double* %ref.tmp.i.i.i.i.i.i.i.i.i.i.i, align 8, !tbaa !2, !noalias !15
  298.   %28 = bitcast %"class.Eigen::Transpose"* %destT.i.i.i.i.i.i.i.i.i.i.i.i.i.i to i8*
  299.   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %28) #3, !noalias !15
  300.   %29 = bitcast %"class.Eigen::Transpose"* %destT.i.i.i.i.i.i.i.i.i.i.i.i.i.i to %"class.Eigen::PlainObjectBase.13"**
  301.   store %"class.Eigen::PlainObjectBase.13"* %26, %"class.Eigen::PlainObjectBase.13"** %29, align 8, !tbaa !6, !noalias !15
  302.   %30 = bitcast %"class.Eigen::Transpose.82"* %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i.i to i8*
  303.   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %30) #3, !noalias !15
  304.   %31 = bitcast %"class.Eigen::Transpose.82"* %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i.i to i64*
  305.   store i64 %24, i64* %31, align 8, !noalias !15
  306.   %32 = bitcast %"class.Eigen::Transpose.89"* %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i.i to i8*
  307.   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %32) #3, !noalias !15
  308.   %33 = bitcast %"class.Eigen::Transpose.89"* %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i.i to i64*
  309.   store i64 %23, i64* %33, align 8, !noalias !15
  310.   call void @_ZN5Eigen8internal19gemv_dense_selectorILi2ELi1ELb1EE3runINS_9TransposeIKNS_6MatrixIdLi100ELi40ELi0ELi100ELi40EEEEENS4_IKNS5_IdLi1ELi100ELi1ELi1ELi100EEEEENS4_INS5_IdLi1ELi40ELi1ELi1ELi40EEEEEEEvRKT_RKT0_RT1_RKNSK_6ScalarE(%"class.Eigen::Transpose.82"* nonnull dereferenceable(8) %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i.i, %"class.Eigen::Transpose.89"* nonnull dereferenceable(8) %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i.i, %"class.Eigen::Transpose"* nonnull dereferenceable(8) %destT.i.i.i.i.i.i.i.i.i.i.i.i.i.i, double* nonnull dereferenceable(8) %ref.tmp.i.i.i.i.i.i.i.i.i.i.i) #3, !noalias !20
  311.   call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %32) #3, !noalias !15
  312.   call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %30) #3, !noalias !15
  313.   call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %28) #3, !noalias !15
  314.   call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %27) #3, !noalias !15
  315.   call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 8 %dst1.i.i.i.i.i, i8* nonnull align 8 %25, i64 320, i1 false) #3, !noalias !21
  316.   call void @llvm.lifetime.end.p0i8(i64 320, i8* nonnull %25) #3, !noalias !15
  317.   %puts4.i = call i32 @puts(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @str.23, i64 0, i64 0)) #3, !noalias !20
  318.   %34 = call i32 @puts(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @str.23, i64 0, i64 0)) #3, !noalias !20
  319.   %"tmp.i.i.i.i'ip.sroa.0.0.dst1.i.i.i.i'ip.sroa_cast.i" = bitcast %"class.Eigen::Matrix.12"* %13 to i8*
  320.   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %"tmp.i.i.i.i'ip.sroa.0.0.dst1.i.i.i.i'ip.sroa_cast.i", i8* nonnull align 8 %"tmp.i.i.i.i'ip.sroa.0.0..sroa_cast14.i", i64 320, i1 false) #3, !noalias !15
  321.   %35 = call {} @diffe_ZN5Eigen8internal19gemv_dense_selectorILi2ELi1ELb1EE3runINS_9TransposeIKNS_6MatrixIdLi100ELi40ELi0ELi100ELi40EEEEENS4_IKNS5_IdLi1ELi100ELi1ELi1ELi100EEEEENS4_INS5_IdLi1ELi40ELi1ELi1ELi40EEEEEEEvRKT_RKT0_RT1_RKNSK_6ScalarE.2(%"class.Eigen::Transpose.82"* nonnull %ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i.i, %"class.Eigen::Transpose.82"* nonnull %"ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i", %"class.Eigen::Transpose.89"* nonnull %ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i.i, %"class.Eigen::Transpose.89"* nonnull %"ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i", %"class.Eigen::Transpose"* nonnull %destT.i.i.i.i.i.i.i.i.i.i.i.i.i.i, %"class.Eigen::Transpose"* nonnull %"destT.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i", double* nonnull %ref.tmp.i.i.i.i.i.i.i.i.i.i.i, double* nonnull %"ref.tmp.i.i.i.i.i.i.i.i.i.i'ip.i") #3, !noalias !20
  322.   %"'ip2.i" = bitcast %"class.Eigen::Transpose.89"* %"ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i64*
  323.   store i64 0, i64* %"'ip2.i", !noalias !15
  324.   %"'ip6.i" = bitcast %"class.Eigen::Transpose.82"* %"ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i64*
  325.   store i64 0, i64* %"'ip6.i", !noalias !15
  326.   store double 0.000000e+00, double* %"ref.tmp.i.i.i.i.i.i.i.i.i.i'ip.i", !noalias !15
  327.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %"tmp.i.i.i.i'ip.sroa.0.0..sroa_cast14.i", i8 0, i64 320, i1 false) #3, !noalias !15
  328.   %36 = call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @str, i64 0, i64 0)) #3, !noalias !20
  329.   %37 = bitcast double* %"ref.tmp.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  330.   call void @llvm.lifetime.end.p0i8(i64 8, i8* %37)
  331.   %38 = bitcast %"class.Eigen::Transpose"* %"destT.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  332.   call void @llvm.lifetime.end.p0i8(i64 8, i8* %38)
  333.   %39 = bitcast %"class.Eigen::Transpose.89"* %"ref.tmp1.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  334.   call void @llvm.lifetime.end.p0i8(i64 8, i8* %39)
  335.   %40 = bitcast %"class.Eigen::Transpose.82"* %"ref.tmp.i.i.i.i.i.i.i.i.i.i.i.i.i'ip.i" to i8*
  336.   call void @llvm.lifetime.end.p0i8(i64 8, i8* %40)
  337.   %41 = bitcast [40 x double]* %"tmp.i.i.i.i'ip.sroa.0.i" to i8*
  338.   call void @llvm.lifetime.end.p0i8(i64 320, i8* %41)
  339.   %puts55 = call i32 @puts(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @str.25, i64 0, i64 0))
  340.   br label %_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLi100ELi1ELi0ELi100ELi1EEELi1EEclEl.exit
  341.  
  342. _ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLi100ELi1ELi0ELi100ELi1EEELi1EEclEl.exit: ; preds = %_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLi100ELi1ELi0ELi100ELi1EEELi1EEclEl.exit, %_ZN5Eigen6MatrixIdLi40ELi1ELi0ELi40ELi1EEaSINS_14CwiseNullaryOpINS_8internal18scalar_constant_opIdEES1_EEEERS1_RKNS_9DenseBaseIT_EE.exit
  343.   %indvars.iv120 = phi i64 [ 0, %_ZN5Eigen6MatrixIdLi40ELi1ELi0ELi40ELi1EEaSINS_14CwiseNullaryOpINS_8internal18scalar_constant_opIdEES1_EEEERS1_RKNS_9DenseBaseIT_EE.exit ], [ %indvars.iv.next121, %_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLi100ELi1ELi0ELi100ELi1EEELi1EEclEl.exit ]
  344.   %arrayidx.i.i.i58 = getelementptr inbounds %"class.Eigen::Matrix.26", %"class.Eigen::Matrix.26"* %Bp, i64 0, i32 0, i32 0, i32 0, i32 0, i64 %indvars.iv120
  345.   %42 = load double, double* %arrayidx.i.i.i58, align 8, !tbaa !2
  346.   %43 = trunc i64 %indvars.iv120 to i32
  347.   %call21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i64 0, i64 0), i32 %43, double %42)
  348.   %indvars.iv.next121 = add nuw nsw i64 %indvars.iv120, 1
  349.   %exitcond122 = icmp eq i64 %indvars.iv.next121, 100
  350.   br i1 %exitcond122, label %for.body32.preheader, label %_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLi100ELi1ELi0ELi100ELi1EEELi1EEclEl.exit
  351.  
  352. for.body32.preheader:                             ; preds = %_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLi100ELi1ELi0ELi100ELi1EEELi1EEclEl.exit, %for.cond.cleanup31
  353.   %indvars.iv118 = phi i64 [ %indvars.iv.next119, %for.cond.cleanup31 ], [ 0, %_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLi100ELi1ELi0ELi100ELi1EEELi1EEclEl.exit ]
  354.   %44 = trunc i64 %indvars.iv118 to i32
  355.   br label %for.body32
  356.  
  357. for.cond.cleanup26:                               ; preds = %for.cond.cleanup31
  358.   call void @llvm.lifetime.end.p0i8(i64 320, i8* nonnull %5) #3
  359.   call void @llvm.lifetime.end.p0i8(i64 320, i8* nonnull %4) #3
  360.   call void @llvm.lifetime.end.p0i8(i64 800, i8* nonnull %1) #3
  361.   call void @llvm.lifetime.end.p0i8(i64 800, i8* nonnull %3) #3
  362.   call void @llvm.lifetime.end.p0i8(i64 32000, i8* nonnull %0) #3
  363.   call void @llvm.lifetime.end.p0i8(i64 32000, i8* nonnull %2) #3
  364.   ret i32 0
  365.  
  366. for.cond.cleanup31:                               ; preds = %for.body32
  367.   %indvars.iv.next119 = add nuw nsw i64 %indvars.iv118, 1
  368.   %exitcond1 = icmp ne i64 %indvars.iv.next119, 100
  369.   br i1 %exitcond1, label %for.body32.preheader, label %for.cond.cleanup26
  370.  
  371. for.body32:                                       ; preds = %for.body32, %for.body32.preheader
  372.   %indvars.iv = phi i64 [ 0, %for.body32.preheader ], [ %indvars.iv.next, %for.body32 ]
  373.   %mul.i.i.i = mul nuw nsw i64 %indvars.iv, 100
  374.   %add.i.i.i = add nuw nsw i64 %mul.i.i.i, %indvars.iv118
  375.   %arrayidx.i.i.i = getelementptr inbounds %"class.Eigen::Matrix", %"class.Eigen::Matrix"* %Wp, i64 0, i32 0, i32 0, i32 0, i32 0, i64 %add.i.i.i
  376.   %45 = load double, double* %arrayidx.i.i.i, align 8, !tbaa !2
  377.   %46 = trunc i64 %indvars.iv to i32
  378.   %call36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.5, i64 0, i64 0), i32 %44, i32 %46, double %45)
  379.   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  380.   %exitcond = icmp eq i64 %indvars.iv.next, 40
  381.   br i1 %exitcond, label %for.cond.cleanup31, label %for.body32
  382. }
  383.  
  384. ; Function Attrs: nounwind uwtable
  385. define linkonce_odr dso_local void @_ZN5Eigen8internal19gemv_dense_selectorILi2ELi1ELb1EE3runINS_9TransposeIKNS_6MatrixIdLi100ELi40ELi0ELi100ELi40EEEEENS4_IKNS5_IdLi1ELi100ELi1ELi1ELi100EEEEENS4_INS5_IdLi1ELi40ELi1ELi1ELi40EEEEEEEvRKT_RKT0_RT1_RKNSK_6ScalarE(%"class.Eigen::Transpose.82"* dereferenceable(8) %lhs, %"class.Eigen::Transpose.89"* dereferenceable(8) %rhs, %"class.Eigen::Transpose"* dereferenceable(8) %dest, double* dereferenceable(8) %alpha) local_unnamed_addr #0 comdat align 2 {
  386. entry:
  387.   %ref.tmp = alloca %"class.Eigen::internal::const_blas_data_mapper", align 8
  388.   %ref.tmp35 = alloca %"class.Eigen::internal::const_blas_data_mapper.96", align 8
  389.   %m_matrix.i.i = getelementptr inbounds %"class.Eigen::Transpose.82", %"class.Eigen::Transpose.82"* %lhs, i64 0, i32 0
  390.   %0 = load %"class.Eigen::Matrix"*, %"class.Eigen::Matrix"** %m_matrix.i.i, align 8, !tbaa !22
  391.   %m_matrix.i.i45 = getelementptr inbounds %"class.Eigen::Transpose.89", %"class.Eigen::Transpose.89"* %rhs, i64 0, i32 0
  392.   %1 = load %"class.Eigen::Matrix.2"*, %"class.Eigen::Matrix.2"** %m_matrix.i.i45, align 8, !tbaa !24
  393.   %2 = load double, double* %alpha, align 8, !tbaa !2
  394.   %arraydecay.i.i.i59 = getelementptr inbounds %"class.Eigen::Matrix.2", %"class.Eigen::Matrix.2"* %1, i64 0, i32 0, i32 0, i32 0, i32 0, i64 0
  395.   %cmp = icmp eq %"class.Eigen::Matrix.2"* %1, null
  396.   br i1 %cmp, label %cond.end, label %_ZN5Eigen8internal28aligned_stack_memory_handlerIdED2Ev.exit
  397.  
  398. cond.end:                                         ; preds = %entry
  399.   %3 = alloca [100 x double], align 16
  400.   %.sub = getelementptr inbounds [100 x double], [100 x double]* %3, i64 0, i64 0
  401.   br label %_ZN5Eigen8internal28aligned_stack_memory_handlerIdED2Ev.exit
  402.  
  403. _ZN5Eigen8internal28aligned_stack_memory_handlerIdED2Ev.exit: ; preds = %cond.end, %entry
  404.   %cond20 = phi double* [ %.sub, %cond.end ], [ %arraydecay.i.i.i59, %entry ]
  405.   %4 = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %ref.tmp to i8*
  406.   call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %4) #3
  407.   %arraydecay.i.i.i50 = getelementptr inbounds %"class.Eigen::Matrix", %"class.Eigen::Matrix"* %0, i64 0, i32 0, i32 0, i32 0, i32 0, i64 0
  408.   %m_data.i.i47 = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper", %"class.Eigen::internal::const_blas_data_mapper"* %ref.tmp, i64 0, i32 0, i32 0
  409.   store double* %arraydecay.i.i.i50, double** %m_data.i.i47, align 8, !tbaa !26
  410.   %m_stride.i.i48 = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper", %"class.Eigen::internal::const_blas_data_mapper"* %ref.tmp, i64 0, i32 0, i32 1
  411.   store i64 100, i64* %m_stride.i.i48, align 8, !tbaa !29
  412.   %5 = bitcast %"class.Eigen::internal::const_blas_data_mapper.96"* %ref.tmp35 to i8*
  413.   call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %5) #3
  414.   %m_data.i.i = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %ref.tmp35, i64 0, i32 0, i32 0
  415.   store double* %cond20, double** %m_data.i.i, align 8, !tbaa !30
  416.   %m_stride.i.i = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %ref.tmp35, i64 0, i32 0, i32 1
  417.   store i64 1, i64* %m_stride.i.i, align 8, !tbaa !32
  418.   %m_matrix.i.i46 = getelementptr inbounds %"class.Eigen::Transpose", %"class.Eigen::Transpose"* %dest, i64 0, i32 0
  419.   %6 = load %"class.Eigen::Matrix.12"*, %"class.Eigen::Matrix.12"** %m_matrix.i.i46, align 8, !tbaa !33
  420.   %arraydecay.i.i.i = getelementptr inbounds %"class.Eigen::Matrix.12", %"class.Eigen::Matrix.12"* %6, i64 0, i32 0, i32 0, i32 0, i32 0, i64 0
  421.   call void @_ZN5Eigen8internal29general_matrix_vector_productIldNS0_22const_blas_data_mapperIdlLi1EEELi1ELb0EdNS2_IdlLi0EEELb0ELi0EE3runEllRKS3_RKS4_Pdld(i64 40, i64 100, %"class.Eigen::internal::const_blas_data_mapper"* nonnull dereferenceable(16) %ref.tmp, %"class.Eigen::internal::const_blas_data_mapper.96"* nonnull dereferenceable(16) %ref.tmp35, double* %arraydecay.i.i.i, i64 1, double %2)
  422.   call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %5) #3
  423.   call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %4) #3
  424.   ret void
  425. }
  426.  
  427. ; Function Attrs: noinline nounwind uwtable
  428. define linkonce_odr dso_local void @_ZN5Eigen8internal29general_matrix_vector_productIldNS0_22const_blas_data_mapperIdlLi1EEELi1ELb0EdNS2_IdlLi0EEELb0ELi0EE3runEllRKS3_RKS4_Pdld(i64 %rows, i64 %cols, %"class.Eigen::internal::const_blas_data_mapper"* dereferenceable(16) %lhs, %"class.Eigen::internal::const_blas_data_mapper.96"* dereferenceable(16) %rhs, double* %res, i64 %resIncr, double %alpha) local_unnamed_addr #5 comdat align 2 {
  429. entry:
  430.   %m_stride.i = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper", %"class.Eigen::internal::const_blas_data_mapper"* %lhs, i64 0, i32 0, i32 1
  431.   %0 = bitcast %"class.Eigen::internal::const_blas_data_mapper.96"* %rhs to i64*
  432.   %1 = load i64, i64* %0, align 8, !tbaa !30
  433.   %rem.i333 = and i64 %1, 7
  434.   %tobool.i334 = icmp ne i64 %rem.i333, 0
  435.   %spec.select.i335 = sext i1 %tobool.i334 to i64
  436.   %2 = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %lhs to i64*
  437.   %3 = load i64, i64* %2, align 8, !tbaa !26
  438.   %rem.i330 = and i64 %3, 7
  439.   %tobool.i331 = icmp eq i64 %rem.i330, 0
  440.   %4 = inttoptr i64 %3 to double*
  441.   %5 = inttoptr i64 %1 to double*
  442.   br i1 %tobool.i331, label %lor.lhs.false, label %if.then
  443.  
  444. lor.lhs.false:                                    ; preds = %entry
  445.   %cmp5 = icmp eq i64 %cols, 0
  446.   %or.cond = or i1 %tobool.i334, %cmp5
  447.   %cmp9 = icmp eq i64 %spec.select.i335, %rows
  448.   %or.cond272 = or i1 %cmp9, %or.cond
  449.   br i1 %or.cond272, label %if.then, label %if.end
  450.  
  451. if.then:                                          ; preds = %lor.lhs.false, %entry
  452.   br label %if.end
  453.  
  454. if.end:                                           ; preds = %if.then, %lor.lhs.false
  455.   %alignedStart.0 = phi i64 [ 0, %if.then ], [ %spec.select.i335, %lor.lhs.false ]
  456.   %div = sdiv i64 %rows, 4
  457.   %mul = shl nsw i64 %div, 2
  458.   %cmp18396 = icmp sgt i64 %rows, 3
  459.   br i1 %cmp18396, label %for.body.lr.ph, label %for.cond72.preheader
  460.  
  461. for.body.lr.ph:                                   ; preds = %if.end
  462.   %6 = load i64, i64* %m_stride.i, align 8, !tbaa !29
  463.   %cmp31386 = icmp sgt i64 %cols, 0
  464.   br i1 %cmp31386, label %for.body.us, label %for.cond72.preheader
  465.  
  466. for.body.us:                                      ; preds = %for.body.lr.ph, %for.cond30.for.cond.cleanup32_crit_edge.us
  467.   %i.0397.us = phi i64 [ %add69.us, %for.cond30.for.cond.cleanup32_crit_edge.us ], [ 0, %for.body.lr.ph ]
  468.   %mul.i.i327.us = mul nsw i64 %6, %i.0397.us
  469.   %arrayidx.i.i328.us = getelementptr inbounds double, double* %4, i64 %mul.i.i327.us
  470.   %add21.us = or i64 %i.0397.us, 1
  471.   %mul.i.i323.us = mul nsw i64 %6, %add21.us
  472.   %arrayidx.i.i324.us = getelementptr inbounds double, double* %4, i64 %mul.i.i323.us
  473.   %add24.us = or i64 %i.0397.us, 2
  474.   %mul.i.i319.us = mul nsw i64 %6, %add24.us
  475.   %arrayidx.i.i320.us = getelementptr inbounds double, double* %4, i64 %mul.i.i319.us
  476.   %add27.us = or i64 %i.0397.us, 3
  477.   %mul.i.i315.us = mul nsw i64 %6, %add27.us
  478.   %arrayidx.i.i316.us = getelementptr inbounds double, double* %4, i64 %mul.i.i315.us
  479.   br label %for.body33.us
  480.  
  481. for.body33.us:                                    ; preds = %for.body33.us, %for.body.us
  482.   %j.0391.us = phi i64 [ 0, %for.body.us ], [ %inc.us, %for.body33.us ]
  483.   %tmp3.0390.us = phi double [ 0.000000e+00, %for.body.us ], [ %add49.us, %for.body33.us ]
  484.   %tmp2.0389.us = phi double [ 0.000000e+00, %for.body.us ], [ %add45.us, %for.body33.us ]
  485.   %tmp1.0388.us = phi double [ 0.000000e+00, %for.body.us ], [ %add41.us, %for.body33.us ]
  486.   %tmp0.0387.us = phi double [ 0.000000e+00, %for.body.us ], [ %add37.us, %for.body33.us ]
  487.   %arrayidx.i312.us = getelementptr inbounds double, double* %5, i64 %j.0391.us
  488.   %7 = load double, double* %arrayidx.i312.us, align 8, !tbaa !2
  489.   %arrayidx.i309.us = getelementptr inbounds double, double* %arrayidx.i.i328.us, i64 %j.0391.us
  490.   %8 = load double, double* %arrayidx.i309.us, align 8, !tbaa !2
  491.   %mul.i.i307.us = fmul fast double %8, %7
  492.   %add37.us = fadd fast double %mul.i.i307.us, %tmp0.0387.us
  493.   %arrayidx.i306.us = getelementptr inbounds double, double* %arrayidx.i.i324.us, i64 %j.0391.us
  494.   %9 = load double, double* %arrayidx.i306.us, align 8, !tbaa !2
  495.   %mul.i.i304.us = fmul fast double %9, %7
  496.   %add41.us = fadd fast double %mul.i.i304.us, %tmp1.0388.us
  497.   %arrayidx.i303.us = getelementptr inbounds double, double* %arrayidx.i.i320.us, i64 %j.0391.us
  498.   %10 = load double, double* %arrayidx.i303.us, align 8, !tbaa !2
  499.   %mul.i.i301.us = fmul fast double %10, %7
  500.   %add45.us = fadd fast double %mul.i.i301.us, %tmp2.0389.us
  501.   %arrayidx.i300.us = getelementptr inbounds double, double* %arrayidx.i.i316.us, i64 %j.0391.us
  502.   %11 = load double, double* %arrayidx.i300.us, align 8, !tbaa !2
  503.   %mul.i.i298.us = fmul fast double %11, %7
  504.   %add49.us = fadd fast double %mul.i.i298.us, %tmp3.0390.us
  505.   %inc.us = add nuw nsw i64 %j.0391.us, 1
  506.   %exitcond404 = icmp eq i64 %inc.us, %cols
  507.   br i1 %exitcond404, label %for.cond30.for.cond.cleanup32_crit_edge.us, label %for.body33.us
  508.  
  509. for.cond30.for.cond.cleanup32_crit_edge.us:       ; preds = %for.body33.us
  510.   %mul50.us = fmul fast double %add37.us, %alpha
  511.   %mul51.us = mul nsw i64 %i.0397.us, %resIncr
  512.   %arrayidx.us = getelementptr inbounds double, double* %res, i64 %mul51.us
  513.   %12 = load double, double* %arrayidx.us, align 8, !tbaa !2
  514.   %add52.us = fadd fast double %12, %mul50.us
  515.   store double %add52.us, double* %arrayidx.us, align 8, !tbaa !2
  516.   %mul53.us = fmul fast double %add41.us, %alpha
  517.   %mul55.us = mul nsw i64 %add21.us, %resIncr
  518.   %arrayidx56.us = getelementptr inbounds double, double* %res, i64 %mul55.us
  519.   %13 = load double, double* %arrayidx56.us, align 8, !tbaa !2
  520.   %add57.us = fadd fast double %13, %mul53.us
  521.   store double %add57.us, double* %arrayidx56.us, align 8, !tbaa !2
  522.   %mul58.us = fmul fast double %add45.us, %alpha
  523.   %mul60.us = mul nsw i64 %add24.us, %resIncr
  524.   %arrayidx61.us = getelementptr inbounds double, double* %res, i64 %mul60.us
  525.   %14 = load double, double* %arrayidx61.us, align 8, !tbaa !2
  526.   %add62.us = fadd fast double %14, %mul58.us
  527.   store double %add62.us, double* %arrayidx61.us, align 8, !tbaa !2
  528.   %mul63.us = fmul fast double %add49.us, %alpha
  529.   %mul65.us = mul nsw i64 %add27.us, %resIncr
  530.   %arrayidx66.us = getelementptr inbounds double, double* %res, i64 %mul65.us
  531.   %15 = load double, double* %arrayidx66.us, align 8, !tbaa !2
  532.   %add67.us = fadd fast double %15, %mul63.us
  533.   store double %add67.us, double* %arrayidx66.us, align 8, !tbaa !2
  534.   %add69.us = add nuw nsw i64 %i.0397.us, 4
  535.   %cmp18.us = icmp slt i64 %add69.us, %mul
  536.   br i1 %cmp18.us, label %for.body.us, label %for.cond72.preheader
  537.  
  538. for.cond72.preheader:                             ; preds = %for.cond30.for.cond.cleanup32_crit_edge.us, %for.body.lr.ph, %if.end
  539.   %cmp73384 = icmp slt i64 %mul, %rows
  540.   br i1 %cmp73384, label %for.body75.lr.ph, label %do.end
  541.  
  542. for.body75.lr.ph:                                 ; preds = %for.cond72.preheader
  543.   %16 = load i64, i64* %m_stride.i, align 8, !tbaa !29
  544.   %cmp94 = icmp slt i64 %alignedStart.0, 0
  545.   %cmp137380 = icmp sgt i64 %cols, 0
  546.   %m_data.i = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %rhs, i64 0, i32 0, i32 0
  547.   %17 = load double*, double** %m_data.i, align 8
  548.   br i1 %cmp94, label %for.body75.us, label %for.body75
  549.  
  550. for.body75.us:                                    ; preds = %for.body75.lr.ph, %for.cond.cleanup138.us
  551.   %i71.0385.us = phi i64 [ %inc153.us, %for.cond.cleanup138.us ], [ %mul, %for.body75.lr.ph ]
  552.   %mul.i.i296.us = mul nsw i64 %16, %i71.0385.us
  553.   %arrayidx.i.i297.us = getelementptr inbounds double, double* %4, i64 %mul.i.i296.us
  554.   %add.ptr.i287.us = getelementptr inbounds double, double* %arrayidx.i.i297.us, i64 %alignedStart.0
  555.   %.pre406 = load double, double* %add.ptr.i287.us, align 8, !tbaa !2
  556.   %.pre407.pn.in = getelementptr inbounds double, double* %17, i64 %alignedStart.0
  557.   %.pre407.pn = load double, double* %.pre407.pn.in, align 8, !tbaa !2
  558.   %ptmp0.2.us = fmul fast double %.pre407.pn, %.pre406
  559.   br i1 %cmp137380, label %for.body139.us, label %for.cond.cleanup138.us
  560.  
  561. for.cond.cleanup138.us:                           ; preds = %for.body139.us, %for.body75.us
  562.   %tmp076.2.lcssa.us = phi double [ %ptmp0.2.us, %for.body75.us ], [ %add144.us, %for.body139.us ]
  563.   %mul148.us = fmul fast double %tmp076.2.lcssa.us, %alpha
  564.   %mul149.us = mul nsw i64 %i71.0385.us, %resIncr
  565.   %arrayidx150.us = getelementptr inbounds double, double* %res, i64 %mul149.us
  566.   %18 = load double, double* %arrayidx150.us, align 8, !tbaa !2
  567.   %add151.us = fadd fast double %18, %mul148.us
  568.   store double %add151.us, double* %arrayidx150.us, align 8, !tbaa !2
  569.   %inc153.us = add nsw i64 %i71.0385.us, 1
  570.   %exitcond401 = icmp eq i64 %inc153.us, %rows
  571.   br i1 %exitcond401, label %do.end, label %for.body75.us
  572.  
  573. for.body139.us:                                   ; preds = %for.body75.us, %for.body139.us
  574.   %j135.0382.us = phi i64 [ %inc146.us, %for.body139.us ], [ 0, %for.body75.us ]
  575.   %tmp076.2381.us = phi double [ %add144.us, %for.body139.us ], [ %ptmp0.2.us, %for.body75.us ]
  576.   %arrayidx.i275.us = getelementptr inbounds double, double* %arrayidx.i.i297.us, i64 %j135.0382.us
  577.   %19 = load double, double* %arrayidx.i275.us, align 8, !tbaa !2
  578.   %arrayidx.i.us = getelementptr inbounds double, double* %17, i64 %j135.0382.us
  579.   %20 = load double, double* %arrayidx.i.us, align 8, !tbaa !2
  580.   %mul.i.i.us = fmul fast double %20, %19
  581.   %add144.us = fadd fast double %mul.i.i.us, %tmp076.2381.us
  582.   %inc146.us = add nuw nsw i64 %j135.0382.us, 1
  583.   %exitcond = icmp eq i64 %inc146.us, %cols
  584.   br i1 %exitcond, label %for.cond.cleanup138.us, label %for.body139.us
  585.  
  586. for.body75:                                       ; preds = %for.body75.lr.ph, %for.cond.cleanup138
  587.   %i71.0385 = phi i64 [ %inc153, %for.cond.cleanup138 ], [ %mul, %for.body75.lr.ph ]
  588.   %mul.i.i296 = mul nsw i64 %16, %i71.0385
  589.   %arrayidx.i.i297 = getelementptr inbounds double, double* %4, i64 %mul.i.i296
  590.   br i1 %cmp137380, label %for.body139, label %for.cond.cleanup138
  591.  
  592. for.cond.cleanup138:                              ; preds = %for.body139, %for.body75
  593.   %tmp076.2.lcssa = phi double [ 0.000000e+00, %for.body75 ], [ %add144, %for.body139 ]
  594.   %mul148 = fmul fast double %tmp076.2.lcssa, %alpha
  595.   %mul149 = mul nsw i64 %i71.0385, %resIncr
  596.   %arrayidx150 = getelementptr inbounds double, double* %res, i64 %mul149
  597.   %21 = load double, double* %arrayidx150, align 8, !tbaa !2
  598.   %add151 = fadd fast double %21, %mul148
  599.   store double %add151, double* %arrayidx150, align 8, !tbaa !2
  600.   %inc153 = add nsw i64 %i71.0385, 1
  601.   %exitcond403 = icmp eq i64 %inc153, %rows
  602.   br i1 %exitcond403, label %do.end, label %for.body75
  603.  
  604. for.body139:                                      ; preds = %for.body75, %for.body139
  605.   %j135.0382 = phi i64 [ %inc146, %for.body139 ], [ 0, %for.body75 ]
  606.   %tmp076.2381 = phi double [ %add144, %for.body139 ], [ 0.000000e+00, %for.body75 ]
  607.   %arrayidx.i275 = getelementptr inbounds double, double* %arrayidx.i.i297, i64 %j135.0382
  608.   %22 = load double, double* %arrayidx.i275, align 8, !tbaa !2
  609.   %arrayidx.i = getelementptr inbounds double, double* %17, i64 %j135.0382
  610.   %23 = load double, double* %arrayidx.i, align 8, !tbaa !2
  611.   %mul.i.i = fmul fast double %23, %22
  612.   %add144 = fadd fast double %mul.i.i, %tmp076.2381
  613.   %inc146 = add nuw nsw i64 %j135.0382, 1
  614.   %exitcond402 = icmp eq i64 %inc146, %cols
  615.   br i1 %exitcond402, label %for.cond.cleanup138, label %for.body139
  616.  
  617. do.end:                                           ; preds = %for.cond.cleanup138, %for.cond.cleanup138.us, %for.cond72.preheader
  618.   ret void
  619. }
  620.  
  621. ; Function Attrs: argmemonly nounwind
  622. declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #2
  623.  
  624. ; Function Attrs: nounwind
  625. declare i32 @puts(i8* nocapture readonly) local_unnamed_addr #3
  626.  
  627. ; Function Attrs: argmemonly nounwind
  628. declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1) #2
  629.  
  630. ; Function Attrs: nounwind uwtable
  631. define internal {} @diffe_ZN5Eigen8internal19gemv_dense_selectorILi2ELi1ELb1EE3runINS_9TransposeIKNS_6MatrixIdLi100ELi40ELi0ELi100ELi40EEEEENS4_IKNS5_IdLi1ELi100ELi1ELi1ELi100EEEEENS4_INS5_IdLi1ELi40ELi1ELi1ELi40EEEEEEEvRKT_RKT0_RT1_RKNSK_6ScalarE(%"class.Eigen::Transpose.82"* dereferenceable(8) %lhs, %"class.Eigen::Transpose.82"* %"lhs'", %"class.Eigen::Transpose.89"* dereferenceable(8) %rhs, %"class.Eigen::Transpose.89"* %"rhs'", %"class.Eigen::Transpose"* dereferenceable(8) %dest, %"class.Eigen::Transpose"* %"dest'", double* dereferenceable(8) %alpha, double* %"alpha'") local_unnamed_addr #0 align 2 {
  632. entry:
  633.   %ref.tmp = alloca %"class.Eigen::internal::const_blas_data_mapper", align 8
  634.   %ref.tmp35 = alloca %"class.Eigen::internal::const_blas_data_mapper.96", align 8
  635.   %"ref.tmp35'ip" = alloca %"class.Eigen::internal::const_blas_data_mapper.96", align 8
  636.   %"ref.tmp'ip" = alloca %"class.Eigen::internal::const_blas_data_mapper", align 8
  637.   %0 = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %"ref.tmp'ip" to i8*
  638.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %0, i8 0, i64 16, i1 false)
  639.   %1 = bitcast %"class.Eigen::internal::const_blas_data_mapper.96"* %"ref.tmp35'ip" to i8*
  640.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %1, i8 0, i64 16, i1 false)
  641.   %m_matrix.i.i = getelementptr inbounds %"class.Eigen::Transpose.82", %"class.Eigen::Transpose.82"* %lhs, i64 0, i32 0
  642.   %2 = load %"class.Eigen::Matrix"*, %"class.Eigen::Matrix"** %m_matrix.i.i, align 8, !tbaa !22
  643.   %m_matrix.i.i45 = getelementptr inbounds %"class.Eigen::Transpose.89", %"class.Eigen::Transpose.89"* %rhs, i64 0, i32 0
  644.   %3 = load %"class.Eigen::Matrix.2"*, %"class.Eigen::Matrix.2"** %m_matrix.i.i45, align 8, !tbaa !24
  645.   %4 = load double, double* %alpha, align 8, !tbaa !2
  646.   %arraydecay.i.i.i59 = getelementptr inbounds %"class.Eigen::Matrix.2", %"class.Eigen::Matrix.2"* %3, i64 0, i32 0, i32 0, i32 0, i32 0, i64 0
  647.   %cmp = icmp eq %"class.Eigen::Matrix.2"* %3, null
  648.   br i1 %cmp, label %cond.end, label %_ZN5Eigen8internal28aligned_stack_memory_handlerIdED2Ev.exit
  649.  
  650. cond.end:                                         ; preds = %entry
  651.   %5 = alloca [100 x double], align 16
  652.   %.sub = getelementptr inbounds [100 x double], [100 x double]* %5, i64 0, i64 0
  653.   br label %_ZN5Eigen8internal28aligned_stack_memory_handlerIdED2Ev.exit
  654.  
  655. _ZN5Eigen8internal28aligned_stack_memory_handlerIdED2Ev.exit: ; preds = %cond.end, %entry
  656.   %cond20 = phi double* [ %.sub, %cond.end ], [ %arraydecay.i.i.i59, %entry ]
  657.   %6 = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %ref.tmp to i8*
  658.   call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %6) #3
  659.   %arraydecay.i.i.i50 = getelementptr inbounds %"class.Eigen::Matrix", %"class.Eigen::Matrix"* %2, i64 0, i32 0, i32 0, i32 0, i32 0, i64 0
  660.   %m_data.i.i47 = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper", %"class.Eigen::internal::const_blas_data_mapper"* %ref.tmp, i64 0, i32 0, i32 0
  661.   store double* %arraydecay.i.i.i50, double** %m_data.i.i47, align 8, !tbaa !26
  662.   %m_stride.i.i48 = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper", %"class.Eigen::internal::const_blas_data_mapper"* %ref.tmp, i64 0, i32 0, i32 1
  663.   store i64 100, i64* %m_stride.i.i48, align 8, !tbaa !29
  664.   %7 = bitcast %"class.Eigen::internal::const_blas_data_mapper.96"* %ref.tmp35 to i8*
  665.   call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %7) #3
  666.   %m_data.i.i = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %ref.tmp35, i64 0, i32 0, i32 0
  667.   store double* %cond20, double** %m_data.i.i, align 8, !tbaa !30
  668.   %m_stride.i.i = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %ref.tmp35, i64 0, i32 0, i32 1
  669.   store i64 1, i64* %m_stride.i.i, align 8, !tbaa !32
  670.   %m_matrix.i.i46 = getelementptr inbounds %"class.Eigen::Transpose", %"class.Eigen::Transpose"* %dest, i64 0, i32 0
  671.   %8 = load %"class.Eigen::Matrix.12"*, %"class.Eigen::Matrix.12"** %m_matrix.i.i46, align 8, !tbaa !33
  672.   %arraydecay.i.i.i = getelementptr inbounds %"class.Eigen::Matrix.12", %"class.Eigen::Matrix.12"* %8, i64 0, i32 0, i32 0, i32 0, i32 0, i64 0
  673.   call void @_ZN5Eigen8internal29general_matrix_vector_productIldNS0_22const_blas_data_mapperIdlLi1EEELi1ELb0EdNS2_IdlLi0EEELb0ELi0EE3runEllRKS3_RKS4_Pdld(i64 40, i64 100, %"class.Eigen::internal::const_blas_data_mapper"* nonnull dereferenceable(16) %ref.tmp, %"class.Eigen::internal::const_blas_data_mapper.96"* nonnull dereferenceable(16) %ref.tmp35, double* %arraydecay.i.i.i, i64 1, double %4)
  674.   call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %7) #3
  675.   call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %6) #3
  676.   %"m_matrix.i.i46'ip" = getelementptr %"class.Eigen::Transpose", %"class.Eigen::Transpose"* %"dest'", i64 0, i32 0
  677.   %"'ip" = load %"class.Eigen::Matrix.12"*, %"class.Eigen::Matrix.12"** %"m_matrix.i.i46'ip", align 8
  678.   %"arraydecay.i.i.i'ip" = getelementptr %"class.Eigen::Matrix.12", %"class.Eigen::Matrix.12"* %"'ip", i64 0, i32 0, i32 0, i32 0, i32 0, i64 0
  679.   %9 = call { double } @diffe_ZN5Eigen8internal29general_matrix_vector_productIldNS0_22const_blas_data_mapperIdlLi1EEELi1ELb0EdNS2_IdlLi0EEELb0ELi0EE3runEllRKS3_RKS4_Pdld(i64 40, i64 100, %"class.Eigen::internal::const_blas_data_mapper"* nonnull %ref.tmp, %"class.Eigen::internal::const_blas_data_mapper"* nonnull %"ref.tmp'ip", %"class.Eigen::internal::const_blas_data_mapper.96"* nonnull %ref.tmp35, %"class.Eigen::internal::const_blas_data_mapper.96"* nonnull %"ref.tmp35'ip", double* %arraydecay.i.i.i, double* %"arraydecay.i.i.i'ip", i64 1, double %4)
  680.   %"m_stride.i.i'ip" = getelementptr %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %"ref.tmp35'ip", i64 0, i32 0, i32 1
  681.   store i64 0, i64* %"m_stride.i.i'ip"
  682.   %"m_stride.i.i48'ip" = getelementptr %"class.Eigen::internal::const_blas_data_mapper", %"class.Eigen::internal::const_blas_data_mapper"* %"ref.tmp'ip", i64 0, i32 0, i32 1
  683.   store i64 0, i64* %"m_stride.i.i48'ip"
  684.   ret {} undef
  685. }
  686.  
  687. ; Function Attrs: noinline nounwind uwtable
  688. define internal { double } @diffe_ZN5Eigen8internal29general_matrix_vector_productIldNS0_22const_blas_data_mapperIdlLi1EEELi1ELb0EdNS2_IdlLi0EEELb0ELi0EE3runEllRKS3_RKS4_Pdld(i64 %rows, i64 %cols, %"class.Eigen::internal::const_blas_data_mapper"* dereferenceable(16) %lhs, %"class.Eigen::internal::const_blas_data_mapper"* %"lhs'", %"class.Eigen::internal::const_blas_data_mapper.96"* dereferenceable(16) %rhs, %"class.Eigen::internal::const_blas_data_mapper.96"* %"rhs'", double* %res, double* %"res'", i64 %resIncr, double %alpha) local_unnamed_addr #5 align 2 {
  689. entry:
  690.   %m_stride.i = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper", %"class.Eigen::internal::const_blas_data_mapper"* %lhs, i64 0, i32 0, i32 1
  691.   %0 = bitcast %"class.Eigen::internal::const_blas_data_mapper.96"* %rhs to i64*
  692.   %1 = load i64, i64* %0, align 8, !tbaa !30
  693.   %rem.i333 = and i64 %1, 7
  694.   %tobool.i334 = icmp ne i64 %rem.i333, 0
  695.   %spec.select.i335 = sext i1 %tobool.i334 to i64
  696.   %2 = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %lhs to i64*
  697.   %3 = load i64, i64* %2, align 8, !tbaa !26
  698.   %rem.i330 = and i64 %3, 7
  699.   %tobool.i331 = icmp eq i64 %rem.i330, 0
  700.   %4 = inttoptr i64 %3 to double*
  701.   %5 = inttoptr i64 %1 to double*
  702.   br i1 %tobool.i331, label %lor.lhs.false, label %if.then
  703.  
  704. lor.lhs.false:                                    ; preds = %entry
  705.   %cmp5 = icmp eq i64 %cols, 0
  706.   %or.cond = or i1 %tobool.i334, %cmp5
  707.   %cmp9 = icmp eq i64 %spec.select.i335, %rows
  708.   %or.cond272 = or i1 %cmp9, %or.cond
  709.   br i1 %or.cond272, label %if.then, label %if.end
  710.  
  711. if.then:                                          ; preds = %lor.lhs.false, %entry
  712.   br label %if.end
  713.  
  714. if.end:                                           ; preds = %if.then, %lor.lhs.false
  715.   %alignedStart.0 = phi i64 [ 0, %if.then ], [ %spec.select.i335, %lor.lhs.false ]
  716.   %div = sdiv i64 %rows, 4
  717.   %mul = shl i64 %div, 2
  718.   %cmp18396 = icmp sgt i64 %rows, 3
  719.   br i1 %cmp18396, label %for.body.lr.ph, label %for.cond72.preheader
  720.  
  721. for.body.lr.ph:                                   ; preds = %if.end
  722.   %6 = load i64, i64* %m_stride.i, align 8, !tbaa !29
  723.   %cmp31386 = icmp sgt i64 %cols, 0
  724.   br i1 %cmp31386, label %for.body.us.preheader, label %for.cond72.preheader
  725.  
  726. for.body.us.preheader:                            ; preds = %for.body.lr.ph
  727.   %7 = icmp sgt i64 %mul, 4
  728.   %smax = select i1 %7, i64 %mul, i64 4
  729.   %8 = add i64 %smax, -1
  730.   %9 = lshr i64 %8, 2
  731.   %10 = add i64 %9, 1
  732.   %11 = mul nuw i64 %cols, %10
  733.   %mallocsize61 = mul i64 %11, 8
  734.   %malloccall62 = tail call i8* @malloc(i64 %mallocsize61)
  735.   %add49.us_malloccache = bitcast i8* %malloccall62 to double*
  736.   %malloccall68 = tail call i8* @malloc(i64 %mallocsize61)
  737.   %add45.us_malloccache = bitcast i8* %malloccall68 to double*
  738.   %malloccall74 = tail call i8* @malloc(i64 %mallocsize61)
  739.   %add41.us_malloccache = bitcast i8* %malloccall74 to double*
  740.   %malloccall80 = tail call i8* @malloc(i64 %mallocsize61)
  741.   %add37.us_malloccache = bitcast i8* %malloccall80 to double*
  742.   %malloccall83 = tail call i8* @malloc(i64 %mallocsize61)
  743.   %_malloccache84 = bitcast i8* %malloccall83 to double*
  744.   %malloccall88 = tail call i8* @malloc(i64 %mallocsize61)
  745.   %_malloccache89 = bitcast i8* %malloccall88 to double*
  746.   %mallocsize94 = mul i64 %10, 8
  747.   %malloccall95 = tail call i8* @malloc(i64 %mallocsize94)
  748.   %mul.i.i315.us_malloccache = bitcast i8* %malloccall95 to i64*
  749.   %malloccall101 = tail call i8* @malloc(i64 %mallocsize61)
  750.   %_malloccache102 = bitcast i8* %malloccall101 to double*
  751.   %malloccall107 = tail call i8* @malloc(i64 %mallocsize94)
  752.   %mul.i.i319.us_malloccache = bitcast i8* %malloccall107 to i64*
  753.   %malloccall113 = tail call i8* @malloc(i64 %mallocsize61)
  754.   %_malloccache114 = bitcast i8* %malloccall113 to double*
  755.   %malloccall119 = tail call i8* @malloc(i64 %mallocsize94)
  756.   %mul.i.i323.us_malloccache = bitcast i8* %malloccall119 to i64*
  757.   %malloccall125 = tail call i8* @malloc(i64 %mallocsize61)
  758.   %_malloccache126 = bitcast i8* %malloccall125 to double*
  759.   %malloccall131 = tail call i8* @malloc(i64 %mallocsize94)
  760.   %mul.i.i327.us_malloccache = bitcast i8* %malloccall131 to i64*
  761.   br label %for.body.us
  762.  
  763. for.body.us:                                      ; preds = %for.cond30.for.cond.cleanup32_crit_edge.us, %for.body.us.preheader
  764.   %indvar = phi i64 [ 0, %for.body.us.preheader ], [ %indvar.next, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  765.   %12 = shl i64 %indvar, 2
  766.   %mul.i.i327.us = mul nsw i64 %6, %12
  767.   %13 = getelementptr i64, i64* %mul.i.i327.us_malloccache, i64 %indvar
  768.   store i64 %mul.i.i327.us, i64* %13
  769.   %arrayidx.i.i328.us = getelementptr inbounds double, double* %4, i64 %mul.i.i327.us
  770.   %add21.us = or i64 %12, 1
  771.   %mul.i.i323.us = mul nsw i64 %6, %add21.us
  772.   %14 = getelementptr i64, i64* %mul.i.i323.us_malloccache, i64 %indvar
  773.   store i64 %mul.i.i323.us, i64* %14
  774.   %arrayidx.i.i324.us = getelementptr inbounds double, double* %4, i64 %mul.i.i323.us
  775.   %add24.us = or i64 %12, 2
  776.   %mul.i.i319.us = mul nsw i64 %6, %add24.us
  777.   %15 = getelementptr i64, i64* %mul.i.i319.us_malloccache, i64 %indvar
  778.   store i64 %mul.i.i319.us, i64* %15
  779.   %arrayidx.i.i320.us = getelementptr inbounds double, double* %4, i64 %mul.i.i319.us
  780.   %add27.us = or i64 %12, 3
  781.   %mul.i.i315.us = mul nsw i64 %6, %add27.us
  782.   %16 = getelementptr i64, i64* %mul.i.i315.us_malloccache, i64 %indvar
  783.   store i64 %mul.i.i315.us, i64* %16
  784.   %arrayidx.i.i316.us = getelementptr inbounds double, double* %4, i64 %mul.i.i315.us
  785.   br label %for.body33.us
  786.  
  787. for.body33.us:                                    ; preds = %for.body33.us, %for.body.us
  788.   %j.0391.us = phi i64 [ 0, %for.body.us ], [ %inc.us, %for.body33.us ]
  789.   %tmp3.0390.us = phi double [ 0.000000e+00, %for.body.us ], [ %add49.us, %for.body33.us ]
  790.   %tmp2.0389.us = phi double [ 0.000000e+00, %for.body.us ], [ %add45.us, %for.body33.us ]
  791.   %tmp1.0388.us = phi double [ 0.000000e+00, %for.body.us ], [ %add41.us, %for.body33.us ]
  792.   %tmp0.0387.us = phi double [ 0.000000e+00, %for.body.us ], [ %add37.us, %for.body33.us ]
  793.   %arrayidx.i312.us = getelementptr inbounds double, double* %5, i64 %j.0391.us
  794.   %17 = load double, double* %arrayidx.i312.us, align 8, !tbaa !2
  795.   %18 = mul nuw i64 %indvar, %cols
  796.   %19 = add nuw i64 %j.0391.us, %18
  797.   %20 = getelementptr double, double* %_malloccache84, i64 %19
  798.   store double %17, double* %20
  799.   %arrayidx.i309.us = getelementptr inbounds double, double* %arrayidx.i.i328.us, i64 %j.0391.us
  800.   %21 = load double, double* %arrayidx.i309.us, align 8, !tbaa !2
  801.   %22 = getelementptr double, double* %_malloccache126, i64 %19
  802.   store double %21, double* %22
  803.   %mul.i.i307.us = fmul fast double %21, %17
  804.   %add37.us = fadd fast double %mul.i.i307.us, %tmp0.0387.us
  805.   %23 = getelementptr double, double* %add37.us_malloccache, i64 %19
  806.   store double %add37.us, double* %23
  807.   %arrayidx.i306.us = getelementptr inbounds double, double* %arrayidx.i.i324.us, i64 %j.0391.us
  808.   %24 = load double, double* %arrayidx.i306.us, align 8, !tbaa !2
  809.   %25 = getelementptr double, double* %_malloccache114, i64 %19
  810.   store double %24, double* %25
  811.   %mul.i.i304.us = fmul fast double %24, %17
  812.   %add41.us = fadd fast double %mul.i.i304.us, %tmp1.0388.us
  813.   %26 = getelementptr double, double* %add41.us_malloccache, i64 %19
  814.   store double %add41.us, double* %26
  815.   %arrayidx.i303.us = getelementptr inbounds double, double* %arrayidx.i.i320.us, i64 %j.0391.us
  816.   %27 = load double, double* %arrayidx.i303.us, align 8, !tbaa !2
  817.   %28 = getelementptr double, double* %_malloccache102, i64 %19
  818.   store double %27, double* %28
  819.   %mul.i.i301.us = fmul fast double %27, %17
  820.   %add45.us = fadd fast double %mul.i.i301.us, %tmp2.0389.us
  821.   %29 = getelementptr double, double* %add45.us_malloccache, i64 %19
  822.   store double %add45.us, double* %29
  823.   %arrayidx.i300.us = getelementptr inbounds double, double* %arrayidx.i.i316.us, i64 %j.0391.us
  824.   %30 = load double, double* %arrayidx.i300.us, align 8, !tbaa !2
  825.   %31 = getelementptr double, double* %_malloccache89, i64 %19
  826.   store double %30, double* %31
  827.   %mul.i.i298.us = fmul fast double %30, %17
  828.   %add49.us = fadd fast double %mul.i.i298.us, %tmp3.0390.us
  829.   %32 = getelementptr double, double* %add49.us_malloccache, i64 %19
  830.   store double %add49.us, double* %32
  831.   %inc.us = add nuw nsw i64 %j.0391.us, 1
  832.   %exitcond149 = icmp ne i64 %inc.us, %cols
  833.   br i1 %exitcond149, label %for.body33.us, label %for.cond30.for.cond.cleanup32_crit_edge.us
  834.  
  835. for.cond30.for.cond.cleanup32_crit_edge.us:       ; preds = %for.body33.us
  836.   %mul50.us = fmul fast double %add37.us, %alpha
  837.   %mul51.us = mul nsw i64 %12, %resIncr
  838.   %arrayidx.us = getelementptr inbounds double, double* %res, i64 %mul51.us
  839.   %33 = load double, double* %arrayidx.us, align 8, !tbaa !2
  840.   %add52.us = fadd fast double %33, %mul50.us
  841.   store double %add52.us, double* %arrayidx.us, align 8, !tbaa !2
  842.   %mul53.us = fmul fast double %add41.us, %alpha
  843.   %mul55.us = mul nsw i64 %add21.us, %resIncr
  844.   %arrayidx56.us = getelementptr inbounds double, double* %res, i64 %mul55.us
  845.   %34 = load double, double* %arrayidx56.us, align 8, !tbaa !2
  846.   %add57.us = fadd fast double %34, %mul53.us
  847.   store double %add57.us, double* %arrayidx56.us, align 8, !tbaa !2
  848.   %mul58.us = fmul fast double %add45.us, %alpha
  849.   %mul60.us = mul nsw i64 %add24.us, %resIncr
  850.   %arrayidx61.us = getelementptr inbounds double, double* %res, i64 %mul60.us
  851.   %35 = load double, double* %arrayidx61.us, align 8, !tbaa !2
  852.   %add62.us = fadd fast double %35, %mul58.us
  853.   store double %add62.us, double* %arrayidx61.us, align 8, !tbaa !2
  854.   %mul63.us = fmul fast double %add49.us, %alpha
  855.   %mul65.us = mul nsw i64 %add27.us, %resIncr
  856.   %arrayidx66.us = getelementptr inbounds double, double* %res, i64 %mul65.us
  857.   %36 = load double, double* %arrayidx66.us, align 8, !tbaa !2
  858.   %add67.us = fadd fast double %36, %mul63.us
  859.   store double %add67.us, double* %arrayidx66.us, align 8, !tbaa !2
  860.   %indvar.next = add nuw nsw i64 %indvar, 1
  861.   %exitcond150 = icmp ne i64 %indvar.next, %10
  862.   br i1 %exitcond150, label %for.body.us, label %for.cond72.preheader
  863.  
  864. for.cond72.preheader:                             ; preds = %for.cond30.for.cond.cleanup32_crit_edge.us, %for.body.lr.ph, %if.end
  865.   %add49.us_mdyncache.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %add49.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  866.   %add45.us_mdyncache.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %add45.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  867.   %add41.us_mdyncache.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %add41.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  868.   %add37.us_mdyncache.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %add37.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  869.   %_mdyncache85.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %_malloccache84, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  870.   %_mdyncache90.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %_malloccache89, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  871.   %mul.i.i315.us_mdyncache.0 = phi i64* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %mul.i.i315.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  872.   %_mdyncache103.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %_malloccache102, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  873.   %mul.i.i319.us_mdyncache.0 = phi i64* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %mul.i.i319.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  874.   %_mdyncache115.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %_malloccache114, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  875.   %mul.i.i323.us_mdyncache.0 = phi i64* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %mul.i.i323.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  876.   %_mdyncache127.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %_malloccache126, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  877.   %mul.i.i327.us_mdyncache.0 = phi i64* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %mul.i.i327.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  878.   %37 = phi i8 [ 1, %for.body.lr.ph ], [ 2, %if.end ], [ 0, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  879.   %cmp73384 = icmp slt i64 %mul, %rows
  880.   br i1 %cmp73384, label %for.body75.lr.ph, label %invertdo.end
  881.  
  882. for.body75.lr.ph:                                 ; preds = %for.cond72.preheader
  883.   %38 = load i64, i64* %m_stride.i, align 8, !tbaa !29
  884.   %cmp94 = icmp slt i64 %alignedStart.0, 0
  885.   %cmp137380 = icmp sgt i64 %cols, 0
  886.   %m_data.i = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %rhs, i64 0, i32 0, i32 0
  887.   %39 = load double*, double** %m_data.i, align 8
  888.   %40 = add i64 %rows, -1
  889.   %41 = sub i64 %40, %mul
  890.   %42 = add nuw i64 %41, 1
  891.   %43 = mul nuw i64 %cols, %42
  892.   %mallocsize22 = mul i64 %43, 8
  893.   %malloccall23 = tail call i8* @malloc(i64 %mallocsize22)
  894.   %_malloccache24 = bitcast i8* %malloccall23 to double*
  895.   %malloccall28 = tail call i8* @malloc(i64 %mallocsize22)
  896.   %_malloccache29 = bitcast i8* %malloccall28 to double*
  897.   %mallocsize36 = mul i64 %42, 8
  898.   %malloccall37 = tail call i8* @malloc(i64 %mallocsize36)
  899.   %mul.i.i296.us_malloccache = bitcast i8* %malloccall37 to i64*
  900.   %malloccall45 = tail call i8* @malloc(i64 %mallocsize36)
  901.   %tmp076.2.lcssa.us_malloccache = bitcast i8* %malloccall45 to double*
  902.   br i1 %cmp94, label %for.body75.us.preheader, label %for.body75.preheader
  903.  
  904. for.body75.preheader:                             ; preds = %for.body75.lr.ph
  905.   %44 = sub i64 %rows, %mul
  906.   br label %for.body75
  907.  
  908. for.body75.us.preheader:                          ; preds = %for.body75.lr.ph
  909.   %malloccall48 = tail call i8* @malloc(i64 %mallocsize36)
  910.   %.pre406_malloccache = bitcast i8* %malloccall48 to double*
  911.   %malloccall50 = tail call i8* @malloc(i64 %mallocsize36)
  912.   %.pre407.pn_malloccache = bitcast i8* %malloccall50 to double*
  913.   %45 = sub i64 %rows, %mul
  914.   br label %for.body75.us
  915.  
  916. for.body75.us:                                    ; preds = %for.cond.cleanup138.us, %for.body75.us.preheader
  917.   %indvar2 = phi i64 [ 0, %for.body75.us.preheader ], [ %indvar.next3, %for.cond.cleanup138.us ]
  918.   %46 = add i64 %mul, %indvar2
  919.   %mul.i.i296.us = mul nsw i64 %38, %46
  920.   %47 = getelementptr i64, i64* %mul.i.i296.us_malloccache, i64 %indvar2
  921.   store i64 %mul.i.i296.us, i64* %47
  922.   %arrayidx.i.i297.us = getelementptr inbounds double, double* %4, i64 %mul.i.i296.us
  923.   %add.ptr.i287.us = getelementptr inbounds double, double* %arrayidx.i.i297.us, i64 %alignedStart.0
  924.   %.pre406 = load double, double* %add.ptr.i287.us, align 8, !tbaa !2
  925.   %48 = getelementptr double, double* %.pre406_malloccache, i64 %indvar2
  926.   store double %.pre406, double* %48
  927.   %.pre407.pn.in = getelementptr inbounds double, double* %39, i64 %alignedStart.0
  928.   %.pre407.pn = load double, double* %.pre407.pn.in, align 8, !tbaa !2
  929.   %49 = getelementptr double, double* %.pre407.pn_malloccache, i64 %indvar2
  930.   store double %.pre407.pn, double* %49
  931.   %ptmp0.2.us = fmul fast double %.pre407.pn, %.pre406
  932.   br i1 %cmp137380, label %for.body139.us, label %for.cond.cleanup138.us
  933.  
  934. for.cond.cleanup138.us:                           ; preds = %for.body139.us, %for.body75.us
  935.   %tmp076.2.lcssa.us = phi double [ %ptmp0.2.us, %for.body75.us ], [ %add144.us, %for.body139.us ]
  936.   %50 = getelementptr double, double* %tmp076.2.lcssa.us_malloccache, i64 %indvar2
  937.   store double %tmp076.2.lcssa.us, double* %50
  938.   %mul148.us = fmul fast double %tmp076.2.lcssa.us, %alpha
  939.   %mul149.us = mul nsw i64 %46, %resIncr
  940.   %arrayidx150.us = getelementptr inbounds double, double* %res, i64 %mul149.us
  941.   %51 = load double, double* %arrayidx150.us, align 8, !tbaa !2
  942.   %add151.us = fadd fast double %51, %mul148.us
  943.   store double %add151.us, double* %arrayidx150.us, align 8, !tbaa !2
  944.   %indvar.next3 = add i64 %indvar2, 1
  945.   %exitcond146 = icmp ne i64 %indvar.next3, %45
  946.   br i1 %exitcond146, label %for.body75.us, label %invertdo.end
  947.  
  948. for.body139.us:                                   ; preds = %for.body75.us, %for.body139.us
  949.   %j135.0382.us = phi i64 [ %inc146.us, %for.body139.us ], [ 0, %for.body75.us ]
  950.   %tmp076.2381.us = phi double [ %add144.us, %for.body139.us ], [ %ptmp0.2.us, %for.body75.us ]
  951.   %arrayidx.i275.us = getelementptr inbounds double, double* %arrayidx.i.i297.us, i64 %j135.0382.us
  952.   %52 = load double, double* %arrayidx.i275.us, align 8, !tbaa !2
  953.   %53 = mul nuw i64 %indvar2, %cols
  954.   %54 = add nuw i64 %j135.0382.us, %53
  955.   %55 = getelementptr double, double* %_malloccache24, i64 %54
  956.   store double %52, double* %55
  957.   %arrayidx.i.us = getelementptr inbounds double, double* %39, i64 %j135.0382.us
  958.   %56 = load double, double* %arrayidx.i.us, align 8, !tbaa !2
  959.   %57 = getelementptr double, double* %_malloccache29, i64 %54
  960.   store double %56, double* %57
  961.   %mul.i.i.us = fmul fast double %56, %52
  962.   %add144.us = fadd fast double %mul.i.i.us, %tmp076.2381.us
  963.   %inc146.us = add nuw nsw i64 %j135.0382.us, 1
  964.   %exitcond = icmp ne i64 %inc146.us, %cols
  965.   br i1 %exitcond, label %for.body139.us, label %for.cond.cleanup138.us
  966.  
  967. for.body75:                                       ; preds = %for.cond.cleanup138, %for.body75.preheader
  968.   %indvar4 = phi i64 [ 0, %for.body75.preheader ], [ %indvar.next5, %for.cond.cleanup138 ]
  969.   %58 = add i64 %mul, %indvar4
  970.   %mul.i.i296 = mul nsw i64 %38, %58
  971.   %59 = getelementptr i64, i64* %mul.i.i296.us_malloccache, i64 %indvar4
  972.   store i64 %mul.i.i296, i64* %59
  973.   %arrayidx.i.i297 = getelementptr inbounds double, double* %4, i64 %mul.i.i296
  974.   br i1 %cmp137380, label %for.body139, label %for.cond.cleanup138
  975.  
  976. for.cond.cleanup138:                              ; preds = %for.body139, %for.body75
  977.   %tmp076.2.lcssa = phi double [ 0.000000e+00, %for.body75 ], [ %add144, %for.body139 ]
  978.   %60 = getelementptr double, double* %tmp076.2.lcssa.us_malloccache, i64 %indvar4
  979.   store double %tmp076.2.lcssa, double* %60
  980.   %mul148 = fmul fast double %tmp076.2.lcssa, %alpha
  981.   %mul149 = mul nsw i64 %58, %resIncr
  982.   %arrayidx150 = getelementptr inbounds double, double* %res, i64 %mul149
  983.   %61 = load double, double* %arrayidx150, align 8, !tbaa !2
  984.   %add151 = fadd fast double %61, %mul148
  985.   store double %add151, double* %arrayidx150, align 8, !tbaa !2
  986.   %indvar.next5 = add i64 %indvar4, 1
  987.   %exitcond148 = icmp ne i64 %indvar.next5, %44
  988.   br i1 %exitcond148, label %for.body75, label %invertdo.end
  989.  
  990. for.body139:                                      ; preds = %for.body75, %for.body139
  991.   %j135.0382 = phi i64 [ %inc146, %for.body139 ], [ 0, %for.body75 ]
  992.   %tmp076.2381 = phi double [ %add144, %for.body139 ], [ 0.000000e+00, %for.body75 ]
  993.   %arrayidx.i275 = getelementptr inbounds double, double* %arrayidx.i.i297, i64 %j135.0382
  994.   %62 = load double, double* %arrayidx.i275, align 8, !tbaa !2
  995.   %63 = mul nuw i64 %indvar4, %cols
  996.   %64 = add nuw i64 %j135.0382, %63
  997.   %65 = getelementptr double, double* %_malloccache24, i64 %64
  998.   store double %62, double* %65
  999.   %arrayidx.i = getelementptr inbounds double, double* %39, i64 %j135.0382
  1000.   %66 = load double, double* %arrayidx.i, align 8, !tbaa !2
  1001.   %67 = getelementptr double, double* %_malloccache29, i64 %64
  1002.   store double %66, double* %67
  1003.   %mul.i.i = fmul fast double %66, %62
  1004.   %add144 = fadd fast double %mul.i.i, %tmp076.2381
  1005.   %inc146 = add nuw nsw i64 %j135.0382, 1
  1006.   %exitcond147 = icmp ne i64 %inc146, %cols
  1007.   br i1 %exitcond147, label %for.body139, label %for.cond.cleanup138
  1008.  
  1009. invertif.end:                                     ; preds = %invertfor.cond72.preheader, %invertfor.body.us.preheader
  1010.   %"alpha'de.0" = phi double [ %"alpha'de.3", %invertfor.cond72.preheader ], [ %146, %invertfor.body.us.preheader ]
  1011.   %68 = insertvalue { double } undef, double %"alpha'de.0", 0
  1012.   ret { double } %68
  1013.  
  1014. invertfor.body.us.preheader:                      ; preds = %invertfor.body.us
  1015.   %69 = bitcast double* %add49.us_mdyncache.0 to i8*
  1016.   %70 = bitcast double* %add45.us_mdyncache.0 to i8*
  1017.   tail call void @free(i8* %69)
  1018.   %71 = bitcast double* %add41.us_mdyncache.0 to i8*
  1019.   tail call void @free(i8* %70)
  1020.   %72 = bitcast double* %add37.us_mdyncache.0 to i8*
  1021.   tail call void @free(i8* %71)
  1022.   %73 = bitcast double* %_mdyncache85.0 to i8*
  1023.   tail call void @free(i8* %72)
  1024.   %74 = bitcast double* %_mdyncache90.0 to i8*
  1025.   tail call void @free(i8* %73)
  1026.   %75 = bitcast i64* %mul.i.i315.us_mdyncache.0 to i8*
  1027.   tail call void @free(i8* %74)
  1028.   %76 = bitcast double* %_mdyncache103.0 to i8*
  1029.   tail call void @free(i8* %75)
  1030.   %77 = bitcast i64* %mul.i.i319.us_mdyncache.0 to i8*
  1031.   tail call void @free(i8* %76)
  1032.   %78 = bitcast double* %_mdyncache115.0 to i8*
  1033.   tail call void @free(i8* %77)
  1034.   %79 = bitcast i64* %mul.i.i323.us_mdyncache.0 to i8*
  1035.   tail call void @free(i8* %78)
  1036.   %80 = bitcast double* %_mdyncache127.0 to i8*
  1037.   tail call void @free(i8* %79)
  1038.   %81 = bitcast i64* %mul.i.i327.us_mdyncache.0 to i8*
  1039.   tail call void @free(i8* %80)
  1040.   tail call void @free(i8* %81)
  1041.   br label %invertif.end
  1042.  
  1043. invertfor.body.us:                                ; preds = %invertfor.body33.us
  1044.   %82 = sub nsw i64 %"indvar'phi", 1
  1045.   %83 = icmp ne i64 %"indvar'phi", 0
  1046.   br i1 %83, label %invertfor.cond30.for.cond.cleanup32_crit_edge.us, label %invertfor.body.us.preheader
  1047.  
  1048. invertfor.body33.us:                              ; preds = %invertfor.cond30.for.cond.cleanup32_crit_edge.us, %invertfor.body33.us
  1049.   %"j.0391.us'phi" = phi i64 [ %147, %invertfor.cond30.for.cond.cleanup32_crit_edge.us ], [ %84, %invertfor.body33.us ]
  1050.   %84 = sub i64 %"j.0391.us'phi", 1
  1051.   %85 = add nuw i64 %"j.0391.us'phi", %122
  1052.   %86 = getelementptr double, double* %_mdyncache85.0, i64 %85
  1053.   %87 = load double, double* %86
  1054.   %diffe86 = fmul fast double %125, %87
  1055.   %88 = getelementptr double, double* %_mdyncache90.0, i64 %85
  1056.   %89 = load double, double* %88
  1057.   %diffe91 = fmul fast double %125, %89
  1058.   %90 = getelementptr i64, i64* %mul.i.i315.us_mdyncache.0, i64 %"indvar'phi"
  1059.   %91 = load i64, i64* %90
  1060.   %"'ip96" = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %"lhs'" to i64*
  1061.   %"'ip97" = load i64, i64* %"'ip96", align 8
  1062.   %"'ip98" = inttoptr i64 %"'ip97" to double*
  1063.   %"arrayidx.i.i316.us'ip" = getelementptr double, double* %"'ip98", i64 %91
  1064.   %"arrayidx.i300.us'ip" = getelementptr double, double* %"arrayidx.i.i316.us'ip", i64 %"j.0391.us'phi"
  1065.   %92 = load double, double* %"arrayidx.i300.us'ip"
  1066.   %93 = fadd fast double %92, %diffe86
  1067.   store double %93, double* %"arrayidx.i300.us'ip"
  1068.   %diffe99 = fmul fast double %132, %87
  1069.   %94 = getelementptr double, double* %_mdyncache103.0, i64 %85
  1070.   %95 = load double, double* %94
  1071.   %diffe104 = fmul fast double %132, %95
  1072.   %96 = fadd fast double %diffe91, %diffe104
  1073.   %97 = getelementptr i64, i64* %mul.i.i319.us_mdyncache.0, i64 %"indvar'phi"
  1074.   %98 = load i64, i64* %97
  1075.   %"'ip109" = load i64, i64* %"'ip96", align 8
  1076.   %"'ip110" = inttoptr i64 %"'ip109" to double*
  1077.   %"arrayidx.i.i320.us'ip" = getelementptr double, double* %"'ip110", i64 %98
  1078.   %"arrayidx.i303.us'ip" = getelementptr double, double* %"arrayidx.i.i320.us'ip", i64 %"j.0391.us'phi"
  1079.   %99 = load double, double* %"arrayidx.i303.us'ip"
  1080.   %100 = fadd fast double %99, %diffe99
  1081.   store double %100, double* %"arrayidx.i303.us'ip"
  1082.   %diffe111 = fmul fast double %139, %87
  1083.   %101 = getelementptr double, double* %_mdyncache115.0, i64 %85
  1084.   %102 = load double, double* %101
  1085.   %diffe116 = fmul fast double %139, %102
  1086.   %103 = fadd fast double %96, %diffe116
  1087.   %104 = getelementptr i64, i64* %mul.i.i323.us_mdyncache.0, i64 %"indvar'phi"
  1088.   %105 = load i64, i64* %104
  1089.   %"'ip121" = load i64, i64* %"'ip96", align 8
  1090.   %"'ip122" = inttoptr i64 %"'ip121" to double*
  1091.   %"arrayidx.i.i324.us'ip" = getelementptr double, double* %"'ip122", i64 %105
  1092.   %"arrayidx.i306.us'ip" = getelementptr double, double* %"arrayidx.i.i324.us'ip", i64 %"j.0391.us'phi"
  1093.   %106 = load double, double* %"arrayidx.i306.us'ip"
  1094.   %107 = fadd fast double %106, %diffe111
  1095.   store double %107, double* %"arrayidx.i306.us'ip"
  1096.   %diffe123 = fmul fast double %145, %87
  1097.   %108 = getelementptr double, double* %_mdyncache127.0, i64 %85
  1098.   %109 = load double, double* %108
  1099.   %diffe128 = fmul fast double %145, %109
  1100.   %110 = fadd fast double %103, %diffe128
  1101.   %111 = getelementptr i64, i64* %mul.i.i327.us_mdyncache.0, i64 %"indvar'phi"
  1102.   %112 = load i64, i64* %111
  1103.   %"'ip133" = load i64, i64* %"'ip96", align 8
  1104.   %"'ip134" = inttoptr i64 %"'ip133" to double*
  1105.   %"arrayidx.i.i328.us'ip" = getelementptr double, double* %"'ip134", i64 %112
  1106.   %"arrayidx.i309.us'ip" = getelementptr double, double* %"arrayidx.i.i328.us'ip", i64 %"j.0391.us'phi"
  1107.   %113 = load double, double* %"arrayidx.i309.us'ip"
  1108.   %114 = fadd fast double %113, %diffe123
  1109.   store double %114, double* %"arrayidx.i309.us'ip"
  1110.   %"'ip135" = bitcast %"class.Eigen::internal::const_blas_data_mapper.96"* %"rhs'" to i64*
  1111.   %"'ip136" = load i64, i64* %"'ip135", align 8
  1112.   %"'ip137" = inttoptr i64 %"'ip136" to double*
  1113.   %"arrayidx.i312.us'ip" = getelementptr double, double* %"'ip137", i64 %"j.0391.us'phi"
  1114.   %115 = load double, double* %"arrayidx.i312.us'ip"
  1115.   %116 = fadd fast double %115, %110
  1116.   store double %116, double* %"arrayidx.i312.us'ip"
  1117.   %117 = icmp ne i64 %"j.0391.us'phi", 0
  1118.   br i1 %117, label %invertfor.body33.us, label %invertfor.body.us
  1119.  
  1120. invertfor.cond30.for.cond.cleanup32_crit_edge.us: ; preds = %invertfor.cond72.preheader.loopexit, %invertfor.body.us
  1121.   %"alpha'de.2" = phi double [ %"alpha'de.3", %invertfor.cond72.preheader.loopexit ], [ %146, %invertfor.body.us ]
  1122.   %"add49.us'de.1" = phi double [ 0.000000e+00, %invertfor.cond72.preheader.loopexit ], [ 0.000000e+00, %invertfor.body.us ]
  1123.   %"add45.us'de.1" = phi double [ 0.000000e+00, %invertfor.cond72.preheader.loopexit ], [ 0.000000e+00, %invertfor.body.us ]
  1124.   %"add41.us'de.1" = phi double [ 0.000000e+00, %invertfor.cond72.preheader.loopexit ], [ 0.000000e+00, %invertfor.body.us ]
  1125.   %"add37.us'de.1" = phi double [ 0.000000e+00, %invertfor.cond72.preheader.loopexit ], [ 0.000000e+00, %invertfor.body.us ]
  1126.   %"indvar'phi" = phi i64 [ %151, %invertfor.cond72.preheader.loopexit ], [ %82, %invertfor.body.us ]
  1127.   %118 = shl i64 %"indvar'phi", 2
  1128.   %119 = or i64 %118, 3
  1129.   %120 = mul i64 %119, %resIncr
  1130.   %"arrayidx66.us'ip" = getelementptr double, double* %"res'", i64 %120
  1131.   %121 = load double, double* %"arrayidx66.us'ip"
  1132.   store double %121, double* %"arrayidx66.us'ip"
  1133.   %diffeadd49.us = fmul fast double %121, %alpha
  1134.   %122 = mul nuw i64 %"indvar'phi", %cols
  1135.   %123 = getelementptr double, double* %add49.us_mdyncache.0, i64 %122
  1136.   %124 = load double, double* %123
  1137.   %diffealpha63 = fmul fast double %121, %124
  1138.   %125 = fadd fast double %"add49.us'de.1", %diffeadd49.us
  1139.   %126 = fadd fast double %"alpha'de.2", %diffealpha63
  1140.   %127 = or i64 %118, 2
  1141.   %128 = mul i64 %127, %resIncr
  1142.   %"arrayidx61.us'ip" = getelementptr double, double* %"res'", i64 %128
  1143.   %129 = load double, double* %"arrayidx61.us'ip"
  1144.   store double %129, double* %"arrayidx61.us'ip"
  1145.   %diffeadd45.us = fmul fast double %129, %alpha
  1146.   %130 = getelementptr double, double* %add45.us_mdyncache.0, i64 %122
  1147.   %131 = load double, double* %130
  1148.   %diffealpha69 = fmul fast double %129, %131
  1149.   %132 = fadd fast double %"add45.us'de.1", %diffeadd45.us
  1150.   %133 = fadd fast double %126, %diffealpha69
  1151.   %134 = or i64 %118, 1
  1152.   %135 = mul i64 %134, %resIncr
  1153.   %"arrayidx56.us'ip" = getelementptr double, double* %"res'", i64 %135
  1154.   %136 = load double, double* %"arrayidx56.us'ip"
  1155.   store double %136, double* %"arrayidx56.us'ip"
  1156.   %diffeadd41.us = fmul fast double %136, %alpha
  1157.   %137 = getelementptr double, double* %add41.us_mdyncache.0, i64 %122
  1158.   %138 = load double, double* %137
  1159.   %diffealpha75 = fmul fast double %136, %138
  1160.   %139 = fadd fast double %"add41.us'de.1", %diffeadd41.us
  1161.   %140 = fadd fast double %133, %diffealpha75
  1162.   %141 = mul i64 %118, %resIncr
  1163.   %"arrayidx.us'ip" = getelementptr double, double* %"res'", i64 %141
  1164.   %142 = load double, double* %"arrayidx.us'ip"
  1165.   store double %142, double* %"arrayidx.us'ip"
  1166.   %diffeadd37.us = fmul fast double %142, %alpha
  1167.   %143 = getelementptr double, double* %add37.us_mdyncache.0, i64 %122
  1168.   %144 = load double, double* %143
  1169.   %diffealpha81 = fmul fast double %142, %144
  1170.   %145 = fadd fast double %"add37.us'de.1", %diffeadd37.us
  1171.   %146 = fadd fast double %140, %diffealpha81
  1172.   %147 = add i64 %cols, -1
  1173.   br label %invertfor.body33.us
  1174.  
  1175. invertfor.cond72.preheader.loopexit:              ; preds = %invertfor.cond72.preheader
  1176.   %148 = icmp sgt i64 %mul, 4
  1177.   %149 = select i1 %148, i64 %mul, i64 4
  1178.   %150 = add i64 %149, -1
  1179.   %151 = lshr i64 %150, 2
  1180.   br label %invertfor.cond30.for.cond.cleanup32_crit_edge.us
  1181.  
  1182. invertfor.cond72.preheader:                       ; preds = %invertfor.body75.preheader, %invertfor.body75.us.preheader, %invertdo.end
  1183.   %"alpha'de.3" = phi double [ 0.000000e+00, %invertdo.end ], [ %180, %invertfor.body75.us.preheader ], [ %208, %invertfor.body75.preheader ]
  1184.   %cond = icmp eq i8 %37, 0
  1185.   br i1 %cond, label %invertfor.cond72.preheader.loopexit, label %invertif.end
  1186.  
  1187. invertfor.body75.preheader:                       ; preds = %invertfor.body75
  1188.   %152 = bitcast double* %_mdyncache.0 to i8*
  1189.   %153 = bitcast double* %_mdyncache9.0 to i8*
  1190.   tail call void @free(i8* %152)
  1191.   %154 = bitcast i64* %mul.i.i296_mdyncache.0 to i8*
  1192.   tail call void @free(i8* %153)
  1193.   %155 = bitcast double* %tmp076.2.lcssa_mdyncache.0 to i8*
  1194.   tail call void @free(i8* %154)
  1195.   tail call void @free(i8* %155)
  1196.   br label %invertfor.cond72.preheader
  1197.  
  1198. invertfor.body75.us.preheader:                    ; preds = %invertfor.body75.us
  1199.   %156 = bitcast double* %_mdyncache25.0 to i8*
  1200.   %157 = bitcast double* %_mdyncache30.0 to i8*
  1201.   tail call void @free(i8* %156)
  1202.   %158 = bitcast i64* %mul.i.i296.us_mdyncache.0 to i8*
  1203.   tail call void @free(i8* %157)
  1204.   %159 = bitcast double* %tmp076.2.lcssa.us_mdyncache.0 to i8*
  1205.   tail call void @free(i8* %158)
  1206.   %160 = bitcast double* %.pre406_mdyncache.0 to i8*
  1207.   tail call void @free(i8* %159)
  1208.   %161 = bitcast double* %.pre407.pn_mdyncache.0 to i8*
  1209.   tail call void @free(i8* %160)
  1210.   tail call void @free(i8* %161)
  1211.   br label %invertfor.cond72.preheader
  1212.  
  1213. invertfor.body75.us:                              ; preds = %invertfor.body139.us, %invertfor.cond.cleanup138.us
  1214.   %"mul.i.i.us'de.0" = phi double [ %"mul.i.i.us'de.1", %invertfor.cond.cleanup138.us ], [ 0.000000e+00, %invertfor.body139.us ]
  1215.   %"tmp076.2381.us'de.0" = phi double [ %"tmp076.2381.us'de.1", %invertfor.cond.cleanup138.us ], [ 0.000000e+00, %invertfor.body139.us ]
  1216.   %"'de32.0" = phi double [ %"'de32.1", %invertfor.cond.cleanup138.us ], [ 0.000000e+00, %invertfor.body139.us ]
  1217.   %"'de33.0" = phi double [ %"'de33.1", %invertfor.cond.cleanup138.us ], [ 0.000000e+00, %invertfor.body139.us ]
  1218.   %"ptmp0.2.us'de.0" = phi double [ %diffetmp076.2.lcssa.us, %invertfor.cond.cleanup138.us ], [ %184, %invertfor.body139.us ]
  1219.   %162 = getelementptr double, double* %.pre406_mdyncache.0, i64 %"indvar2'phi"
  1220.   %163 = load double, double* %162
  1221.   %diffe.pre407.pn = fmul fast double %"ptmp0.2.us'de.0", %163
  1222.   %164 = getelementptr double, double* %.pre407.pn_mdyncache.0, i64 %"indvar2'phi"
  1223.   %165 = load double, double* %164
  1224.   %diffe.pre406 = fmul fast double %"ptmp0.2.us'de.0", %165
  1225.   %"m_data.i'ip51" = getelementptr %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %"rhs'", i64 0, i32 0, i32 0
  1226.   %"'ip52" = load double*, double** %"m_data.i'ip51", align 8
  1227.   %".pre407.pn.in'ip" = getelementptr double, double* %"'ip52", i64 %alignedStart.0
  1228.   %166 = load double, double* %".pre407.pn.in'ip"
  1229.   %167 = fadd fast double %166, %diffe.pre407.pn
  1230.   store double %167, double* %".pre407.pn.in'ip"
  1231.   %168 = getelementptr i64, i64* %mul.i.i296.us_mdyncache.0, i64 %"indvar2'phi"
  1232.   %169 = load i64, i64* %168
  1233.   %"'ip53" = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %"lhs'" to i64*
  1234.   %"'ip54" = load i64, i64* %"'ip53", align 8
  1235.   %"'ip55" = inttoptr i64 %"'ip54" to double*
  1236.   %"arrayidx.i.i297.us'ip56" = getelementptr double, double* %"'ip55", i64 %169
  1237.   %"add.ptr.i287.us'ip" = getelementptr double, double* %"arrayidx.i.i297.us'ip56", i64 %alignedStart.0
  1238.   %170 = load double, double* %"add.ptr.i287.us'ip"
  1239.   %171 = fadd fast double %170, %diffe.pre406
  1240.   store double %171, double* %"add.ptr.i287.us'ip"
  1241.   %172 = icmp ne i64 %"indvar2'phi", 0
  1242.   br i1 %172, label %invertfor.cond.cleanup138.us, label %invertfor.body75.us.preheader
  1243.  
  1244. invertfor.cond.cleanup138.us.loopexit:            ; preds = %invertfor.cond.cleanup138.us
  1245.   %173 = add i64 %cols, -1
  1246.   br label %invertfor.body139.us
  1247.  
  1248. invertfor.cond.cleanup138.us:                     ; preds = %invertdo.end.loopexit, %invertfor.body75.us
  1249.   %"alpha'de.5" = phi double [ 0.000000e+00, %invertdo.end.loopexit ], [ %180, %invertfor.body75.us ]
  1250.   %"mul.i.i.us'de.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit ], [ %"mul.i.i.us'de.0", %invertfor.body75.us ]
  1251.   %"tmp076.2381.us'de.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit ], [ %"tmp076.2381.us'de.0", %invertfor.body75.us ]
  1252.   %"'de32.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit ], [ %"'de32.0", %invertfor.body75.us ]
  1253.   %"'de33.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit ], [ %"'de33.0", %invertfor.body75.us ]
  1254.   %"indvar2'phi" = phi i64 [ %229, %invertdo.end.loopexit ], [ %174, %invertfor.body75.us ]
  1255.   %174 = sub i64 %"indvar2'phi", 1
  1256.   %175 = add i64 %mul, %"indvar2'phi"
  1257.   %176 = mul i64 %175, %resIncr
  1258.   %"arrayidx150.us'ip" = getelementptr double, double* %"res'", i64 %176
  1259.   %177 = load double, double* %"arrayidx150.us'ip"
  1260.   store double %177, double* %"arrayidx150.us'ip"
  1261.   %diffetmp076.2.lcssa.us = fmul fast double %177, %alpha
  1262.   %178 = getelementptr double, double* %tmp076.2.lcssa.us_mdyncache.0, i64 %"indvar2'phi"
  1263.   %179 = load double, double* %178
  1264.   %diffealpha46 = fmul fast double %177, %179
  1265.   %180 = fadd fast double %"alpha'de.5", %diffealpha46
  1266.   %181 = icmp sgt i64 %cols, 0
  1267.   br i1 %181, label %invertfor.cond.cleanup138.us.loopexit, label %invertfor.body75.us
  1268.  
  1269. invertfor.body139.us:                             ; preds = %invertfor.body139.us, %invertfor.cond.cleanup138.us.loopexit
  1270.   %"add144.us'de.2" = phi double [ %diffetmp076.2.lcssa.us, %invertfor.cond.cleanup138.us.loopexit ], [ %184, %invertfor.body139.us ]
  1271.   %"mul.i.i.us'de.2" = phi double [ %"mul.i.i.us'de.1", %invertfor.cond.cleanup138.us.loopexit ], [ 0.000000e+00, %invertfor.body139.us ]
  1272.   %"tmp076.2381.us'de.2" = phi double [ %"tmp076.2381.us'de.1", %invertfor.cond.cleanup138.us.loopexit ], [ 0.000000e+00, %invertfor.body139.us ]
  1273.   %"'de32.2" = phi double [ %"'de32.1", %invertfor.cond.cleanup138.us.loopexit ], [ 0.000000e+00, %invertfor.body139.us ]
  1274.   %"'de33.2" = phi double [ %"'de33.1", %invertfor.cond.cleanup138.us.loopexit ], [ 0.000000e+00, %invertfor.body139.us ]
  1275.   %"j135.0382.us'phi" = phi i64 [ %173, %invertfor.cond.cleanup138.us.loopexit ], [ %182, %invertfor.body139.us ]
  1276.   %182 = sub i64 %"j135.0382.us'phi", 1
  1277.   %183 = fadd fast double %"mul.i.i.us'de.2", %"add144.us'de.2"
  1278.   %184 = fadd fast double %"tmp076.2381.us'de.2", %"add144.us'de.2"
  1279.   %185 = mul nuw i64 %"indvar2'phi", %cols
  1280.   %186 = add nuw i64 %"j135.0382.us'phi", %185
  1281.   %187 = getelementptr double, double* %_mdyncache25.0, i64 %186
  1282.   %188 = load double, double* %187
  1283.   %diffe26 = fmul fast double %183, %188
  1284.   %189 = getelementptr double, double* %_mdyncache30.0, i64 %186
  1285.   %190 = load double, double* %189
  1286.   %diffe31 = fmul fast double %183, %190
  1287.   %191 = fadd fast double %"'de32.2", %diffe26
  1288.   %192 = fadd fast double %"'de33.2", %diffe31
  1289.   %"m_data.i'ip34" = getelementptr %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %"rhs'", i64 0, i32 0, i32 0
  1290.   %"'ip35" = load double*, double** %"m_data.i'ip34", align 8
  1291.   %"arrayidx.i.us'ip" = getelementptr double, double* %"'ip35", i64 %"j135.0382.us'phi"
  1292.   %193 = load double, double* %"arrayidx.i.us'ip"
  1293.   %194 = fadd fast double %193, %191
  1294.   store double %194, double* %"arrayidx.i.us'ip"
  1295.   %195 = getelementptr i64, i64* %mul.i.i296.us_mdyncache.0, i64 %"indvar2'phi"
  1296.   %196 = load i64, i64* %195
  1297.   %"'ip38" = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %"lhs'" to i64*
  1298.   %"'ip39" = load i64, i64* %"'ip38", align 8
  1299.   %"'ip40" = inttoptr i64 %"'ip39" to double*
  1300.   %"arrayidx.i.i297.us'ip" = getelementptr double, double* %"'ip40", i64 %196
  1301.   %"arrayidx.i275.us'ip" = getelementptr double, double* %"arrayidx.i.i297.us'ip", i64 %"j135.0382.us'phi"
  1302.   %197 = load double, double* %"arrayidx.i275.us'ip"
  1303.   %198 = fadd fast double %197, %192
  1304.   store double %198, double* %"arrayidx.i275.us'ip"
  1305.   %199 = icmp ne i64 %"j135.0382.us'phi", 0
  1306.   br i1 %199, label %invertfor.body139.us, label %invertfor.body75.us
  1307.  
  1308. invertfor.body75:                                 ; preds = %invertfor.body139, %invertfor.cond.cleanup138
  1309.   %"'de.0" = phi double [ %"'de.1", %invertfor.cond.cleanup138 ], [ 0.000000e+00, %invertfor.body139 ]
  1310.   %"'de11.0" = phi double [ %"'de11.1", %invertfor.cond.cleanup138 ], [ 0.000000e+00, %invertfor.body139 ]
  1311.   %"tmp076.2381'de.0" = phi double [ %"tmp076.2381'de.1", %invertfor.cond.cleanup138 ], [ 0.000000e+00, %invertfor.body139 ]
  1312.   %"mul.i.i'de.0" = phi double [ %"mul.i.i'de.1", %invertfor.cond.cleanup138 ], [ 0.000000e+00, %invertfor.body139 ]
  1313.   %200 = icmp ne i64 %"indvar4'phi", 0
  1314.   br i1 %200, label %invertfor.cond.cleanup138, label %invertfor.body75.preheader
  1315.  
  1316. invertfor.cond.cleanup138.loopexit:               ; preds = %invertfor.cond.cleanup138
  1317.   %201 = add i64 %cols, -1
  1318.   br label %invertfor.body139
  1319.  
  1320. invertfor.cond.cleanup138:                        ; preds = %invertdo.end.loopexit1, %invertfor.body75
  1321.   %"'de.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit1 ], [ %"'de.0", %invertfor.body75 ]
  1322.   %"'de11.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit1 ], [ %"'de11.0", %invertfor.body75 ]
  1323.   %"alpha'de.6" = phi double [ 0.000000e+00, %invertdo.end.loopexit1 ], [ %208, %invertfor.body75 ]
  1324.   %"tmp076.2381'de.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit1 ], [ %"tmp076.2381'de.0", %invertfor.body75 ]
  1325.   %"mul.i.i'de.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit1 ], [ %"mul.i.i'de.0", %invertfor.body75 ]
  1326.   %"indvar4'phi" = phi i64 [ %231, %invertdo.end.loopexit1 ], [ %202, %invertfor.body75 ]
  1327.   %202 = sub i64 %"indvar4'phi", 1
  1328.   %203 = add i64 %mul, %"indvar4'phi"
  1329.   %204 = mul i64 %203, %resIncr
  1330.   %"arrayidx150'ip" = getelementptr double, double* %"res'", i64 %204
  1331.   %205 = load double, double* %"arrayidx150'ip"
  1332.   store double %205, double* %"arrayidx150'ip"
  1333.   %diffetmp076.2.lcssa = fmul fast double %205, %alpha
  1334.   %206 = getelementptr double, double* %tmp076.2.lcssa_mdyncache.0, i64 %"indvar4'phi"
  1335.   %207 = load double, double* %206
  1336.   %diffealpha = fmul fast double %205, %207
  1337.   %208 = fadd fast double %"alpha'de.6", %diffealpha
  1338.   %209 = icmp sgt i64 %cols, 0
  1339.   br i1 %209, label %invertfor.cond.cleanup138.loopexit, label %invertfor.body75
  1340.  
  1341. invertfor.body139:                                ; preds = %invertfor.body139, %invertfor.cond.cleanup138.loopexit
  1342.   %"'de.2" = phi double [ %"'de.1", %invertfor.cond.cleanup138.loopexit ], [ 0.000000e+00, %invertfor.body139 ]
  1343.   %"'de11.2" = phi double [ %"'de11.1", %invertfor.cond.cleanup138.loopexit ], [ 0.000000e+00, %invertfor.body139 ]
  1344.   %"tmp076.2381'de.2" = phi double [ %"tmp076.2381'de.1", %invertfor.cond.cleanup138.loopexit ], [ 0.000000e+00, %invertfor.body139 ]
  1345.   %"mul.i.i'de.2" = phi double [ %"mul.i.i'de.1", %invertfor.cond.cleanup138.loopexit ], [ 0.000000e+00, %invertfor.body139 ]
  1346.   %"add144'de.2" = phi double [ %diffetmp076.2.lcssa, %invertfor.cond.cleanup138.loopexit ], [ %212, %invertfor.body139 ]
  1347.   %"j135.0382'phi" = phi i64 [ %201, %invertfor.cond.cleanup138.loopexit ], [ %210, %invertfor.body139 ]
  1348.   %210 = sub i64 %"j135.0382'phi", 1
  1349.   %211 = fadd fast double %"mul.i.i'de.2", %"add144'de.2"
  1350.   %212 = fadd fast double %"tmp076.2381'de.2", %"add144'de.2"
  1351.   %213 = mul nuw i64 %"indvar4'phi", %cols
  1352.   %214 = add nuw i64 %"j135.0382'phi", %213
  1353.   %215 = getelementptr double, double* %_mdyncache.0, i64 %214
  1354.   %216 = load double, double* %215
  1355.   %diffe = fmul fast double %211, %216
  1356.   %217 = getelementptr double, double* %_mdyncache9.0, i64 %214
  1357.   %218 = load double, double* %217
  1358.   %diffe10 = fmul fast double %211, %218
  1359.   %219 = fadd fast double %"'de.2", %diffe
  1360.   %220 = fadd fast double %"'de11.2", %diffe10
  1361.   %"m_data.i'ip" = getelementptr %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %"rhs'", i64 0, i32 0, i32 0
  1362.   %"'ip" = load double*, double** %"m_data.i'ip", align 8
  1363.   %"arrayidx.i'ip" = getelementptr double, double* %"'ip", i64 %"j135.0382'phi"
  1364.   %221 = load double, double* %"arrayidx.i'ip"
  1365.   %222 = fadd fast double %221, %219
  1366.   store double %222, double* %"arrayidx.i'ip"
  1367.   %223 = getelementptr i64, i64* %mul.i.i296_mdyncache.0, i64 %"indvar4'phi"
  1368.   %224 = load i64, i64* %223
  1369.   %"'ip14" = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %"lhs'" to i64*
  1370.   %"'ip15" = load i64, i64* %"'ip14", align 8
  1371.   %"'ip16" = inttoptr i64 %"'ip15" to double*
  1372.   %"arrayidx.i.i297'ip" = getelementptr double, double* %"'ip16", i64 %224
  1373.   %"arrayidx.i275'ip" = getelementptr double, double* %"arrayidx.i.i297'ip", i64 %"j135.0382'phi"
  1374.   %225 = load double, double* %"arrayidx.i275'ip"
  1375.   %226 = fadd fast double %225, %220
  1376.   store double %226, double* %"arrayidx.i275'ip"
  1377.   %227 = icmp ne i64 %"j135.0382'phi", 0
  1378.   br i1 %227, label %invertfor.body139, label %invertfor.body75
  1379.  
  1380. invertdo.end.loopexit:                            ; preds = %invertdo.end
  1381.   %228 = add i64 %rows, -1
  1382.   %229 = sub i64 %228, %mul
  1383.   br label %invertfor.cond.cleanup138.us
  1384.  
  1385. invertdo.end.loopexit1:                           ; preds = %invertdo.end
  1386.   %230 = add i64 %rows, -1
  1387.   %231 = sub i64 %230, %mul
  1388.   br label %invertfor.cond.cleanup138
  1389.  
  1390. invertdo.end:                                     ; preds = %for.cond.cleanup138, %for.cond.cleanup138.us, %for.cond72.preheader
  1391.   %_mdyncache.0 = phi double* [ undef, %for.cond72.preheader ], [ undef, %for.cond.cleanup138.us ], [ %_malloccache24, %for.cond.cleanup138 ]
  1392.   %_mdyncache9.0 = phi double* [ undef, %for.cond72.preheader ], [ undef, %for.cond.cleanup138.us ], [ %_malloccache29, %for.cond.cleanup138 ]
  1393.   %mul.i.i296_mdyncache.0 = phi i64* [ undef, %for.cond72.preheader ], [ undef, %for.cond.cleanup138.us ], [ %mul.i.i296.us_malloccache, %for.cond.cleanup138 ]
  1394.   %tmp076.2.lcssa_mdyncache.0 = phi double* [ undef, %for.cond72.preheader ], [ undef, %for.cond.cleanup138.us ], [ %tmp076.2.lcssa.us_malloccache, %for.cond.cleanup138 ]
  1395.   %_mdyncache25.0 = phi double* [ undef, %for.cond72.preheader ], [ %_malloccache24, %for.cond.cleanup138.us ], [ undef, %for.cond.cleanup138 ]
  1396.   %_mdyncache30.0 = phi double* [ undef, %for.cond72.preheader ], [ %_malloccache29, %for.cond.cleanup138.us ], [ undef, %for.cond.cleanup138 ]
  1397.   %mul.i.i296.us_mdyncache.0 = phi i64* [ undef, %for.cond72.preheader ], [ %mul.i.i296.us_malloccache, %for.cond.cleanup138.us ], [ undef, %for.cond.cleanup138 ]
  1398.   %tmp076.2.lcssa.us_mdyncache.0 = phi double* [ undef, %for.cond72.preheader ], [ %tmp076.2.lcssa.us_malloccache, %for.cond.cleanup138.us ], [ undef, %for.cond.cleanup138 ]
  1399.   %.pre406_mdyncache.0 = phi double* [ undef, %for.cond72.preheader ], [ %.pre406_malloccache, %for.cond.cleanup138.us ], [ undef, %for.cond.cleanup138 ]
  1400.   %.pre407.pn_mdyncache.0 = phi double* [ undef, %for.cond72.preheader ], [ %.pre407.pn_malloccache, %for.cond.cleanup138.us ], [ undef, %for.cond.cleanup138 ]
  1401.   %232 = phi i8 [ 2, %for.cond72.preheader ], [ 1, %for.cond.cleanup138.us ], [ 0, %for.cond.cleanup138 ]
  1402.   switch i8 %232, label %invertfor.cond72.preheader [
  1403.     i8 0, label %invertdo.end.loopexit1
  1404.     i8 1, label %invertdo.end.loopexit
  1405.   ]
  1406. }
  1407.  
  1408. declare noalias i8* @malloc(i64)
  1409.  
  1410. declare void @free(i8*)
  1411.  
  1412. ; Function Attrs: nounwind uwtable
  1413. define internal {} @diffe_ZN5Eigen8internal19gemv_dense_selectorILi2ELi1ELb1EE3runINS_9TransposeIKNS_6MatrixIdLi100ELi40ELi0ELi100ELi40EEEEENS4_IKNS5_IdLi1ELi100ELi1ELi1ELi100EEEEENS4_INS5_IdLi1ELi40ELi1ELi1ELi40EEEEEEEvRKT_RKT0_RT1_RKNSK_6ScalarE.2(%"class.Eigen::Transpose.82"* dereferenceable(8) %lhs, %"class.Eigen::Transpose.82"* %"lhs'", %"class.Eigen::Transpose.89"* dereferenceable(8) %rhs, %"class.Eigen::Transpose.89"* %"rhs'", %"class.Eigen::Transpose"* dereferenceable(8) %dest, %"class.Eigen::Transpose"* %"dest'", double* dereferenceable(8) %alpha, double* %"alpha'") local_unnamed_addr #0 align 2 {
  1414. entry:
  1415.   %ref.tmp = alloca %"class.Eigen::internal::const_blas_data_mapper", align 8
  1416.   %ref.tmp35 = alloca %"class.Eigen::internal::const_blas_data_mapper.96", align 8
  1417.   %"ref.tmp35'ip" = alloca %"class.Eigen::internal::const_blas_data_mapper.96", align 8
  1418.   %"ref.tmp'ip" = alloca %"class.Eigen::internal::const_blas_data_mapper", align 8
  1419.   %0 = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %"ref.tmp'ip" to i8*
  1420.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %0, i8 0, i64 16, i1 false)
  1421.   %1 = bitcast %"class.Eigen::internal::const_blas_data_mapper.96"* %"ref.tmp35'ip" to i8*
  1422.   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %1, i8 0, i64 16, i1 false)
  1423.   %m_matrix.i.i = getelementptr inbounds %"class.Eigen::Transpose.82", %"class.Eigen::Transpose.82"* %lhs, i64 0, i32 0
  1424.   %2 = load %"class.Eigen::Matrix"*, %"class.Eigen::Matrix"** %m_matrix.i.i, align 8, !tbaa !22
  1425.   %m_matrix.i.i45 = getelementptr inbounds %"class.Eigen::Transpose.89", %"class.Eigen::Transpose.89"* %rhs, i64 0, i32 0
  1426.   %3 = load %"class.Eigen::Matrix.2"*, %"class.Eigen::Matrix.2"** %m_matrix.i.i45, align 8, !tbaa !24
  1427.   %4 = load double, double* %alpha, align 8, !tbaa !2
  1428.   %arraydecay.i.i.i59 = getelementptr inbounds %"class.Eigen::Matrix.2", %"class.Eigen::Matrix.2"* %3, i64 0, i32 0, i32 0, i32 0, i32 0, i64 0
  1429.   %cmp = icmp eq %"class.Eigen::Matrix.2"* %3, null
  1430.   br i1 %cmp, label %cond.end, label %_ZN5Eigen8internal28aligned_stack_memory_handlerIdED2Ev.exit
  1431.  
  1432. cond.end:                                         ; preds = %entry
  1433.   %5 = alloca [100 x double], align 16
  1434.   %.sub = getelementptr inbounds [100 x double], [100 x double]* %5, i64 0, i64 0
  1435.   br label %_ZN5Eigen8internal28aligned_stack_memory_handlerIdED2Ev.exit
  1436.  
  1437. _ZN5Eigen8internal28aligned_stack_memory_handlerIdED2Ev.exit: ; preds = %cond.end, %entry
  1438.   %cond20 = phi double* [ %.sub, %cond.end ], [ %arraydecay.i.i.i59, %entry ]
  1439.   %6 = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %ref.tmp to i8*
  1440.   call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %6) #3
  1441.   %arraydecay.i.i.i50 = getelementptr inbounds %"class.Eigen::Matrix", %"class.Eigen::Matrix"* %2, i64 0, i32 0, i32 0, i32 0, i32 0, i64 0
  1442.   %m_data.i.i47 = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper", %"class.Eigen::internal::const_blas_data_mapper"* %ref.tmp, i64 0, i32 0, i32 0
  1443.   store double* %arraydecay.i.i.i50, double** %m_data.i.i47, align 8, !tbaa !26
  1444.   %m_stride.i.i48 = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper", %"class.Eigen::internal::const_blas_data_mapper"* %ref.tmp, i64 0, i32 0, i32 1
  1445.   store i64 100, i64* %m_stride.i.i48, align 8, !tbaa !29
  1446.   %7 = bitcast %"class.Eigen::internal::const_blas_data_mapper.96"* %ref.tmp35 to i8*
  1447.   call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %7) #3
  1448.   %m_data.i.i = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %ref.tmp35, i64 0, i32 0, i32 0
  1449.   store double* %cond20, double** %m_data.i.i, align 8, !tbaa !30
  1450.   %m_stride.i.i = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %ref.tmp35, i64 0, i32 0, i32 1
  1451.   store i64 1, i64* %m_stride.i.i, align 8, !tbaa !32
  1452.   %m_matrix.i.i46 = getelementptr inbounds %"class.Eigen::Transpose", %"class.Eigen::Transpose"* %dest, i64 0, i32 0
  1453.   %8 = load %"class.Eigen::Matrix.12"*, %"class.Eigen::Matrix.12"** %m_matrix.i.i46, align 8, !tbaa !33
  1454.   %arraydecay.i.i.i = getelementptr inbounds %"class.Eigen::Matrix.12", %"class.Eigen::Matrix.12"* %8, i64 0, i32 0, i32 0, i32 0, i32 0, i64 0
  1455.   call void @_ZN5Eigen8internal29general_matrix_vector_productIldNS0_22const_blas_data_mapperIdlLi1EEELi1ELb0EdNS2_IdlLi0EEELb0ELi0EE3runEllRKS3_RKS4_Pdld(i64 40, i64 100, %"class.Eigen::internal::const_blas_data_mapper"* nonnull dereferenceable(16) %ref.tmp, %"class.Eigen::internal::const_blas_data_mapper.96"* nonnull dereferenceable(16) %ref.tmp35, double* %arraydecay.i.i.i, i64 1, double %4)
  1456.   call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %7) #3
  1457.   call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %6) #3
  1458.   %"m_matrix.i.i46'ip" = getelementptr %"class.Eigen::Transpose", %"class.Eigen::Transpose"* %"dest'", i64 0, i32 0
  1459.   %"'ip" = load %"class.Eigen::Matrix.12"*, %"class.Eigen::Matrix.12"** %"m_matrix.i.i46'ip", align 8
  1460.   %"arraydecay.i.i.i'ip" = getelementptr %"class.Eigen::Matrix.12", %"class.Eigen::Matrix.12"* %"'ip", i64 0, i32 0, i32 0, i32 0, i32 0, i64 0
  1461.   %9 = call { double } @diffe_ZN5Eigen8internal29general_matrix_vector_productIldNS0_22const_blas_data_mapperIdlLi1EEELi1ELb0EdNS2_IdlLi0EEELb0ELi0EE3runEllRKS3_RKS4_Pdld.3(i64 40, i64 100, %"class.Eigen::internal::const_blas_data_mapper"* nonnull %ref.tmp, %"class.Eigen::internal::const_blas_data_mapper"* nonnull %"ref.tmp'ip", %"class.Eigen::internal::const_blas_data_mapper.96"* nonnull %ref.tmp35, %"class.Eigen::internal::const_blas_data_mapper.96"* nonnull %"ref.tmp35'ip", double* %arraydecay.i.i.i, double* %"arraydecay.i.i.i'ip", i64 1, double %4)
  1462.   %"m_stride.i.i'ip" = getelementptr %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %"ref.tmp35'ip", i64 0, i32 0, i32 1
  1463.   store i64 0, i64* %"m_stride.i.i'ip"
  1464.   %"m_stride.i.i48'ip" = getelementptr %"class.Eigen::internal::const_blas_data_mapper", %"class.Eigen::internal::const_blas_data_mapper"* %"ref.tmp'ip", i64 0, i32 0, i32 1
  1465.   store i64 0, i64* %"m_stride.i.i48'ip"
  1466.   ret {} undef
  1467. }
  1468.  
  1469. ; Function Attrs: noinline nounwind uwtable
  1470. define internal { double } @diffe_ZN5Eigen8internal29general_matrix_vector_productIldNS0_22const_blas_data_mapperIdlLi1EEELi1ELb0EdNS2_IdlLi0EEELb0ELi0EE3runEllRKS3_RKS4_Pdld.3(i64 %rows, i64 %cols, %"class.Eigen::internal::const_blas_data_mapper"* dereferenceable(16) %lhs, %"class.Eigen::internal::const_blas_data_mapper"* %"lhs'", %"class.Eigen::internal::const_blas_data_mapper.96"* dereferenceable(16) %rhs, %"class.Eigen::internal::const_blas_data_mapper.96"* %"rhs'", double* %res, double* %"res'", i64 %resIncr, double %alpha) local_unnamed_addr #5 align 2 {
  1471. entry:
  1472.   %m_stride.i = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper", %"class.Eigen::internal::const_blas_data_mapper"* %lhs, i64 0, i32 0, i32 1
  1473.   %0 = bitcast %"class.Eigen::internal::const_blas_data_mapper.96"* %rhs to i64*
  1474.   %1 = load i64, i64* %0, align 8, !tbaa !30
  1475.   %rem.i333 = and i64 %1, 7
  1476.   %tobool.i334 = icmp ne i64 %rem.i333, 0
  1477.   %spec.select.i335 = sext i1 %tobool.i334 to i64
  1478.   %2 = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %lhs to i64*
  1479.   %3 = load i64, i64* %2, align 8, !tbaa !26
  1480.   %rem.i330 = and i64 %3, 7
  1481.   %tobool.i331 = icmp eq i64 %rem.i330, 0
  1482.   %4 = inttoptr i64 %3 to double*
  1483.   %5 = inttoptr i64 %1 to double*
  1484.   br i1 %tobool.i331, label %lor.lhs.false, label %if.then
  1485.  
  1486. lor.lhs.false:                                    ; preds = %entry
  1487.   %cmp5 = icmp eq i64 %cols, 0
  1488.   %or.cond = or i1 %tobool.i334, %cmp5
  1489.   %cmp9 = icmp eq i64 %spec.select.i335, %rows
  1490.   %or.cond272 = or i1 %cmp9, %or.cond
  1491.   br i1 %or.cond272, label %if.then, label %if.end
  1492.  
  1493. if.then:                                          ; preds = %lor.lhs.false, %entry
  1494.   br label %if.end
  1495.  
  1496. if.end:                                           ; preds = %if.then, %lor.lhs.false
  1497.   %alignedStart.0 = phi i64 [ 0, %if.then ], [ %spec.select.i335, %lor.lhs.false ]
  1498.   %div = sdiv i64 %rows, 4
  1499.   %mul = shl i64 %div, 2
  1500.   %cmp18396 = icmp sgt i64 %rows, 3
  1501.   br i1 %cmp18396, label %for.body.lr.ph, label %for.cond72.preheader
  1502.  
  1503. for.body.lr.ph:                                   ; preds = %if.end
  1504.   %6 = load i64, i64* %m_stride.i, align 8, !tbaa !29
  1505.   %cmp31386 = icmp sgt i64 %cols, 0
  1506.   br i1 %cmp31386, label %for.body.us.preheader, label %for.cond72.preheader
  1507.  
  1508. for.body.us.preheader:                            ; preds = %for.body.lr.ph
  1509.   %7 = icmp sgt i64 %mul, 4
  1510.   %smax = select i1 %7, i64 %mul, i64 4
  1511.   %8 = add i64 %smax, -1
  1512.   %9 = lshr i64 %8, 2
  1513.   %10 = add i64 %9, 1
  1514.   %11 = mul nuw i64 %cols, %10
  1515.   %mallocsize61 = mul i64 %11, 8
  1516.   %malloccall62 = tail call i8* @malloc(i64 %mallocsize61)
  1517.   %add49.us_malloccache = bitcast i8* %malloccall62 to double*
  1518.   %malloccall68 = tail call i8* @malloc(i64 %mallocsize61)
  1519.   %add45.us_malloccache = bitcast i8* %malloccall68 to double*
  1520.   %malloccall74 = tail call i8* @malloc(i64 %mallocsize61)
  1521.   %add41.us_malloccache = bitcast i8* %malloccall74 to double*
  1522.   %malloccall80 = tail call i8* @malloc(i64 %mallocsize61)
  1523.   %add37.us_malloccache = bitcast i8* %malloccall80 to double*
  1524.   %malloccall83 = tail call i8* @malloc(i64 %mallocsize61)
  1525.   %_malloccache84 = bitcast i8* %malloccall83 to double*
  1526.   %malloccall88 = tail call i8* @malloc(i64 %mallocsize61)
  1527.   %_malloccache89 = bitcast i8* %malloccall88 to double*
  1528.   %mallocsize94 = mul i64 %10, 8
  1529.   %malloccall95 = tail call i8* @malloc(i64 %mallocsize94)
  1530.   %mul.i.i315.us_malloccache = bitcast i8* %malloccall95 to i64*
  1531.   %malloccall101 = tail call i8* @malloc(i64 %mallocsize61)
  1532.   %_malloccache102 = bitcast i8* %malloccall101 to double*
  1533.   %malloccall107 = tail call i8* @malloc(i64 %mallocsize94)
  1534.   %mul.i.i319.us_malloccache = bitcast i8* %malloccall107 to i64*
  1535.   %malloccall113 = tail call i8* @malloc(i64 %mallocsize61)
  1536.   %_malloccache114 = bitcast i8* %malloccall113 to double*
  1537.   %malloccall119 = tail call i8* @malloc(i64 %mallocsize94)
  1538.   %mul.i.i323.us_malloccache = bitcast i8* %malloccall119 to i64*
  1539.   %malloccall125 = tail call i8* @malloc(i64 %mallocsize61)
  1540.   %_malloccache126 = bitcast i8* %malloccall125 to double*
  1541.   %malloccall131 = tail call i8* @malloc(i64 %mallocsize94)
  1542.   %mul.i.i327.us_malloccache = bitcast i8* %malloccall131 to i64*
  1543.   br label %for.body.us
  1544.  
  1545. for.body.us:                                      ; preds = %for.cond30.for.cond.cleanup32_crit_edge.us, %for.body.us.preheader
  1546.   %indvar = phi i64 [ 0, %for.body.us.preheader ], [ %indvar.next, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1547.   %12 = shl i64 %indvar, 2
  1548.   %mul.i.i327.us = mul nsw i64 %6, %12
  1549.   %13 = getelementptr i64, i64* %mul.i.i327.us_malloccache, i64 %indvar
  1550.   store i64 %mul.i.i327.us, i64* %13
  1551.   %arrayidx.i.i328.us = getelementptr inbounds double, double* %4, i64 %mul.i.i327.us
  1552.   %add21.us = or i64 %12, 1
  1553.   %mul.i.i323.us = mul nsw i64 %6, %add21.us
  1554.   %14 = getelementptr i64, i64* %mul.i.i323.us_malloccache, i64 %indvar
  1555.   store i64 %mul.i.i323.us, i64* %14
  1556.   %arrayidx.i.i324.us = getelementptr inbounds double, double* %4, i64 %mul.i.i323.us
  1557.   %add24.us = or i64 %12, 2
  1558.   %mul.i.i319.us = mul nsw i64 %6, %add24.us
  1559.   %15 = getelementptr i64, i64* %mul.i.i319.us_malloccache, i64 %indvar
  1560.   store i64 %mul.i.i319.us, i64* %15
  1561.   %arrayidx.i.i320.us = getelementptr inbounds double, double* %4, i64 %mul.i.i319.us
  1562.   %add27.us = or i64 %12, 3
  1563.   %mul.i.i315.us = mul nsw i64 %6, %add27.us
  1564.   %16 = getelementptr i64, i64* %mul.i.i315.us_malloccache, i64 %indvar
  1565.   store i64 %mul.i.i315.us, i64* %16
  1566.   %arrayidx.i.i316.us = getelementptr inbounds double, double* %4, i64 %mul.i.i315.us
  1567.   br label %for.body33.us
  1568.  
  1569. for.body33.us:                                    ; preds = %for.body33.us, %for.body.us
  1570.   %j.0391.us = phi i64 [ 0, %for.body.us ], [ %inc.us, %for.body33.us ]
  1571.   %tmp3.0390.us = phi double [ 0.000000e+00, %for.body.us ], [ %add49.us, %for.body33.us ]
  1572.   %tmp2.0389.us = phi double [ 0.000000e+00, %for.body.us ], [ %add45.us, %for.body33.us ]
  1573.   %tmp1.0388.us = phi double [ 0.000000e+00, %for.body.us ], [ %add41.us, %for.body33.us ]
  1574.   %tmp0.0387.us = phi double [ 0.000000e+00, %for.body.us ], [ %add37.us, %for.body33.us ]
  1575.   %arrayidx.i312.us = getelementptr inbounds double, double* %5, i64 %j.0391.us
  1576.   %17 = load double, double* %arrayidx.i312.us, align 8, !tbaa !2
  1577.   %18 = mul nuw i64 %indvar, %cols
  1578.   %19 = add nuw i64 %j.0391.us, %18
  1579.   %20 = getelementptr double, double* %_malloccache84, i64 %19
  1580.   store double %17, double* %20
  1581.   %arrayidx.i309.us = getelementptr inbounds double, double* %arrayidx.i.i328.us, i64 %j.0391.us
  1582.   %21 = load double, double* %arrayidx.i309.us, align 8, !tbaa !2
  1583.   %22 = getelementptr double, double* %_malloccache126, i64 %19
  1584.   store double %21, double* %22
  1585.   %mul.i.i307.us = fmul fast double %21, %17
  1586.   %add37.us = fadd fast double %mul.i.i307.us, %tmp0.0387.us
  1587.   %23 = getelementptr double, double* %add37.us_malloccache, i64 %19
  1588.   store double %add37.us, double* %23
  1589.   %arrayidx.i306.us = getelementptr inbounds double, double* %arrayidx.i.i324.us, i64 %j.0391.us
  1590.   %24 = load double, double* %arrayidx.i306.us, align 8, !tbaa !2
  1591.   %25 = getelementptr double, double* %_malloccache114, i64 %19
  1592.   store double %24, double* %25
  1593.   %mul.i.i304.us = fmul fast double %24, %17
  1594.   %add41.us = fadd fast double %mul.i.i304.us, %tmp1.0388.us
  1595.   %26 = getelementptr double, double* %add41.us_malloccache, i64 %19
  1596.   store double %add41.us, double* %26
  1597.   %arrayidx.i303.us = getelementptr inbounds double, double* %arrayidx.i.i320.us, i64 %j.0391.us
  1598.   %27 = load double, double* %arrayidx.i303.us, align 8, !tbaa !2
  1599.   %28 = getelementptr double, double* %_malloccache102, i64 %19
  1600.   store double %27, double* %28
  1601.   %mul.i.i301.us = fmul fast double %27, %17
  1602.   %add45.us = fadd fast double %mul.i.i301.us, %tmp2.0389.us
  1603.   %29 = getelementptr double, double* %add45.us_malloccache, i64 %19
  1604.   store double %add45.us, double* %29
  1605.   %arrayidx.i300.us = getelementptr inbounds double, double* %arrayidx.i.i316.us, i64 %j.0391.us
  1606.   %30 = load double, double* %arrayidx.i300.us, align 8, !tbaa !2
  1607.   %31 = getelementptr double, double* %_malloccache89, i64 %19
  1608.   store double %30, double* %31
  1609.   %mul.i.i298.us = fmul fast double %30, %17
  1610.   %add49.us = fadd fast double %mul.i.i298.us, %tmp3.0390.us
  1611.   %32 = getelementptr double, double* %add49.us_malloccache, i64 %19
  1612.   store double %add49.us, double* %32
  1613.   %inc.us = add nuw nsw i64 %j.0391.us, 1
  1614.   %exitcond149 = icmp ne i64 %inc.us, %cols
  1615.   br i1 %exitcond149, label %for.body33.us, label %for.cond30.for.cond.cleanup32_crit_edge.us
  1616.  
  1617. for.cond30.for.cond.cleanup32_crit_edge.us:       ; preds = %for.body33.us
  1618.   %mul50.us = fmul fast double %add37.us, %alpha
  1619.   %mul51.us = mul nsw i64 %12, %resIncr
  1620.   %arrayidx.us = getelementptr inbounds double, double* %res, i64 %mul51.us
  1621.   %33 = load double, double* %arrayidx.us, align 8, !tbaa !2
  1622.   %add52.us = fadd fast double %33, %mul50.us
  1623.   store double %add52.us, double* %arrayidx.us, align 8, !tbaa !2
  1624.   %mul53.us = fmul fast double %add41.us, %alpha
  1625.   %mul55.us = mul nsw i64 %add21.us, %resIncr
  1626.   %arrayidx56.us = getelementptr inbounds double, double* %res, i64 %mul55.us
  1627.   %34 = load double, double* %arrayidx56.us, align 8, !tbaa !2
  1628.   %add57.us = fadd fast double %34, %mul53.us
  1629.   store double %add57.us, double* %arrayidx56.us, align 8, !tbaa !2
  1630.   %mul58.us = fmul fast double %add45.us, %alpha
  1631.   %mul60.us = mul nsw i64 %add24.us, %resIncr
  1632.   %arrayidx61.us = getelementptr inbounds double, double* %res, i64 %mul60.us
  1633.   %35 = load double, double* %arrayidx61.us, align 8, !tbaa !2
  1634.   %add62.us = fadd fast double %35, %mul58.us
  1635.   store double %add62.us, double* %arrayidx61.us, align 8, !tbaa !2
  1636.   %mul63.us = fmul fast double %add49.us, %alpha
  1637.   %mul65.us = mul nsw i64 %add27.us, %resIncr
  1638.   %arrayidx66.us = getelementptr inbounds double, double* %res, i64 %mul65.us
  1639.   %36 = load double, double* %arrayidx66.us, align 8, !tbaa !2
  1640.   %add67.us = fadd fast double %36, %mul63.us
  1641.   store double %add67.us, double* %arrayidx66.us, align 8, !tbaa !2
  1642.   %indvar.next = add nuw nsw i64 %indvar, 1
  1643.   %exitcond150 = icmp ne i64 %indvar.next, %10
  1644.   br i1 %exitcond150, label %for.body.us, label %for.cond72.preheader
  1645.  
  1646. for.cond72.preheader:                             ; preds = %for.cond30.for.cond.cleanup32_crit_edge.us, %for.body.lr.ph, %if.end
  1647.   %add49.us_mdyncache.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %add49.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1648.   %add45.us_mdyncache.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %add45.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1649.   %add41.us_mdyncache.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %add41.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1650.   %add37.us_mdyncache.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %add37.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1651.   %_mdyncache85.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %_malloccache84, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1652.   %_mdyncache90.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %_malloccache89, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1653.   %mul.i.i315.us_mdyncache.0 = phi i64* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %mul.i.i315.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1654.   %_mdyncache103.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %_malloccache102, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1655.   %mul.i.i319.us_mdyncache.0 = phi i64* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %mul.i.i319.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1656.   %_mdyncache115.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %_malloccache114, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1657.   %mul.i.i323.us_mdyncache.0 = phi i64* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %mul.i.i323.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1658.   %_mdyncache127.0 = phi double* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %_malloccache126, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1659.   %mul.i.i327.us_mdyncache.0 = phi i64* [ undef, %for.body.lr.ph ], [ undef, %if.end ], [ %mul.i.i327.us_malloccache, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1660.   %37 = phi i8 [ 1, %for.body.lr.ph ], [ 2, %if.end ], [ 0, %for.cond30.for.cond.cleanup32_crit_edge.us ]
  1661.   %cmp73384 = icmp slt i64 %mul, %rows
  1662.   br i1 %cmp73384, label %for.body75.lr.ph, label %invertdo.end
  1663.  
  1664. for.body75.lr.ph:                                 ; preds = %for.cond72.preheader
  1665.   %38 = load i64, i64* %m_stride.i, align 8, !tbaa !29
  1666.   %cmp94 = icmp slt i64 %alignedStart.0, 0
  1667.   %cmp137380 = icmp sgt i64 %cols, 0
  1668.   %m_data.i = getelementptr inbounds %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %rhs, i64 0, i32 0, i32 0
  1669.   %39 = load double*, double** %m_data.i, align 8
  1670.   %40 = add i64 %rows, -1
  1671.   %41 = sub i64 %40, %mul
  1672.   %42 = add nuw i64 %41, 1
  1673.   %43 = mul nuw i64 %cols, %42
  1674.   %mallocsize22 = mul i64 %43, 8
  1675.   %malloccall23 = tail call i8* @malloc(i64 %mallocsize22)
  1676.   %_malloccache24 = bitcast i8* %malloccall23 to double*
  1677.   %malloccall28 = tail call i8* @malloc(i64 %mallocsize22)
  1678.   %_malloccache29 = bitcast i8* %malloccall28 to double*
  1679.   %mallocsize36 = mul i64 %42, 8
  1680.   %malloccall37 = tail call i8* @malloc(i64 %mallocsize36)
  1681.   %mul.i.i296.us_malloccache = bitcast i8* %malloccall37 to i64*
  1682.   %malloccall45 = tail call i8* @malloc(i64 %mallocsize36)
  1683.   %tmp076.2.lcssa.us_malloccache = bitcast i8* %malloccall45 to double*
  1684.   br i1 %cmp94, label %for.body75.us.preheader, label %for.body75.preheader
  1685.  
  1686. for.body75.preheader:                             ; preds = %for.body75.lr.ph
  1687.   %44 = sub i64 %rows, %mul
  1688.   br label %for.body75
  1689.  
  1690. for.body75.us.preheader:                          ; preds = %for.body75.lr.ph
  1691.   %malloccall48 = tail call i8* @malloc(i64 %mallocsize36)
  1692.   %.pre406_malloccache = bitcast i8* %malloccall48 to double*
  1693.   %malloccall50 = tail call i8* @malloc(i64 %mallocsize36)
  1694.   %.pre407.pn_malloccache = bitcast i8* %malloccall50 to double*
  1695.   %45 = sub i64 %rows, %mul
  1696.   br label %for.body75.us
  1697.  
  1698. for.body75.us:                                    ; preds = %for.cond.cleanup138.us, %for.body75.us.preheader
  1699.   %indvar2 = phi i64 [ 0, %for.body75.us.preheader ], [ %indvar.next3, %for.cond.cleanup138.us ]
  1700.   %46 = add i64 %mul, %indvar2
  1701.   %mul.i.i296.us = mul nsw i64 %38, %46
  1702.   %47 = getelementptr i64, i64* %mul.i.i296.us_malloccache, i64 %indvar2
  1703.   store i64 %mul.i.i296.us, i64* %47
  1704.   %arrayidx.i.i297.us = getelementptr inbounds double, double* %4, i64 %mul.i.i296.us
  1705.   %add.ptr.i287.us = getelementptr inbounds double, double* %arrayidx.i.i297.us, i64 %alignedStart.0
  1706.   %.pre406 = load double, double* %add.ptr.i287.us, align 8, !tbaa !2
  1707.   %48 = getelementptr double, double* %.pre406_malloccache, i64 %indvar2
  1708.   store double %.pre406, double* %48
  1709.   %.pre407.pn.in = getelementptr inbounds double, double* %39, i64 %alignedStart.0
  1710.   %.pre407.pn = load double, double* %.pre407.pn.in, align 8, !tbaa !2
  1711.   %49 = getelementptr double, double* %.pre407.pn_malloccache, i64 %indvar2
  1712.   store double %.pre407.pn, double* %49
  1713.   %ptmp0.2.us = fmul fast double %.pre407.pn, %.pre406
  1714.   br i1 %cmp137380, label %for.body139.us, label %for.cond.cleanup138.us
  1715.  
  1716. for.cond.cleanup138.us:                           ; preds = %for.body139.us, %for.body75.us
  1717.   %tmp076.2.lcssa.us = phi double [ %ptmp0.2.us, %for.body75.us ], [ %add144.us, %for.body139.us ]
  1718.   %50 = getelementptr double, double* %tmp076.2.lcssa.us_malloccache, i64 %indvar2
  1719.   store double %tmp076.2.lcssa.us, double* %50
  1720.   %mul148.us = fmul fast double %tmp076.2.lcssa.us, %alpha
  1721.   %mul149.us = mul nsw i64 %46, %resIncr
  1722.   %arrayidx150.us = getelementptr inbounds double, double* %res, i64 %mul149.us
  1723.   %51 = load double, double* %arrayidx150.us, align 8, !tbaa !2
  1724.   %add151.us = fadd fast double %51, %mul148.us
  1725.   store double %add151.us, double* %arrayidx150.us, align 8, !tbaa !2
  1726.   %indvar.next3 = add i64 %indvar2, 1
  1727.   %exitcond146 = icmp ne i64 %indvar.next3, %45
  1728.   br i1 %exitcond146, label %for.body75.us, label %invertdo.end
  1729.  
  1730. for.body139.us:                                   ; preds = %for.body75.us, %for.body139.us
  1731.   %j135.0382.us = phi i64 [ %inc146.us, %for.body139.us ], [ 0, %for.body75.us ]
  1732.   %tmp076.2381.us = phi double [ %add144.us, %for.body139.us ], [ %ptmp0.2.us, %for.body75.us ]
  1733.   %arrayidx.i275.us = getelementptr inbounds double, double* %arrayidx.i.i297.us, i64 %j135.0382.us
  1734.   %52 = load double, double* %arrayidx.i275.us, align 8, !tbaa !2
  1735.   %53 = mul nuw i64 %indvar2, %cols
  1736.   %54 = add nuw i64 %j135.0382.us, %53
  1737.   %55 = getelementptr double, double* %_malloccache24, i64 %54
  1738.   store double %52, double* %55
  1739.   %arrayidx.i.us = getelementptr inbounds double, double* %39, i64 %j135.0382.us
  1740.   %56 = load double, double* %arrayidx.i.us, align 8, !tbaa !2
  1741.   %57 = getelementptr double, double* %_malloccache29, i64 %54
  1742.   store double %56, double* %57
  1743.   %mul.i.i.us = fmul fast double %56, %52
  1744.   %add144.us = fadd fast double %mul.i.i.us, %tmp076.2381.us
  1745.   %inc146.us = add nuw nsw i64 %j135.0382.us, 1
  1746.   %exitcond = icmp ne i64 %inc146.us, %cols
  1747.   br i1 %exitcond, label %for.body139.us, label %for.cond.cleanup138.us
  1748.  
  1749. for.body75:                                       ; preds = %for.cond.cleanup138, %for.body75.preheader
  1750.   %indvar4 = phi i64 [ 0, %for.body75.preheader ], [ %indvar.next5, %for.cond.cleanup138 ]
  1751.   %58 = add i64 %mul, %indvar4
  1752.   %mul.i.i296 = mul nsw i64 %38, %58
  1753.   %59 = getelementptr i64, i64* %mul.i.i296.us_malloccache, i64 %indvar4
  1754.   store i64 %mul.i.i296, i64* %59
  1755.   %arrayidx.i.i297 = getelementptr inbounds double, double* %4, i64 %mul.i.i296
  1756.   br i1 %cmp137380, label %for.body139, label %for.cond.cleanup138
  1757.  
  1758. for.cond.cleanup138:                              ; preds = %for.body139, %for.body75
  1759.   %tmp076.2.lcssa = phi double [ 0.000000e+00, %for.body75 ], [ %add144, %for.body139 ]
  1760.   %60 = getelementptr double, double* %tmp076.2.lcssa.us_malloccache, i64 %indvar4
  1761.   store double %tmp076.2.lcssa, double* %60
  1762.   %mul148 = fmul fast double %tmp076.2.lcssa, %alpha
  1763.   %mul149 = mul nsw i64 %58, %resIncr
  1764.   %arrayidx150 = getelementptr inbounds double, double* %res, i64 %mul149
  1765.   %61 = load double, double* %arrayidx150, align 8, !tbaa !2
  1766.   %add151 = fadd fast double %61, %mul148
  1767.   store double %add151, double* %arrayidx150, align 8, !tbaa !2
  1768.   %indvar.next5 = add i64 %indvar4, 1
  1769.   %exitcond148 = icmp ne i64 %indvar.next5, %44
  1770.   br i1 %exitcond148, label %for.body75, label %invertdo.end
  1771.  
  1772. for.body139:                                      ; preds = %for.body75, %for.body139
  1773.   %j135.0382 = phi i64 [ %inc146, %for.body139 ], [ 0, %for.body75 ]
  1774.   %tmp076.2381 = phi double [ %add144, %for.body139 ], [ 0.000000e+00, %for.body75 ]
  1775.   %arrayidx.i275 = getelementptr inbounds double, double* %arrayidx.i.i297, i64 %j135.0382
  1776.   %62 = load double, double* %arrayidx.i275, align 8, !tbaa !2
  1777.   %63 = mul nuw i64 %indvar4, %cols
  1778.   %64 = add nuw i64 %j135.0382, %63
  1779.   %65 = getelementptr double, double* %_malloccache24, i64 %64
  1780.   store double %62, double* %65
  1781.   %arrayidx.i = getelementptr inbounds double, double* %39, i64 %j135.0382
  1782.   %66 = load double, double* %arrayidx.i, align 8, !tbaa !2
  1783.   %67 = getelementptr double, double* %_malloccache29, i64 %64
  1784.   store double %66, double* %67
  1785.   %mul.i.i = fmul fast double %66, %62
  1786.   %add144 = fadd fast double %mul.i.i, %tmp076.2381
  1787.   %inc146 = add nuw nsw i64 %j135.0382, 1
  1788.   %exitcond147 = icmp ne i64 %inc146, %cols
  1789.   br i1 %exitcond147, label %for.body139, label %for.cond.cleanup138
  1790.  
  1791. invertif.end:                                     ; preds = %invertfor.cond72.preheader, %invertfor.body.us.preheader
  1792.   %"alpha'de.0" = phi double [ %"alpha'de.3", %invertfor.cond72.preheader ], [ %146, %invertfor.body.us.preheader ]
  1793.   %68 = insertvalue { double } undef, double %"alpha'de.0", 0
  1794.   ret { double } %68
  1795.  
  1796. invertfor.body.us.preheader:                      ; preds = %invertfor.body.us
  1797.   %69 = bitcast double* %add49.us_mdyncache.0 to i8*
  1798.   %70 = bitcast double* %add45.us_mdyncache.0 to i8*
  1799.   tail call void @free(i8* %69)
  1800.   %71 = bitcast double* %add41.us_mdyncache.0 to i8*
  1801.   tail call void @free(i8* %70)
  1802.   %72 = bitcast double* %add37.us_mdyncache.0 to i8*
  1803.   tail call void @free(i8* %71)
  1804.   %73 = bitcast double* %_mdyncache85.0 to i8*
  1805.   tail call void @free(i8* %72)
  1806.   %74 = bitcast double* %_mdyncache90.0 to i8*
  1807.   tail call void @free(i8* %73)
  1808.   %75 = bitcast i64* %mul.i.i315.us_mdyncache.0 to i8*
  1809.   tail call void @free(i8* %74)
  1810.   %76 = bitcast double* %_mdyncache103.0 to i8*
  1811.   tail call void @free(i8* %75)
  1812.   %77 = bitcast i64* %mul.i.i319.us_mdyncache.0 to i8*
  1813.   tail call void @free(i8* %76)
  1814.   %78 = bitcast double* %_mdyncache115.0 to i8*
  1815.   tail call void @free(i8* %77)
  1816.   %79 = bitcast i64* %mul.i.i323.us_mdyncache.0 to i8*
  1817.   tail call void @free(i8* %78)
  1818.   %80 = bitcast double* %_mdyncache127.0 to i8*
  1819.   tail call void @free(i8* %79)
  1820.   %81 = bitcast i64* %mul.i.i327.us_mdyncache.0 to i8*
  1821.   tail call void @free(i8* %80)
  1822.   tail call void @free(i8* %81)
  1823.   br label %invertif.end
  1824.  
  1825. invertfor.body.us:                                ; preds = %invertfor.body33.us
  1826.   %82 = sub nsw i64 %"indvar'phi", 1
  1827.   %83 = icmp ne i64 %"indvar'phi", 0
  1828.   br i1 %83, label %invertfor.cond30.for.cond.cleanup32_crit_edge.us, label %invertfor.body.us.preheader
  1829.  
  1830. invertfor.body33.us:                              ; preds = %invertfor.cond30.for.cond.cleanup32_crit_edge.us, %invertfor.body33.us
  1831.   %"j.0391.us'phi" = phi i64 [ %147, %invertfor.cond30.for.cond.cleanup32_crit_edge.us ], [ %84, %invertfor.body33.us ]
  1832.   %84 = sub i64 %"j.0391.us'phi", 1
  1833.   %85 = add nuw i64 %"j.0391.us'phi", %122
  1834.   %86 = getelementptr double, double* %_mdyncache85.0, i64 %85
  1835.   %87 = load double, double* %86
  1836.   %diffe86 = fmul fast double %125, %87
  1837.   %88 = getelementptr double, double* %_mdyncache90.0, i64 %85
  1838.   %89 = load double, double* %88
  1839.   %diffe91 = fmul fast double %125, %89
  1840.   %90 = getelementptr i64, i64* %mul.i.i315.us_mdyncache.0, i64 %"indvar'phi"
  1841.   %91 = load i64, i64* %90
  1842.   %"'ip96" = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %"lhs'" to i64*
  1843.   %"'ip97" = load i64, i64* %"'ip96", align 8
  1844.   %"'ip98" = inttoptr i64 %"'ip97" to double*
  1845.   %"arrayidx.i.i316.us'ip" = getelementptr double, double* %"'ip98", i64 %91
  1846.   %"arrayidx.i300.us'ip" = getelementptr double, double* %"arrayidx.i.i316.us'ip", i64 %"j.0391.us'phi"
  1847.   %92 = load double, double* %"arrayidx.i300.us'ip"
  1848.   %93 = fadd fast double %92, %diffe86
  1849.   store double %93, double* %"arrayidx.i300.us'ip"
  1850.   %diffe99 = fmul fast double %132, %87
  1851.   %94 = getelementptr double, double* %_mdyncache103.0, i64 %85
  1852.   %95 = load double, double* %94
  1853.   %diffe104 = fmul fast double %132, %95
  1854.   %96 = fadd fast double %diffe91, %diffe104
  1855.   %97 = getelementptr i64, i64* %mul.i.i319.us_mdyncache.0, i64 %"indvar'phi"
  1856.   %98 = load i64, i64* %97
  1857.   %"'ip109" = load i64, i64* %"'ip96", align 8
  1858.   %"'ip110" = inttoptr i64 %"'ip109" to double*
  1859.   %"arrayidx.i.i320.us'ip" = getelementptr double, double* %"'ip110", i64 %98
  1860.   %"arrayidx.i303.us'ip" = getelementptr double, double* %"arrayidx.i.i320.us'ip", i64 %"j.0391.us'phi"
  1861.   %99 = load double, double* %"arrayidx.i303.us'ip"
  1862.   %100 = fadd fast double %99, %diffe99
  1863.   store double %100, double* %"arrayidx.i303.us'ip"
  1864.   %diffe111 = fmul fast double %139, %87
  1865.   %101 = getelementptr double, double* %_mdyncache115.0, i64 %85
  1866.   %102 = load double, double* %101
  1867.   %diffe116 = fmul fast double %139, %102
  1868.   %103 = fadd fast double %96, %diffe116
  1869.   %104 = getelementptr i64, i64* %mul.i.i323.us_mdyncache.0, i64 %"indvar'phi"
  1870.   %105 = load i64, i64* %104
  1871.   %"'ip121" = load i64, i64* %"'ip96", align 8
  1872.   %"'ip122" = inttoptr i64 %"'ip121" to double*
  1873.   %"arrayidx.i.i324.us'ip" = getelementptr double, double* %"'ip122", i64 %105
  1874.   %"arrayidx.i306.us'ip" = getelementptr double, double* %"arrayidx.i.i324.us'ip", i64 %"j.0391.us'phi"
  1875.   %106 = load double, double* %"arrayidx.i306.us'ip"
  1876.   %107 = fadd fast double %106, %diffe111
  1877.   store double %107, double* %"arrayidx.i306.us'ip"
  1878.   %diffe123 = fmul fast double %145, %87
  1879.   %108 = getelementptr double, double* %_mdyncache127.0, i64 %85
  1880.   %109 = load double, double* %108
  1881.   %diffe128 = fmul fast double %145, %109
  1882.   %110 = fadd fast double %103, %diffe128
  1883.   %111 = getelementptr i64, i64* %mul.i.i327.us_mdyncache.0, i64 %"indvar'phi"
  1884.   %112 = load i64, i64* %111
  1885.   %"'ip133" = load i64, i64* %"'ip96", align 8
  1886.   %"'ip134" = inttoptr i64 %"'ip133" to double*
  1887.   %"arrayidx.i.i328.us'ip" = getelementptr double, double* %"'ip134", i64 %112
  1888.   %"arrayidx.i309.us'ip" = getelementptr double, double* %"arrayidx.i.i328.us'ip", i64 %"j.0391.us'phi"
  1889.   %113 = load double, double* %"arrayidx.i309.us'ip"
  1890.   %114 = fadd fast double %113, %diffe123
  1891.   store double %114, double* %"arrayidx.i309.us'ip"
  1892.   %"'ip135" = bitcast %"class.Eigen::internal::const_blas_data_mapper.96"* %"rhs'" to i64*
  1893.   %"'ip136" = load i64, i64* %"'ip135", align 8
  1894.   %"'ip137" = inttoptr i64 %"'ip136" to double*
  1895.   %"arrayidx.i312.us'ip" = getelementptr double, double* %"'ip137", i64 %"j.0391.us'phi"
  1896.   %115 = load double, double* %"arrayidx.i312.us'ip"
  1897.   %116 = fadd fast double %115, %110
  1898.   store double %116, double* %"arrayidx.i312.us'ip"
  1899.   %117 = icmp ne i64 %"j.0391.us'phi", 0
  1900.   br i1 %117, label %invertfor.body33.us, label %invertfor.body.us
  1901.  
  1902. invertfor.cond30.for.cond.cleanup32_crit_edge.us: ; preds = %invertfor.cond72.preheader.loopexit, %invertfor.body.us
  1903.   %"alpha'de.2" = phi double [ %"alpha'de.3", %invertfor.cond72.preheader.loopexit ], [ %146, %invertfor.body.us ]
  1904.   %"add49.us'de.1" = phi double [ 0.000000e+00, %invertfor.cond72.preheader.loopexit ], [ 0.000000e+00, %invertfor.body.us ]
  1905.   %"add45.us'de.1" = phi double [ 0.000000e+00, %invertfor.cond72.preheader.loopexit ], [ 0.000000e+00, %invertfor.body.us ]
  1906.   %"add41.us'de.1" = phi double [ 0.000000e+00, %invertfor.cond72.preheader.loopexit ], [ 0.000000e+00, %invertfor.body.us ]
  1907.   %"add37.us'de.1" = phi double [ 0.000000e+00, %invertfor.cond72.preheader.loopexit ], [ 0.000000e+00, %invertfor.body.us ]
  1908.   %"indvar'phi" = phi i64 [ %151, %invertfor.cond72.preheader.loopexit ], [ %82, %invertfor.body.us ]
  1909.   %118 = shl i64 %"indvar'phi", 2
  1910.   %119 = or i64 %118, 3
  1911.   %120 = mul i64 %119, %resIncr
  1912.   %"arrayidx66.us'ip" = getelementptr double, double* %"res'", i64 %120
  1913.   %121 = load double, double* %"arrayidx66.us'ip"
  1914.   store double %121, double* %"arrayidx66.us'ip"
  1915.   %diffeadd49.us = fmul fast double %121, %alpha
  1916.   %122 = mul nuw i64 %"indvar'phi", %cols
  1917.   %123 = getelementptr double, double* %add49.us_mdyncache.0, i64 %122
  1918.   %124 = load double, double* %123
  1919.   %diffealpha63 = fmul fast double %121, %124
  1920.   %125 = fadd fast double %"add49.us'de.1", %diffeadd49.us
  1921.   %126 = fadd fast double %"alpha'de.2", %diffealpha63
  1922.   %127 = or i64 %118, 2
  1923.   %128 = mul i64 %127, %resIncr
  1924.   %"arrayidx61.us'ip" = getelementptr double, double* %"res'", i64 %128
  1925.   %129 = load double, double* %"arrayidx61.us'ip"
  1926.   store double %129, double* %"arrayidx61.us'ip"
  1927.   %diffeadd45.us = fmul fast double %129, %alpha
  1928.   %130 = getelementptr double, double* %add45.us_mdyncache.0, i64 %122
  1929.   %131 = load double, double* %130
  1930.   %diffealpha69 = fmul fast double %129, %131
  1931.   %132 = fadd fast double %"add45.us'de.1", %diffeadd45.us
  1932.   %133 = fadd fast double %126, %diffealpha69
  1933.   %134 = or i64 %118, 1
  1934.   %135 = mul i64 %134, %resIncr
  1935.   %"arrayidx56.us'ip" = getelementptr double, double* %"res'", i64 %135
  1936.   %136 = load double, double* %"arrayidx56.us'ip"
  1937.   store double %136, double* %"arrayidx56.us'ip"
  1938.   %diffeadd41.us = fmul fast double %136, %alpha
  1939.   %137 = getelementptr double, double* %add41.us_mdyncache.0, i64 %122
  1940.   %138 = load double, double* %137
  1941.   %diffealpha75 = fmul fast double %136, %138
  1942.   %139 = fadd fast double %"add41.us'de.1", %diffeadd41.us
  1943.   %140 = fadd fast double %133, %diffealpha75
  1944.   %141 = mul i64 %118, %resIncr
  1945.   %"arrayidx.us'ip" = getelementptr double, double* %"res'", i64 %141
  1946.   %142 = load double, double* %"arrayidx.us'ip"
  1947.   store double %142, double* %"arrayidx.us'ip"
  1948.   %diffeadd37.us = fmul fast double %142, %alpha
  1949.   %143 = getelementptr double, double* %add37.us_mdyncache.0, i64 %122
  1950.   %144 = load double, double* %143
  1951.   %diffealpha81 = fmul fast double %142, %144
  1952.   %145 = fadd fast double %"add37.us'de.1", %diffeadd37.us
  1953.   %146 = fadd fast double %140, %diffealpha81
  1954.   %147 = add i64 %cols, -1
  1955.   br label %invertfor.body33.us
  1956.  
  1957. invertfor.cond72.preheader.loopexit:              ; preds = %invertfor.cond72.preheader
  1958.   %148 = icmp sgt i64 %mul, 4
  1959.   %149 = select i1 %148, i64 %mul, i64 4
  1960.   %150 = add i64 %149, -1
  1961.   %151 = lshr i64 %150, 2
  1962.   br label %invertfor.cond30.for.cond.cleanup32_crit_edge.us
  1963.  
  1964. invertfor.cond72.preheader:                       ; preds = %invertfor.body75.preheader, %invertfor.body75.us.preheader, %invertdo.end
  1965.   %"alpha'de.3" = phi double [ 0.000000e+00, %invertdo.end ], [ %180, %invertfor.body75.us.preheader ], [ %208, %invertfor.body75.preheader ]
  1966.   %cond = icmp eq i8 %37, 0
  1967.   br i1 %cond, label %invertfor.cond72.preheader.loopexit, label %invertif.end
  1968.  
  1969. invertfor.body75.preheader:                       ; preds = %invertfor.body75
  1970.   %152 = bitcast double* %_mdyncache.0 to i8*
  1971.   %153 = bitcast double* %_mdyncache9.0 to i8*
  1972.   tail call void @free(i8* %152)
  1973.   %154 = bitcast i64* %mul.i.i296_mdyncache.0 to i8*
  1974.   tail call void @free(i8* %153)
  1975.   %155 = bitcast double* %tmp076.2.lcssa_mdyncache.0 to i8*
  1976.   tail call void @free(i8* %154)
  1977.   tail call void @free(i8* %155)
  1978.   br label %invertfor.cond72.preheader
  1979.  
  1980. invertfor.body75.us.preheader:                    ; preds = %invertfor.body75.us
  1981.   %156 = bitcast double* %_mdyncache25.0 to i8*
  1982.   %157 = bitcast double* %_mdyncache30.0 to i8*
  1983.   tail call void @free(i8* %156)
  1984.   %158 = bitcast i64* %mul.i.i296.us_mdyncache.0 to i8*
  1985.   tail call void @free(i8* %157)
  1986.   %159 = bitcast double* %tmp076.2.lcssa.us_mdyncache.0 to i8*
  1987.   tail call void @free(i8* %158)
  1988.   %160 = bitcast double* %.pre406_mdyncache.0 to i8*
  1989.   tail call void @free(i8* %159)
  1990.   %161 = bitcast double* %.pre407.pn_mdyncache.0 to i8*
  1991.   tail call void @free(i8* %160)
  1992.   tail call void @free(i8* %161)
  1993.   br label %invertfor.cond72.preheader
  1994.  
  1995. invertfor.body75.us:                              ; preds = %invertfor.body139.us, %invertfor.cond.cleanup138.us
  1996.   %"mul.i.i.us'de.0" = phi double [ %"mul.i.i.us'de.1", %invertfor.cond.cleanup138.us ], [ 0.000000e+00, %invertfor.body139.us ]
  1997.   %"tmp076.2381.us'de.0" = phi double [ %"tmp076.2381.us'de.1", %invertfor.cond.cleanup138.us ], [ 0.000000e+00, %invertfor.body139.us ]
  1998.   %"'de32.0" = phi double [ %"'de32.1", %invertfor.cond.cleanup138.us ], [ 0.000000e+00, %invertfor.body139.us ]
  1999.   %"'de33.0" = phi double [ %"'de33.1", %invertfor.cond.cleanup138.us ], [ 0.000000e+00, %invertfor.body139.us ]
  2000.   %"ptmp0.2.us'de.0" = phi double [ %diffetmp076.2.lcssa.us, %invertfor.cond.cleanup138.us ], [ %184, %invertfor.body139.us ]
  2001.   %162 = getelementptr double, double* %.pre406_mdyncache.0, i64 %"indvar2'phi"
  2002.   %163 = load double, double* %162
  2003.   %diffe.pre407.pn = fmul fast double %"ptmp0.2.us'de.0", %163
  2004.   %164 = getelementptr double, double* %.pre407.pn_mdyncache.0, i64 %"indvar2'phi"
  2005.   %165 = load double, double* %164
  2006.   %diffe.pre406 = fmul fast double %"ptmp0.2.us'de.0", %165
  2007.   %"m_data.i'ip51" = getelementptr %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %"rhs'", i64 0, i32 0, i32 0
  2008.   %"'ip52" = load double*, double** %"m_data.i'ip51", align 8
  2009.   %".pre407.pn.in'ip" = getelementptr double, double* %"'ip52", i64 %alignedStart.0
  2010.   %166 = load double, double* %".pre407.pn.in'ip"
  2011.   %167 = fadd fast double %166, %diffe.pre407.pn
  2012.   store double %167, double* %".pre407.pn.in'ip"
  2013.   %168 = getelementptr i64, i64* %mul.i.i296.us_mdyncache.0, i64 %"indvar2'phi"
  2014.   %169 = load i64, i64* %168
  2015.   %"'ip53" = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %"lhs'" to i64*
  2016.   %"'ip54" = load i64, i64* %"'ip53", align 8
  2017.   %"'ip55" = inttoptr i64 %"'ip54" to double*
  2018.   %"arrayidx.i.i297.us'ip56" = getelementptr double, double* %"'ip55", i64 %169
  2019.   %"add.ptr.i287.us'ip" = getelementptr double, double* %"arrayidx.i.i297.us'ip56", i64 %alignedStart.0
  2020.   %170 = load double, double* %"add.ptr.i287.us'ip"
  2021.   %171 = fadd fast double %170, %diffe.pre406
  2022.   store double %171, double* %"add.ptr.i287.us'ip"
  2023.   %172 = icmp ne i64 %"indvar2'phi", 0
  2024.   br i1 %172, label %invertfor.cond.cleanup138.us, label %invertfor.body75.us.preheader
  2025.  
  2026. invertfor.cond.cleanup138.us.loopexit:            ; preds = %invertfor.cond.cleanup138.us
  2027.   %173 = add i64 %cols, -1
  2028.   br label %invertfor.body139.us
  2029.  
  2030. invertfor.cond.cleanup138.us:                     ; preds = %invertdo.end.loopexit, %invertfor.body75.us
  2031.   %"alpha'de.5" = phi double [ 0.000000e+00, %invertdo.end.loopexit ], [ %180, %invertfor.body75.us ]
  2032.   %"mul.i.i.us'de.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit ], [ %"mul.i.i.us'de.0", %invertfor.body75.us ]
  2033.   %"tmp076.2381.us'de.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit ], [ %"tmp076.2381.us'de.0", %invertfor.body75.us ]
  2034.   %"'de32.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit ], [ %"'de32.0", %invertfor.body75.us ]
  2035.   %"'de33.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit ], [ %"'de33.0", %invertfor.body75.us ]
  2036.   %"indvar2'phi" = phi i64 [ %229, %invertdo.end.loopexit ], [ %174, %invertfor.body75.us ]
  2037.   %174 = sub i64 %"indvar2'phi", 1
  2038.   %175 = add i64 %mul, %"indvar2'phi"
  2039.   %176 = mul i64 %175, %resIncr
  2040.   %"arrayidx150.us'ip" = getelementptr double, double* %"res'", i64 %176
  2041.   %177 = load double, double* %"arrayidx150.us'ip"
  2042.   store double %177, double* %"arrayidx150.us'ip"
  2043.   %diffetmp076.2.lcssa.us = fmul fast double %177, %alpha
  2044.   %178 = getelementptr double, double* %tmp076.2.lcssa.us_mdyncache.0, i64 %"indvar2'phi"
  2045.   %179 = load double, double* %178
  2046.   %diffealpha46 = fmul fast double %177, %179
  2047.   %180 = fadd fast double %"alpha'de.5", %diffealpha46
  2048.   %181 = icmp sgt i64 %cols, 0
  2049.   br i1 %181, label %invertfor.cond.cleanup138.us.loopexit, label %invertfor.body75.us
  2050.  
  2051. invertfor.body139.us:                             ; preds = %invertfor.body139.us, %invertfor.cond.cleanup138.us.loopexit
  2052.   %"add144.us'de.2" = phi double [ %diffetmp076.2.lcssa.us, %invertfor.cond.cleanup138.us.loopexit ], [ %184, %invertfor.body139.us ]
  2053.   %"mul.i.i.us'de.2" = phi double [ %"mul.i.i.us'de.1", %invertfor.cond.cleanup138.us.loopexit ], [ 0.000000e+00, %invertfor.body139.us ]
  2054.   %"tmp076.2381.us'de.2" = phi double [ %"tmp076.2381.us'de.1", %invertfor.cond.cleanup138.us.loopexit ], [ 0.000000e+00, %invertfor.body139.us ]
  2055.   %"'de32.2" = phi double [ %"'de32.1", %invertfor.cond.cleanup138.us.loopexit ], [ 0.000000e+00, %invertfor.body139.us ]
  2056.   %"'de33.2" = phi double [ %"'de33.1", %invertfor.cond.cleanup138.us.loopexit ], [ 0.000000e+00, %invertfor.body139.us ]
  2057.   %"j135.0382.us'phi" = phi i64 [ %173, %invertfor.cond.cleanup138.us.loopexit ], [ %182, %invertfor.body139.us ]
  2058.   %182 = sub i64 %"j135.0382.us'phi", 1
  2059.   %183 = fadd fast double %"mul.i.i.us'de.2", %"add144.us'de.2"
  2060.   %184 = fadd fast double %"tmp076.2381.us'de.2", %"add144.us'de.2"
  2061.   %185 = mul nuw i64 %"indvar2'phi", %cols
  2062.   %186 = add nuw i64 %"j135.0382.us'phi", %185
  2063.   %187 = getelementptr double, double* %_mdyncache25.0, i64 %186
  2064.   %188 = load double, double* %187
  2065.   %diffe26 = fmul fast double %183, %188
  2066.   %189 = getelementptr double, double* %_mdyncache30.0, i64 %186
  2067.   %190 = load double, double* %189
  2068.   %diffe31 = fmul fast double %183, %190
  2069.   %191 = fadd fast double %"'de32.2", %diffe26
  2070.   %192 = fadd fast double %"'de33.2", %diffe31
  2071.   %"m_data.i'ip34" = getelementptr %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %"rhs'", i64 0, i32 0, i32 0
  2072.   %"'ip35" = load double*, double** %"m_data.i'ip34", align 8
  2073.   %"arrayidx.i.us'ip" = getelementptr double, double* %"'ip35", i64 %"j135.0382.us'phi"
  2074.   %193 = load double, double* %"arrayidx.i.us'ip"
  2075.   %194 = fadd fast double %193, %191
  2076.   store double %194, double* %"arrayidx.i.us'ip"
  2077.   %195 = getelementptr i64, i64* %mul.i.i296.us_mdyncache.0, i64 %"indvar2'phi"
  2078.   %196 = load i64, i64* %195
  2079.   %"'ip38" = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %"lhs'" to i64*
  2080.   %"'ip39" = load i64, i64* %"'ip38", align 8
  2081.   %"'ip40" = inttoptr i64 %"'ip39" to double*
  2082.   %"arrayidx.i.i297.us'ip" = getelementptr double, double* %"'ip40", i64 %196
  2083.   %"arrayidx.i275.us'ip" = getelementptr double, double* %"arrayidx.i.i297.us'ip", i64 %"j135.0382.us'phi"
  2084.   %197 = load double, double* %"arrayidx.i275.us'ip"
  2085.   %198 = fadd fast double %197, %192
  2086.   store double %198, double* %"arrayidx.i275.us'ip"
  2087.   %199 = icmp ne i64 %"j135.0382.us'phi", 0
  2088.   br i1 %199, label %invertfor.body139.us, label %invertfor.body75.us
  2089.  
  2090. invertfor.body75:                                 ; preds = %invertfor.body139, %invertfor.cond.cleanup138
  2091.   %"'de.0" = phi double [ %"'de.1", %invertfor.cond.cleanup138 ], [ 0.000000e+00, %invertfor.body139 ]
  2092.   %"'de11.0" = phi double [ %"'de11.1", %invertfor.cond.cleanup138 ], [ 0.000000e+00, %invertfor.body139 ]
  2093.   %"tmp076.2381'de.0" = phi double [ %"tmp076.2381'de.1", %invertfor.cond.cleanup138 ], [ 0.000000e+00, %invertfor.body139 ]
  2094.   %"mul.i.i'de.0" = phi double [ %"mul.i.i'de.1", %invertfor.cond.cleanup138 ], [ 0.000000e+00, %invertfor.body139 ]
  2095.   %200 = icmp ne i64 %"indvar4'phi", 0
  2096.   br i1 %200, label %invertfor.cond.cleanup138, label %invertfor.body75.preheader
  2097.  
  2098. invertfor.cond.cleanup138.loopexit:               ; preds = %invertfor.cond.cleanup138
  2099.   %201 = add i64 %cols, -1
  2100.   br label %invertfor.body139
  2101.  
  2102. invertfor.cond.cleanup138:                        ; preds = %invertdo.end.loopexit1, %invertfor.body75
  2103.   %"'de.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit1 ], [ %"'de.0", %invertfor.body75 ]
  2104.   %"'de11.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit1 ], [ %"'de11.0", %invertfor.body75 ]
  2105.   %"alpha'de.6" = phi double [ 0.000000e+00, %invertdo.end.loopexit1 ], [ %208, %invertfor.body75 ]
  2106.   %"tmp076.2381'de.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit1 ], [ %"tmp076.2381'de.0", %invertfor.body75 ]
  2107.   %"mul.i.i'de.1" = phi double [ 0.000000e+00, %invertdo.end.loopexit1 ], [ %"mul.i.i'de.0", %invertfor.body75 ]
  2108.   %"indvar4'phi" = phi i64 [ %231, %invertdo.end.loopexit1 ], [ %202, %invertfor.body75 ]
  2109.   %202 = sub i64 %"indvar4'phi", 1
  2110.   %203 = add i64 %mul, %"indvar4'phi"
  2111.   %204 = mul i64 %203, %resIncr
  2112.   %"arrayidx150'ip" = getelementptr double, double* %"res'", i64 %204
  2113.   %205 = load double, double* %"arrayidx150'ip"
  2114.   store double %205, double* %"arrayidx150'ip"
  2115.   %diffetmp076.2.lcssa = fmul fast double %205, %alpha
  2116.   %206 = getelementptr double, double* %tmp076.2.lcssa_mdyncache.0, i64 %"indvar4'phi"
  2117.   %207 = load double, double* %206
  2118.   %diffealpha = fmul fast double %205, %207
  2119.   %208 = fadd fast double %"alpha'de.6", %diffealpha
  2120.   %209 = icmp sgt i64 %cols, 0
  2121.   br i1 %209, label %invertfor.cond.cleanup138.loopexit, label %invertfor.body75
  2122.  
  2123. invertfor.body139:                                ; preds = %invertfor.body139, %invertfor.cond.cleanup138.loopexit
  2124.   %"'de.2" = phi double [ %"'de.1", %invertfor.cond.cleanup138.loopexit ], [ 0.000000e+00, %invertfor.body139 ]
  2125.   %"'de11.2" = phi double [ %"'de11.1", %invertfor.cond.cleanup138.loopexit ], [ 0.000000e+00, %invertfor.body139 ]
  2126.   %"tmp076.2381'de.2" = phi double [ %"tmp076.2381'de.1", %invertfor.cond.cleanup138.loopexit ], [ 0.000000e+00, %invertfor.body139 ]
  2127.   %"mul.i.i'de.2" = phi double [ %"mul.i.i'de.1", %invertfor.cond.cleanup138.loopexit ], [ 0.000000e+00, %invertfor.body139 ]
  2128.   %"add144'de.2" = phi double [ %diffetmp076.2.lcssa, %invertfor.cond.cleanup138.loopexit ], [ %212, %invertfor.body139 ]
  2129.   %"j135.0382'phi" = phi i64 [ %201, %invertfor.cond.cleanup138.loopexit ], [ %210, %invertfor.body139 ]
  2130.   %210 = sub i64 %"j135.0382'phi", 1
  2131.   %211 = fadd fast double %"mul.i.i'de.2", %"add144'de.2"
  2132.   %212 = fadd fast double %"tmp076.2381'de.2", %"add144'de.2"
  2133.   %213 = mul nuw i64 %"indvar4'phi", %cols
  2134.   %214 = add nuw i64 %"j135.0382'phi", %213
  2135.   %215 = getelementptr double, double* %_mdyncache.0, i64 %214
  2136.   %216 = load double, double* %215
  2137.   %diffe = fmul fast double %211, %216
  2138.   %217 = getelementptr double, double* %_mdyncache9.0, i64 %214
  2139.   %218 = load double, double* %217
  2140.   %diffe10 = fmul fast double %211, %218
  2141.   %219 = fadd fast double %"'de.2", %diffe
  2142.   %220 = fadd fast double %"'de11.2", %diffe10
  2143.   %"m_data.i'ip" = getelementptr %"class.Eigen::internal::const_blas_data_mapper.96", %"class.Eigen::internal::const_blas_data_mapper.96"* %"rhs'", i64 0, i32 0, i32 0
  2144.   %"'ip" = load double*, double** %"m_data.i'ip", align 8
  2145.   %"arrayidx.i'ip" = getelementptr double, double* %"'ip", i64 %"j135.0382'phi"
  2146.   %221 = load double, double* %"arrayidx.i'ip"
  2147.   %222 = fadd fast double %221, %219
  2148.   store double %222, double* %"arrayidx.i'ip"
  2149.   %223 = getelementptr i64, i64* %mul.i.i296_mdyncache.0, i64 %"indvar4'phi"
  2150.   %224 = load i64, i64* %223
  2151.   %"'ip14" = bitcast %"class.Eigen::internal::const_blas_data_mapper"* %"lhs'" to i64*
  2152.   %"'ip15" = load i64, i64* %"'ip14", align 8
  2153.   %"'ip16" = inttoptr i64 %"'ip15" to double*
  2154.   %"arrayidx.i.i297'ip" = getelementptr double, double* %"'ip16", i64 %224
  2155.   %"arrayidx.i275'ip" = getelementptr double, double* %"arrayidx.i.i297'ip", i64 %"j135.0382'phi"
  2156.   %225 = load double, double* %"arrayidx.i275'ip"
  2157.   %226 = fadd fast double %225, %220
  2158.   store double %226, double* %"arrayidx.i275'ip"
  2159.   %227 = icmp ne i64 %"j135.0382'phi", 0
  2160.   br i1 %227, label %invertfor.body139, label %invertfor.body75
  2161.  
  2162. invertdo.end.loopexit:                            ; preds = %invertdo.end
  2163.   %228 = add i64 %rows, -1
  2164.   %229 = sub i64 %228, %mul
  2165.   br label %invertfor.cond.cleanup138.us
  2166.  
  2167. invertdo.end.loopexit1:                           ; preds = %invertdo.end
  2168.   %230 = add i64 %rows, -1
  2169.   %231 = sub i64 %230, %mul
  2170.   br label %invertfor.cond.cleanup138
  2171.  
  2172. invertdo.end:                                     ; preds = %for.cond.cleanup138, %for.cond.cleanup138.us, %for.cond72.preheader
  2173.   %_mdyncache.0 = phi double* [ undef, %for.cond72.preheader ], [ undef, %for.cond.cleanup138.us ], [ %_malloccache24, %for.cond.cleanup138 ]
  2174.   %_mdyncache9.0 = phi double* [ undef, %for.cond72.preheader ], [ undef, %for.cond.cleanup138.us ], [ %_malloccache29, %for.cond.cleanup138 ]
  2175.   %mul.i.i296_mdyncache.0 = phi i64* [ undef, %for.cond72.preheader ], [ undef, %for.cond.cleanup138.us ], [ %mul.i.i296.us_malloccache, %for.cond.cleanup138 ]
  2176.   %tmp076.2.lcssa_mdyncache.0 = phi double* [ undef, %for.cond72.preheader ], [ undef, %for.cond.cleanup138.us ], [ %tmp076.2.lcssa.us_malloccache, %for.cond.cleanup138 ]
  2177.   %_mdyncache25.0 = phi double* [ undef, %for.cond72.preheader ], [ %_malloccache24, %for.cond.cleanup138.us ], [ undef, %for.cond.cleanup138 ]
  2178.   %_mdyncache30.0 = phi double* [ undef, %for.cond72.preheader ], [ %_malloccache29, %for.cond.cleanup138.us ], [ undef, %for.cond.cleanup138 ]
  2179.   %mul.i.i296.us_mdyncache.0 = phi i64* [ undef, %for.cond72.preheader ], [ %mul.i.i296.us_malloccache, %for.cond.cleanup138.us ], [ undef, %for.cond.cleanup138 ]
  2180.   %tmp076.2.lcssa.us_mdyncache.0 = phi double* [ undef, %for.cond72.preheader ], [ %tmp076.2.lcssa.us_malloccache, %for.cond.cleanup138.us ], [ undef, %for.cond.cleanup138 ]
  2181.   %.pre406_mdyncache.0 = phi double* [ undef, %for.cond72.preheader ], [ %.pre406_malloccache, %for.cond.cleanup138.us ], [ undef, %for.cond.cleanup138 ]
  2182.   %.pre407.pn_mdyncache.0 = phi double* [ undef, %for.cond72.preheader ], [ %.pre407.pn_malloccache, %for.cond.cleanup138.us ], [ undef, %for.cond.cleanup138 ]
  2183.   %232 = phi i8 [ 2, %for.cond72.preheader ], [ 1, %for.cond.cleanup138.us ], [ 0, %for.cond.cleanup138 ]
  2184.   switch i8 %232, label %invertfor.cond72.preheader [
  2185.     i8 0, label %invertdo.end.loopexit1
  2186.     i8 1, label %invertdo.end.loopexit
  2187.   ]
  2188. }
  2189.  
  2190. attributes #0 = { nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="true" "no-jump-tables"="false" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="true" "use-soft-float"="false" }
  2191. attributes #1 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="true" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="true" "use-soft-float"="false" }
  2192. attributes #2 = { argmemonly nounwind }
  2193. attributes #3 = { nounwind }
  2194. attributes #4 = { norecurse nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="true" "no-jump-tables"="false" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="true" "use-soft-float"="false" }
  2195. attributes #5 = { noinline nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="true" "no-jump-tables"="false" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="true" "use-soft-float"="false" }
  2196.  
  2197. !llvm.module.flags = !{!0}
  2198. !llvm.ident = !{!1}
  2199.  
  2200. !0 = !{i32 1, !"wchar_size", i32 4}
  2201. !1 = !{!"clang version 7.1.0 "}
  2202. !2 = !{!3, !3, i64 0}
  2203. !3 = !{!"double", !4, i64 0}
  2204. !4 = !{!"omnipotent char", !5, i64 0}
  2205. !5 = !{!"Simple C++ TBAA"}
  2206. !6 = !{!7, !7, i64 0}
  2207. !7 = !{!"any pointer", !4, i64 0}
  2208. !8 = !{!9, !11, !12}
  2209. !9 = distinct !{!9, !10, !"diffe_Z6matvecRKN5Eigen6MatrixIdLi100ELi40ELi0ELi100ELi40EEERKNS0_IdLi1ELi100ELi1ELi1ELi100EEERNS0_IdLi1ELi40ELi1ELi1ELi40EEE: %W"}
  2210. !10 = distinct !{!10, !"diffe_Z6matvecRKN5Eigen6MatrixIdLi100ELi40ELi0ELi100ELi40EEERKNS0_IdLi1ELi100ELi1ELi1ELi100EEERNS0_IdLi1ELi40ELi1ELi1ELi40EEE"}
  2211. !11 = distinct !{!11, !10, !"diffe_Z6matvecRKN5Eigen6MatrixIdLi100ELi40ELi0ELi100ELi40EEERKNS0_IdLi1ELi100ELi1ELi1ELi100EEERNS0_IdLi1ELi40ELi1ELi1ELi40EEE: %B"}
  2212. !12 = distinct !{!12, !10, !"diffe_Z6matvecRKN5Eigen6MatrixIdLi100ELi40ELi0ELi100ELi40EEERKNS0_IdLi1ELi100ELi1ELi1ELi100EEERNS0_IdLi1ELi40ELi1ELi1ELi40EEE: %foo"}
  2213. !13 = !{!12}
  2214. !14 = !{!9, !11}
  2215. !15 = !{!16, !18, !19}
  2216. !16 = distinct !{!16, !17, !"diffe_Z6matvecRKN5Eigen6MatrixIdLi100ELi40ELi0ELi100ELi40EEERKNS0_IdLi1ELi100ELi1ELi1ELi100EEERNS0_IdLi1ELi40ELi1ELi1ELi40EEE.1: %W"}
  2217. !17 = distinct !{!17, !"diffe_Z6matvecRKN5Eigen6MatrixIdLi100ELi40ELi0ELi100ELi40EEERKNS0_IdLi1ELi100ELi1ELi1ELi100EEERNS0_IdLi1ELi40ELi1ELi1ELi40EEE.1"}
  2218. !18 = distinct !{!18, !17, !"diffe_Z6matvecRKN5Eigen6MatrixIdLi100ELi40ELi0ELi100ELi40EEERKNS0_IdLi1ELi100ELi1ELi1ELi100EEERNS0_IdLi1ELi40ELi1ELi1ELi40EEE.1: %B"}
  2219. !19 = distinct !{!19, !17, !"diffe_Z6matvecRKN5Eigen6MatrixIdLi100ELi40ELi0ELi100ELi40EEERKNS0_IdLi1ELi100ELi1ELi1ELi100EEERNS0_IdLi1ELi40ELi1ELi1ELi40EEE.1: %foo"}
  2220. !20 = !{!19}
  2221. !21 = !{!16, !18}
  2222. !22 = !{!23, !7, i64 0}
  2223. !23 = !{!"_ZTSN5Eigen9TransposeIKNS_6MatrixIdLi100ELi40ELi0ELi100ELi40EEEEE", !7, i64 0}
  2224. !24 = !{!25, !7, i64 0}
  2225. !25 = !{!"_ZTSN5Eigen9TransposeIKNS_6MatrixIdLi1ELi100ELi1ELi1ELi100EEEEE", !7, i64 0}
  2226. !26 = !{!27, !7, i64 0}
  2227. !27 = !{!"_ZTSN5Eigen8internal16blas_data_mapperIKdlLi1ELi0EEE", !7, i64 0, !28, i64 8}
  2228. !28 = !{!"long", !4, i64 0}
  2229. !29 = !{!27, !28, i64 8}
  2230. !30 = !{!31, !7, i64 0}
  2231. !31 = !{!"_ZTSN5Eigen8internal16blas_data_mapperIKdlLi0ELi0EEE", !7, i64 0, !28, i64 8}
  2232. !32 = !{!31, !28, i64 8}
  2233. !33 = !{!34, !7, i64 0}
  2234. !34 = !{!"_ZTSN5Eigen9TransposeINS_6MatrixIdLi1ELi40ELi1ELi1ELi40EEEEE", !7, i64 0}
RAW Paste Data