sysy-data/quick_test/ll/98_matrix_mul.ll

246 lines
10 KiB
LLVM

@M = dso_local global i32 0
@L = dso_local global i32 0
@N = dso_local global i32 0
declare i32 @getint()
declare i32 @getch()
declare float @getfloat()
declare void @putint(i32 %p0)
declare void @putch(i32 %p0)
declare void @putfloat(float %p0)
declare i32 @getarray(i32* %p0)
declare i32 @getfarray(float* %p0)
declare void @putarray(i32 %p0, i32* %p1)
declare void @putfarray(i32 %p0, float* %p1)
declare void @_sysy_starttime(i32 %p0)
declare void @_sysy_stoptime(i32 %p0)
declare i32 @thrd_create(i32 %p0)
declare void @thrd_join()
declare void @putf()
declare void @llvm.memset.p0.i32(i32* %p0, i8 %p1, i32 %p2, i1 %p3)
define i32 @main() {
entry:
store i32 3, ptr @N
store i32 3, ptr @M
store i32 3, ptr @L
%alloca_269 = alloca [3 x float]
%alloca_270 = alloca [3 x float]
%alloca_271 = alloca [3 x float]
%alloca_272 = alloca [3 x float]
%alloca_273 = alloca [3 x float]
%alloca_274 = alloca [3 x float]
%alloca_275 = alloca [6 x float]
%alloca_276 = alloca [3 x float]
%alloca_277 = alloca [3 x float]
%getelementptr_663 = getelementptr [3 x float], ptr %alloca_269, i32 0
%getelementptr_664 = getelementptr [3 x float], ptr %alloca_271, i32 0
%getelementptr_665 = getelementptr [3 x float], ptr %alloca_274, i32 0
%getelementptr_666 = getelementptr [3 x float], ptr %alloca_273, i32 0
%getelementptr_667 = getelementptr [3 x float], ptr %alloca_272, i32 0
%getelementptr_668 = getelementptr [3 x float], ptr %alloca_270, i32 0
%call_669 = call i32 @thrd_create(i32 4)
%Mul_671 = mul i32 %call_669, 3
%SDiv_672 = sdiv i32 %Mul_671, 5
%Add_674 = add i32 %Mul_671, 3
%SDiv_675 = sdiv i32 %Add_674, 5
br label %cond0
cond0:
%phi_404 = phi i32 [%SDiv_672, %entry], [%Add_315, %body1]
%icmp_677 = icmp slt i32 %phi_404, %SDiv_675
br i1 %icmp_677, label %body1, label %final2_split2
body1:
%getelementptr_285 = getelementptr [3 x float], ptr %getelementptr_663, i32 0, i32 %phi_404
%itofp_287 = sitofp i32 %phi_404 to float
store float %itofp_287, ptr %getelementptr_285
%getelementptr_290 = getelementptr [3 x float], ptr %getelementptr_668, i32 0, i32 %phi_404
store float %itofp_287, ptr %getelementptr_290
%getelementptr_295 = getelementptr [3 x float], ptr %getelementptr_664, i32 0, i32 %phi_404
store float %itofp_287, ptr %getelementptr_295
%getelementptr_300 = getelementptr [3 x float], ptr %getelementptr_667, i32 0, i32 %phi_404
store float %itofp_287, ptr %getelementptr_300
%getelementptr_305 = getelementptr [3 x float], ptr %getelementptr_666, i32 0, i32 %phi_404
store float %itofp_287, ptr %getelementptr_305
%getelementptr_310 = getelementptr [3 x float], ptr %getelementptr_665, i32 0, i32 %phi_404
store float %itofp_287, ptr %getelementptr_310
%Add_315 = add i32 %phi_404, 1
br label %cond0
final2_split2:
call void @thrd_join()
%getelementptr_600 = getelementptr [3 x float], ptr %alloca_269, i32 0, i32 0
%getelementptr_601 = getelementptr [3 x float], ptr %alloca_272, i32 0, i32 0
%load_425 = load float, ptr %getelementptr_600
%load_426 = load float, ptr %getelementptr_601
%FMul_427 = fmul float %load_425, %load_426
%getelementptr_602 = getelementptr [3 x float], ptr %alloca_269, i32 0, i32 1
%getelementptr_603 = getelementptr [3 x float], ptr %alloca_273, i32 0, i32 0
%load_430 = load float, ptr %getelementptr_602
%load_431 = load float, ptr %getelementptr_603
%FMul_432 = fmul float %load_430, %load_431
%FAdd_433 = fadd float %FMul_427, %FMul_432
%getelementptr_604 = getelementptr [3 x float], ptr %alloca_269, i32 0, i32 2
%getelementptr_605 = getelementptr [3 x float], ptr %alloca_274, i32 0, i32 0
%load_436 = load float, ptr %getelementptr_604
%load_437 = load float, ptr %getelementptr_605
%FMul_438 = fmul float %load_436, %load_437
%FAdd_439 = fadd float %FAdd_433, %FMul_438
%getelementptr_606 = getelementptr [6 x float], ptr %alloca_275, i32 0, i32 0
store float %FAdd_439, ptr %getelementptr_606
%getelementptr_608 = getelementptr [3 x float], ptr %alloca_272, i32 0, i32 1
%load_445 = load float, ptr %getelementptr_608
%FMul_446 = fmul float %load_425, %load_445
%getelementptr_610 = getelementptr [3 x float], ptr %alloca_273, i32 0, i32 1
%load_450 = load float, ptr %getelementptr_610
%FMul_451 = fmul float %load_430, %load_450
%FAdd_452 = fadd float %FMul_446, %FMul_451
%getelementptr_612 = getelementptr [3 x float], ptr %alloca_274, i32 0, i32 1
%load_456 = load float, ptr %getelementptr_612
%FMul_457 = fmul float %load_436, %load_456
%FAdd_458 = fadd float %FAdd_452, %FMul_457
%getelementptr_613 = getelementptr [6 x float], ptr %alloca_275, i32 0, i32 1
store float %FAdd_458, ptr %getelementptr_613
%getelementptr_615 = getelementptr [3 x float], ptr %alloca_272, i32 0, i32 2
%load_464 = load float, ptr %getelementptr_615
%FMul_465 = fmul float %load_425, %load_464
%getelementptr_617 = getelementptr [3 x float], ptr %alloca_273, i32 0, i32 2
%load_469 = load float, ptr %getelementptr_617
%FMul_470 = fmul float %load_430, %load_469
%FAdd_471 = fadd float %FMul_465, %FMul_470
%getelementptr_619 = getelementptr [3 x float], ptr %alloca_274, i32 0, i32 2
%load_475 = load float, ptr %getelementptr_619
%FMul_476 = fmul float %load_436, %load_475
%FAdd_477 = fadd float %FAdd_471, %FMul_476
%getelementptr_620 = getelementptr [6 x float], ptr %alloca_275, i32 0, i32 2
store float %FAdd_477, ptr %getelementptr_620
%getelementptr_621 = getelementptr [3 x float], ptr %alloca_270, i32 0, i32 0
%load_482 = load float, ptr %getelementptr_621
%FMul_484 = fmul float %load_482, %load_426
%getelementptr_623 = getelementptr [3 x float], ptr %alloca_270, i32 0, i32 1
%load_487 = load float, ptr %getelementptr_623
%FMul_489 = fmul float %load_487, %load_431
%FAdd_490 = fadd float %FMul_484, %FMul_489
%getelementptr_625 = getelementptr [3 x float], ptr %alloca_270, i32 0, i32 2
%load_493 = load float, ptr %getelementptr_625
%FMul_495 = fmul float %load_493, %load_437
%FAdd_496 = fadd float %FAdd_490, %FMul_495
%getelementptr_627 = getelementptr [3 x float], ptr %alloca_276, i32 0, i32 0
store float %FAdd_496, ptr %getelementptr_627
%FMul_503 = fmul float %load_482, %load_445
%FMul_508 = fmul float %load_487, %load_450
%FAdd_509 = fadd float %FMul_503, %FMul_508
%FMul_514 = fmul float %load_493, %load_456
%FAdd_515 = fadd float %FAdd_509, %FMul_514
%getelementptr_634 = getelementptr [3 x float], ptr %alloca_276, i32 0, i32 1
store float %FAdd_515, ptr %getelementptr_634
%FMul_522 = fmul float %load_482, %load_464
%FMul_527 = fmul float %load_487, %load_469
%FAdd_528 = fadd float %FMul_522, %FMul_527
%FMul_533 = fmul float %load_493, %load_475
%FAdd_534 = fadd float %FAdd_528, %FMul_533
%getelementptr_641 = getelementptr [3 x float], ptr %alloca_276, i32 0, i32 2
store float %FAdd_534, ptr %getelementptr_641
%getelementptr_642 = getelementptr [3 x float], ptr %alloca_271, i32 0, i32 0
%load_539 = load float, ptr %getelementptr_642
%FMul_541 = fmul float %load_539, %load_426
%getelementptr_644 = getelementptr [3 x float], ptr %alloca_271, i32 0, i32 1
%load_544 = load float, ptr %getelementptr_644
%FMul_546 = fmul float %load_544, %load_431
%FAdd_547 = fadd float %FMul_541, %FMul_546
%getelementptr_646 = getelementptr [3 x float], ptr %alloca_271, i32 0, i32 2
%load_550 = load float, ptr %getelementptr_646
%FMul_552 = fmul float %load_550, %load_437
%FAdd_553 = fadd float %FAdd_547, %FMul_552
%getelementptr_648 = getelementptr [3 x float], ptr %alloca_277, i32 0, i32 0
store float %FAdd_553, ptr %getelementptr_648
%FMul_560 = fmul float %load_539, %load_445
%FMul_565 = fmul float %load_544, %load_450
%FAdd_566 = fadd float %FMul_560, %FMul_565
%FMul_571 = fmul float %load_550, %load_456
%FAdd_572 = fadd float %FAdd_566, %FMul_571
%getelementptr_655 = getelementptr [3 x float], ptr %alloca_277, i32 0, i32 1
store float %FAdd_572, ptr %getelementptr_655
%FMul_579 = fmul float %load_539, %load_464
%FMul_584 = fmul float %load_544, %load_469
%FAdd_585 = fadd float %FMul_579, %FMul_584
%FMul_590 = fmul float %load_550, %load_475
%FAdd_591 = fadd float %FAdd_585, %FMul_590
%getelementptr_662 = getelementptr [3 x float], ptr %alloca_277, i32 0, i32 2
store float %FAdd_591, ptr %getelementptr_662
%getelementptr_679 = getelementptr [6 x float], ptr %alloca_275, i32 0
%call_680 = call i32 @thrd_create(i32 4)
%Mul_682 = mul i32 %call_680, 3
%SDiv_683 = sdiv i32 %Mul_682, 5
%Add_685 = add i32 %Mul_682, 3
%SDiv_686 = sdiv i32 %Add_685, 5
br label %cond3
cond3:
%phi_405 = phi i32 [%SDiv_683, %final2_split2], [%Add_346, %body4]
%icmp_688 = icmp slt i32 %phi_405, %SDiv_686
br i1 %icmp_688, label %body4, label %final5
body4:
%getelementptr_339 = getelementptr [6 x float], ptr %getelementptr_679, i32 0, i32 %phi_405
%load_340 = load float, ptr %getelementptr_339
%fptoi_341 = fptosi float %load_340 to i32
call void @putint(i32 %fptoi_341)
%Add_346 = add i32 %phi_405, 1
br label %cond3
final5:
call void @thrd_join()
call void @putch(i32 10)
%getelementptr_690 = getelementptr [3 x float], ptr %alloca_276, i32 0
%call_691 = call i32 @thrd_create(i32 4)
%Mul_693 = mul i32 %call_691, 3
%SDiv_694 = sdiv i32 %Mul_693, 5
%Add_696 = add i32 %Mul_693, 3
%SDiv_697 = sdiv i32 %Add_696, 5
br label %cond6
cond6:
%phi_406 = phi i32 [%SDiv_694, %final5], [%Add_369, %body7]
%icmp_699 = icmp slt i32 %phi_406, %SDiv_697
br i1 %icmp_699, label %body7, label %final8
body7:
%getelementptr_362 = getelementptr [3 x float], ptr %getelementptr_690, i32 0, i32 %phi_406
%load_363 = load float, ptr %getelementptr_362
%fptoi_364 = fptosi float %load_363 to i32
call void @putint(i32 %fptoi_364)
%Add_369 = add i32 %phi_406, 1
br label %cond6
final8:
call void @thrd_join()
call void @putch(i32 10)
%getelementptr_701 = getelementptr [3 x float], ptr %alloca_277, i32 0
%call_702 = call i32 @thrd_create(i32 4)
%Mul_704 = mul i32 %call_702, 3
%SDiv_705 = sdiv i32 %Mul_704, 5
%Add_707 = add i32 %Mul_704, 3
%SDiv_708 = sdiv i32 %Add_707, 5
br label %cond9
cond9:
%phi_407 = phi i32 [%SDiv_705, %final8], [%Add_392, %body10]
%icmp_710 = icmp slt i32 %phi_407, %SDiv_708
br i1 %icmp_710, label %body10, label %exit
body10:
%getelementptr_385 = getelementptr [3 x float], ptr %getelementptr_701, i32 0, i32 %phi_407
%load_386 = load float, ptr %getelementptr_385
%fptoi_387 = fptosi float %load_386 to i32
call void @putint(i32 %fptoi_387)
%Add_392 = add i32 %phi_407, 1
br label %cond9
exit:
call void @thrd_join()
call void @putch(i32 10)
ret i32 0
}