<html><head><style type='text/css'>p { margin: 0; }</style></head><body><div style='font-family: arial,helvetica,sans-serif; font-size: 10pt; color: #000000'><br><hr id="zwchr"><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; color: rgb(0, 0, 0); font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica,Arial,sans-serif; font-size: 12pt;"><b>From: </b>"Matt Arsenault" <arsenm2@gmail.com><br><b>To: </b>"Hal Finkel" <hfinkel@anl.gov><br><b>Cc: </b>"Aaron Shi (en ye)" <Aaronenye.Shi@amd.com>, llvm-commits@lists.llvm.org<br><b>Sent: </b>Tuesday, October 27, 2015 6:18:14 PM<br><b>Subject: </b>Re: [PATCH] TableGen CGIOperandList should use NumOutOperands instead of NumDefs<br><br>
<br class=""><div><blockquote class=""><div class="">On Oct 27, 2015, at 7:08 PM, Hal Finkel via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; font-family: arial,helvetica,sans-serif; font-size: 10pt;" class="">Hi Aaron,<br class=""><br class="">+  bool addToDefs = false;<br class=""><br class="">This should be named AddToDefs (local variables in LLVM start with a capital letter).<br class=""><br class="">Can you provide a small TableGen snippet showing the kinds of definitions this affects?<br class=""><br class="">Thanks,<br class="">Hal<br class=""></div></div></blockquote></div><div>These can be found in HSAILInstrFormats.td (in <a href="http://reviews.llvm.org/D9751" class="" target="_blank">http://reviews.llvm.org/D9751</a>) in multiclass LD_Types for the multiple result load instructions</div></blockquote><br>Alright, I see this:<br><br>multiclass LD_Types<string opName, bits<16> BrigVal> {<br>  def _S8 : LD<opName, BrigVal, (outs GPR32:$dest)>,<br>            LdStVectorMap<NAME#"_S8", 1>;<br>  def _U8 : LD<opName, BrigVal, (outs GPR32:$dest)>,<br>            LdStVectorMap<NAME#"_U8", 1>;<br>  ...<br>  def _V2_S8 : LD<opName#"_v2", BrigVal, (outs Vec2DestOp32:$dest)>,<br>               LdStVectorMap<NAME#"_S8", 2>;<br>  def _V2_U8 : LD<opName#"_v2", BrigVal, (outs Vec2DestOp32:$dest)>,<br>               LdStVectorMap<NAME#"_U8", 2>;<br>  ...<br><br>and these have one element in their 'outs' list. However, these vector operands are actually complex operands:<br><br><pre style="color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; word-wrap: break-word; white-space: pre-wrap;">  def Vec2DestOp32 : Operand<untyped> {<br>    let MIOperandInfo = (ops HSAILDest32Operand, HSAILDest32Operand);<br>    let PrintMethod = "printVec2Op";<br>  }</pre>So this patch deals with the case where NumDefs > NumOutOps. That makes sense.<br><br> -Hal<br><br>-- <br><div><span name="x"></span>Hal Finkel<br>Assistant Computational Scientist<br>Leadership Computing Facility<br>Argonne National Laboratory<span name="x"></span><br></div></div></body></html>