Skip to content

Commit

Permalink
[AIEX] Run the coalescer again after premisched
Browse files Browse the repository at this point in the history
  • Loading branch information
gbossu committed May 29, 2024
1 parent cc2b1d8 commit dd36baf
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 20 deletions.
8 changes: 8 additions & 0 deletions llvm/lib/Target/AIE/AIE2TargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ static cl::opt<bool>
static cl::opt<bool>
AllocateMRegsFirst("aie-mod-ra-first", cl::Hidden, cl::init(false),
cl::desc("Allocate M registers first in staged RA."));
static cl::opt<bool> EnablePreMISchedCoalescer(
"aie-premisched-coalescer", cl::Hidden, cl::init(true),
cl::desc("Run the coalescer again after the pre-RA scheduler"));

extern bool AIEDumpArtifacts;

Expand Down Expand Up @@ -193,6 +196,11 @@ static bool onlyAllocateMRegisters(const TargetRegisterInfo &TRI,
}

bool AIE2PassConfig::addRegAssignAndRewriteOptimized() {

// Pre-RA scheduling might have exposed simplifiable copies.
if (EnablePreMISchedCoalescer)
addPass(&RegisterCoalescerID);

if (!EnableStagedRA && !EnableSuperRegSplitting)
return TargetPassConfig::addRegAssignAndRewriteOptimized();

Expand Down
20 changes: 10 additions & 10 deletions llvm/test/CodeGen/AIE/aie2/GlobalISel/legalize-dyn-stackalloc.ll
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ define void @test_simple_dyn_alloca(i32 noundef %n) {
; CHECK-NEXT: mova r1, #2; nopx
; CHECK-NEXT: st p7, [sp, #-32] // 4-byte Folded Spill
; CHECK-NEXT: mov p7, sp
; CHECK-NEXT: mov p0, sp
; CHECK-NEXT: mov p1, sp
; CHECK-NEXT: lshl r0, r0, r1
; CHECK-NEXT: mova r1, #-32
; CHECK-NEXT: st lr, [sp, #-28] // 4-byte Folded Spill
; CHECK-NEXT: padda [p7], #-32
; CHECK-NEXT: add r0, r0, #31
; CHECK-NEXT: jl #extern_call
; CHECK-NEXT: mov p1, p0 // Delay Slot 5
; CHECK-NEXT: mov p0, p1 // Delay Slot 5
; CHECK-NEXT: and r0, r0, r1 // Delay Slot 4
; CHECK-NEXT: mov m0, r0 // Delay Slot 3
; CHECK-NEXT: paddb [p1], m0 // Delay Slot 2
Expand Down Expand Up @@ -73,11 +73,11 @@ define void @test_loop_dyn_alloca(i32 noundef %n) {
; CHECK-NEXT: .p2align 4
; CHECK-NEXT: .LBB1_1: // %for.body
; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
; CHECK-NEXT: nopa ; nopb ; nopx ; mov p0, sp; nops
; CHECK-NEXT: nopa ; nopb ; nopx ; mov p1, sp; nops
; CHECK-NEXT: lshl r0, r17, r19
; CHECK-NEXT: add r0, r0, #31
; CHECK-NEXT: jl #extern_call
; CHECK-NEXT: mov p1, p0 // Delay Slot 5
; CHECK-NEXT: mov p0, p1 // Delay Slot 5
; CHECK-NEXT: and r0, r0, r20 // Delay Slot 4
; CHECK-NEXT: mov m0, r0 // Delay Slot 3
; CHECK-NEXT: paddb [p1], m0 // Delay Slot 2
Expand Down Expand Up @@ -143,19 +143,19 @@ define void @test_huge_stack(i32 noundef %n) #0 {
; CHECK-NEXT: st p6, [sp, #-40060] // 4-byte Folded Spill
; CHECK-NEXT: padda [p7], m0
; CHECK-NEXT: movxm m0, #-40048
; CHECK-NEXT: mov p2, p7
; CHECK-NEXT: mov p0, p7
; CHECK-NEXT: mov p2, p7
; CHECK-NEXT: mov p6, p7
; CHECK-NEXT: paddb [p0], m0
; CHECK-NEXT: paddb [p2], #-32
; CHECK-NEXT: st r0, [p0, #0]
; CHECK-NEXT: lda r0, [p0, #0]
; CHECK-NEXT: mov p6, p7
; CHECK-NEXT: paddb [p2], #-32
; CHECK-NEXT: mov r16, p2
; CHECK-NEXT: st p1, [p2, #0]
; CHECK-NEXT: mov p0, sp
; CHECK-NEXT: st p0, [p2, #0]
; CHECK-NEXT: mov p0, p1
; CHECK-NEXT: mov p2, p7
; CHECK-NEXT: paddb [p2], #-24
; CHECK-NEXT: mov p0, sp
; CHECK-NEXT: mov p1, p0
; CHECK-NEXT: lshl r2, r0, r2
; CHECK-NEXT: st r0, [p2], #4
; CHECK-NEXT: add r2, r2, #31
Expand Down
20 changes: 10 additions & 10 deletions llvm/test/CodeGen/AIE/aie2/dyn-stackalloc.ll
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ define void @test_simple_dyn_alloca(i32 noundef %n) {
; CHECK-NEXT: mova r1, #2; nopx
; CHECK-NEXT: st p7, [sp, #-32] // 4-byte Folded Spill
; CHECK-NEXT: mov p7, sp
; CHECK-NEXT: mov p0, sp
; CHECK-NEXT: mov p1, sp
; CHECK-NEXT: lshl r0, r0, r1
; CHECK-NEXT: mova r1, #-32
; CHECK-NEXT: st lr, [sp, #-28] // 4-byte Folded Spill
; CHECK-NEXT: padda [p7], #-32
; CHECK-NEXT: add r0, r0, #31
; CHECK-NEXT: jl #extern_call
; CHECK-NEXT: mov p1, p0 // Delay Slot 5
; CHECK-NEXT: mov p0, p1 // Delay Slot 5
; CHECK-NEXT: and r0, r0, r1 // Delay Slot 4
; CHECK-NEXT: mov m0, r0 // Delay Slot 3
; CHECK-NEXT: paddb [p1], m0 // Delay Slot 2
Expand Down Expand Up @@ -73,11 +73,11 @@ define void @test_loop_dyn_alloca(i32 noundef %n) {
; CHECK-NEXT: .p2align 4
; CHECK-NEXT: .LBB1_1: // %for.body
; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
; CHECK-NEXT: nopa ; nopb ; nopx ; mov p0, sp; nops
; CHECK-NEXT: nopa ; nopb ; nopx ; mov p1, sp; nops
; CHECK-NEXT: lshl r0, r17, r19
; CHECK-NEXT: add r0, r0, #31
; CHECK-NEXT: jl #extern_call
; CHECK-NEXT: mov p1, p0 // Delay Slot 5
; CHECK-NEXT: mov p0, p1 // Delay Slot 5
; CHECK-NEXT: and r0, r0, r20 // Delay Slot 4
; CHECK-NEXT: mov m0, r0 // Delay Slot 3
; CHECK-NEXT: paddb [p1], m0 // Delay Slot 2
Expand Down Expand Up @@ -143,19 +143,19 @@ define void @test_huge_stack(i32 noundef %n) #0 {
; CHECK-NEXT: st p6, [sp, #-40060] // 4-byte Folded Spill
; CHECK-NEXT: padda [p7], m0
; CHECK-NEXT: movxm m0, #-40048
; CHECK-NEXT: mov p2, p7
; CHECK-NEXT: mov p0, p7
; CHECK-NEXT: mov p2, p7
; CHECK-NEXT: mov p6, p7
; CHECK-NEXT: paddb [p0], m0
; CHECK-NEXT: paddb [p2], #-32
; CHECK-NEXT: st r0, [p0, #0]
; CHECK-NEXT: lda r0, [p0, #0]
; CHECK-NEXT: mov p6, p7
; CHECK-NEXT: paddb [p2], #-32
; CHECK-NEXT: mov r16, p2
; CHECK-NEXT: st p1, [p2, #0]
; CHECK-NEXT: mov p0, sp
; CHECK-NEXT: st p0, [p2, #0]
; CHECK-NEXT: mov p0, p1
; CHECK-NEXT: mov p2, p7
; CHECK-NEXT: paddb [p2], #-24
; CHECK-NEXT: mov p0, sp
; CHECK-NEXT: mov p1, p0
; CHECK-NEXT: lshl r2, r0, r2
; CHECK-NEXT: st r0, [p2], #4
; CHECK-NEXT: add r2, r2, #31
Expand Down
1 change: 1 addition & 0 deletions llvm/test/CodeGen/AIE/aie2/llc-pipeline-aie2.ll
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@
; AIE-O123-NEXT: Live Interval Analysis
; AIE-O123-NEXT: Register Coalescer
; AIE-O123-NEXT: Machine Instruction Scheduler
; AIE-O123-NEXT: Register Coalescer
; AIE-O123-NEXT: AIE 2D/3D operand splitter
; AIE-O123-NEXT: Machine Block Frequency Analysis
; AIE-O123-NEXT: Live Interval Analysis
Expand Down

0 comments on commit dd36baf

Please sign in to comment.