brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 7a6bab0 Raw
114 lines · plain
1# RUN: llc -mtriple=avr -mattr=+lpm -mattr=+elpm -mattr=+lpmx -mattr=+elpmx \2# RUN:     -mattr=+movw -start-before=greedy %s -o - | FileCheck %s3# RUN: llc -mtriple=avr -mattr=+lpm -mattr=+elpm -mattr=-lpmx -mattr=-elpmx \4# RUN:     -mattr=+addsubiw -mattr=+movw -start-before=greedy %s -o - \5# RUN:     | FileCheck --check-prefix=NOX %s6# RUN: llc -mtriple=avr -mattr=+lpm -mattr=+elpm -mattr=-lpmx -mattr=-elpmx \7# RUN:     -mattr=-addsubiw -mattr=+movw -start-before=greedy %s -o - \8# RUN:     | FileCheck --check-prefix=NOADIWNOX %s9 10# This test checks the expansion of the 16-bit ELPM pseudo instruction and that11# the register allocator won't use R31R30 as an output register (which would12# lead to undefined behavior).13 14--- |15  target triple = "avr--"16  define void @test_elpmwrdz() {17  entry:18    ret void19  }20  define void @test_elpmwrdz_2() {21  entry:22    ret void23  }24...25 26---27name:            test_elpmwrdz28tracksRegLiveness: true29body: |30  bb.0.entry:31    liveins: $r31r3032 33    ; CHECK-LABEL: test_elpmwrdz34    ; CHECK:      elpm r24, Z+35    ; CHECK-NEXT: elpm r25, Z36    ; CHECK-NEXT: movw r30, r2437 38    ; NOX-LABEL: test_elpmwrdz39    ; NOX:       ; %bb.0:40    ; NOX-NEXT:    ldi r18, 141    ; NOX-NEXT:    out42    ; NOX-NEXT:    elpm43    ; NOX-NEXT:    mov r24, r044    ; NOX-NEXT:    adiw r30, 145    ; NOX-NEXT:    elpm46    ; NOX-NEXT:    mov r25, r047    ; NOX-NEXT:    movw r30, r2448 49    ; NOADIWNOX-LABEL: test_elpmwrdz50    ; NOADIWNOX:       ; %bb.0:51    ; NOADIWNOX-NEXT:    ldi r18, 152    ; NOADIWNOX-NEXT:    out53    ; NOADIWNOX-NEXT:    elpm54    ; NOADIWNOX-NEXT:    mov r24, r055    ; NOADIWNOX-NEXT:    subi r30, 25556    ; NOADIWNOX-NEXT:    sbci r31, 25557    ; NOADIWNOX-NEXT:    elpm58    ; NOADIWNOX-NEXT:    mov r25, r059    ; NOADIWNOX-NEXT:    movw r30, r2460 61    %1:zreg = COPY killed $r31r3062    %2:ld8 = LDIRdK 163    %3:dregs = ELPMWRdZ %1, %2, implicit-def dead $r064    $r31r30 = COPY %365    RET implicit $r31r3066...67 68---69name:            test_elpmwrdz_270tracksRegLiveness: true71body: |72  bb.0.entry:73    liveins: $r31r3074 75    ; CHECK-LABEL: test_elpmwrdz_276    ; CHECK:       ; %bb.0:77    ; CHECK-NEXT:    ldi r24, 178    ; CHECK-NEXT:    out 59, r2479    ; CHECK-NEXT:    elpm r18, Z+80    ; CHECK-NEXT:    elpm r19, Z81    ; CHECK-NEXT:    sbiw r30, 182    ; CHECK-NEXT:    ret83 84    ; NOX-LABEL: test_elpmwrdz_285    ; NOX:       ; %bb.0:86    ; NOX-NEXT:    ldi r24, 187    ; NOX-NEXT:    out 59, r2488    ; NOX-NEXT:    elpm89    ; NOX-NEXT:    mov r18, r090    ; NOX-NEXT:    adiw r30, 191    ; NOX-NEXT:    elpm92    ; NOX-NEXT:    mov r19, r093    ; NOX-NEXT:    sbiw r30, 194    ; NOX-NEXT:    ret95 96    ; NOADIWNOX-LABEL: test_elpmwrdz_297    ; NOADIWNOX:       ; %bb.0:98    ; NOADIWNOX-NEXT:    ldi r24, 199    ; NOADIWNOX-NEXT:    out  59, r24100    ; NOADIWNOX-NEXT:    elpm101    ; NOADIWNOX-NEXT:    mov r18, r0102    ; NOADIWNOX-NEXT:    subi r30, 255103    ; NOADIWNOX-NEXT:    sbci r31, 255104    ; NOADIWNOX-NEXT:    elpm105    ; NOADIWNOX-NEXT:    mov r19, r0106    ; NOADIWNOX-NEXT:    subi r30, 1107    ; NOADIWNOX-NEXT:    sbci r31, 0108 109    %1:zreg = COPY $r31r30110    %2:ld8 = LDIRdK 1111    %3:dregs = ELPMWRdZ %1, %2, implicit-def dead $r0112    RET implicit $r31r30113...114