forked from OSchip/llvm-project
27 lines
769 B
LLVM
27 lines
769 B
LLVM
|
; RUN: opt -tailcallelim -S < %s 2>&1 | FileCheck %s
|
||
|
|
||
|
; CHECK: add nsw i32
|
||
|
; CHECK-NEXT: br label
|
||
|
; CHECK: add nsw i32
|
||
|
; CHECK-NEXT: br label
|
||
|
; CHECK-NOT: Uses remain when a value is destroyed
|
||
|
define i32 @test(i32 %n) {
|
||
|
entry:
|
||
|
%cmp = icmp slt i32 %n, 2
|
||
|
br i1 %cmp, label %if.then, label %if.else
|
||
|
|
||
|
if.then: ; preds = %entry
|
||
|
%v1 = add nsw i32 %n, -2
|
||
|
%call1 = tail call i32 @test(i32 %v1)
|
||
|
br label %return
|
||
|
|
||
|
if.else: ; preds = %entry
|
||
|
%v2 = add nsw i32 %n, 4
|
||
|
%call2 = tail call i32 @test(i32 %v2)
|
||
|
br label %return
|
||
|
|
||
|
return: ; preds = %if.end, %if.else
|
||
|
%retval = phi i32 [ %call1, %if.then ], [ %call2, %if.else ]
|
||
|
ret i32 %retval
|
||
|
}
|