llvm-project/llvm/test/CodeGen/X86/GlobalISel/select-or-scalar.mir
pvanhout c3cfbbc416 [GlobalISel] Add dead flags to implicit defs in ISel
Checks for implicit defs that are unused within a pattern and mark them as dead.

This is done directly at the TableGen level forr efficiency.
The instructions are directly created with the "dead" operand and no further analysis is needed later.

Reviewed By: arsenm

Differential Revision: https://reviews.llvm.org/D157273
2023-08-09 14:20:51 +02:00

154 lines
4.0 KiB
YAML

# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -mtriple=x86_64-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL
--- |
define i8 @test_or_i8(i8 %arg1, i8 %arg2) {
%ret = or i8 %arg1, %arg2
ret i8 %ret
}
define i16 @test_or_i16(i16 %arg1, i16 %arg2) {
%ret = or i16 %arg1, %arg2
ret i16 %ret
}
define i32 @test_or_i32(i32 %arg1, i32 %arg2) {
%ret = or i32 %arg1, %arg2
ret i32 %ret
}
define i64 @test_or_i64(i64 %arg1, i64 %arg2) {
%ret = or i64 %arg1, %arg2
ret i64 %ret
}
...
---
name: test_or_i8
alignment: 16
legalized: true
regBankSelected: true
registers:
- { id: 0, class: gpr, preferred-register: '' }
- { id: 1, class: gpr, preferred-register: '' }
- { id: 2, class: gpr, preferred-register: '' }
liveins:
fixedStack:
stack:
constants:
body: |
bb.1 (%ir-block.0):
liveins: $edi, $esi
; ALL-LABEL: name: test_or_i8
; ALL: liveins: $edi, $esi
; ALL-NEXT: {{ $}}
; ALL-NEXT: [[COPY:%[0-9]+]]:gr8 = COPY $dil
; ALL-NEXT: [[COPY1:%[0-9]+]]:gr8 = COPY $sil
; ALL-NEXT: [[OR8rr:%[0-9]+]]:gr8 = OR8rr [[COPY]], [[COPY1]], implicit-def dead $eflags
; ALL-NEXT: $al = COPY [[OR8rr]]
; ALL-NEXT: RET 0, implicit $al
%0(s8) = COPY $dil
%1(s8) = COPY $sil
%2(s8) = G_OR %0, %1
$al = COPY %2(s8)
RET 0, implicit $al
...
---
name: test_or_i16
alignment: 16
legalized: true
regBankSelected: true
registers:
- { id: 0, class: gpr, preferred-register: '' }
- { id: 1, class: gpr, preferred-register: '' }
- { id: 2, class: gpr, preferred-register: '' }
liveins:
fixedStack:
stack:
constants:
body: |
bb.1 (%ir-block.0):
liveins: $edi, $esi
; ALL-LABEL: name: test_or_i16
; ALL: liveins: $edi, $esi
; ALL-NEXT: {{ $}}
; ALL-NEXT: [[COPY:%[0-9]+]]:gr16 = COPY $di
; ALL-NEXT: [[COPY1:%[0-9]+]]:gr16 = COPY $si
; ALL-NEXT: [[OR16rr:%[0-9]+]]:gr16 = OR16rr [[COPY]], [[COPY1]], implicit-def dead $eflags
; ALL-NEXT: $ax = COPY [[OR16rr]]
; ALL-NEXT: RET 0, implicit $ax
%0(s16) = COPY $di
%1(s16) = COPY $si
%2(s16) = G_OR %0, %1
$ax = COPY %2(s16)
RET 0, implicit $ax
...
---
name: test_or_i32
alignment: 16
legalized: true
regBankSelected: true
registers:
- { id: 0, class: gpr, preferred-register: '' }
- { id: 1, class: gpr, preferred-register: '' }
- { id: 2, class: gpr, preferred-register: '' }
liveins:
fixedStack:
stack:
constants:
body: |
bb.1 (%ir-block.0):
liveins: $edi, $esi
; ALL-LABEL: name: test_or_i32
; ALL: liveins: $edi, $esi
; ALL-NEXT: {{ $}}
; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
; ALL-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi
; ALL-NEXT: [[OR32rr:%[0-9]+]]:gr32 = OR32rr [[COPY]], [[COPY1]], implicit-def dead $eflags
; ALL-NEXT: $eax = COPY [[OR32rr]]
; ALL-NEXT: RET 0, implicit $eax
%0(s32) = COPY $edi
%1(s32) = COPY $esi
%2(s32) = G_OR %0, %1
$eax = COPY %2(s32)
RET 0, implicit $eax
...
---
name: test_or_i64
alignment: 16
legalized: true
regBankSelected: true
registers:
- { id: 0, class: gpr, preferred-register: '' }
- { id: 1, class: gpr, preferred-register: '' }
- { id: 2, class: gpr, preferred-register: '' }
liveins:
fixedStack:
stack:
constants:
body: |
bb.1 (%ir-block.0):
liveins: $rdi, $rsi
; ALL-LABEL: name: test_or_i64
; ALL: liveins: $rdi, $rsi
; ALL-NEXT: {{ $}}
; ALL-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
; ALL-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rsi
; ALL-NEXT: [[OR64rr:%[0-9]+]]:gr64 = OR64rr [[COPY]], [[COPY1]], implicit-def dead $eflags
; ALL-NEXT: $rax = COPY [[OR64rr]]
; ALL-NEXT: RET 0, implicit $rax
%0(s64) = COPY $rdi
%1(s64) = COPY $rsi
%2(s64) = G_OR %0, %1
$rax = COPY %2(s64)
RET 0, implicit $rax
...