Is there any way to eliminate zero-extension instruction?

Dear developers.

We try to make our own backend of llvm for our target machine.

Assume that we have the following code in our source code.

int i = ( a < b );

The code is translated into

r0 ← gt r1 r2
r3 ← and r0 0x1

We think that r3 is not necessary. Is there any way to eliminate it by just modifying

our backend?

Thank you in advance.

Minwook Ahn

Have you told LLVM the result of setcc operations is 0 or 1? Add the following to the constructor of your ISelLowering class:

setBooleanContents(ZeroOrOneBooleanContent);

Thank you for your reply.

In case of setcc, I saw it was removed.

But I could not delete the extension instruction in other cases of zero extension from i1 to i32.

For example, in this case.

int main( int argc, char *argv ) {
int i = ( argc > 0 ) & ( argv != NULL );
return i;
}

So can you let us know how to remove it?

Thank you in advance.

Minwook Ahn

p.s. Sorry for the duplicated message if you get this twice.

2010/1/20 Richard Osborne <richard@xmos.com>