<html dir="ltr"><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style title="owaParaStyle"><!--P {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
--></style>
</head>
<body ocsi="x">
<div dir="ltr"><font color="#000000" size="2" face="Tahoma">Hi LLVMdev members</font></div>
<div dir="ltr"><font size="2" face="tahoma"></font> </div>
<div dir="ltr"><font size="2" face="tahoma">I found something strange in ConstantExpr::replaceUsesOfWithOnConstant() function.</font></div>
<div dir="ltr"><font size="2" face="tahoma"></font> </div>
<div dir="ltr"><font size="2" face="tahoma">in lib/VMCore/Constants.cpp file</font></div>
<div dir="ltr"><font size="2" face="tahoma"></font> </div>
<div dir="ltr"><font size="2" face="Tahoma">2118   if (getOpcode() == Instruction::GetElementPtr) {<br>
2119     SmallVector<Constant*, 8> Indices;<br>
2120     Constant *Pointer = getOperand(0);<br>
2121     Indices.reserve(getNumOperands()-1);<br>
2122     if (Pointer == From) Pointer = To;<br>
2123<br>
2124     for (unsigned i = 1, e = getNumOperands(); i != e; ++i) {<br>
2125       Constant *Val = getOperand(i);<br>
2126       if (Val == From) Val = To;<br>
2127       Indices.push_back(Val);<br>
2128     }<br>
</font><strong><font size="2" face="Tahoma">2129     Replacement = ConstantExpr::getGetElementPtr(Pointer,<br>
2130                                                  &Indices[0], Indices.size());<br>
</font></strong></div>
<div dir="ltr"><font size="2" face="Tahoma">when making replacement for GetElementPtr, above codes do not consider inbounds factor.</font></div>
<div dir="ltr"><font size="2" face="Tahoma">so, I thought codes to inbounds factor as follows:</font></div>
<div dir="ltr"><font size="2" face="tahoma"></font> </div>
<div dir="ltr"><font size="2" face="tahoma">original</font></div>
<div dir="ltr"><strong><font size="2" face="tahoma"></font></strong> </div>
<div dir="ltr"><font size="2" face="Tahoma">2129     Replacement = ConstantExpr::getGetElementPtr(Pointer,<br>
2130                                                  &Indices[0], Indices.size());</font><font size="2" face="Tahoma"></div>
</font>
<div dir="ltr"><font size="2" face="Tahoma"><font face="tahoma">-------------------------------------------------------------------------------------------></font></font></div>
<div dir="ltr"><font size="2" face="Tahoma"><font face="tahoma">modified</font></font></div>
<div dir="ltr"><font size="2" face="Tahoma"><font face="tahoma"></font> </div>
</font>
<div dir="ltr"><font size="2" face="Tahoma">2129     if(cast<GEPOperator>(this)->isInBounds())<br>
2130       Replacement = ConstantExpr::getInBoundsGetElementPtr(Pointer,<br>
2131                                                   &Indices[0], Indices.size());<br>
2132     else<br>
2133       Replacement = ConstantExpr::getGetElementPtr(Pointer,<br>
2134                                                   &Indices[0], Indices.size());<br>
</font></div>
<div dir="ltr"><font size="2" face="Tahoma"><font face="tahoma">What do you think about above codes?</font></font></div>
<div dir="ltr"><font size="2" face="tahoma"></font> </div>
<div dir="ltr"><font size="2" face="Tahoma"><font face="tahoma"></font></font><font size="2" face="Tahoma">Best regards,</font></div>
<div dir="ltr"><font size="2" face="Tahoma"><font face="tahoma">Jin-Gu Kang</font></div>
</font>
<div dir="ltr"> </div>
</body>
</html>