70 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
 | 
						|
; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
 | 
						|
 | 
						|
; The bitcast should be pushed through the bitcasts so the vectors can
 | 
						|
; be broken down and the shared components can be CSEd
 | 
						|
 | 
						|
; GCN-LABEL: {{^}}store_bitcast_constant_v8i32_to_v8f32:
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
; GCN-NOT: v_mov_b32
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
; GCN-NOT: v_mov_b32
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
define void @store_bitcast_constant_v8i32_to_v8f32(<8 x float> addrspace(1)* %out, <8 x i32> %vec) {
 | 
						|
  %vec0.bc = bitcast <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 8> to <8 x float>
 | 
						|
  store volatile <8 x float> %vec0.bc, <8 x float> addrspace(1)* %out
 | 
						|
 | 
						|
  %vec1.bc = bitcast <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 9> to <8 x float>
 | 
						|
  store volatile <8 x float> %vec1.bc, <8 x float> addrspace(1)* %out
 | 
						|
  ret void
 | 
						|
}
 | 
						|
 | 
						|
; GCN-LABEL: {{^}}store_bitcast_constant_v4i64_to_v8f32:
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
; GCN-NOT: v_mov_b32
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
; GCN-NOT: v_mov_b32
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
define void @store_bitcast_constant_v4i64_to_v8f32(<8 x float> addrspace(1)* %out, <4 x i64> %vec) {
 | 
						|
  %vec0.bc = bitcast <4 x i64> <i64 7, i64 7, i64 7, i64 8> to <8 x float>
 | 
						|
  store volatile <8 x float> %vec0.bc, <8 x float> addrspace(1)* %out
 | 
						|
 | 
						|
  %vec1.bc = bitcast <4 x i64> <i64 7, i64 7, i64 7, i64 9> to <8 x float>
 | 
						|
  store volatile <8 x float> %vec1.bc, <8 x float> addrspace(1)* %out
 | 
						|
  ret void
 | 
						|
}
 | 
						|
 | 
						|
; GCN-LABEL: {{^}}store_bitcast_constant_v4i64_to_v4f64:
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
; GCN-NOT: v_mov_b32
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
; GCN-NOT: v_mov_b32
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
define void @store_bitcast_constant_v4i64_to_v4f64(<4 x double> addrspace(1)* %out, <4 x i64> %vec) {
 | 
						|
  %vec0.bc = bitcast <4 x i64> <i64 7, i64 7, i64 7, i64 8> to <4 x double>
 | 
						|
  store volatile <4 x double> %vec0.bc, <4 x double> addrspace(1)* %out
 | 
						|
 | 
						|
  %vec1.bc = bitcast <4 x i64> <i64 7, i64 7, i64 7, i64 9> to <4 x double>
 | 
						|
  store volatile <4 x double> %vec1.bc, <4 x double> addrspace(1)* %out
 | 
						|
  ret void
 | 
						|
}
 | 
						|
 | 
						|
; GCN-LABEL: {{^}}store_bitcast_constant_v8i32_to_v16i16:
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
; GCN-NOT: v_mov_b32
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
; GCN-NOT: v_mov_b32
 | 
						|
; GCN: buffer_store_dwordx4
 | 
						|
define void @store_bitcast_constant_v8i32_to_v16i16(<8 x float> addrspace(1)* %out, <16 x i16> %vec) {
 | 
						|
  %vec0.bc = bitcast <16 x i16> <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 8> to <8 x float>
 | 
						|
  store volatile <8 x float> %vec0.bc, <8 x float> addrspace(1)* %out
 | 
						|
 | 
						|
  %vec1.bc = bitcast <16 x i16> <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 9> to <8 x float>
 | 
						|
  store volatile <8 x float> %vec1.bc, <8 x float> addrspace(1)* %out
 | 
						|
  ret void
 | 
						|
}
 |