mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	- split WidenVecRes_Binary into WidenVecRes_Binary and WidenVecRes_BinaryCanTrap
  - WidenVecRes_BinaryCanTrap preserves the original behaviour for operations
    that can trap
  - WidenVecRes_Binary simply widens the operation and improves codegen for
    3-element vectors by allowing widening and promotion on x86 (matches the
    behaviour of unary and ternary operation widening)
- use WidenVecRes_Binary for operations on integers.
Reviewed by: nrotem
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188699 91177308-0d34-0410-b5e6-96231b3b80d8
		
	
		
			
				
	
	
		
			26 lines
		
	
	
		
			775 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
		
			775 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc < %s -mtriple=x86_64-linux -mcpu=penryn |  FileCheck %s
 | |
| 
 | |
| define void @t0(<2 x i64>* %dst, <2 x i64> %src1, <2 x i64> %src2) nounwind readonly {
 | |
| ; CHECK: t0
 | |
| ; CHECK: pand
 | |
| ; CHECK: ret
 | |
|   %cmp1 = icmp ne <2 x i64> %src1, zeroinitializer
 | |
|   %cmp2 = icmp ne <2 x i64> %src2, zeroinitializer
 | |
|   %t1 = and <2 x i1> %cmp1, %cmp2
 | |
|   %t2 = sext <2 x i1> %t1 to <2 x i64>
 | |
|   store <2 x i64> %t2, <2 x i64>* %dst
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| define void @t2(<3 x i64>* %dst, <3 x i64> %src1, <3 x i64> %src2) nounwind readonly {
 | |
| ; CHECK: t2
 | |
| ; CHECK: pand
 | |
| ; CHECK: ret
 | |
|   %cmp1 = icmp ne <3 x i64> %src1, zeroinitializer
 | |
|   %cmp2 = icmp ne <3 x i64> %src2, zeroinitializer
 | |
|   %t1 = and <3 x i1> %cmp1, %cmp2
 | |
|   %t2 = sext <3 x i1> %t1 to <3 x i64>
 | |
|   store <3 x i64> %t2, <3 x i64>* %dst
 | |
|   ret void
 | |
| }
 |