mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
ee178ad6c3
This new verifier rule lets us unambigously pick a calling convention when creating a new declaration for `@llvm.experimental.deoptimize.<ty>`. It is also congruent with our lowering strategy -- since all calls to `@llvm.experimental.deoptimize` are lowered to calls to `__llvm_deoptimize`, it is reasonable to enforce a unique calling convention. Some of the tests that were breaking this verifier rule have had to be split up into different .ll files. The inliner was violating this rule as well, and has been fixed to avoid producing invalid IR. llvm-svn: 269261
20 lines
568 B
LLVM
20 lines
568 B
LLVM
; RUN: opt -S -always-inline < %s | FileCheck %s
|
|
|
|
declare cc42 i32 @llvm.experimental.deoptimize.i32(...)
|
|
|
|
define i32 @callee_with_coldcc() alwaysinline {
|
|
%v0 = call cc42 i32(...) @llvm.experimental.deoptimize.i32(i32 1) [ "deopt"() ]
|
|
ret i32 %v0
|
|
}
|
|
|
|
define void @caller_with_coldcc() {
|
|
; CHECK-LABEL: @caller_with_coldcc(
|
|
; CHECK-NEXT: call cc42 void (...) @llvm.experimental.deoptimize.isVoid(i32 1) [ "deopt"() ]
|
|
; CHECK-NEXT: ret void
|
|
|
|
%val = call i32 @callee_with_coldcc()
|
|
ret void
|
|
}
|
|
|
|
; CHECK: declare cc42 void @llvm.experimental.deoptimize.isVoid(...)
|