mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 00:16:48 +00:00 
			
		
		
		
	disproving a condition.  This actually compiles the existing testcase
(udiv_select_to_select_shift) to:
define i64 @test(i64 %X, i1 %Cond) {
entry:
	%divisor1.t = lshr i64 %X, 3		; <i64> [#uses=1]
	%quotient2 = lshr i64 %X, 3		; <i64> [#uses=1]
	%sum = add i64 %divisor1.t, %quotient2		; <i64> [#uses=1]
	ret i64 %sum
}
instead of:
define i64 @test(i64 %X, i1 %Cond) {
entry:
	%quotient1.v = select i1 %Cond, i64 3, i64 4		; <i64> [#uses=1]
	%quotient1 = lshr i64 %X, %quotient1.v		; <i64> [#uses=1]
	%quotient2 = lshr i64 %X, 3		; <i64> [#uses=1]
	%sum = add i64 %quotient1, %quotient2		; <i64> [#uses=1]
	ret i64 %sum
}
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53534 91177308-0d34-0410-b5e6-96231b3b80d8
		
	
		
			
				
	
	
		
			18 lines
		
	
	
		
			559 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			18 lines
		
	
	
		
			559 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; Test that this transform works:
 | |
| ; udiv X, (Select Cond, C1, C2) --> Select Cond, (shr X, C1), (shr X, C2)
 | |
| ;
 | |
| ; RUN: llvm-as < %s | opt -instcombine | llvm-dis -f -o %t
 | |
| ; RUN:   not grep select %t
 | |
| ; RUN:   grep lshr %t | count 2
 | |
| ; RUN:   not grep udiv %t
 | |
| 
 | |
| define i64 @test(i64 %X, i1 %Cond ) {
 | |
| entry:
 | |
|         %divisor1 = select i1 %Cond, i64 16, i64 8
 | |
|         %quotient1 = udiv i64 %X, %divisor1
 | |
|         %divisor2 = select i1 %Cond, i64 8, i64 0
 | |
|         %quotient2 = udiv i64 %X, %divisor2
 | |
|         %sum = add i64 %quotient1, %quotient2
 | |
|         ret i64 %sum
 | |
| }
 |