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