[LLVMdev] problem using scc_iterator on CallGraph

Ryan M. Lefever lefever at crhc.uiuc.edu
Sun Dec 3 21:13:30 PST 2006


I am working on a transform that uses an scc_iterator on a program's 
CallGraph.  However, I am running into a problem in which not all 
callees are being processed before callers, leading me to believe there 
might be a bug.  In particular, this is happening in a case where a 
callee is a function pointer.  I ran bugpoint and have included the 
bugpoint-reduced-simplified.ll below.

If someone can help me with this, I would really appreciate it.  It is 
semi-urgent as it is for a paper that I am working on with Professor Adve.

Regards,
Ryan


-------------------------------------------------------
; ModuleID = 'bugpoint-reduced-simplified.bc'
target datalayout = "e-p:32:32"
target endian = little
target pointersize = 32
target triple = "i686-pc-linux-gnu"

implementation   ; Functions:

void %execute() {
entry:
	br bool false, label %bb688, label %cond_true

cond_true:		; preds = %entry
	ret void

bb:		; preds = %bb688
	switch int 0, label %bb684 [
		 int 33, label %bb412
		 int 35, label %bb604
		 int 37, label %bb531
		 int 38, label %bb418
		 int 42, label %bb495
		 int 43, label %bb467
		 int 45, label %cond_true484
		 int 47, label %bb510
		 int 48, label %bb408
		 int 49, label %bb410
		 int 60, label %bb620
		 int 61, label %bb588
		 int 62, label %bb652
		 int 65, label %bb4
		 int 66, label %bb17
		 int 67, label %bb67
		 int 68, label %bb113
		 int 74, label %bb20
		 int 75, label %cond_false129
		 int 76, label %bb132
		 int 77, label %bb145
		 int 79, label %bb182
		 int 80, label %bb233
		 int 82, label %bb188
		 int 83, label %bb213
		 int 84, label %bb226
		 int 87, label %bb233
		 int 90, label %bb17
		 int 94, label %bb556
		 int 99, label %bb245
		 int 100, label %bb318
		 int 105, label %bb332
		 int 108, label %bb345
		 int 110, label %bb358
		 int 112, label %bb365
		 int 115, label %bb366
		 int 119, label %bb382
		 int 120, label %bb389
		 int 123, label %bb636
		 int 124, label %bb443
		 int 125, label %bb668
	]

bb4:		; preds = %bb
	ret void

bb17:		; preds = %bb, %bb
	ret void

bb20:		; preds = %bb
	ret void

bb67:		; preds = %bb
	ret void

bb113:		; preds = %bb
	ret void

cond_false129:		; preds = %bb
	call void %push_constant( sbyte ()* %prog_char )
	ret void

bb132:		; preds = %bb
	ret void

bb145:		; preds = %bb
	ret void

bb182:		; preds = %bb
	ret void

bb188:		; preds = %bb
	ret void

bb213:		; preds = %bb
	ret void

bb226:		; preds = %bb
	ret void

bb233:		; preds = %bb, %bb
	ret void

bb245:		; preds = %bb
	ret void

bb318:		; preds = %bb
	ret void

bb332:		; preds = %bb
	ret void

bb345:		; preds = %bb
	ret void

bb358:		; preds = %bb
	ret void

bb365:		; preds = %bb
	ret void

bb366:		; preds = %bb
	ret void

bb382:		; preds = %bb
	ret void

bb389:		; preds = %bb
	ret void

bb408:		; preds = %bb
	ret void

bb410:		; preds = %bb
	ret void

bb412:		; preds = %bb
	ret void

bb418:		; preds = %bb
	ret void

bb443:		; preds = %bb
	ret void

bb467:		; preds = %bb
	ret void

cond_true484:		; preds = %bb
	ret void

bb495:		; preds = %bb
	ret void

bb510:		; preds = %bb
	ret void

bb531:		; preds = %bb
	ret void

bb556:		; preds = %bb
	ret void

bb588:		; preds = %bb
	ret void

bb604:		; preds = %bb
	ret void

bb620:		; preds = %bb
	ret void

bb636:		; preds = %bb
	ret void

bb652:		; preds = %bb
	ret void

bb668:		; preds = %bb
	ret void

bb684:		; preds = %bb
	ret void

bb688:		; preds = %entry
	br bool false, label %bb, label %bb721

bb721:		; preds = %bb688
	ret void
}

void %push_constant(sbyte ()* %in_char) {
entry:
	%tmp = call sbyte %in_char( )		; <sbyte> [#uses=0]
	ret void
}

sbyte %prog_char() {
entry:
	ret sbyte 0
}

void %clear_func() {
entry:
	unreachable
}



More information about the llvm-dev mailing list