mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	by avoiding inlining massive switches merely because they have no instructions in them. These switches still show up where we fail to form lookup tables, and in those cases they are actually going to cause a very significant code size hit anyways, so inlining them is not the right call. The right way to fix any performance regressions stemming from this is to enhance the switch-to-lookup-table logic to fire in more places. This makes PR19499 about 5x less bad. It uncovers a second compile time problem in that test case that is unrelated (surprisingly!). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207403 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			61 lines
		
	
	
		
			859 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			859 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
; RUN: opt < %s -inline -inline-threshold=20 -S | FileCheck %s
 | 
						|
 | 
						|
define i32 @callee(i32 %a) {
 | 
						|
  switch i32 %a, label %sw.default [
 | 
						|
    i32 0, label %sw.bb0
 | 
						|
    i32 1, label %sw.bb1
 | 
						|
    i32 2, label %sw.bb2
 | 
						|
    i32 3, label %sw.bb3
 | 
						|
    i32 4, label %sw.bb4
 | 
						|
    i32 5, label %sw.bb5
 | 
						|
    i32 6, label %sw.bb6
 | 
						|
    i32 7, label %sw.bb7
 | 
						|
    i32 8, label %sw.bb8
 | 
						|
    i32 9, label %sw.bb9
 | 
						|
  ]
 | 
						|
 | 
						|
sw.default:
 | 
						|
  br label %return
 | 
						|
 | 
						|
sw.bb0:
 | 
						|
  br label %return
 | 
						|
 | 
						|
sw.bb1:
 | 
						|
  br label %return
 | 
						|
 | 
						|
sw.bb2:
 | 
						|
  br label %return
 | 
						|
 | 
						|
sw.bb3:
 | 
						|
  br label %return
 | 
						|
 | 
						|
sw.bb4:
 | 
						|
  br label %return
 | 
						|
 | 
						|
sw.bb5:
 | 
						|
  br label %return
 | 
						|
 | 
						|
sw.bb6:
 | 
						|
  br label %return
 | 
						|
 | 
						|
sw.bb7:
 | 
						|
  br label %return
 | 
						|
 | 
						|
sw.bb8:
 | 
						|
  br label %return
 | 
						|
 | 
						|
sw.bb9:
 | 
						|
  br label %return
 | 
						|
 | 
						|
return:
 | 
						|
  ret i32 42
 | 
						|
}
 | 
						|
 | 
						|
define i32 @caller(i32 %a) {
 | 
						|
; CHECK-LABEL: @caller(
 | 
						|
; CHECK: call i32 @callee(
 | 
						|
 | 
						|
  %result = call i32 @callee(i32 %a)
 | 
						|
  ret i32 %result
 | 
						|
}
 |