Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AVR / pseudo / ELPMWRdZ.mir
blob7a6bab0a03d686f446bf9b8b46f266ad35a50ead
1 # RUN: llc -mtriple=avr -mattr=+lpm -mattr=+elpm -mattr=+lpmx -mattr=+elpmx \
2 # RUN:     -mattr=+movw -start-before=greedy %s -o - | FileCheck %s
3 # 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 %s
6 # 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 %s
10 # This test checks the expansion of the 16-bit ELPM pseudo instruction and that
11 # the register allocator won't use R31R30 as an output register (which would
12 # lead to undefined behavior).
14 --- |
15   target triple = "avr--"
16   define void @test_elpmwrdz() {
17   entry:
18     ret void
19   }
20   define void @test_elpmwrdz_2() {
21   entry:
22     ret void
23   }
24 ...
26 ---
27 name:            test_elpmwrdz
28 tracksRegLiveness: true
29 body: |
30   bb.0.entry:
31     liveins: $r31r30
33     ; CHECK-LABEL: test_elpmwrdz
34     ; CHECK:      elpm r24, Z+
35     ; CHECK-NEXT: elpm r25, Z
36     ; CHECK-NEXT: movw r30, r24
38     ; NOX-LABEL: test_elpmwrdz
39     ; NOX:       ; %bb.0:
40     ; NOX-NEXT:    ldi r18, 1
41     ; NOX-NEXT:    out
42     ; NOX-NEXT:    elpm
43     ; NOX-NEXT:    mov r24, r0
44     ; NOX-NEXT:    adiw r30, 1
45     ; NOX-NEXT:    elpm
46     ; NOX-NEXT:    mov r25, r0
47     ; NOX-NEXT:    movw r30, r24
49     ; NOADIWNOX-LABEL: test_elpmwrdz
50     ; NOADIWNOX:       ; %bb.0:
51     ; NOADIWNOX-NEXT:    ldi r18, 1
52     ; NOADIWNOX-NEXT:    out
53     ; NOADIWNOX-NEXT:    elpm
54     ; NOADIWNOX-NEXT:    mov r24, r0
55     ; NOADIWNOX-NEXT:    subi r30, 255
56     ; NOADIWNOX-NEXT:    sbci r31, 255
57     ; NOADIWNOX-NEXT:    elpm
58     ; NOADIWNOX-NEXT:    mov r25, r0
59     ; NOADIWNOX-NEXT:    movw r30, r24
61     %1:zreg = COPY killed $r31r30
62     %2:ld8 = LDIRdK 1
63     %3:dregs = ELPMWRdZ %1, %2, implicit-def dead $r0
64     $r31r30 = COPY %3
65     RET implicit $r31r30
66 ...
68 ---
69 name:            test_elpmwrdz_2
70 tracksRegLiveness: true
71 body: |
72   bb.0.entry:
73     liveins: $r31r30
75     ; CHECK-LABEL: test_elpmwrdz_2
76     ; CHECK:       ; %bb.0:
77     ; CHECK-NEXT:    ldi r24, 1
78     ; CHECK-NEXT:    out 59, r24
79     ; CHECK-NEXT:    elpm r18, Z+
80     ; CHECK-NEXT:    elpm r19, Z
81     ; CHECK-NEXT:    sbiw r30, 1
82     ; CHECK-NEXT:    ret
84     ; NOX-LABEL: test_elpmwrdz_2
85     ; NOX:       ; %bb.0:
86     ; NOX-NEXT:    ldi r24, 1
87     ; NOX-NEXT:    out 59, r24
88     ; NOX-NEXT:    elpm
89     ; NOX-NEXT:    mov r18, r0
90     ; NOX-NEXT:    adiw r30, 1
91     ; NOX-NEXT:    elpm
92     ; NOX-NEXT:    mov r19, r0
93     ; NOX-NEXT:    sbiw r30, 1
94     ; NOX-NEXT:    ret
96     ; NOADIWNOX-LABEL: test_elpmwrdz_2
97     ; NOADIWNOX:       ; %bb.0:
98     ; NOADIWNOX-NEXT:    ldi r24, 1
99     ; NOADIWNOX-NEXT:    out  59, r24
100     ; NOADIWNOX-NEXT:    elpm
101     ; NOADIWNOX-NEXT:    mov r18, r0
102     ; NOADIWNOX-NEXT:    subi r30, 255
103     ; NOADIWNOX-NEXT:    sbci r31, 255
104     ; NOADIWNOX-NEXT:    elpm
105     ; NOADIWNOX-NEXT:    mov r19, r0
106     ; NOADIWNOX-NEXT:    subi r30, 1
107     ; NOADIWNOX-NEXT:    sbci r31, 0
109     %1:zreg = COPY $r31r30
110     %2:ld8 = LDIRdK 1
111     %3:dregs = ELPMWRdZ %1, %2, implicit-def dead $r0
112     RET implicit $r31r30