summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/AArch64/GlobalISel
diff options
context:
space:
mode:
authorDaniel Sanders <daniel_l_sanders@apple.com>2017-04-22 14:31:28 +0000
committerDaniel Sanders <daniel_l_sanders@apple.com>2017-04-22 14:31:28 +0000
commit3016d3c6c95ff2510c695e05782165524c61b5c3 (patch)
tree9e0271d9921f67d10700370dfb3cd2723cab2830 /llvm/test/CodeGen/AArch64/GlobalISel
parentd57681b703259c8a87877edcb90db79b01ebc71b (diff)
downloadbcm5719-llvm-3016d3c6c95ff2510c695e05782165524c61b5c3.tar.gz
bcm5719-llvm-3016d3c6c95ff2510c695e05782165524c61b5c3.zip
[globalisel][tablegen] Fix PR32733 by checking which instruction operands belong to.
canMutate() was returning true when the operands were all in the same order as the matched instruction. However, it wasn't checking the operands were actually on that instruction. This worked when we could only match a single instruction but the addition of nested instruction matching led to cases where the operands could be split across multiple instructions. canMutate() now returns false if operands belong to instructions other than the root of the match. llvm-svn: 301077
Diffstat (limited to 'llvm/test/CodeGen/AArch64/GlobalISel')
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select-pr32733.mir65
1 files changed, 65 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-pr32733.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-pr32733.mir
new file mode 100644
index 00000000000..96436209451
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-pr32733.mir
@@ -0,0 +1,65 @@
+# RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck %s
+
+--- |
+ define i32 @main() {
+ entry:
+ ret i32 0
+ }
+
+ declare i32 @printf(i8*, ...)
+...
+---
+# CHECK-LABEL: name: main
+name: main
+alignment: 2
+exposesReturnsTwice: false
+noVRegs: false
+legalized: true
+regBankSelected: true
+selected: false
+tracksRegLiveness: true
+registers:
+ - { id: 0, class: gpr }
+ - { id: 1, class: gpr }
+ - { id: 2, class: gpr }
+ - { id: 3, class: gpr }
+ - { id: 4, class: gpr }
+ - { id: 5, class: gpr }
+ - { id: 6, class: gpr }
+ - { id: 7, class: gpr }
+ - { id: 8, class: gpr }
+ - { id: 9, class: gpr }
+ - { id: 10, class: gpr }
+ - { id: 11, class: gpr }
+ - { id: 12, class: gpr }
+ - { id: 13, class: gpr }
+ - { id: 14, class: gpr }
+ - { id: 15, class: gpr }
+frameInfo:
+ isFrameAddressTaken: false
+ isReturnAddressTaken: false
+ hasStackMap: false
+ hasPatchPoint: false
+ stackSize: 0
+ offsetAdjustment: 0
+ maxAlignment: 8
+ adjustsStack: false
+ hasCalls: true
+ maxCallFrameSize: 0
+ hasOpaqueSPAdjustment: false
+ hasVAStart: false
+ hasMustTailInVarArgFunc: false
+# CHECK: body:
+# CHECK: %1 = COPY %w0
+# CHECK-NOT: %2 = ORNWrr %wzr, %1
+# CHECK: %4 = EONWrr %1, %3
+body: |
+ bb.1.entry:
+ liveins: %w0
+ %0(s32) = G_CONSTANT i32 -1
+ %3(s32) = G_CONSTANT i32 1
+ %1(s32) = COPY %w0
+ %2(s32) = G_XOR %1, %0
+ %4(s32) = G_XOR %2, %3
+ %w0 = COPY %4(s32)
+...
OpenPOWER on IntegriCloud