1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 12:43:36 +01:00
llvm-mirror/test/Reduce/remove-invoked-functions.ll
Roman Lebedev aa265a31e9 [Reduce] Argument reduction: shoe-horn new function into remaining uses of old function
Much like with function reduction, there may be remaining unhandled uses
of function, in particular in blockaddress. And in constants we can't
RAUW it with undef, because undef is not a function.
Instead, let's try to pretent that in the remaining cases, the new
signature didn't change, by bitcasting it.

A new (previously crashing) test case added.
2020-07-27 15:39:03 +03:00

56 lines
1.6 KiB
LLVM

; RUN: llvm-reduce --test FileCheck --test-arg --check-prefixes=CHECK-ALL,CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t
; RUN: cat %t | FileCheck --check-prefixes=CHECK-ALL,CHECK-FINAL %s
; CHECK-INTERESTINGNESS: define i32 @maybe_throwing_callee(
; CHECK-FINAL: define i32 @maybe_throwing_callee()
define i32 @maybe_throwing_callee(i32 %arg) {
; CHECK-ALL: call void @thrown()
; CHECK-INTERESTINGNESS: ret i32
; CHECK-FINAL: ret i32 undef
call void @thrown()
ret i32 %arg
}
; CHECK-ALL: declare void @did_not_throw(i32)
declare void @did_not_throw(i32)
; CHECK-ALL: declare void @thrown()
declare void @thrown()
; CHECK-INTERESTINGNESS: define void @caller(
; CHECK-FINAL: define void @caller(i32 %arg)
define void @caller(i32 %arg) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
; CHECK-ALL: bb:
bb:
; CHECK-INTERESTINGNESS: %i0 = invoke i32
; CHECK-FINAL: %i0 = invoke i32 bitcast (i32 ()* @maybe_throwing_callee to i32 (i32)*)(i32 %arg)
; CHECK-ALL: to label %bb3 unwind label %bb1
%i0 = invoke i32 @maybe_throwing_callee(i32 %arg)
to label %bb3 unwind label %bb1
; CHECK-ALL: bb1:
bb1:
; CHECK-ALL: landingpad { i8*, i32 }
; CHECK-ALL: catch i8* null
; CHECK-ALL: call void @thrown()
; CHECK-ALL: br label %bb4
landingpad { i8*, i32 }
catch i8* null
call void @thrown()
br label %bb4
; CHECK-ALL: bb3:
bb3:
; CHECK-ALL: call void @did_not_throw(i32 %i0)
; CHECK-ALL: br label %bb4
call void @did_not_throw(i32 %i0)
br label %bb4
; CHECK-ALL: bb4:
; CHECK-ALL: ret void
bb4:
ret void
}
declare i32 @__gxx_personality_v0(...)