; RUN: opt -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: %2 = bitcast i32* %0 to float* ; CHECK-NEXT: tail call void @float_ptr_arg_same(float* %2) ; 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 }