mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	Since ExtractValue is not included in ComputeSpeculationCost CFGs containing ExtractValueInsts cannot be simplified. In particular this interacts with InstCombineCompare's tendency to insert add.with.overflow intrinsics for certain idiomatic math operations, preventing optimization. This patch adds ExtractValue to the ComputeSpeculationCost. Test case included rdar://14853450 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208434 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			23 lines
		
	
	
		
			650 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			23 lines
		
	
	
		
			650 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: opt -simplifycfg -S  < %s | FileCheck %s
 | |
| 
 | |
| declare { i32, i1 } @llvm.uadd.with.overflow.i32(i32, i32) #1
 | |
| 
 | |
| define i32 @f(i32 %a, i32 %b) #0 {
 | |
| entry:
 | |
|   %uadd = tail call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
 | |
|   %cmp = extractvalue { i32, i1 } %uadd, 1
 | |
|   br i1 %cmp, label %return, label %if.end
 | |
| 
 | |
| if.end:                                           ; preds = %entry
 | |
|   %0 = extractvalue { i32, i1 } %uadd, 0
 | |
|   br label %return
 | |
| 
 | |
| return:                                           ; preds = %entry, %if.end
 | |
|   %retval.0 = phi i32 [ %0, %if.end ], [ 0, %entry ]
 | |
|   ret i32 %retval.0
 | |
| 
 | |
| ; CHECK-LABEL: @f(
 | |
| ; CHECK-NOT: phi
 | |
| ; CHECK: select
 | |
| }
 |