<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Aug 28, 2008, at 1:38 PM, Le Anh Quang wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><div lang="DE" link="blue" vlink="purple"><div class="Section1"><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">Hi all,<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); "><o:p> </o:p></span></font></div><div style="line-height: 200%; margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; line-height: 200%; color: rgb(31, 73, 125); ">I have a question with the ”getelemptr” instruction.<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">E.g.: I have some GEP instructions in my program.<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">Some look like:<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); "><o:p> </o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); "><span> </span><INST_GEP op0=26 op1=64 op2=429/><o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">…<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); "><INST_GEP op0=341 op1=64 op2=101 op3=499 op4=0/><o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); "><o:p> </o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">The first instruction above in assembly file:<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">%tmp60 = getelementptr [512 x i32]* @weights, i32 0, i32 %k.3.ph<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">Ok, we see it all:<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">Index of @weights in value list = 26<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">Index of “i32 0” in value list = 64<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">Index of “i32 %k.3.ph” in value list = 429<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); "><o:p> </o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">But in the second instructions:<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">%tmp67.1 = getelementptr [8 x [8 x i32]]* %inter, i32 0, i32 1, i32 %outc.0.reg2mem.0<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">As the first one, we see:<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">Index of %inter<span> <span class="Apple-converted-space"> </span></span>in value list = 341<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">Index of “i32 0” in value list = 64<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">Index of “i32 1” in value list = 101<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">Index of “i32 %outc.0.reg2mem.0” in value list = 499<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); "><o:p> </o:p></span></font></div><div style="text-indent: -18pt; margin-top: 0cm; margin-right: 0cm; margin-left: 36pt; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Wingdings"><span lang="EN-US" style="font-size: 11pt; font-family: Wingdings; color: rgb(31, 73, 125); "><span>è<font size="1" face="Times New Roman"><span style="font: normal normal normal 7pt/normal 'Times New Roman'; "><span class="Apple-converted-space"> </span></span></font></span></span></font><font color="#1f497d"><span lang="EN-US" style="color: rgb(31, 73, 125); ">What is the last one, “op4=0” ?<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); ">And the index of the second instruction in value list is less than 499.<o:p></o:p></span></font></div><div style="margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><font size="2" color="#1f497d" face="Calibri"><span lang="EN-US" style="font-size: 11pt; color: rgb(31, 73, 125); "><o:p> </o:p></span></font></div></div></div></span></blockquote><br></div><div>The type of a value is only encoded for forward references.  Please see the source for the bitcode reader for more information.  Here's a snippet that is useful:</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(0, 116, 0); "><span style="color: #000000">  </span>/// getValueTypePair - Read a value/type pair out of the specified record from</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(0, 116, 0); "><span style="color: #000000">  </span>/// slot 'Slot'.  Increment Slot past the number of slots used in the record.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(0, 116, 0); "><span style="color: #000000">  </span>/// Return true on failure.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">  <span style="color: #aa0d91">bool</span> getValueTypePair(SmallVector<uint64_t, <span style="color: #1c00cf">64</span>> &Record, <span style="color: #aa0d91">unsigned</span> &Slot,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">                        <span style="color: #aa0d91">unsigned</span> InstNum, Value *&ResVal) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">    <span style="color: #aa0d91">if</span> (Slot == Record.size()) <span style="color: #aa0d91">return</span> <span style="color: #aa0d91">true</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">    <span style="color: #aa0d91">unsigned</span> ValNo = (<span style="color: #aa0d91">unsigned</span>)Record[Slot++];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">    <span style="color: #aa0d91">if</span> (ValNo < InstNum) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(0, 116, 0); "><span style="color: #000000">      </span>// If this is not a forward reference, just return the value we already</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(0, 116, 0); "><span style="color: #000000">      </span>// have.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">      ResVal = getFnValueByID(ValNo, <span style="color: #1c00cf">0</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">      <span style="color: #aa0d91">return</span> ResVal == <span style="color: #1c00cf">0</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">    } <span style="color: #aa0d91">else</span> <span style="color: #aa0d91">if</span> (Slot == Record.size()) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(170, 13, 145); "><span style="color: #000000">      </span>return<span style="color: #000000"> </span>true<span style="color: #000000">;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">    }</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; min-height: 14.0px">    <br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">    <span style="color: #aa0d91">unsigned</span> TypeNo = (<span style="color: #aa0d91">unsigned</span>)Record[Slot++];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">    ResVal = getFnValueByID(ValNo, getTypeByID(TypeNo));</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">    <span style="color: #aa0d91">return</span> ResVal == <span style="color: #1c00cf">0</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">  }</div><div><br></div><div><font class="Apple-style-span" face="Monaco" size="2"><span class="Apple-style-span" style="font-size: 10px;">-Chris</span></font></div></div><br></body></html>