| ; RUN: opt -passes=mergefunc -S < %s | FileCheck %s |
| |
| ; CHECK-LABEL: @int_ptr_arg_different |
| ; CHECK-NEXT: call void asm |
| |
| ; CHECK-LABEL: @int_ptr_null |
| ; CHECK-NEXT: tail call void @float_ptr_null() |
| |
| ; CHECK-LABEL: @int_ptr_arg_same |
| ; CHECK-NEXT: tail call void @float_ptr_arg_same(ptr %0) |
| |
| ; Used to satisfy minimum size limit |
| declare void @stuff() |
| |
| ; Can be merged |
| define void @float_ptr_null() { |
| call void asm "nop", "r"(ptr null) |
| call void @stuff() |
| ret void |
| } |
| |
| define void @int_ptr_null() { |
| call void asm "nop", "r"(ptr null) |
| call void @stuff() |
| ret void |
| } |
| |
| ; Can be merged (uses same argument differing by pointer type) |
| define void @float_ptr_arg_same(ptr) { |
| call void asm "nop", "r"(ptr %0) |
| call void @stuff() |
| ret void |
| } |
| |
| define void @int_ptr_arg_same(ptr) { |
| call void asm "nop", "r"(ptr %0) |
| call void @stuff() |
| ret void |
| } |
| |
| ; Can not be merged (uses different arguments) |
| define void @float_ptr_arg_different(ptr, ptr) { |
| call void asm "nop", "r"(ptr %0) |
| call void @stuff() |
| ret void |
| } |
| |
| define void @int_ptr_arg_different(ptr, ptr) { |
| call void asm "nop", "r"(ptr %1) |
| call void @stuff() |
| ret void |
| } |