forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[llvm][CodeGen] Fixed a bug in stall cycle calculation for window sch…
…eduler (llvm#99451) Fixed a bug in stall cycle calculation. When a register defined by an instruction in the current iteration is used by an instruction in the next iteration, we have modified the number of stall cycle that need to be inserted.
- Loading branch information
Showing
2 changed files
with
63 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
# REQUIRES: asserts | ||
# RUN: llc --march=hexagon %s -run-pass=pipeliner -debug-only=pipeliner \ | ||
# RUN: -window-sched=force -filetype=null -verify-machineinstrs \ | ||
# RUN: -window-region-limit=1 -window-search-ratio=100 -window-diff-limit=0 \ | ||
# RUN: 2>&1 | FileCheck %s | ||
|
||
# CHECK-LABEL: Start analyzing II | ||
# CHECK: MaxStallCycle is 0 | ||
# CHECK-LABEL: Start analyzing II | ||
# CHECK: MaxStallCycle is 0 | ||
# CHECK-LABEL: Start analyzing II | ||
# CHECK: MaxStallCycle is 0 | ||
|
||
--- | ||
name: test_window_stall_cycle | ||
tracksRegLiveness: true | ||
body: | | ||
bb.0: | ||
successors: %bb.3(0x40000000), %bb.1(0x40000000) | ||
liveins: $r0, $r1 | ||
%0:intregs = COPY $r1 | ||
%1:intregs = COPY $r0 | ||
%2:intregs = nsw A2_add %0, %1 | ||
%3:intregs = S2_lsr_i_r_acc %2, %2, 31 | ||
%4:intregs = S2_asr_i_r killed %3, 1 | ||
%5:predregs = C2_cmpgt %1, %4 | ||
%6:intregs = A2_tfrsi 0 | ||
J2_jumpt killed %5, %bb.3, implicit-def dead $pc | ||
J2_jump %bb.1, implicit-def dead $pc | ||
bb.1: | ||
successors: %bb.2(0x80000000) | ||
%7:intregs = A2_addi %4, 2 | ||
%8:intregs = A2_tfrsi 0 | ||
%9:intregs = A2_sub %4, %1 | ||
%10:intregs = A2_addi %9, 1 | ||
%11:intregs = COPY %10 | ||
J2_loop0r %bb.2, %11, implicit-def $lc0, implicit-def $sa0, implicit-def $usr | ||
bb.2 (machine-block-address-taken): | ||
successors: %bb.3(0x04000000), %bb.2(0x7c000000) | ||
%12:intregs = PHI %7, %bb.1, %13, %bb.2 | ||
%14:intregs = PHI %8, %bb.1, %15, %bb.2 | ||
%16:intregs = PHI %8, %bb.1, %17, %bb.2 | ||
%18:intregs, %13:intregs = L2_loadri_pi %12, -4 | ||
%17:intregs = nsw A2_add killed %18, %16 | ||
%15:intregs = A2_max %17, %14 | ||
ENDLOOP0 %bb.2, implicit-def $pc, implicit-def $lc0, implicit $sa0, implicit $lc0 | ||
J2_jump %bb.3, implicit-def dead $pc | ||
bb.3: | ||
%19:intregs = PHI %6, %bb.0, %15, %bb.2 | ||
$r0 = COPY %19 | ||
PS_jmpret $r31, implicit-def dead $pc, implicit $r0 | ||
... |