; ModuleID = '/home/hakta/Documents/matrix_mult/solution0/.autopilot/db/a.o.2.bc' target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" @mode5 = internal constant [10 x i8] c"s_axilite\00" @mode3 = internal constant [10 x i8] c"s_axilite\00" @mode = internal constant [10 x i8] c"s_axilite\00" @memcpy_OC_tempB_OC_B = internal unnamed_addr constant [15 x i8] c"memcpy.tempB.B\00" @memcpy_OC_tempA_OC_A = internal unnamed_addr constant [15 x i8] c"memcpy.tempA.A\00" @memcpy_OC_result_OC_s = internal unnamed_addr constant [29 x i8] c"memcpy.result.tempResult.gep\00" @matrix_mult_str = internal unnamed_addr constant [12 x i8] c"matrix_mult\00" @burstwrite_OC_region = internal unnamed_addr constant [18 x i8] c"burstwrite.region\00" @burstread_OC_region_s = internal unnamed_addr constant [17 x i8] c"burstread.region\00" @bundle6 = internal constant [1 x i8] zeroinitializer @bundle4 = internal constant [1 x i8] zeroinitializer @bundle = internal constant [1 x i8] zeroinitializer @p_str9 = internal unnamed_addr constant [1 x i8] zeroinitializer @p_str8 = internal unnamed_addr constant [1 x i8] zeroinitializer @p_str7 = internal unnamed_addr constant [1 x i8] zeroinitializer @p_str6 = private unnamed_addr constant [28 x i8] c"matrix_mult__innermost_loop\00", align 1 @p_str5 = private unnamed_addr constant [24 x i8] c"matrix_mult__inner_loop\00", align 1 @p_str4 = private unnamed_addr constant [24 x i8] c"matrix_mult__outer_loop\00", align 1 @p_str3 = private unnamed_addr constant [10 x i8] c"s_axilite\00", align 1 @p_str2 = private unnamed_addr constant [6 x i8] c"slave\00", align 1 @p_str1 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @p_str = private unnamed_addr constant [6 x i8] c"m_axi\00", align 1 define void @matrix_mult(i32* %gmem, i32 %A, i32 %B, i32 %result) { %result_read = call i32 @_ssdm_op_Read.s_axilite.i32(i32 %result) %B_read = call i32 @_ssdm_op_Read.s_axilite.i32(i32 %B) %A_read = call i32 @_ssdm_op_Read.s_axilite.i32(i32 %A) %result5 = call i30 @_ssdm_op_PartSelect.i30.i32.i32.i32(i32 %result_read, i32 2, i32 31) %tmp_14 = zext i30 %result5 to i64 %gmem_addr = getelementptr i32* %gmem, i64 %tmp_14 %B3 = call i30 @_ssdm_op_PartSelect.i30.i32.i32.i32(i32 %B_read, i32 2, i32 31) %tmp_15 = zext i30 %B3 to i64 %gmem_addr_1 = getelementptr i32* %gmem, i64 %tmp_15 %A1 = call i30 @_ssdm_op_PartSelect.i30.i32.i32.i32(i32 %A_read, i32 2, i32 31) %tmp_16 = zext i30 %A1 to i64 %gmem_addr_2 = getelementptr i32* %gmem, i64 %tmp_16 call void (...)* @_ssdm_op_SpecBitsMap(i32* %gmem), !map !11 call void (...)* @_ssdm_op_SpecTopModule([12 x i8]* @matrix_mult_str) nounwind %tempA = alloca [64 x i32], align 16 %tempB = alloca [64 x i32], align 16 %tempResult = alloca [64 x i32], align 16 call void (...)* @_ssdm_op_SpecInterface(i32 %result, [10 x i8]* @mode5, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 32, [1 x i8]* @bundle6, [6 x i8]* @p_str2, [1 x i8]* @p_str1, i32 16, i32 16, i32 16, i32 16, [1 x i8]* @p_str1, [1 x i8]* @p_str1) call void (...)* @_ssdm_op_SpecInterface(i32 %B, [10 x i8]* @mode3, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 32, [1 x i8]* @bundle4, [6 x i8]* @p_str2, [1 x i8]* @p_str1, i32 16, i32 16, i32 16, i32 16, [1 x i8]* @p_str1, [1 x i8]* @p_str1) call void (...)* @_ssdm_op_SpecInterface(i32 0, [10 x i8]* @p_str3, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 0, [1 x i8]* @p_str1, [1 x i8]* @p_str1, [1 x i8]* @p_str1, i32 0, i32 0, i32 0, i32 0, [1 x i8]* @p_str1, [1 x i8]* @p_str1) nounwind call void (...)* @_ssdm_op_SpecInterface(i32* %gmem, [6 x i8]* @p_str, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 32, [1 x i8]* @p_str1, [6 x i8]* @p_str2, [1 x i8]* @p_str1, i32 16, i32 16, i32 16, i32 16, [1 x i8]* @p_str1, [1 x i8]* @p_str1) call void (...)* @_ssdm_op_SpecInterface(i32 %A, [10 x i8]* @mode, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 32, [1 x i8]* @bundle, [6 x i8]* @p_str2, [1 x i8]* @p_str1, i32 16, i32 16, i32 16, i32 16, [1 x i8]* @p_str1, [1 x i8]* @p_str1) %gmem_addr_2_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_2, i32 64) br label %burst.rd.header burst.rd.header: ; preds = %burst.rd.body, %0 %indvar = phi i7 [ 0, %0 ], [ %indvar_next, %burst.rd.body ] %exitcond3 = icmp eq i7 %indvar, -64 %indvar_next = add i7 %indvar, 1 br i1 %exitcond3, label %burst.rd.header7.preheader, label %burst.rd.body burst.rd.header7.preheader: ; preds = %burst.rd.header %gmem_addr_1_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_1, i32 64) br label %burst.rd.header7 burst.rd.body: ; preds = %burst.rd.header %empty = call i32 (...)* @_ssdm_op_SpecLoopTripCount(i64 64, i64 64, i64 64) nounwind %burstread_rbegin = call i32 (...)* @_ssdm_op_SpecRegionBegin([17 x i8]* @burstread_OC_region_s) nounwind %empty_5 = call i32 (...)* @_ssdm_op_SpecPipeline(i32 1, i32 1, i32 1, i32 0, [1 x i8]* @p_str7) nounwind call void (...)* @_ssdm_op_SpecLoopName([15 x i8]* @memcpy_OC_tempA_OC_A) %tmp = zext i7 %indvar to i64 %gmem_addr_2_read = call i32 @_ssdm_op_Read.m_axi.i32P(i32* %gmem_addr_2) %tempA_addr = getelementptr [64 x i32]* %tempA, i64 0, i64 %tmp store i32 %gmem_addr_2_read, i32* %tempA_addr, align 4 %burstread_rend = call i32 (...)* @_ssdm_op_SpecRegionEnd([17 x i8]* @burstread_OC_region_s, i32 %burstread_rbegin) nounwind br label %burst.rd.header burst.rd.header7: ; preds = %burst.rd.header7.preheader, %burst.rd.body8 %indvar9 = phi i7 [ %indvar_next1, %burst.rd.body8 ], [ 0, %burst.rd.header7.preheader ] %exitcond4 = icmp eq i7 %indvar9, -64 %indvar_next1 = add i7 %indvar9, 1 br i1 %exitcond4, label %burst.rd.end6.preheader, label %burst.rd.body8 burst.rd.end6.preheader: ; preds = %burst.rd.header7 br label %burst.rd.end6 burst.rd.body8: ; preds = %burst.rd.header7 %empty_6 = call i32 (...)* @_ssdm_op_SpecLoopTripCount(i64 64, i64 64, i64 64) nounwind %burstread_rbegin1 = call i32 (...)* @_ssdm_op_SpecRegionBegin([17 x i8]* @burstread_OC_region_s) nounwind %empty_7 = call i32 (...)* @_ssdm_op_SpecPipeline(i32 1, i32 1, i32 1, i32 0, [1 x i8]* @p_str8) nounwind call void (...)* @_ssdm_op_SpecLoopName([15 x i8]* @memcpy_OC_tempB_OC_B) %tmp_1 = zext i7 %indvar9 to i64 %gmem_addr_1_read = call i32 @_ssdm_op_Read.m_axi.i32P(i32* %gmem_addr_1) %tempB_addr = getelementptr [64 x i32]* %tempB, i64 0, i64 %tmp_1 store i32 %gmem_addr_1_read, i32* %tempB_addr, align 4 %burstread_rend14 = call i32 (...)* @_ssdm_op_SpecRegionEnd([17 x i8]* @burstread_OC_region_s, i32 %burstread_rbegin1) nounwind br label %burst.rd.header7 burst.rd.end6: ; preds = %burst.rd.end6.preheader, %7 %i = phi i4 [ %i_1, %7 ], [ 0, %burst.rd.end6.preheader ] %exitcond2 = icmp eq i4 %i, -8 %empty_8 = call i32 (...)* @_ssdm_op_SpecLoopTripCount(i64 8, i64 8, i64 8) nounwind %i_1 = add i4 %i, 1 br i1 %exitcond2, label %burst.wr.header.preheader, label %1 burst.wr.header.preheader: ; preds = %burst.rd.end6 %gmem_addr_wr_req = call i1 @_ssdm_op_WriteReq.m_axi.i32P(i32* %gmem_addr, i32 64) br label %burst.wr.header ;