Re: suggestion for Merging LLVM

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

On 11/22/2011 01:01 AM, Pekka Enberg wrote:
On 11/21/2011 09:43 PM, Christopher Li wrote:
FWIW I am sorta stuck; cannot figure out how to make 'phi' operation in
LLVM work the way we need it to.  That is a crucial hurdle needed for
loops.  LLVM fundamentally should be able to do it, but I'm not sure
this works within the C API.  I was thinking my next step would be to
whine on the llvm list.

A workaround is to resuscitate unssa() call, and all that entails.

Did you check what kind of code generates for your
test case? I've noticed that LLVM is really picky sometime in what it
accepts as input. IIRC last time I looked at loops, there were some
significant differences in the asm we generate.

The disassembler output is certainly sane and understandable. Here's an example test case:

	extern int bar(int x);
	int foo (int x)
	  int y = 0;
	  while (y < 1000) {
	    y += bar(x);
	  return y;

The PHI operation in SSA being a union of control flows, we need to reference all input pseudos ... including pseudos generated by operations further down the in the code (i.e. pseudos not yet generated).

A classic forward reference is needed, and I cannot figure out how to do that in the LLVM C API, even though the forward reference is plain and obvious in the LLVM text disassembly. My next step was going to trace through the front end to see how it generates forward refs, or be lazy and brain dump on an llvm mailing list somewhere.

Problems like this were the original motivation for my earlier LLVM backend to generate ASCII text. I could work around this problem with an ugly string-based hack, if not using the C API... ;)


To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at

[Newbies FAQ]     [Kernel List]     [Site Home]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [DDR & Rambus]     [Trinity Fuzzer Tool]

Powered by Linux