[PATCH] D46447: Mapping SDNode flags to MachineInstr flags
Michael Berg via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri May 4 16:44:49 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL331567: Mapping SDNode flags to MachineInstr flags (authored by mcberg2017, committed by ).
Herald added a subscriber: llvm-commits.
Changed prior to commit:
https://reviews.llvm.org/D46447?vs=145252&id=145326#toc
Repository:
rL LLVM
https://reviews.llvm.org/D46447
Files:
llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp
llvm/trunk/test/CodeGen/X86/sqrt-fastmath-mir.ll
Index: llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp
===================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp
+++ llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp
@@ -824,9 +824,34 @@
// Add result register values for things that are defined by this
// instruction.
- if (NumResults)
+ if (NumResults) {
CreateVirtualRegisters(Node, MIB, II, IsClone, IsCloned, VRBaseMap);
+ // Transfer any IR flags from the SDNode to the MachineInstr
+ MachineInstr *MI = MIB.getInstr();
+ const SDNodeFlags Flags = Node->getFlags();
+ if (Flags.hasNoSignedZeros())
+ MI->setFlag(MachineInstr::MIFlag::FmNsz);
+
+ if (Flags.hasAllowReciprocal())
+ MI->setFlag(MachineInstr::MIFlag::FmArcp);
+
+ if (Flags.hasNoNaNs())
+ MI->setFlag(MachineInstr::MIFlag::FmNoNans);
+
+ if (Flags.hasNoInfs())
+ MI->setFlag(MachineInstr::MIFlag::FmNoInfs);
+
+ if (Flags.hasAllowContract())
+ MI->setFlag(MachineInstr::MIFlag::FmContract);
+
+ if (Flags.hasApproximateFuncs())
+ MI->setFlag(MachineInstr::MIFlag::FmAfn);
+
+ if (Flags.hasAllowReassociation())
+ MI->setFlag(MachineInstr::MIFlag::FmReassoc);
+ }
+
// Emit all of the actual operands of this instruction, adding them to the
// instruction as appropriate.
bool HasOptPRefs = NumDefs > NumResults;
Index: llvm/trunk/test/CodeGen/X86/sqrt-fastmath-mir.ll
===================================================================
--- llvm/trunk/test/CodeGen/X86/sqrt-fastmath-mir.ll
+++ llvm/trunk/test/CodeGen/X86/sqrt-fastmath-mir.ll
@@ -7,16 +7,16 @@
; CHECK: body:
; CHECK: %0:fr32 = COPY $xmm0
; CHECK: %1:fr32 = VRSQRTSSr killed %2, %0
-; CHECK: %3:fr32 = VMULSSrr %0, %1
+; CHECK: %3:fr32 = reassoc VMULSSrr %0, %1
; CHECK: %4:fr32 = VMOVSSrm
; CHECK: %5:fr32 = VFMADD213SSr %1, killed %3, %4
; CHECK: %6:fr32 = VMOVSSrm
-; CHECK: %7:fr32 = VMULSSrr %1, %6
-; CHECK: %8:fr32 = VMULSSrr killed %7, killed %5
-; CHECK: %9:fr32 = VMULSSrr %0, %8
+; CHECK: %7:fr32 = reassoc VMULSSrr %1, %6
+; CHECK: %8:fr32 = reassoc VMULSSrr killed %7, killed %5
+; CHECK: %9:fr32 = reassoc VMULSSrr %0, %8
; CHECK: %10:fr32 = VFMADD213SSr %8, %9, %4
-; CHECK: %11:fr32 = VMULSSrr %9, %6
-; CHECK: %12:fr32 = VMULSSrr killed %11, killed %10
+; CHECK: %11:fr32 = reassoc VMULSSrr %9, %6
+; CHECK: %12:fr32 = reassoc VMULSSrr killed %11, killed %10
; CHECK: %14:fr32 = FsFLD0SS
; CHECK: %15:fr32 = VCMPSSrr %0, killed %14, 0
; CHECK: %17:vr128 = VANDNPSrr killed %16, killed %13
@@ -31,16 +31,16 @@
; CHECK: body: |
; CHECK: %0:fr32 = COPY $xmm0
; CHECK: %1:fr32 = VRSQRTSSr killed %2, %0
-; CHECK: %3:fr32 = VMULSSrr %0, %1
+; CHECK: %3:fr32 = nnan ninf nsz arcp contract afn reassoc VMULSSrr %0, %1
; CHECK: %4:fr32 = VMOVSSrm
; CHECK: %5:fr32 = VFMADD213SSr %1, killed %3, %4
; CHECK: %6:fr32 = VMOVSSrm
-; CHECK: %7:fr32 = VMULSSrr %1, %6
-; CHECK: %8:fr32 = VMULSSrr killed %7, killed %5
-; CHECK: %9:fr32 = VMULSSrr %0, %8
+; CHECK: %7:fr32 = nnan ninf nsz arcp contract afn reassoc VMULSSrr %1, %6
+; CHECK: %8:fr32 = nnan ninf nsz arcp contract afn reassoc VMULSSrr killed %7, killed %5
+; CHECK: %9:fr32 = nnan ninf nsz arcp contract afn reassoc VMULSSrr %0, %8
; CHECK: %10:fr32 = VFMADD213SSr %8, killed %9, %4
-; CHECK: %11:fr32 = VMULSSrr %8, %6
-; CHECK: %12:fr32 = VMULSSrr killed %11, killed %10
+; CHECK: %11:fr32 = nnan ninf nsz arcp contract afn reassoc VMULSSrr %8, %6
+; CHECK: %12:fr32 = nnan ninf nsz arcp contract afn reassoc VMULSSrr killed %11, killed %10
; CHECK: $xmm0 = COPY %12
; CHECK: RET 0, $xmm0
%sqrt = tail call float @llvm.sqrt.f32(float %f)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D46447.145326.patch
Type: text/x-patch
Size: 3857 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180504/2a368e7d/attachment.bin>
More information about the llvm-commits
mailing list