<div dir="ltr">Now, I am using LLVM-3.3 do some process with functions, however there are some difficult things I can't handle by myself. So, <div><br></div><div>I want get your help to get it down properly.</div><div><br></div><div>Q1. There is a function declaration:</div><div><br></div><div>call i32 @create(i64* %tid, %union.t* %pab, i8* (i8*)* @worker, i8* null) // callInst<br></div><div><br></div><div>Store instruction goes like this:</div><div><br></div><div>store i8* (i32, double, i32*)* %fp, i8* (i32, double, i32*)** %fp.addr // storeInst<br></div><div><br></div><div>I want to determine the type of the operands are function pointer or not? (That's what I want)</div><div><br></div><div>However, callInst->getOperand(2)->getType()->getTypeID() always return 14 that'a the enum number of</div><div><br></div><div>PointerTypeID. For the store instruction, first operand is the same as the operation with call instruction.</div><div><br></div><div>How can I get the function pointer properly?</div><div><br></div><div>Q2. Function arguments can be passed by value or by pointer in C-programming language.</div><div><br></div><div><div>int arr[10];</div><div>struct node {</div><div><span class="" style="white-space:pre"> </span>int a;</div><div><span class="" style="white-space:pre">     </span>int att[10];</div><div><span class="" style="white-space:pre">       </span>double ul;</div><div>};</div><div><br></div><div>struct node Node;</div></div><div><br></div><div>testStruct(Node);<br></div><div><br></div><div><div>testStructPointer(&Node);</div></div><div><br></div><div>After compiled and change it to .ll file, it looks like this:</div><div><br></div><div>call void @testStruct(%struct.node* byval align 8 @Node), !dbg !160<br></div><div><br></div><div>call void @testStructPointer(%struct.node* @Node), !dbg !161<br></div><div><br></div><div>You can see that function named testStruction's parameter is passed by value while the testStructPointer passed by pointer.</div><div><br></div><div>I used callInst->getOperand(0)->getType()->dump(), it always return the same %struct.node*.</div><div><br></div><div>I want to know is there some properly library functions can be used to get the precise parameters type?</div><div><br></div><div>I want to know the functions arguments are passed by value or by pointer?</div><div><br></div><div>Any advice would be appreciate. Thanks a lot.:)</div><div><br></div><div><br></div><div><br></div></div>