[PATCH] D74988: Propagate MIFlags in table gen
Michael Berg via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 21 14:57:45 PST 2020
mcberg2017 created this revision.
mcberg2017 added reviewers: dsanders, volkan.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Add flag propagation to tablegen via OutMIs from originating MI in InstructionSelector::executeMatchTable.
https://reviews.llvm.org/D74988
Files:
llvm/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h
llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt.mir
Index: llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt.mir
===================================================================
--- llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt.mir
+++ llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt.mir
@@ -71,12 +71,12 @@
; CHECK: BR %18
; CHECK: bb.2.sw.bb:
; CHECK: successors: %bb.4(0x80000000)
- ; CHECK: [[ADDWri:%[0-9]+]]:gpr32sp = ADDWri [[COPY]], 42, 0
+ ; CHECK: [[ADDWri:%[0-9]+]]:gpr32sp = nsw ADDWri [[COPY]], 42, 0
; CHECK: B %bb.4
; CHECK: bb.3.sw.bb1:
; CHECK: successors: %bb.4(0x80000000)
; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 3
- ; CHECK: [[MADDWrrr:%[0-9]+]]:gpr32 = MADDWrrr [[COPY]], [[MOVi32imm]], $wzr
+ ; CHECK: [[MADDWrrr:%[0-9]+]]:gpr32 = nsw MADDWrrr [[COPY]], [[MOVi32imm]], $wzr
; CHECK: bb.4.return:
; CHECK: [[PHI:%[0-9]+]]:gpr32 = PHI [[MADDWrrr]], %bb.3, [[ADDWri]], %bb.2, [[COPY1]], %bb.0, [[COPY2]], %bb.1
; CHECK: $w0 = COPY [[PHI]]
Index: llvm/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h
===================================================================
--- llvm/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h
+++ llvm/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h
@@ -57,6 +57,7 @@
uint64_t CurrentIdx = 0;
SmallVector<uint64_t, 4> OnFailResumeAt;
+ uint16_t Flags = State.MIs[0]->getFlags();
enum RejectAction { RejectAndGiveUp, RejectAndResume };
auto handleReject = [&]() -> RejectAction {
@@ -71,6 +72,15 @@
return RejectAndResume;
};
+ auto propagateFlags = [&](NewMIVector &OutMIs) {
+ if (Flags == MachineInstr::MIFlag::NoFlags)
+ return false;
+ for (auto MIB : OutMIs)
+ MIB.setMIFlags(Flags);
+
+ return true;
+ };
+
while (true) {
assert(CurrentIdx != ~0u && "Invalid MatchTable index");
int64_t MatcherOpcode = MatchTable[CurrentIdx++];
@@ -1065,6 +1075,7 @@
case GIR_Done:
DEBUG_WITH_TYPE(TgtInstructionSelector::getName(),
dbgs() << CurrentIdx << ": GIR_Done\n");
+ propagateFlags(OutMIs);
return true;
default:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74988.246003.patch
Type: text/x-patch
Size: 2159 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200221/ed9732ff/attachment.bin>
More information about the llvm-commits
mailing list