mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
0ce9cad66f
During inlining of call-site with deoptimize intrinsic callee we miss attributes set on this call site. As a result attributes like deopt-lowering are disappeared resulting in inefficient behavior of register allocator in codegen. Just copy attributes for deoptimize call like we do for others calls. Reviewers: reames, apilipenko Reviewed By: reames Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D102602
22 lines
677 B
LLVM
22 lines
677 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) #0 [ "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) #1 [ "deopt"() ]
|
|
; CHECK-NEXT: ret void
|
|
|
|
%val = call i32 @callee_with_coldcc()
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { "deopt-lowering"="live-in" }
|
|
|
|
; CHECK: declare cc42 void @llvm.experimental.deoptimize.isVoid(...)
|
|
; CHECK: attributes #1 = { "deopt-lowering"="live-in" } |