[llvm] r315972 - [globalisel][tablegen] Add a GIM_CheckIsSameOperand test where OtherInsnID and OtherOpIdx differ
Daniel Sanders via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 16 22:24:44 PDT 2017
Author: dsanders
Date: Mon Oct 16 22:24:44 2017
New Revision: 315972
URL: http://llvm.org/viewvc/llvm-project?rev=315972&view=rev
Log:
[globalisel][tablegen] Add a GIM_CheckIsSameOperand test where OtherInsnID and OtherOpIdx differ
Added:
llvm/trunk/test/CodeGen/X86/GlobalISel/select-blsi.mir
Added: llvm/trunk/test/CodeGen/X86/GlobalISel/select-blsi.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/GlobalISel/select-blsi.mir?rev=315972&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/GlobalISel/select-blsi.mir (added)
+++ llvm/trunk/test/CodeGen/X86/GlobalISel/select-blsi.mir Mon Oct 16 22:24:44 2017
@@ -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
+...
More information about the llvm-commits
mailing list