[LLVMdev] Work with CallSites

James Molloy james.molloy at arm.com
Tue Mar 6 06:30:47 PST 2012


Hi Mikhail,

 

You probably want to send this to cfe-dev - this mailing list is just for
the LLVM mid/backend and some of the frontend guys don't subscribe here.

 

Cheers,

 

James

 

From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On
Behalf Of ??????
Sent: 06 March 2012 14:17
To: llvmdev
Subject: [LLVMdev] Work with CallSites

 

Hi.

 

I have a test program:

 

class A {

  int A;

public:

  virtual void test ( int x ) = 0;

};

 

class B : public A {

  int B;

public:

  void test ( int x ) {};

};

 

int main() {        

  A *a = new B();          

  a->test(1);

}

 

We have call site CS: "a->test(1);". CS.getCalledFunction() - return NULL,
so we can say that this call site is virtual. My optimization determines,
that in this call site B::test() should be called. 

I've tried to use CSn.setCalledFunction(F) (where F is B::test()), but I've
got this:

  

Check function __cxa_pure_virtual

Call parameter type does not match function signature!

  %6 = load %class.A** %a, align 4

 %class.B*  call void @_ZN1B4testEi(%class.A* %6, i32 1)

 

Ok! I've tried to change the first %class.A %6 to %class.B %6 by
"FirstArgumentOfCS->get()->mutateType(FunctionFirstArgement->getType());",
but in this case I've got this:

 

  

Check function __cxa_pure_virtual

Load result type does not match pointer operand type!

  %6 = load %class.A** %a, align 4

 %class.A*Instruction does not dominate all uses!

  %6 = load %class.A** %a, align 4

  %7 = bitcast %class.B* %6 to void (%class.A*, i32)***

Instruction does not dominate all uses!

  %7 = bitcast %class.B* %6 to void (%class.A*, i32)***

  %8 = load void (%class.A*, i32)*** %7

Instruction does not dominate all uses!

  %8 = load void (%class.A*, i32)*** %7

  %9 = getelementptr inbounds void (%class.A*, i32)** %8, i64 0

Instruction does not dominate all uses!

  %9 = getelementptr inbounds void (%class.A*, i32)** %8, i64 0

  %10 = load void (%class.A*, i32)** %9

Instruction does not dominate all uses!

  %6 = load %class.A** %a, align 4

  call void @_ZN1B4testEi(%class.B* %6, i32 1)

 

Can you tell me how correctly I can use CSn.setCalledFunction(F) in my case.
Thanks!

 

 

Yours sincerely,

Kadysev Mikhail

 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120306/16dbdf9b/attachment.html>


More information about the llvm-dev mailing list