1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 20:23:11 +01:00
llvm-mirror/test/Transforms/BDCE/dce-pure.ll
Nikita Popov 93b123f786 [DCE] Don't remove non-willreturn calls
In both ADCE and BDCE (via DemandedBits) we should not remove
instructions that are not guaranteed to return. This issue was
pointed out by fhahn in the recent llvm-dev thread.

Differential Revision: https://reviews.llvm.org/D96993
2021-02-19 12:35:40 +01:00

35 lines
720 B
LLVM

; RUN: opt -bdce -S < %s | FileCheck %s
; RUN: opt -passes=bdce -S < %s | FileCheck %s
declare i32 @strlen(i8*) readonly nounwind willreturn
define void @test1() {
call i32 @strlen( i8* null )
ret void
; CHECK-LABEL: @test1
; CHECK-NOT: call
; CHECK: ret void
}
define i32 @test2() personality i32 (...)* @__gxx_personality_v0 {
; invoke of pure function should not be deleted!
invoke i32 @strlen( i8* null ) readnone
to label %Cont unwind label %Other
Cont: ; preds = %0
ret i32 0
Other: ; preds = %0
%exn = landingpad {i8*, i32}
cleanup
ret i32 1
; CHECK-LABEL: @test2
; CHECK: invoke
; CHECK: ret i32 1
}
declare i32 @__gxx_personality_v0(...)