| ; This testcase is due to tail-duplication not wanting to copy the return |
| ; instruction into the terminating blocks because there was other code |
| ; optimized out of the function after the taildup happened. |
| ; XFAIL: * |
| ; RUN: llvm-as < %s | opt -tailcallelim | llvm-dis | not grep call |
| |
| int %t4(int %a) { |
| entry: |
| %tmp.1 = and int %a, 1 |
| %tmp.2 = cast int %tmp.1 to bool |
| br bool %tmp.2, label %then.0, label %else.0 |
| |
| then.0: |
| %tmp.5 = add int %a, -1 |
| %tmp.3 = call int %t4( int %tmp.5 ) |
| br label %return |
| |
| else.0: |
| %tmp.7 = setne int %a, 0 |
| br bool %tmp.7, label %then.1, label %return |
| |
| then.1: |
| %tmp.11 = add int %a, -2 |
| %tmp.9 = call int %t4( int %tmp.11 ) |
| br label %return |
| |
| return: |
| %result.0 = phi int [ 0, %else.0 ], [ %tmp.3, %then.0 ], [ %tmp.9, %then.1 ] |
| ret int %result.0 |
| } |
| |