# RUN: llc -mtriple=avr -mattr=+elpm -mattr=+elpmx -start-before=greedy %s -o - \ # RUN: | FileCheck %s # RUN: llc -mtriple=avr -mattr=+elpm -mattr=-elpmx -start-before=greedy %s -o - \ # RUN: | FileCheck --check-prefix=NOX %s # This test checks the expansion of the 16-bit ELPM 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_elpmbrdz() { entry: ret void } ... --- name: test_elpmbrdz tracksRegLiveness: true body: | bb.0.entry: liveins: $r31r30 ; CHECK-LABEL: test_elpmbrdz ; CHECK: ; %bb.0: ; CHECK-NEXT: ldi r24, 1 ; CHECK-NEXT: out ; CHECK-NEXT: elpm r31, Z ; CHECK-NEXT: ret ; NOX-LABEL: test_elpmbrdz ; NOX: ; %bb.0: ; NOX-NEXT: ldi r24, 1 ; NOX-NEXT: out ; NOX-NEXT: elpm ; NOX-NEXT: mov r31, r0 ; NOX-NEXT: ret %1:zreg = COPY killed $r31r30 %2:ld8 = LDIRdK 1 %3:gpr8 = ELPMBRdZ %1, %2, implicit-def dead $r0 $r31 = COPY %3 RET implicit $r31 ...