1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00

[globalisel][tablegen] Add a GIM_CheckIsSameOperand test where OtherInsnID and OtherOpIdx differ

llvm-svn: 315972
This commit is contained in:
Daniel Sanders 2017-10-17 05:24:44 +00:00
parent 09415eba32
commit 9581497d78

View File

@ -0,0 +1,61 @@
# RUN: llc -mtriple=x86_64-linux-gnu -mattr=+bmi -global-isel -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
#
# Test that rules where multiple operands must be the same operand successfully
# match. Also test that the rules do not match when they're not the same
# operand.
#
# This test covers the case when OtherInsnID and OtherOpIdx are different in a
# GIM_CheckIsSameOperand.
---
name: test_blsi32rr
# CHECK-LABEL: name: test_blsi32rr
alignment: 4
legalized: true
regBankSelected: true
# CHECK: registers:
# CHECK-NEXT: - { id: 0, class: gr32, preferred-register: '' }
# CHECK-NEXT: - { id: 1, class: gpr, preferred-register: '' }
# CHECK-NEXT: - { id: 2, class: gpr, preferred-register: '' }
# CHECK-NEXT: - { id: 3, class: gr32, preferred-register: '' }
registers:
- { id: 0, class: gpr }
- { id: 1, class: gpr }
- { id: 2, class: gpr }
- { id: 3, class: gpr }
# G_SUB and G_AND both use %0 so we should match this.
# CHECK: %3 = BLSI32rr %0
body: |
bb.1:
liveins: %edi
%0(s32) = COPY %edi
%1(s32) = G_CONSTANT i32 0
%2(s32) = G_SUB %1, %0
%3(s32) = G_AND %2, %0
%edi = COPY %3
...
---
name: test_blsi32rr_nomatch
# CHECK-LABEL: name: test_blsi32rr_nomatch
alignment: 4
legalized: true
regBankSelected: true
registers:
- { id: 0, class: gpr }
- { id: 1, class: gpr }
- { id: 2, class: gpr }
- { id: 3, class: gpr }
# G_SUB and G_AND use different operands so we shouldn't match this.
# CHECK-NOT: BLSI32rr
body: |
bb.1:
liveins: %edi
%0(s32) = COPY %edi
%1(s32) = G_CONSTANT i32 0
%2(s32) = G_SUB %1, %1
%3(s32) = G_AND %2, %0
%edi = COPY %3
...