<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi All,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I have a question about 'outs' and 'PredicateOperand' on TableGen. Let's see simple TableGen example.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
def pred : PredicateOperand<OtherVT, (ops ..)>;</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
def test_cmp : TestInst<(outs pred:$dst0), ... >;<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
...</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Above definitions cause TableGen crash. It seems below code causes the crash.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
On utils/TableGen/CodeGenDAGPatterns.cpp</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
static unsigned GetNumNodeResults(Record *Operator, CodeGenDAGPatterns &CDP) {<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
...</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span>    // Subtract any defaulted outputs.<br>
</span>
<div>    for (unsigned i = 0; i != InstInfo.Operands.NumDefs; ++i) {<br>
</div>
<div>      Record *OperandNode = InstInfo.Operands[i].Rec;<br>
</div>
<div><br>
</div>
<div>       if (OperandNode->isSubClassOf("OperandWithDefaultOps") &&   ==> I think it checks 'PredicateOperand'.</div>
<div>          !CDP.getDefaultOperand(OperandNode).DefaultOps.empty())<br>
</div>
<div>        --NumDefsToAdd;<br>
</div>
<span>    }</span><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
...</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
>From above code, I guess we can not use 'PredicateOperand' on 'outs'. <span style="font-family: Calibri, Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255); display: inline !important">
Is it one of TableGen's rule? I was not able to find the related rules... </span>In my case, the output of compare instruction is in predicate register rather than status register and it is used for predication of instructions. If anyone knows about it or I
 missed something, please let me know.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="Signature">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Helvetica,sans-serif">
<p style="margin-top: 0px; margin-bottom: 0px;margin-top:0; margin-bottom:0"></p>
<div style="margin:0px; padding:0px; color:rgb(23,43,77); font-size:14px"><b>JinGu Kang</b></div>
<div style="margin:0px; padding:0px; color:rgb(23,43,77); font-size:14px"><b>Software Engineer</b><br>
Codeplay Software Ltd<br>
Level C Argyle House, 3 Lady Lawson Street, Edinburgh, United Kingdom, <a title="Map for EH3 9DR" href="http://maps.google.co.uk/?q=EH3%209DR" class="external-link" rel="nofollow" style="color:rgb(0,82,204)">EH3 9DR</a><br>
Tel: +44 (0)131 466 0503<br>
Website: <a href="http://www.codeplay.com/" class="external-link" rel="nofollow" style="color:rgb(0,82,204)">http://www.codeplay.com</a><br>
Twitter: <a href="https://twitter.com/codeplaysoft" class="external-link" rel="nofollow" style="color:rgb(0,82,204)">https://twitter.com/codeplaysoft</a><br>
<br>
This email and any attachments may contain confidential and /or privileged information and is for use by the addressee only. If you are not the intended recipient, please notify Codeplay Software Ltd immediately and delete the message from your computer. You
 may not copy or forward it, or use or disclose its contents to any other person. Any views or other information in this message which do not relate to our business are not authorized by Codeplay software Ltd, nor does this message form part of any contract
 unless so stated.<br>
As internet communications are capable of data corruption Codeplay Software Ltd does not accept any responsibility for any changes made to this message after it was sent. Please note that Codeplay Software Ltd does not accept any liability or responsibility
 for viruses and it is your responsibility to scan any attachments.<br>
Company registered in England and Wales, number: 04567874<br>
Registered office: Regent House, 316 Beulah Hill, London, United Kingdom, SE19 3HF</div>
<br>
<p style="margin-top: 0px; margin-bottom: 0px;"></p>
</div>
</div>
</body>
</html>