Add comments for wrapper node patterns in MipsInstrInfo.td.
authorAkira Hatanaka <ahatanak@gmail.com>
Tue, 7 Jun 2011 18:00:14 +0000 (18:00 +0000)
committerAkira Hatanaka <ahatanak@gmail.com>
Tue, 7 Jun 2011 18:00:14 +0000 (18:00 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132717 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Mips/MipsInstrInfo.td

index b32ae6faf865df6c06ed0a189d1854ab6ade04bf..329a002667a0380201956395fd3bec21ab5bb604 100644 (file)
@@ -87,7 +87,16 @@ def MipsDivRem    : SDNode<"MipsISD::DivRem", SDT_MipsDivRem,
 def MipsDivRemU   : SDNode<"MipsISD::DivRemU", SDT_MipsDivRem,
                            [SDNPOutGlue]>;
 
-// wrapper node
+// Target constant nodes that are not part of any isel patterns and remain
+// unchanged can cause instructions with illegal operands to be emitted.
+// Wrapper node patterns give the instruction selector a chance to replace
+// target constant nodes that would otherwise remain unchanged with ADDiu
+// nodes. Without these wrapper node patterns, the following conditional move
+// instrucion is emitted when function cmov2 in test/CodeGen/Mips/cmov.ll is
+// compiled: 
+//  movn  %got(d)($gp), %got(c)($gp), $4
+// This instruction is illegal since movn can take only register operands.
+
 def MipsWrapperPIC    : SDNode<"MipsISD::WrapperPIC",  SDTIntUnaryOp>;
 
 //===----------------------------------------------------------------------===//