blob: af9943a8926a33a4cacf869b6918b3bc6c7b9929 [file] [log] [blame]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
; RUN: opt -S -passes=argpromotion < %s | FileCheck %s
declare void @may_not_return()
; The argument cannot be promoted, as we do not know whether the load can be
; speculatively executed.
define internal i32 @callee(ptr %p) {
; CHECK-LABEL: define {{[^@]+}}@callee
; CHECK-SAME: (ptr [[P:%.*]]) {
; CHECK-NEXT: call void @may_not_return()
; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[P]], align 4
; CHECK-NEXT: ret i32 [[X]]
;
call void @may_not_return() readnone
%x = load i32, ptr %p
ret i32 %x
}
define void @caller(ptr %p) {
; CHECK-LABEL: define {{[^@]+}}@caller
; CHECK-SAME: (ptr [[P:%.*]]) {
; CHECK-NEXT: [[TMP1:%.*]] = call i32 @callee(ptr [[P]])
; CHECK-NEXT: ret void
;
call i32 @callee(ptr %p)
ret void
}