35 lines
908 B
LLVM
35 lines
908 B
LLVM
; RUN: opt < %s -basicaa -dse -enable-nonlocal-dse -S | FileCheck %s
|
|
|
|
; The add and store in entry block should be removed by non-local DSE.
|
|
; CHECK-NOT: %stval = add
|
|
; CHECK-NOT: store i32 %stval
|
|
;
|
|
; The stores in if.then and if.else blocks should be removed by non-local DSE.
|
|
; CHECK-NOT: store i32 %1
|
|
; CHECK-NOT: store i32 %2
|
|
;
|
|
define void @foo(i32* noalias nocapture %a, i32* noalias nocapture readonly %b, i32 %c) {
|
|
entry:
|
|
%0 = load i32, i32* %b, align 4
|
|
%stval = add nsw i32 %0, 1
|
|
store i32 %stval, i32* %a, align 4
|
|
%cmp = icmp sgt i32 %c, 0
|
|
br i1 %cmp, label %if.then, label %if.else
|
|
|
|
if.then:
|
|
%1 = add nsw i32 %c, 10
|
|
store i32 %1, i32* %a, align 4
|
|
br label %if.end
|
|
|
|
if.else:
|
|
%2 = add nsw i32 %c, 13
|
|
store i32 %2, i32* %a, align 4
|
|
br label %if.end
|
|
|
|
if.end:
|
|
%3 = phi i32 [ %1, %if.then ], [ %2, %if.else ]
|
|
%4 = sub nsw i32 %3, 6
|
|
store i32 %4, i32* %a, align 4
|
|
ret void
|
|
}
|