# RUN: llc -mtriple=avr -mattr=+lpm -mattr=+lpmx -start-before=greedy %s -o - \
# RUN: | FileCheck %s
# RUN: llc -mtriple=avr -mattr=+lpm -mattr=-lpmx -start-before=greedy %s -o - \
# RUN: | FileCheck --check-prefix=NOX %s
# This test checks the expansion of the 8-bit LPMBRdZ pseudo instruction and that
# the register allocator won't use R31R30 as an output register (which would
# lead to undefined behavior).
--- |
target triple = "avr--"
define void @test_lpmbrdz() {
entry:
ret void
}
...
---
name: test_lpmbrdz
tracksRegLiveness: true
body: |
bb.0.entry:
liveins: $r31r30
; CHECK-LABEL: test_lpmbrdz:
; CHECK: ; %bb.0:
; CHECK-NEXT: lpm r30, Z
; CHECK-NEXT: ret
; NOX-LABEL: test_lpmbrdz
; NOX: ; %bb.0:
; NOX-NEXT: lpm
; NOX-NEXT: mov r30, r0
; NOX-NEXT: ret
%1:zreg = COPY killed $r31r30
%2:gpr8 = LPMBRdZ %1, implicit-def dead $r0
$r30 = COPY %2
RET implicit $r30
...