xref: /llvm-project/llvm/test/Transforms/MergeFunc/inline-asm.ll (revision 1941c5180b91d792200d5e868d45c96e99bda35e)
1; RUN: opt -passes=mergefunc -S < %s | FileCheck %s
2
3; CHECK-LABEL: @int_ptr_arg_different
4; CHECK-NEXT: call void asm
5
6; CHECK-DAG: @int_ptr_null
7; CHECK-DAG: tail call void @float_ptr_null()
8
9; CHECK-DAG: @int_ptr_arg_same
10; CHECK-DAG: tail call void @float_ptr_arg_same(ptr %0)
11
12; Used to satisfy minimum size limit
13declare void @stuff()
14
15; Can be merged
16define void @float_ptr_null() {
17  call void asm "nop", "r"(ptr null)
18  call void @stuff()
19  ret void
20}
21
22define void @int_ptr_null() {
23  call void asm "nop", "r"(ptr null)
24  call void @stuff()
25  ret void
26}
27
28; Can be merged (uses same argument differing by pointer type)
29define void @float_ptr_arg_same(ptr) {
30  call void asm "nop", "r"(ptr %0)
31  call void @stuff()
32  ret void
33}
34
35define void @int_ptr_arg_same(ptr) {
36  call void asm "nop", "r"(ptr %0)
37  call void @stuff()
38  ret void
39}
40
41; Can not be merged (uses different arguments)
42define void @float_ptr_arg_different(ptr, ptr) {
43  call void asm "nop", "r"(ptr %0)
44  call void @stuff()
45  ret void
46}
47
48define void @int_ptr_arg_different(ptr, ptr) {
49  call void asm "nop", "r"(ptr %1)
50  call void @stuff()
51  ret void
52}
53