<div dir="ltr">Hi all,<div><br></div><div>I'm a beginner in LLVM. I read a paper recently, and I'm trying to use LLVM jumptable in 3.5. When I compile the .bc file into .s file, I tried to use the different jumptable type: all, single, ...</div><div><br></div><div>e.g.</div><div>clang -c -emit-llvm test.c</div><div>llc test.bc -jump-table-type=full -o test-full.s</div><div>llc test.bc -jump-table-type=single -o test-single.s<br></div><div><br></div><div>The tested C source code is like:</div><div><div>void foo() {</div><div><span class="" style="white-space:pre"> </span>printf("foo...\n");</div><div>}</div><div><br></div><div>void bar() {</div><div><span class="" style="white-space:pre">  </span>printf("bar...\n");</div><div>}</div><div><br></div><div>void foo1(int arg) {</div><div><span class="" style="white-space:pre">  </span>printf("foo1... %d..\n", arg);</div><div>}</div><div><br></div><div>void bar1(int arg) {</div><div><span class="" style="white-space:pre">       </span>printf("bar1... %d..\n", arg);</div><div>}</div><div><br></div><div>// function pointer</div><div>void (*fp)() = 0;</div><div>void (*fp1)(int) = 0;</div><div><br></div><div>int main(int argc, char* argv[])</div><div>{</div><div><span class="" style="white-space:pre">    </span>int input = 0;</div><div><br></div><div><span class="" style="white-space:pre">    </span>printf("Hello\n");</div><div><span class="" style="white-space:pre">       </span>fp = foo;</div><div><span class="" style="white-space:pre">  </span>fp();</div><div><span class="" style="white-space:pre">      </span>fp = bar;</div><div><span class="" style="white-space:pre">  </span>fp();</div><div><span class="" style="white-space:pre">      </span>fp1 = foo1;</div><div><span class="" style="white-space:pre">        </span>fp1(1);</div><div><span class="" style="white-space:pre">    </span>fp1 = bar1;</div><div><span class="" style="white-space:pre">        </span>fp1(2);</div></div><div>}</div><div><br></div><div>However, they produced the same .s assembly (test-full.s, test-single.s). I think the llc will produce difference .s files, since I choose the jumptable options. And according to my understanding, the jumptable contains the destination address of each indirect function call. </div><div>So what's going on with my test. Is there something I did wrong with jumptable options? Or is the jumptable tried to address other problem, not indirect call?</div><div><br></div><div>Thanks!</div><div><br></div><div>Sincerely,<br clear="all"><div><div dir="ltr">Xiaoguang Wang<br></div></div>
</div></div>