Both are based on MachineLICMBase, and the functionality there is "switched" based on a PreRegAlloc flag. This commit is simply about trusting the original value of that flag, defined by the `MachineLICM` and `EarlyMachineLICM` classes. The `PreRegAlloc` flag used to be overwritten it based on MRI.isSSA(), which is un-reliable due to how it is inferred by the MIRParser. I see that we can now define isSSA in MIR (thanks @gargaroff ), meaning the fix isn’t really needed anymore, but redefining that flag still feels wrong. Note that I'm looking into upstreaming more changes to MachineLICM, see [the discourse thread](https://discourse.llvm.org/t/extending-post-regalloc-machinelicm/82725).
60 lines
1.4 KiB
YAML
60 lines
1.4 KiB
YAML
# RUN: llc -mtriple=aarch64 -run-pass machinelicm -verify-machineinstrs -o - %s | FileCheck %s
|
|
# RUN: llc -mtriple=aarch64 -passes machinelicm -o - %s | FileCheck %s
|
|
---
|
|
name: test
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 8, type: spill-slot }
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: test
|
|
; CHECK-LABEL: bb.0:
|
|
; CHECK: $x2 = LDRXui %stack.0, 0
|
|
liveins: $x0, $x1, $x2
|
|
B %bb.1
|
|
|
|
bb.1:
|
|
; CHECK-LABEL: bb.1:
|
|
; CHECK-NOT: $x2 = LDRXui %stack.0, 0
|
|
; CHECK: $x0 = ADDXrr $x0, $x2
|
|
liveins: $x0
|
|
DBG_VALUE %stack.0, 0
|
|
$x2 = LDRXui %stack.0, 0 :: (load (s64) from %stack.0)
|
|
$x0 = ADDXrr $x0, killed $x2
|
|
$xzr = SUBSXri killed $x0, 1, 0, implicit-def $nzcv
|
|
Bcc 11, %bb.1, implicit $nzcv
|
|
B %bb.2
|
|
|
|
bb.2:
|
|
liveins: $x0
|
|
...
|
|
|
|
---
|
|
name: test2
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 8, type: spill-slot }
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: test2
|
|
; CHECK-LABEL: bb.0:
|
|
; CHECK: $x2 = LDRXui %stack.0, 0
|
|
liveins: $x0, $x1, $x2
|
|
B %bb.1
|
|
|
|
bb.1:
|
|
; CHECK-LABEL: bb.1:
|
|
; CHECK-NOT: $x2 = LDRXui %stack.0, 0
|
|
; CHECK: $w0 = ADDWrr $w0, $w2
|
|
liveins: $x0
|
|
DBG_VALUE %stack.0, 0
|
|
$x2 = LDRXui %stack.0, 0 :: (load (s64) from %stack.0)
|
|
$w0 = ADDWrr $w0, killed $w2
|
|
$wzr = SUBSWri killed $w0, 1, 0, implicit-def $nzcv
|
|
Bcc 11, %bb.1, implicit $nzcv
|
|
B %bb.2
|
|
|
|
bb.2:
|
|
liveins: $x0
|
|
...
|