xref: /llvm-project/llvm/test/Assembler/struct-ret-without-upgrade.ll (revision a87738f86b17f4a8dcde538c60826506e2a27ed1)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S < %s | FileCheck %s
3
4; This is an overloaded struct return, we should not try to update it to an
5; anonymous struct return.
6
7%ty = type { i32 }
8
9define %ty @test(%ty %arg) {
10; CHECK-LABEL: @test(
11; CHECK-NEXT:    [[COPY:%.*]] = call [[TY:%.*]] @llvm.ssa.copy.s_tys([[TY]] [[ARG:%.*]])
12; CHECK-NEXT:    ret [[TY]] [[COPY]]
13;
14  %copy = call %ty @llvm.ssa.copy.s_tys(%ty %arg)
15  ret %ty %copy
16}
17
18define %ty @test_not_real_intrinsic() {
19; CHECK-LABEL: @test_not_real_intrinsic(
20; CHECK-NEXT:    [[RET:%.*]] = call [[TY:%.*]] @llvm.dummy()
21; CHECK-NEXT:    ret [[TY]] [[RET]]
22;
23  %ret = call %ty @llvm.dummy()
24  ret %ty %ret
25}
26
27declare %ty @llvm.dummy()
28
29declare %ty @llvm.ssa.copy.s_tys(%ty)
30