2016-09-17 23:44:16 +08:00
|
|
|
; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
|
2017-01-25 06:02:15 +08:00
|
|
|
; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
|
2016-09-17 23:44:16 +08:00
|
|
|
|
|
|
|
; 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
|
|
|
|
}
|