<div dir="ltr">This code:<br><div><br>int main(int argc, char **argv) {<br>  puts("abc");<br>  return 0;<br>}<br><br>compiles to this:<br><br>@"\01??_C@_03FIKCJHKP@abc?$AA@" = linkonce_odr unnamed_addr constant [4 x i8] c"abc\00", comdat, align 1<br><br>; Function Attrs: nounwind uwtable<br>define i32 @main(i32 %argc, i8** nocapture readnone %argv) #0 {<br>  %1 = tail call i32 @puts(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"\01??_C@_03FIKCJHKP@abc?$AA@", i64 0, i64 0)) #2, !dbg !15<br>  ret i32 0, !dbg !16<br>}<br><br>The part I don't understand is where the call instruction refers to the result of getelementptr without the latter appearing in the sequence of instructions. I thought all instructions appeared in sequence in basic blocks, so I was expecting %1 = getelementptr ..., %2 = call(%1 ...)<br><br>Is there something I'm missing about the rules for the intermediate code representation?<br></div></div>