forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			219 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C
		
	
	
	
| // RUN: %clang_cc1 -triple s390x-linux-gnu -fzvector -target-cpu z14 \
 | |
| // RUN:  -flax-vector-conversions=none -W -Wall -Wconversion \
 | |
| // RUN:  -Werror -fsyntax-only -verify %s
 | |
| 
 | |
| vector signed char sc, sc2;
 | |
| vector unsigned char uc, uc2;
 | |
| vector bool char bc, bc2;
 | |
| 
 | |
| vector signed short ss, ss2;
 | |
| vector unsigned short us, us2;
 | |
| vector bool short bs, bs2;
 | |
| 
 | |
| vector signed int si, si2;
 | |
| vector unsigned int ui, ui2;
 | |
| vector bool int bi, bi2;
 | |
| 
 | |
| vector signed long long sl, sl2;
 | |
| vector unsigned long long ul, ul2;
 | |
| vector bool long long bl, bl2;
 | |
| 
 | |
| vector double fd, fd2;
 | |
| 
 | |
| vector float ff, ff2;
 | |
| 
 | |
| // Verify that __vector is also recognized
 | |
| __vector float ff3;
 | |
| 
 | |
| // Verify operation of vec_step
 | |
| int res_ff[vec_step(ff) == 4 ? 1 : -1];
 | |
| 
 | |
| 
 | |
| void foo(void)
 | |
| {
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Test assignment.
 | |
|   // -------------------------------------------------------------------------
 | |
| 
 | |
|   ff = ff2;
 | |
| 
 | |
|   sc = ff2; // expected-error {{incompatible type}}
 | |
|   ff = sc2; // expected-error {{incompatible type}}
 | |
| 
 | |
|   uc = ff2; // expected-error {{incompatible type}}
 | |
|   ff = uc2; // expected-error {{incompatible type}}
 | |
| 
 | |
|   bc = ff2; // expected-error {{incompatible type}}
 | |
|   ff = bc2; // expected-error {{incompatible type}}
 | |
| 
 | |
|   fd = ff2; // expected-error {{incompatible type}}
 | |
|   ff = fd2; // expected-error {{incompatible type}}
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Test casts to same element width.
 | |
|   // -------------------------------------------------------------------------
 | |
| 
 | |
|   ui = (vector unsigned int)ff2;
 | |
|   ff = (vector float)si2;
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Test casts to different element width.
 | |
|   // -------------------------------------------------------------------------
 | |
| 
 | |
|   uc = (vector unsigned char)ff2;
 | |
|   us = (vector unsigned short)ff2;
 | |
|   ul = (vector unsigned long long)ff2;
 | |
| 
 | |
|   ff = (vector float)sc2;
 | |
|   ff = (vector float)ss2;
 | |
|   ff = (vector float)sl2;
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Test unary operators.
 | |
|   // -------------------------------------------------------------------------
 | |
| 
 | |
|   ++ff2;
 | |
|   ff++;
 | |
| 
 | |
|   --ff2;
 | |
|   ff--;
 | |
| 
 | |
|   ff = +ff2;
 | |
| 
 | |
|   ff = -ff2;
 | |
| 
 | |
|   ff = ~ff2; // expected-error {{invalid argument}}
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Test binary arithmetic operators.
 | |
|   // -------------------------------------------------------------------------
 | |
| 
 | |
|   ff = ff + ff2;
 | |
|   ff = ff + ui2; // expected-error {{cannot convert}}
 | |
|   ff = si + ff2; // expected-error {{cannot convert}}
 | |
|   ff = fd + ff2; // expected-error {{cannot convert}}
 | |
|   ff += ff2;
 | |
|   ff += fd2; // expected-error {{cannot convert}}
 | |
|   sc += ff2; // expected-error {{cannot convert}}
 | |
| 
 | |
|   ff = ff - ff2;
 | |
|   ff = ff - ui2; // expected-error {{cannot convert}}
 | |
|   ff = si - ff2; // expected-error {{cannot convert}}
 | |
|   ff = fd - ff2; // expected-error {{cannot convert}}
 | |
|   ff -= ff2;
 | |
|   ff -= fd2; // expected-error {{cannot convert}}
 | |
|   sc -= ff2; // expected-error {{cannot convert}}
 | |
| 
 | |
|   ff = ff * ff2;
 | |
|   ff = ff * ui2; // expected-error {{cannot convert}}
 | |
|   ff = si * ff2; // expected-error {{cannot convert}}
 | |
|   ff = fd * ff2; // expected-error {{cannot convert}}
 | |
|   ff *= ff2;
 | |
|   ff *= fd2; // expected-error {{cannot convert}}
 | |
|   sc *= ff2; // expected-error {{cannot convert}}
 | |
| 
 | |
|   ff = ff / ff2;
 | |
|   ff = ff / ui2; // expected-error {{cannot convert}}
 | |
|   ff = si / ff2; // expected-error {{cannot convert}}
 | |
|   ff = fd / ff2; // expected-error {{cannot convert}}
 | |
|   ff /= ff2;
 | |
|   ff /= fd2; // expected-error {{cannot convert}}
 | |
|   sc /= ff2; // expected-error {{cannot convert}}
 | |
| 
 | |
|   ff = ff % ff2; // expected-error {{invalid operands}}
 | |
|   ff = ff % ui2; // expected-error {{invalid operands}}
 | |
|   ff = si % ff2; // expected-error {{invalid operands}}
 | |
|   ff = fd % ff2; // expected-error {{invalid operands}}
 | |
|   ff %= ff2; // expected-error {{invalid operands}}
 | |
|   ff %= fd2; // expected-error {{invalid operands}}
 | |
|   sc %= ff2; // expected-error {{invalid operands}}
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Test bitwise binary operators.
 | |
|   // -------------------------------------------------------------------------
 | |
| 
 | |
|   ff = ff & ff2; // expected-error {{invalid operands}}
 | |
|   ff = bi & ff2; // expected-error {{invalid operands}}
 | |
|   ff = fd & ff2; // expected-error {{invalid operands}}
 | |
|   ff = ff & bi2; // expected-error {{invalid operands}}
 | |
|   ff = ff & si2; // expected-error {{invalid operands}}
 | |
|   ff = ff & ui2; // expected-error {{invalid operands}}
 | |
|   sc &= ff2; // expected-error {{invalid operands}}
 | |
|   ff &= bc2; // expected-error {{invalid operands}}
 | |
|   ff &= fd2; // expected-error {{invalid operands}}
 | |
| 
 | |
|   ff = ff | ff2; // expected-error {{invalid operands}}
 | |
|   ff = bi | ff2; // expected-error {{invalid operands}}
 | |
|   ff = fd | ff2; // expected-error {{invalid operands}}
 | |
|   ff = ff | bi2; // expected-error {{invalid operands}}
 | |
|   ff = ff | si2; // expected-error {{invalid operands}}
 | |
|   ff = ff | ui2; // expected-error {{invalid operands}}
 | |
|   sc |= ff2; // expected-error {{invalid operands}}
 | |
|   ff |= bc2; // expected-error {{invalid operands}}
 | |
|   ff |= fd2; // expected-error {{invalid operands}}
 | |
| 
 | |
|   ff = ff ^ ff2; // expected-error {{invalid operands}}
 | |
|   ff = bi ^ ff2; // expected-error {{invalid operands}}
 | |
|   ff = fd ^ ff2; // expected-error {{invalid operands}}
 | |
|   ff = ff ^ bi2; // expected-error {{invalid operands}}
 | |
|   ff = ff ^ si2; // expected-error {{invalid operands}}
 | |
|   ff = ff ^ ui2; // expected-error {{invalid operands}}
 | |
|   sc ^= ff2; // expected-error {{invalid operands}}
 | |
|   ff ^= bc2; // expected-error {{invalid operands}}
 | |
|   ff ^= fd2; // expected-error {{invalid operands}}
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Test shift operators.
 | |
|   // -------------------------------------------------------------------------
 | |
| 
 | |
|   ff = ff << ff2; // expected-error {{integer is required}}
 | |
|   ff = ff << fd2; // expected-error {{integer is required}}
 | |
|   ff = ff << ui2; // expected-error {{integer is required}}
 | |
|   ff = sl << ff2; // expected-error {{integer is required}}
 | |
|   sc <<= ff2; // expected-error {{integer is required}}
 | |
|   ff <<= ff2; // expected-error {{integer is required}}
 | |
|   fd <<= ff2; // expected-error {{integer is required}}
 | |
| 
 | |
|   ff = ff >> ff2; // expected-error {{integer is required}}
 | |
|   ff = ff >> fd2; // expected-error {{integer is required}}
 | |
|   ff = ff >> ui2; // expected-error {{integer is required}}
 | |
|   ff = sl >> ff2; // expected-error {{integer is required}}
 | |
|   sc >>= ff2; // expected-error {{integer is required}}
 | |
|   ff >>= ff2; // expected-error {{integer is required}}
 | |
|   fd >>= ff2; // expected-error {{integer is required}}
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Test comparison operators.
 | |
|   // -------------------------------------------------------------------------
 | |
| 
 | |
|   (void)(ff == ff2);
 | |
|   (void)(ff == fd2); // expected-error {{cannot convert}}
 | |
|   (void)(ff == ui2); // expected-error {{cannot convert}}
 | |
|   (void)(ui == ff2); // expected-error {{cannot convert}}
 | |
| 
 | |
|   (void)(ff != ff2);
 | |
|   (void)(ff != fd2); // expected-error {{cannot convert}}
 | |
|   (void)(ff != ui2); // expected-error {{cannot convert}}
 | |
|   (void)(ui != ff2); // expected-error {{cannot convert}}
 | |
| 
 | |
|   (void)(ff <= ff2);
 | |
|   (void)(ff <= fd2); // expected-error {{cannot convert}}
 | |
|   (void)(ff <= ui2); // expected-error {{cannot convert}}
 | |
|   (void)(ui <= ff2); // expected-error {{cannot convert}}
 | |
| 
 | |
|   (void)(ff >= ff2);
 | |
|   (void)(ff >= fd2); // expected-error {{cannot convert}}
 | |
|   (void)(ff >= ui2); // expected-error {{cannot convert}}
 | |
|   (void)(ui >= ff2); // expected-error {{cannot convert}}
 | |
| 
 | |
|   (void)(ff < ff2);
 | |
|   (void)(ff < fd2); // expected-error {{cannot convert}}
 | |
|   (void)(ff < ui2); // expected-error {{cannot convert}}
 | |
|   (void)(ui < ff2); // expected-error {{cannot convert}}
 | |
| 
 | |
|   (void)(ff > ff2);
 | |
|   (void)(ff > fd2); // expected-error {{cannot convert}}
 | |
|   (void)(ff > ui2); // expected-error {{cannot convert}}
 | |
|   (void)(ui > ff2); // expected-error {{cannot convert}}
 | |
| }
 |