JIT + tail cals

How do I tell the code generator to enable tail calls on the X86?
Since it is part of a library, I cannot pass a command line argument.

Of course I *can* call cl::ParseCommandLineOptions, but maybe there
should be something more straitforward than that?

Alexander Friedman wrote:

How do I tell the code generator to enable tail calls on the X86?
Since it is part of a library, I cannot pass a command line argument.

Here is a snippet from our code which might help you :wink:

   const char *args[] = { "-disable-pattern-isel", "false", 0 };
   cl::ParseCommandLineOptions(2, args);

m.

Yup, something like this should work. Two comments though:

1. Morton, the pattern isel is now on by default for X86, and that option
    doesn't exist. If you update to CVS you can remove that. Using
    -enable-x86-fastcc should work with CVS though.
2. I haven't done much testing with the JIT and tail calls. I wouldn't be
    suprised if there are minor issues that need to be fixed. I will try
    to take a look and see what remains to be done over the next couple of
    days.

-Chris

As I expected, there were issues. I fixed the following two problems:

1. The JIT didn't know where a call came from when it was a tail call (jmp
    doesn't push a return address).
2. The JIT was clobbering EAX/EDX when lazily compiling a function, and
    X86 fastcc wants to pass values in those registers.

I think things are working now, give it a spin and lemme know if you hit any problems.

-Chris

Chris Lattner wrote:

VC++ builds are working again.

However, llvm-test is broken. The configured makefile is bad:

# Path to the boxed-sim source code
@USE_BOXEDSIM@
BOXEDSIM_ROOT := @BOXEDSIM_ROOT@

Jeff Cohen wrote:

Boxedsim was nuked just before the 1.5 release. It was buggy and we
never got it working. Chances are your llvm-test tree is out of date?

Reid.

VC++ builds are working again.
However, llvm-test is broken. The configured makefile is bad:

Fixed. Thanks Jeff,

-Chris

Jeff Cohen wrote:

Chris Lattner wrote:

Yup, something like this should work. Two comments though:
2. I haven't done much testing with the JIT and tail calls. I wouldn't be
  suprised if there are minor issues that need to be fixed. I will try
  to take a look and see what remains to be done over the next couple of
  days.

As I expected, there were issues. I fixed the following two problems:

1. The JIT didn't know where a call came from when it was a tail call (jmp
   doesn't push a return address).
2. The JIT was clobbering EAX/EDX when lazily compiling a function, and
   X86 fastcc wants to pass values in those registers.

I think things are working now, give it a spin and lemme know if you hit any problems.

-Chris

VC++ build is broken as a result of this change. I'll get it fixed soon.

_______________________________________________
LLVM Developers mailing list
LLVMdev@cs.uiuc.edu http://llvm.cs.uiuc.edu
http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev

_______________________________________________
LLVM Developers mailing list
LLVMdev@cs.uiuc.edu http://llvm.cs.uiuc.edu
http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev

-Chris