| ; Ensure that jump tables can be handled by the mblaze backend. The |
| ; jump table should be lowered to a "br" instruction using one of the |
| ; available registers. |
| ; |
| ; RUN: llc < %s -march=mblaze | FileCheck %s |
| |
| define i32 @jmptable(i32 %arg) |
| { |
| ; CHECK: jmptable: |
| switch i32 %arg, label %DEFAULT [ i32 0, label %L0 |
| i32 1, label %L1 |
| i32 2, label %L2 |
| i32 3, label %L3 |
| i32 4, label %L4 |
| i32 5, label %L5 |
| i32 6, label %L6 |
| i32 7, label %L7 |
| i32 8, label %L8 |
| i32 9, label %L9 ] |
| |
| ; CHECK: lw [[REG:r[0-9]*]] |
| ; CHECK: brad [[REG]] |
| L0: |
| %var0 = add i32 %arg, 0 |
| br label %DONE |
| |
| L1: |
| %var1 = add i32 %arg, 1 |
| br label %DONE |
| |
| L2: |
| %var2 = add i32 %arg, 2 |
| br label %DONE |
| |
| L3: |
| %var3 = add i32 %arg, 3 |
| br label %DONE |
| |
| L4: |
| %var4 = add i32 %arg, 4 |
| br label %DONE |
| |
| L5: |
| %var5 = add i32 %arg, 5 |
| br label %DONE |
| |
| L6: |
| %var6 = add i32 %arg, 6 |
| br label %DONE |
| |
| L7: |
| %var7 = add i32 %arg, 7 |
| br label %DONE |
| |
| L8: |
| %var8 = add i32 %arg, 8 |
| br label %DONE |
| |
| L9: |
| %var9 = add i32 %arg, 9 |
| br label %DONE |
| |
| DEFAULT: |
| unreachable |
| |
| DONE: |
| %rval = phi i32 [ %var0, %L0 ], |
| [ %var1, %L1 ], |
| [ %var2, %L2 ], |
| [ %var3, %L3 ], |
| [ %var4, %L4 ], |
| [ %var5, %L5 ], |
| [ %var6, %L6 ], |
| [ %var7, %L7 ], |
| [ %var8, %L8 ], |
| [ %var9, %L9 ] |
| ret i32 %rval |
| ; CHECK: rtsd |
| } |