30 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ; RUN: llc < %s -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
 | |
| 
 | |
| ; Check that the DAGCombiner does not crash with an assertion failure
 | |
| ; when performing a target specific combine to simplify a 'or' dag node
 | |
| ; according to the following rule:
 | |
| ;   (or (and B, A), (and C, ~A)) => (VBSL A, B, C)
 | |
| ; The assertion failure was caused by an invalid comparison between APInt
 | |
| ; values with different 'BitWidth'.
 | |
| 
 | |
| define <8 x i8> @test1(<8 x i8> %a, <8 x i8> %b)  {
 | |
|   %tmp1 = and <8 x i8> %a, < i8 -1, i8 -1, i8 0, i8 0, i8 -1, i8 -1, i8 0, i8 0 >
 | |
|   %tmp2 = and <8 x i8> %b, < i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0 >
 | |
|   %tmp3 = or <8 x i8> %tmp1, %tmp2
 | |
|   ret <8 x i8> %tmp3
 | |
| }
 | |
| 
 | |
| ; CHECK-LABEL: test1
 | |
| ; CHECK: ret
 | |
| 
 | |
| define <16 x i8> @test2(<16 x i8> %a, <16 x i8> %b) {
 | |
|   %tmp1 = and <16 x i8> %a, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
 | |
|   %tmp2 = and <16 x i8> %b, < i8 -1, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0 >
 | |
|   %tmp3 = or <16 x i8> %tmp1, %tmp2
 | |
|   ret <16 x i8> %tmp3
 | |
| }
 | |
| 
 | |
| ; CHECK-LABEL: test2
 | |
| ; CHECK: ret
 | |
| 
 |