Piotr Fusik <[EMAIL PROTECTED]> wrote:
> void Switch4(int x) {
> switch (x & 7) {
> case 0: printf("0\n"); break;
> case 1: printf("1\n"); break;
> case 2: printf("2\n"); break;
> case 3: printf("3\n"); break;
> case 4: printf("4\n"); break;
> case 5: printf("5\n"); break;
> case 6: printf("6\n"); break;
> case 7: printf("7\n"); break;
> }
> }
> .globl _Switch4
> .def _Switch4; .scl 2; .type 32; .endef
> _Switch4:
> pushl %ebp
> movl %esp, %ebp
> movl 8(%ebp), %eax
> andl $7, %eax
> cmpl $7, %eax
> ja L12
> jmp *L11(,%eax,4)
> cmpl+ja are redundant in both cases.
> Do you think it is possible for gcc to optimize them away?
I believe VRP could be taught about inferring ranges from bit_and_expr and
similar operations. Right?
--
Giovanni Bajo