[llvm-commits] CVS: llvm/lib/Target/ARM/README-Thumb.txt

Chris Lattner clattner at apple.com
Wed Jan 31 19:31:47 PST 2007


> +// 
> ===------------------------------------------------------------------- 
> --===//
> +
> +We compiles the following using a jump table.

This is the target-independent "shift trick", which applies any time  
you have a small number of unique destinations, and a spread smaller  
than your GPR size.

-Chris

> +define i16 @func_entry_2E_ce(i32 %i) {
> +newFuncRoot:
> +        br label %entry.ce
> +
> +bb12.exitStub:          ; preds = %entry.ce
> +        ret i16 0
> +
> +bb4.exitStub:           ; preds = %entry.ce, %entry.ce, %entry.ce
> +        ret i16 1
> +
> +bb9.exitStub:           ; preds = %entry.ce, %entry.ce, %entry.ce
> +        ret i16 2
> +
> +bb.exitStub:            ; preds = %entry.ce
> +        ret i16 3
> +
> +entry.ce:               ; preds = %newFuncRoot
> +        switch i32 %i, label %bb12.exitStub [
> +                 i32 0, label %bb4.exitStub
> +                 i32 1, label %bb9.exitStub
> +                 i32 2, label %bb4.exitStub
> +                 i32 3, label %bb4.exitStub
> +                 i32 7, label %bb9.exitStub
> +                 i32 8, label %bb.exitStub
> +                 i32 9, label %bb9.exitStub
> +        ]
> +}
> +
> +gcc compiles to:
> +
> +	cmp	r0, #9
> +	@ lr needed for prologue
> +	bhi	L2
> +	ldr	r3, L11
> +	mov	r2, #1
> +	mov	r1, r2, asl r0
> +	ands	r0, r3, r2, asl r0
> +	movne	r0, #2
> +	bxne	lr
> +	tst	r1, #13
> +	beq	L9
> +L3:
> +	mov	r0, r2
> +	bx	lr
> +L9:
> +	tst	r1, #256
> +	movne	r0, #3
> +	bxne	lr
> +L2:
> +	mov	r0, #0
> +	bx	lr
> +L12:
> +	.align 2
> +L11:
> +	.long	642
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list