forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ARM][GISel] PR35965 Constrain RegClasses of nested instructions buil…
…t from Dst Pattern Summary: Apparently, we missed on constraining register classes of VReg-operands of all the instructions built from a destination pattern but the root (top-level) one. The issue exposed itself while selecting G_FPTOSI for armv7: the corresponding pattern generates VTOSIZS wrapped into COPY_TO_REGCLASS, so top-level COPY_TO_REGCLASS gets properly constrained, while nested VTOSIZS (or rather its destination virtual register to be exact) does not. Fixing this by issuing GIR_ConstrainSelectedInstOperands for every nested GIR_BuildMI. https://bugs.llvm.org/show_bug.cgi?id=35965 rdar://problem/36886530 Patch by Roman Tereshin Reviewers: dsanders, qcolombet, rovka, bogner, aditya_nandakumar, volkan Reviewed By: dsanders, qcolombet, rovka Subscribers: aemerson, javed.absar, kristof.beyls, llvm-commits Differential Revision: https://reviews.llvm.org/D42565 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@323692 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
1 parent
ab9f432
commit ca71b34
Showing
5 changed files
with
63 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
30 changes: 30 additions & 0 deletions
30
test/CodeGen/ARM/GlobalISel/arm-select-copy_to_regclass-of-fptosi.mir
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | ||
# RUN: llc -mtriple armv7-gnueabihf -run-pass instruction-select \ | ||
# RUN: -verify-machineinstrs -o - %s | FileCheck %s | ||
--- | ||
# Test that we constrain register classes of temporary virtual registers | ||
# defined by nested instructions built from a Dst Pattern | ||
# | ||
# G_FPTOSI selects to a (COPY_TO_REGCLASS (VTOSIZS SPR:$a), GPR), where | ||
# COPY_TO_REGCLASS doesn't constrain its source register class. It exposes the | ||
# bug as we create a tmp reg for VTOSIZS' result and don't constrain its | ||
# register class as COPY_TO_REGCLASS' source (which is fine) nor as VTOSIZS' | ||
# destination (which is not). | ||
# | ||
# https://bugs.llvm.org/show_bug.cgi?id=35965 | ||
name: test_fptosi | ||
legalized: true | ||
regBankSelected: true | ||
body: | | ||
bb.1: | ||
; CHECK-LABEL: name: test_fptosi | ||
; CHECK: [[COPY:%[0-9]+]]:spr = COPY %s0 | ||
; CHECK: [[VTOSIZS:%[0-9]+]]:spr = VTOSIZS [[COPY]], 14, %noreg | ||
; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY [[VTOSIZS]] | ||
; CHECK: %r0 = COPY [[COPY1]] | ||
; CHECK: MOVPCLR 14, %noreg, implicit %r0 | ||
%0:fprb(s32) = COPY %s0 | ||
%1:gprb(s32) = G_FPTOSI %0(s32) | ||
%r0 = COPY %1(s32) | ||
MOVPCLR 14, %noreg, implicit %r0 | ||
... |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters