54 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			LLVM
		
	
	
	
; 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
 | 
						|
}
 |